由于种种历史原因,系统开发的web service部署的平台是weblogic 10g,为了符合公司的要求,我们将部署的平台升级到了11g,解决了跨域访问、依赖包变更、session保存等等问题,然而最让我头疼确是一个看似很小的问题,而是由于11g 使用了jaxws RI 2.0.5的版本致使所以soap对象中的element name变为了首字母小写,而原来在10g中首字母都是大写,在前端所有的参数都是以首字母大写的名称来读取数据,这两个版本的生成web service的element name完全与VO属性的首字母大小写没有关系。。。这最终造成了前端无法正常访问web service。到官网查了下,虽然已经有report了bug,但是貌似不会再后继版本修复,人家不认为这是一个问题,变量名嘛,本来也是应该小写开头。既然没机会等修复版本,只能再找其他方法,在属性名称上使用@XmlElement(name="XXXX")的方式可以强制名称修改,但是有一个问题,在返回值的时候会返回同样的两个数据,只是其中一个数据时强制修改的名称,而另一个是旧有的名称,虽然前端可以调用,但是平白增加了一倍的网络传输,得不偿失啊。实际上jaxws规范还会在另一个地方解析标签,那就是属性getter/setter方法上,比如
class user {
private String name;
@XmlElement(name="Name")
public String getName(){
return name;
}
public void setName(String name){
this.name=name;
}
}
按照上面的注释位置就可以得到在weblogic 10g中web service返回对象的首字母大写属性名称。
愿脑哥的光辉指引我前进的方向