gpt4 book ai didi

java - 使 JAXB XJC 为简单类型生成包装类

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

我有以下 xml 类型:

<xsd:element name="FaxNumbers" minOccurs="0">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="FaxNumber" type="FaxNumber" maxOccurs="unbounded" />
</xsd:sequence>
</xsd:complexType>
</xsd:element>

FaxNumber 类型如下所示:

<xsd:simpleType name="FaxNumber">
<xsd:restriction base="xsd:string">
<xsd:minLength value="1" />
</xsd:restriction>
</xsd:simpleType>

生成的 xml 应该是这样的:

<FaxNumbers>
<FaxNumber>3878374</FaxNumber>
<FaxNumber>387833434</FaxNumber>
<FaxNumber>3878334</FaxNumber>
</FaxNumbers>

当运行 JAXB XJC 从 XSD 生成 java 类时,它会生成以下类:

@XmlType(name = "FaxNumbers")
public class FaxNumbers {

/**
* No comment.
*/
@XmlElement(name = "FaxNumber", required = true)
protected List<String> faxNumber = new ArrayList<String>();

}

但是我想像这样将 FaxNumber 绑定(bind)到复合类:

@XmlType(name = "FaxNumbers")
public class FaxNumbers {

/**
* No comment.
*/
@XmlElement(name = "FaxNumber", required = true)
protected List<FaxNumber> faxNumber = new ArrayList<String>();

}

Where FaxNumber class looks like this:

public class FaxNumber{

@XmlValue
private String value;
}

有没有办法在 JAXB 绑定(bind) xml 中定义此类绑定(bind)?

注意:很遗憾,我无法控制也无法更改 XSD

最佳答案

我不认为你可以让 xjc 为你生成这样一个 FaxNumber 类,但你可以自己编写它,然后使用外部绑定(bind)文件将它插入到正确的位置。

package com.example;
public class FaxNumber {
private String value;
// getter/setter

public static FaxNumber parse(String s) {
FaxNumber n = new FaxNumber();
n.value = s;
return n;
}

public static String print(FaxNumber n) {
return n.value;
}
}

绑定(bind):

<jaxb:bindings xmlns:jaxb="http://java.sun.com/xml/ns/jaxb"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
jaxb:version="2.0">
<jaxb:bindings schemaLocation="example.xsd">
<jaxb:bindings node="//xsd:simpleType[@name='FaxNumber']">
<jaxb:javaType name="com.example.FaxNumber"
parseMethod="com.example.FaxNumber.parse"
printMethod="com.example.FaxNumber.print"/>
</jaxb:bindings>
</jaxb:bindings>
<jaxb:bindings>

关于java - 使 JAXB XJC 为简单类型生成包装类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12721508/

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