2010-02-01 32 views
21

我有以下问题: 我使用wsimport ant任务来创建Web服务客户端(for salesforce.com)。 一切工作正常,但生成的类都使用这个奇怪的JAXBElement类的所有bean属性。摆脱wsimport生成的类中的JAXBElement从蚂蚁调用

如:

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

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

而是包装中的JAXBElement我想有简单的方法,如setLastName(字符串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生成的类我想要的方式? 非常感谢!

回答

25

在生成的bean中使用JAXBElement包装的原因很可能是WSDL声明该字段是可选的和可翻动的。为了区分“不存在”和“存在,但为空”,字符串类型不能直接使用,因为两种情况下的字符串都是空的。

如果不需要区分这两种情况,则可以使用字符串类型configure the code generator来代替。我不是100%确定如何使用ant任务完成此任务,但是您可能会在ant任务文档中找到相关信息。

+7

感谢,解决了它使用该绑定文件: build.xml中声明如下: \t \t \t \t \t \t <结合DIR = “”。包括= “简单binding.xjb” \t \t \t \t \t \t \t \t /> \t \t \t \t \t MisterY 2010-02-02 07:35:36

+0

感谢,为我节省了很多时间 – 2011-06-08 12:01:46

+1

要配置JAXWS绑定文件,请参阅以下链接:http ://metro.1045641.n5.nabble.com/Generated-Code-with-minOccurs-0-and-nillable-true-contains-JAXBElement-tp1063625p1063626.html – GWTNewbie 2014-08-22 13:00:28

0

我遇到了类似的问题。

我已经使用下面的绑定XML,而天花板wsimport:参考此link

绑定文件

<jaxb:bindings version="2.1" 
xmlns:jaxb="http://java.sun.com/xml/ns/jaxb" 
xmlns:xjc="http://java.sun.com/xml/ns/jaxb/xjc" 
xmlns:xs="http://www.w3.org/2001/XMLSchema"> 
    <jaxb:globalBindings generateElementProperty="false"/> 
</jaxb:bindings> 

样品的wsimport命令:

wsimport -keep <WSDL_location> -b employerServiceWSD 
L_binding.xjb 

注: employerServiceWSDL_binding.xjb包含上述XML绑定条目。

希望它能适用于其他。