【问题标题】:cxf wsdl2java optional and required elementscxf wsdl2java 可选和必需元素
【发布时间】:2013-07-01 08:00:12
【问题描述】:

我使用 CXF 从第 3 方 wsdl(非我们维护)生成 java 代码。

在编组到soap消息时,这两个sn-ps的工作方式不如预期。

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 添加到 soap 消息中,而它是可选元素?

这个 sn-p 也发生了类似的事情:

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 文件中为 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>

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

【问题讨论】:

    标签: java cxf wsdl2java


    【解决方案1】:

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

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-01-19
      • 1970-01-01
      • 2021-04-26
      • 1970-01-01
      • 1970-01-01
      • 2018-03-22
      相关资源
      最近更新 更多