2012-10-15 8 views
5

可能性の重複スキーマ要素をマッピングする方法:私はXMLスキーマからJavaクラスを生成するために、JAX-Bを使用しています
jaxb xjc mapping to existing domain objectsJAX-B - 既存のJavaクラスに

を。

私のスキーマには、プロジェクトに存在するJavaクラスにバインドしたい要素が1つあります。私のバインディングは.xjbファイルで行われます。私はいくつかのアプローチを試みましたが、動作するものは何も得られません。

これは可能ですか? そうなら、どうですか?ここで

は私の問題の少ない例である:

私の既存のJavaクラス:

package com.existing; 

import javax.xml.bind.annotation.XmlAccessType; 
import javax.xml.bind.annotation.XmlAccessorType; 
import javax.xml.bind.annotation.XmlType; 

@XmlAccessorType(XmlAccessType.FIELD) 
public class Existing { 
    private String prop; 
    public String getProp() { return prop; } 
    public void setProp(String prop) { this.prop = prop; } 
} 

マイスキーマ:

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" 
    targetNamespace="http://www.baloiselife.com/xpression/policy" 
    xmlns="http://www.baloiselife.com/xpression/policy" > 

<xs:element name="root_node"> 
    <xs:complexType> 
    <xs:sequence> 
     <xs:element name="some_other_propery" type="xs:string"/> 
     <!-- I want this element to map onto my existing Java class --> 
     <xs:element name="special_element" type="existing_type" minOccurs="0" /> 
    </xs:sequence> 
    </xs:complexType> 
</xs:element> 

<!-- I want this element to be ignored, and instead my Java class used --> 
<xs:complexType name="existing_type"> 
    <xs:sequence> 
    <xs:element name="prop" type="xs:string" minOccurs="0" /> 
    </xs:sequence> 
</xs:complexType> 

だから私のバインディングを何任意のアイデアをすべきですか? jxb:class設定を使ってみましたが、動作させることができませんでした。 私の最終的な結果は、二つの要件があります。ExistingTypeクラスは、スキーマのルートノードクラスは私の既存のJavaクラスにマップ既存の型の要素を持ってい

  • から生成ない
    1. ある

  • 答えて

    6

    外部バインディングファイルを使用して、XJCが必要な処理を行うように設定することができます。

    binding.xjb

    <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='existing_type']"> 
          <jxb:class ref="com.existing.Existing"/> 
         </jxb:bindings> 
        </jxb:bindings> 
    </jxb:bindings> 
    

    XJCコール

    xjc -d outputDir -b binding.xjb yourSchema.xsd 
    
    +1

    おかげブレーズ。 ref属性が2.1のjxbスキーマで追加され、私のIDEが古いものを使用していたようです...だから私はそのオプションを見ませんでした!すべてが今素晴らしいです。 –

    関連する問題