摆脱由ant调用的wsimport生成的类中的JAXBElement

Mis*_*erY 24 java ant web-services jaxb wsimport

我有以下问题:我正在使用wsimport ant任务来创建一个webservice客户端(对于salesforce.com).一切正常,但生成的类都使用这个奇怪的JAXBElement类用于所有bean属性.

例如:

public void setLastName(JAXBElement<String> value) {
    this.lastName = ((JAXBElement<String> ) value);
}

public JAXBElement<String> getCountry() {
    return country;
}
Run Code Online (Sandbox Code Playgroud)

我没有将所有类包装在JAXBElement中,而是希望使用setLastName(String newLastName)这样的简单方法.这就是我调用wsimport任务的方式.

<wsimport debug="false" verbose="false" keep="${keep}" 
   extension="${extension}" destdir="${tmp.metro}" 
   wsdl="${licensing.wsdl}" 
   sourcedestdir="${licensingws.generated.src}"

   >

   <binding dir="${basedir}/etc" includes="${client.binding}"   
     />
    <arg value="-B-XautoNameResolution" />

  </wsimport>
Run Code Online (Sandbox Code Playgroud)

任务以这种方式定义:

有人知道我要设置什么,以便wsimport以我想要的方式生成类吗?非常感谢提前!

jar*_*bjo 28

在生成的bean中使用JAXBElement包装的原因可能是,WSDL声明该字段既可选又可以为nillable.要区分"not present"和"present,but null",不能直接使用String类型,因为两种情况下的String都是null.

如果您不需要区分这两种情况,则可以将代码生成器配置为使用String类型.我不是100%确定如何使用ant任务执行此操作,但您可能会在ant任务文档中找到相关信息.

  • 谢谢,我用这个绑定文件解决了它:<jxb:bindings version ="2.0"xmlns:jxb ="http://java.sun.com/xml/ns/jaxb"xmlns:xs ="http:// www在build.xml中声明的.w3.org/2001/XMLSchema"> <jxb:globalBindings generateElementProperty ="false"/> </ jxb:bindings>:<wsimport ...> <binding dir ="." includes ="simple-binding.xjb"/> </ wsimport> (7认同)