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

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

例如:

public void setLastName(JAXBElement value) { this.lastName = ((JAXBElement ) value); } public JAXBElement getCountry() { return country; } 

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

     

任务以这种方式定义:

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

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

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

您必须自定义绑定 。

我遇到过类似的问题。

我使用了下面的绑定XML而天花板wsimport:参考了这个链接 。

绑定文件

    

示例wsimport命令:

 wsimport -keep  -b employerServiceWSD L_binding.xjb 

注意: employerServiceWSDL_binding.xjb包含上面的绑定xml条目。

希望它也适用于其他人。