gpt4 book ai didi

java - cxf wsdl2java 可选和必需元素

转载 作者:行者123 更新时间:2023-12-01 04:35:42 28 4
gpt4 key购买 nike

我使用 CXF 从第 3 方 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 文件中向 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。但不幸的是,选择的问题仍然存在。

最佳答案

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

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

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

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

关于java - cxf wsdl2java 可选和必需元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17399784/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com