2011-10-03 5 views
1

JAXB marshaller를 사용하여 일부 Java 객체를 XML 파일로 저장합니다. 이러한 개체 중 일부는 서로 참조, 그래서 당연히이 오류를 얻을 :JAXB marshaller가 xlink 참조를 사용하도록 강제하는 방법은 무엇입니까?

[com.sun.istack.internal.SAXException2: A cycle is detected in the object graph. This will cause infinitely deep XML 

주기를 제거하고 오직 트리 구조를 사용에서 구성이 솔루션은 가능하지 않습니다 - 나는 모두 항행 할 방향이 필요합니다.

이 문제를 해결하려면 xlink 개체를 계단식으로 복사하는 대신 xlink 개체를 참조하는 것이 좋습니다. 이 솔루션이 적절합니까? JAXB 마샬 러와 함께 할 수 있습니까? 방법?

답변

3

XmlAdapter을 사용하여 JAXB에서 XLink 방식을 구현할 수 있습니다. 다음은 여러 유사한 대답에 대한 링크입니다.

  • Can JAXB marshal by containment at first then marshal by @XmlIDREF for subsequent references?
  • +0

    답장을 보내 주셔서 감사합니다. 링크를 살펴 보겠습니다. – julien

    0

    야, 당신은 개체의 한 주석 @XmlTransient에주의 수 있으므로 때 unmarch, 그것은주기 문제에 대해 불평하지 않습니다.

    그러나 xml을 unmarch 한 후 thius 해결 방법을 사용하려면 @XmlTransient으로 속성을 채워야합니다.

    나는 몇몇 종이를 읽고 이것을 발견했다. @XmlTransient을 설정하고 콜백 메소드를 사용하여 unmarch 이후에 작업을 수행 할 수 있습니다. 부모에게 자녀를 맡길 수 있습니다.

    public void afterUnmarshal(Unmarshaller u, Object parent) { 
        this.pessoa = (Pessoa) parent; } 
    
    관련 문제