2013-12-09 2 views
0

내 질문은 이전에 물어 다른 사람과 비슷하지만, 사실은 아직 내 문제를 해결할 수 없다는 것입니다. 객체로 변환 (비 정렬 화)해야하는 XML 문서가 있으며 JAXB 주석을 사용하여 XML 문서를 처리하고 있습니다. 지금까지는 그렇게 좋았지 만 가치를 얻을 수없는 속성이 하나 있습니다. 이야기하는 대신 코드를 작성해 보겠습니다.자바 - Unmarshal 객체에 XML 문서

내 자바 객체 :

@XmlRootElement 
public class Product { 
    private String date_upd; 
    private MetaDescription meta_description; 

    //------------Static classes for sub nodes------------------ 
    @XmlAccessorType(XmlAccessType.FIELD) 
    static class MetaDescription{ 
     private List<Language> language ; 
    } 

    @XmlAccessorType(XmlAccessType.FIELD) 
    static class Language{ 
     @XmlAttribute(name="id") 
     private String id; 
     @XmlValue 
     private String language = null; 
     void setLanguage(String language){ 
      this.language = language; 
     } 
     String getLanguage(){ 
      return this.language; 
     } 
    } 


    public String getDate_upd() { 
     return date_upd; 
    } 

    /** 
    * @param date_upd the date_upd to set 
    */ 
    @XmlElement 
    public void setDate_upd(String date_upd) { 
     this.date_upd = date_upd; 
    } 

    /** 
    * @return the meta_description 
    */ 
    public MetaDescription getMeta_description() { 
     return meta_description; 
    } 

    /** 
    * @param meta_description the meta_description to set 
    */ 
    @XmlElement 
    public void setMeta_description(MetaDescription meta_description) { 
     this.meta_description = meta_description; 
    } 

} 

그리고 내 XML 문서는 다음과 같은 조각이 있습니다

<product> 
    <date_upd> 
    <![CDATA[2013-12-06 18:03:59]]> 
    </date_upd> 
    <meta_description> 
    <language id="1" xlink:href="http://demo1.it2care.com/shop/api/languages/1"> 
     <![CDATA[product1]]> 
    </language> 
    <language id="2" xlink:href="http://demo1.it2care.com/shop/api/languages/2"> 
     <![CDATA[produto1]]> 
    </language> 
    </meta_description> 
</product> 

그것은 더 많은 특성을 가지고 있지만 이들 관련이 있습니다. 'date_upd'올바르게 언 마샬링되고 있지만 'meta_description'해결할 수 없습니다. 'MetaDescription'필드 안에 'Language'객체 목록이 있지만 '언어'노드에서 'id'attr을 얻을 수는 있지만 'Language'값을 가져올 수 없습니다. 제공된 XML 예제에서 'meta_description'은 2 개의 요소가있는 List입니다. 두 목록 요소에서 'ID'는 올바르게 채워지지만 'product1'대신 'language'에서 가져옵니다.

어떤 힌트를 주시겠습니까? 대단히 감사드립니다.

답변

0

생각 해봐! 내 노드에 CDATA 요소가 있기 때문에 나는 언어를 얻고 있었다. 이유는 여전히 알아 내려고하는 중이다. 언 마샬 러는이 노드에 들어 가지 않아서 빈 문자열을 리턴한다. 나는 그 문제를 근원적으로 해결했다.

//Create a Document factory 
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); 
//Line I added 
factory.setCoalescing(true); //remove all CDATA wrappers 

내가 처음에 게시 된 구조를 사용하여, 나에게 문제를 해결 : XML 문서에 서버에서 XML 문자열을 변환 할 때 나는 다음과 같은 조각을 추가했습니다. 희망이 도움이됩니다!