2011-09-16 18 views
4

メッセージのマーシャリングとアンマーシャリングを行います。 は、私はこのようなXMLタイプがあります。JAXB子要素を使用するための注釈

@XMLAccesorType(AccesorType.FIELD) 
@XMLType(name="Header") 
public class Header{ 

@XMLElement(name="messageId") 
private String messageId; 
//getters and setters 
} 

をし、私がメッセージを持って入力します。私は別のメッセージでそれに多くの時間を使用しているため

<Message> 
<messageId>1111</messageId> 
</Message> 

私は、独立クラスへのMessageIdタイプを割り当てたいです:

@XMLAccesorType(AccesorType.FIELD) 
@XMLType(name="MessageIdType") 
public class MessageIdClass{ 

@XMLElement(name="messageId") 
private String messageId; 
//getters and setters 
} 

しかし、MessageIdをラップする不要なタグがあります。 私がしたい:

<Message> 
    <MessageId>1111</MessageId> 
</Message> 

しかしだ:

<Message> 
    <MessageIdType> 
     <MessageId>1111</MessageId> 
    </MessageIdType> 
</Message> 

また、メッセージは、messageIdにフィールドにいくつかの基本クラスを継承することはできません。これは私が@XmlValueは、あなたが探しているものであると考えてい

//inside Message 
@SomeAnnotation(useOnlyChildFields=true) 
MessageIdClass msgId; 
+1

「しかし、私はMessageIdをラップする不要なタグを持っています」と説明できますか? – Thor

答えて

3

@XmlType(name="MessageIdType") 
public class MessageIdClass{ 
    @XmlValue 
    private String messageId; 
} 

これは単純型を作成します。

あなたは複数のプロパティを必要とする、またはあなたが必要とする一つの特性は、単純型にマップすることができないならば、あなたはまだいくつかのプロパティを持つタイプを作成し、使用することができた場合:

new JAXBElement<MessageIdClass>(
    new QName("http://foo/bar", "ElementOfThisType"), 
    MessageIdClass.class, 
    null, 
    object_of_type_MessageIdClass); 

作成しますこのタイプの要素。これは、通常、で行われ、オブジェクトを受け取り、@XmlElementDeclと注釈されたメソッドを使用します。

1

?:よう は、私が何かを書くことができ、これはmessageId要素排除します:詳細情報

@XmlAccesorType(XmlAccesorType.FIELD) 
@XmlType(name="MessageIdType") 
public class MessageIdClass{ 

    @XmlValue 
    private String messageId; 
    //getters and setters 
} 

あなたが行うことができます
関連する問題