Jaxb:如何为XSD元素指定默认类

时间:2016-09-13 12:58:16

标签: java xml jaxb jaxb2 maven-jaxb2-plugin

从XSD生成Java类时,如何为某个特定节点指定应该使用特定且已存在的Java类而不是尝试生成一个?

非常感谢。

2 个答案:

答案 0 :(得分:1)

您应该使用以下绑定自定义

<bindings version="2.0" xmlns="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"
    xmlns:annox="http://annox.dev.java.net" xmlns:namespace="http://jaxb2-commons.dev.java.net/namespace-prefix">
    <bindings schemaLocation="../schema/yourSchema.xsd">

        <bindings node="//xs:complexType[@name='Foo']">
            <class ref="com.FooImpl"/> 
        </bindings>

    </bindings>
</bindings>

答案 1 :(得分:1)

您可以使用episode文件来引用现有的类。 .episode个文件只是jaxb绑定文件,并且在元素和java类之间有映射。

a)如果那些现有的类也是从(另一个)xsd生成的。使用以下选项首先创建.episode文件。

xjc -episode a.episode a.xsd

然后使用包含映射的a.episode作为下一个xjc代的输入。

xjc b.xsd -extension -b a.episode

b)如果您想引用一些随机类,那么您可能需要编写自己的剧集文件,提供elementclass reference之间的映射,如下所示。

<强> sample.episode

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<jaxb:bindings xmlns:jaxb="http://java.sun.com/xml/ns/jaxb" if-exists="true" version="2.1">
 <jaxb:bindings scd="x-schema::">
    <jaxb:bindings scd="employee">
      <jaxb:class ref="www1.example.Employee"/>
      <jaxb:package name="www1.example" />
    </jaxb:bindings>
   </jaxb:bindings>

并使用xjc b.xsd -extension -b sample.episode