2011-09-16 3 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); 

것은 만들 : 사용 하나 개 이상의 속성을 필요로하거나 당신이 필요로하는 하나 개의 속성이 간단한 유형에 매핑 할 수없는 경우, 당신은 여전히 ​​다음 몇 가지 속성을 가진 유형을 생성 할 수있는 경우

이 유형의 요소. 이는 일반적으로 에서 으로 주석 처리 된 MessageIdClass 개체를 수신하는 방법으로 수행됩니다.