繁体   English   中英

cxf wsdl2java可选和必需元素

[英]cxf wsdl2java optional and required elements

我使用CXF从第三方wsdl(不由我们维护)生成Java代码。

编组发送消息时,我的这两个摘要无法正常工作。

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(通过代码),则它看起来像:

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

为什么它在肥皂消息中添加y,而它却是一个可选元素?

此代码段正在发生类似的情况:

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(模式验证为true)会抱怨。 如果我转向模式验证,那么就不会创建元素了。

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

编辑:在开发过程中,我意识到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>

但是令我惊讶的是,在重新生成类文件之后,所有固定元素现在都是常量。 不再产生吸气剂/吸气剂。 但是不幸的是, 选择仍然存在问题。

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

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

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

有了这些属性,现在xml中的所有固定属性都是枚举,并且现在可以在代码中更好地生成xml中的所有选择元素(采用xxxOrxxxOrxxx格式)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM