gpt4 book ai didi

xml - JAXB xjc 映射到现有域对象

转载 作者:数据小太阳 更新时间:2023-10-29 01:42:16 26 4
gpt4 key购买 nike

我进行了大量搜索,但找不到一个简洁的示例来说明如何将 XML 架构映射到现有域对象,而不是使用 xjc 创建全新的域对象。我已经创建了一个绑定(bind) (xjb) 文件,但仍然找不到完成此操作的方法。

如果我有一个我希望 JAXB 使用的现有域对象,如下所示:

package com.blah.domain;
class CustomerOffice{
private int id;
private String name;
private String phone;
}

我有一个如下所示的 XML 模式:

<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:www="http://www.blah.com"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
targetNamespace="http://www.blah.com" elementFormDefault="unqualified">
<xs:element name="Customer">
<xs:complexType>
<xs:sequence>
<xs:element name="id" type="xs:int" nillable="false" minOccurs="1" maxOccurs="1"/>
<xs:element name="name" type="xs:string"/>
<xs:element name="city" type="xs:string"/>
<xs:element name="CustomerOffice" type="www:CustomerOffice" maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:complexType name="CustomerOffice">
<xs:sequence>
<xs:element name="name" type="xs:string"/>
<xs:element name="length" type="xs:int"/>
</xs:sequence>
</xs:complexType>
</xs:schema>

如果我使用 xjc 生成 JAXB 类,它将创建一个名为 Customer 的新类(这是我想要的)。它还将创建一个名为 CustomerOffice 的新类(我不想要它,我希望它使用我现有的域对象)。

因此,我希望它使用现有的 com.blah.domain.CustomerOffice,而不是指向“type:www:CustomerOffice”的模式。

我尽量使这个示例尽可能简单,如有任何帮助,我们将不胜感激。

最佳答案

您可以使用外部绑定(bind)文件来配置 XJC 以执行您想要的操作。

<jxb:bindings 
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:jxb="http://java.sun.com/xml/ns/jaxb"
version="2.1">

<jxb:bindings schemaLocation="yourSchema.xsd">
<jxb:bindings node="//xs:complexType[@name='CustomerOffice']">
<jxb:class ref="com.blah.domain.CustomerOffice"/>
</jxb:bindings>
</jxb:bindings>
</jxb:bindings>

新江西来电

xjc -d outputDir -b binding.xml yourSchema.xsd

关于xml - JAXB xjc 映射到现有域对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10420137/

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