有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

xml JAXB xjc映射到现有域对象

我已经做了大量的搜索,找不到一个简明的例子来说明如何将XML模式映射到现有的域对象,而不是使用xjc创建全新的域对象。我已经创建了一个绑定(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,而不是指向“type:www:CustomerOffice”的模式。废话。领域客户办公室

我试着让这个尽可能简单的例子,任何帮助都是感激的


共 (1) 个答案

  1. # 1 楼答案

    您可以使用一个外部绑定文件来配置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呼叫

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