2012-12-11 4 views
4

일부 XML 데이터 (익숙한 경우 FXG 파일)를 읽는 중입니다. 데이터의JAXB의 unmarshaller에서 XML 루트 요소 이름을 무시하는 방법은 무엇입니까?

일부는 태그 이름을 변경했습니다

나는 다양한 태그 이름 세그먼트 내의 데이터를 표현하기 위해 변환을라는 클래스를 만들었습니다
<varying_name1 scaleX="1.0046692" x="177.4" y="74.2"/> 
<varying_name2 scaleX="1.0031128" x="171.9" y="118.9"/>  

. 데이터를 보유하는 내 JAXB 클래스에서 내가 가진 :

내 어댑터에서
@XmlAnyElement(lax=true)  
@XmlJavaTypeAdapter(TransformAdapter.class)  
protected List<Transform> transforms; 

, 나는 데이터를 비 정렬 화를 시도 : 그러나

JAXBContext context = JAXBContext.newInstance(Transform.class); 
Unmarshaller unmarshaller = context.createUnmarshaller(); 
Transform result = (Transform) unmarshaller.unmarshal(v); 

을, 내 코드는 여기에서 예외가 발생하기 때문에의 루트 이름을 내 요소가 다양합니다. 상수가 아닙니다. 내가 얻을 :

unexpected element (uri:"http://ns.adobe.com/fxg/2008", local:"m6_mc"). Expected elements are (none) 

가 어떻게 루트 요소가 예상 이름을 가진 것처럼 그냥 내 데이터를 비 정렬 화받을 수 있나요? JAXB 프로 (JSR-222) 구현을 기본으로

답변

7

루트 요소에 따라 비 정렬 화하기 위해서 클래스를 결정합니다. 이는 @XmlRootElement 또는 @XmlElementDecl 주석을 통해 제공되는 메타 데이터와 일치합니다.

다른 방법으로 당신은 클래스 매개 변수를 사용 비 정렬 화 방법 중 하나. 이것은 비 정렬화할 클래스를 JAXB에 알려줍니다. 비 정렬 화의 결과는 JAXBElement의 인스턴스가되며 Java 오브젝트 이외에 필요한 경우이를 위해 루트 요소 정보가 포함됩니다.

JAXBContext context = JAXBContext.newInstance(Transform.class); 
Unmarshaller unmarshaller = context.createUnmarshaller(); 
Transform result = unmarshaller.unmarshal(v, Transform.class).getValue(); 
+1

왜 클래스 인수를 제공하면 두 번째로 루트 요소를 무시하도록 지시하는지 이해할 수 없지만 작동합니다! 나는 당신이 조금 더 가깝게 다운로드 한 당신의 모범을 복사 했어야했다. – Joe

+1

@Joe - 내 답변을 확장했습니다. 잘하면 그 점을 명확히하는 데 도움이됩니다. –

+1

고마워, 블레이즈! – Joe

관련 문제