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

问题 :

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

出现JAXBElement字段类型的原因:

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

解决办法1 (推荐):

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

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

<jaxb:bindings version="2.0"    
               xmlns:jaxb="http://java.sun.com/xml/ns/jaxb">    
    <jaxb:bindings>    
        <jaxb:globalBindings generateElementProperty="false"/>    
    </jaxb:bindings>    
</jaxb:bindings>  

第二步 : 生成客户端代码

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<String> name = new JAXBElement<String>(new QName("http://xxxxxx", "username"), String.class, "字段值");
user.setUsername(name);

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

赋值方法2 ( 简单 ) :

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

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

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值