关于 webservice客户端生成代码中的 JAXBElement 字段类型的解决办法

问题 :

使用 wsimport命令 或cxf的 wsdl2java命令 生成 的 webservice客户端代码中 , 有时会出现
JAXBElement 字段类型 ,此时不知道该怎么赋值了;

出现JAXBElement字段类型的原因:

因为服务器端的wsdl文件加了nillable="true"这个属性 所以生成的webservice客户端代码中的, String类型
就会变 成JAXBElement< String >类型

解决办法1 (推荐):

可以生成去除该字段类型的 客户端代码 ; 比如 JAXBElement 可以变成 String 类型

第一步 : 创建 xml文件 , 命名为 remove.xml

    
        
            
        
  

第二步 : 生成客户端代码

wsimport -encoding utf-8 -b remove.xml -Xnocompile http://xxxxxxxx?WSDL

-encoding utf-8 表示 编码
-Xnocompile 表示生成java代码, 不加的话, 将会 只生成class 文件
-b 表示绑定指定文件

此时生成的客户端代码中 , 原先的JAXBElement 字段类型 , 就会变成 String 类型;

解决办法2:

继续使用 JAXBElement 字段类型 进行赋值

赋值方法1:

User user = new User();  
JAXBElement name = new JAXBElement(new QName("http://xxxxxx", "username"), String.class, "字段值");
user.setUsername(name);

Qname中的第一个参数的地址 , 去ObjectFactory.java文件中可以找到 ;

赋值方法2 ( 简单 ) :

User user = new User();
ObjectFactory objFac=new ObjectFactory();
JAXBElement name = objFac.createUserUsername("字段值");
user.setUsername(name);

此种方法, 跟赋值方法1效果是一样的, 就是不用我们自己去ObjectFactory中找 QName中的值了 ,
而是直接通过ObjectFactory来创建;

你可能感兴趣的:(WebService)