JAXB:XSDでattlタイプが指定されている場合、xjc生成クラス名を変更する方法は?
質問
私はJAXBの初心者であり、XJCでJavaクラスを生成する際に迷惑な問題を抱えています。私はこのようなXSDが提供されています:
<xs:element name="item" type="itemType"/>
...
<xs:complexType name="itemType">
<xs:attribute name="id" type="xs:string" use="required">
...
</xs:complexType>
XJCは呼ばれるクラスを生成しています ItemType.java
, 、しかし、私は名前を望んでいます Item.java
. 。つまり、XSDがこのようなものであるかのように、生成されたクラスが必要です。
<xs:element name="item">
<xs:complexType>
<xs:attribute name="id" type="xs:string" use="required">
...
</xs:complexType>
</xs:element>
他の要素にはitemTypeの再利用はありません。XSDを構築するのは、この方法でそれを好む人々です。カスタムバインディングでそれを行う方法があるかもしれませんが、まだその方法を見つけていません。
何か助けがありますか?
ありがとう、ミゲル
解決
Jaxbはこれを達成するための2つの方法を提供します。
1.インラインスキーマアンクテーション
JAXBスキーマアノテーションを使用して、クラス名を制御できます。
<xs:schema
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:jaxb="http://java.sun.com/xml/ns/jaxb"
jaxb:version="2.1">
<xs:complexType name="itemType">
<xs:annotation>
<xs:appinfo>
<jaxb:class name="Item"/>
</xs:appinfo>
</xs:annotation>
<xs:attribute name="id" type="xs:string" use="required"/>
</xs:complexType>
</xs:schema>
2.外部バインディングファイル
このカスタマイズは、外部バインディングファイルを介して実行することもできます。
<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="your-schema.xsd">
<jxb:bindings node="//xs:complexType[@name='itemType']">
<jxb:class name="Item"/>
</jxb:bindings>
</jxb:bindings>
</jxb:bindings>
XJCコマンドラインは次のとおりです。
xjc -d out -b binding.xml your-schema.xsd
他のヒント
さて、私はついにそれを行う方法を見つけました。私の外部バインディングファイルは次のとおりです。
<?xml version="1.0"?>
<jxb:bindings version="1.0"
xmlns:jxb="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"
jxb:extensionBindingPrefixes="xjc">
<jxb:globalBindings>
<xjc:simple/>
</jxb:globalBindings>
</jxb:bindings>
と xjc
コマンドは実行する必要があります -extension
オプション。
このページで解決策を見つけました:
http://weblogs.java.net/blog/kohsuke/archive/2006/03/why_does_jaxb_p.html (編集: :時代遅れのリンク)
よろしく、ミゲル
これは、複雑なタイプの名前を変更するために使用する外部バインディングファイルです。 CXFのWSDL2Javaでコンパイルします。
<?xml version="1.0" encoding="UTF-8"?>
<jaxws:bindings xmlns:jaxws="http://java.sun.com/xml/ns/jaxws" xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:jxb="http://java.sun.com/xml/ns/jaxb" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/">
<jaxws:bindings node="wsdl:definitions/wsdl:types/xsd:schema[1]">
<jxb:bindings node="//xs:complexType[@name='VatNumber_exception']">
<jxb:class name="VatNumException"/>
</jxb:bindings>
</jaxws:bindings>
</jaxws:bindings>
所属していません StackOverflow