一尘不染

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

java

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

例如:

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

public JAXBElement<String> getCountry() {
    return country;
}

与其将所有类包装在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>

通过以下方式定义任务:

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


阅读 216

收藏
2020-12-03

共1个答案

一尘不染

在生成的bean中使用JAXBElement包装器的原因可能是WSDL将字段声明为可选字段和可设置字段。要区分“不存在”和“存在但为空”,不能直接使用String类型,因为在两种情况下String均为null。

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

2020-12-03