2013-07-01 42 views
1

我使用CXF从第三方wsdl(不由我们维护)生成java代码。cxf wsdl2java可选和必需元素

我有这两个片段工作不像预期的那样,当编组到soap信息。

XML: 
<choice> 
    <sequence> 
    <element name="x" type="xt" nillable="true" minOccurs="0" /> 
    </sequence> 
    <element name="y" type="yt" 
    nillable="true" minOccurs="0" /> 
</choice> 

Java: 
@XmlElement(name = "x", nillable = true) 
protected Xx; 
@XmlElement(name = "y", nillable = true) 
protected Y y; 

如果我添加X,而不是y以(通过代码)SOAP消息那么它看起来像:

<x>123456782</x> 
<y xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:nil="true" /> 

为什么加y以SOAP消息,虽然这是一个可选的元素?

类似的事情是在这个片段中发生的事情:

XML: 
<attribute ref="z" use="required" fixed="XXX" /> 

Java: 
@XmlAttribute(name = "z", namespace = "http://www.egem.nl/StUF/StUF0301", 
    required = true) 
protected String z; 

这里CXF(与真正的模式验证)抱怨,如果我不通过代码添加的元素。 如果我打开模式验证然后不创建元素添加全部。

这个元素是必需的,并且有一个固定的属性,为什么不创建它,如果我不添加它(通过代码)?

编辑: 在开发过程中,我意识到cxf正在生成一个.package-info.java文件,它给了我命名空间的麻烦。所以我正在寻找一种禁用.package-info.java文件生成的方法。解决方案是在pom文件中将一个extraarg放入cxf codegen插件:-xjc-npa。在pom中的那部分看起来像:

<plugin> 
    <groupId>org.apache.cxf</groupId> 
    <artifactId>cxf-codegen-plugin</artifactId> 
    <version>${cxf.version}</version> 
    <configuration> 
     <defaultOptions> 
      <extraargs>     
       <extraarg>-xjc-npa</extraarg> 
      </extraargs> 
     </defaultOptions> 
    </configuration> 
</plugin> 

但是,在重新生成类文件后,我惊讶地发现所有固定元素现在都是常量。没有更多的getters/setters产生。但遗憾的是选项仍然存在问题。

回答

0

显然我正在阅读旧文档。我所要做的只是将下面的属性添加到绑定文件中的jaxb:globalBindings中。

在旧文档中没有提及这些属性。

<jaxb:globalBindings fixedAttributeAsConstantProperty="true" choiceContentProperty="true"> 

具有这些属性在XML所有固定属性现在枚举和所有的选择的元素在XML现在更好的代码生成(在xxxOrxxxOrxxx格式)。