gpt4 book ai didi

java - 如何自定义和覆盖 jaxb 绑定(bind)

转载 作者:太空宇宙 更新时间:2023-11-04 06:55:52 25 4
gpt4 key购买 nike

我正在使用来自第三方系统的一组 DTD。我们的目标是将 XML 请求(符合这些 DTD 的 XML 请求)映射到 java,然后将 XML 响应发送回系统)。

DTD 是一成不变的(我无法控制更改它们)。

因此,为了进行映射,我使用 XMLSpy 将 DTD 转换为 XML 模式 (xsd),然后使用 XJC 编译器创建 Jaxb 绑定(bind)类。我正在使用 Java 7。

问题是,DTD 并没有真正的命名空间.. 我有 20 个不同的 DTD.. 10 个用于请求,10 个用于响应。当我生成架构时,我必须进行一对一映射......并创建相同的 10 个请求 XSD 和 10 个响应 XSD。

现在,jaxb xjc编译器生成了绑定(bind)类..但它们距离实际使用还很远。没有继承,因为这些模式彼此不相关(尽管它们似乎具有相似的内容 - 请求类型和响应类型)。

如果有办法自定义 jaxb 绑定(bind)以覆盖默认绑定(bind)并创建更合理的绑定(bind),有人可以帮助我吗?

例如,考虑这个简单的情况:

DTD:

<!ELEMENT FromDate (#PCDATA)>
<!ATTLIST FromDate
year CDATA #REQUIRED
month CDATA #REQUIRED
day CDATA #REQUIRED
>

我使用 XMLSpy 生成的架构:

<xs:element name="FromDate">
<xs:complexType mixed="true">
<xs:attribute name="year" use="required"/>
<xs:attribute name="month" use="required"/>
<xs:attribute name="day" use="required"/>
</xs:complexType>
</xs:element>

XJC编译器生成的绑定(bind)类(java 1.7):

public class FromDate {

@XmlValue
protected String content;
@XmlAttribute(name = "year", required = true)
@XmlSchemaType(name = "anySimpleType")
protected String year;
@XmlAttribute(name = "month", required = true)
@XmlSchemaType(name = "anySimpleType")
protected String month;
@XmlAttribute(name = "day", required = true)
@XmlSchemaType(name = "anySimpleType")
protected String day;
...
...

如果你看看 fromDate 最终是如何演变的,它没有任何意义,因为只是为了从这个请求中获取日期,我需要这样做

setMyDate(request.getFromDate().getMonth() + request.getFromDate().getDay() + request.getFromDate().getYear());

这显然没有意义。另外,类型相差甚远。

如何自定义/覆盖 jaxb 绑定(bind)来实现这两件事:1.继承(某种抽象以减少冗余)2.合适的类型

请帮忙。

最佳答案

天哪,有人在 2014 年尝试编译 DTD。:)

几个链接供您引用:

作为另一种方法,我建议 converting DTDs to schemas处理模式。长期来看会更好。 DTD 支持相当有限

关于java - 如何自定义和覆盖 jaxb 绑定(bind),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22753969/

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