gpt4 book ai didi

java - 使用 XJC 将 XML 模式转换为 Java 类

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:20:11 29 4
gpt4 key购买 nike

我正在使用 xjc 从 XML 模式生成 Java 类,以下是 XSD 的摘录。

<xs:element name="NameInfo">
<xs:complexType>
<xs:sequence>
<xs:choice>
<xs:element ref="UnstructuredName"/> <!-- This line -->
<xs:sequence>
<xs:element ref="StructuredName"/>
<xs:element ref="UnstructuredName" minOccurs="0"/> <!-- and this line! -->
</xs:sequence>
</xs:choice>
<xs:element ref="SomethingElse" minOccurs="0"/>
</xs:sequence>
</xs:complexType>
</xs:element>

在大多数情况下,生成的类都很好,但对于上面的 block ,我会得到类似的东西:

public List<Object> getContent() {
if (content == null) {
content = new ArrayList<Object>();
}
return this.content;
}

上面有下面的评论:

* You are getting this "catch-all" property because of the following reason: 
* The field name "UnstructuredName" is used by two different parts of a schema. See:
* line XXXX of file:FILE.xsd
* line XXXX of file:FILE.xsd
* To get rid of this property, apply a property customization to one
* of both of the following declarations to change their names:
* Gets the value of the content property.

我在相关两行的末尾添加了注释。

目前,我认为更改模式并不容易,因为这是由供应商决定的,我不想走这条路(如果可能的话),因为它会大大减慢进度。

我搜索并找到了 this page ,外部定制是我想要做的吗?我主要处理生成的类,所以我并不完全熟悉生成这些类的过程。一个简单的“属性定制”的例子就太好了!只要仍然可以使用模式,生成 Java 类的替代方法就可以了。

编辑:我应该澄清一下,这两个 UnstructuredName 确实是同一个元素。

最佳答案

您还可以使用名为 <xjc:simple /> 的绑定(bind)自定义:

<?xml version="1.0" encoding="UTF-8"?>
<jxb:bindings xmlns:jxb="http://java.sun.com/xml/ns/jaxb"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:xjc="http://java.sun.com/xml/ns/jaxb/xjc"
jxb:version="2.0">
<jxb:globalBindings>
<xjc:simple />
</jxb:globalBindings>
</jxb:bindings>

但是请注意,这是特定于供应商的(虽然他们使用的不是 XJC ;))

更多信息 here

关于java - 使用 XJC 将 XML 模式转换为 Java 类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2716916/

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