我使用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产生。但遗憾的是选项仍然存在问题。