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

2022-09-01 14:27:08

我有以下问题:我正在使用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以我想要的方式生成类?提前非常感谢!!!


答案 1

在生成的 Bean 中使用 JAXBElement 包装器的原因可能是 WSDL 将该字段声明为可选且不可存活。为了区分“不存在”和“现在,但为 null”,不能直接使用 String 类型,因为在这两种情况下,String 都将为 null。

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


答案 2

您必须自定义绑定


推荐