2014-04-25 3 views
1

가이드 here을 따라 XML 문서를 DynamicEntity로 언 마샬링하려고합니다. 그러나 XML을 언 마샬 할 때 ClassCastException이 발생합니다.DynamicCAXBContext와 MOXy Unmarshaller를 사용하는 ClassCastException

DynamicJAXBContext context = DynamicJAXBContextFactory.createContextFromXSD(DocumentGenerator.class.getClassLoader().getResourceAsStream("myXSD.xsd"), null, null, null); 

     FileInputStream xmlInputStream = new FileInputStream("C:\\Users\\alexba\\myXML.xml"); 
     Unmarshaller unmarshaller = context.createUnmarshaller(); 

     DynamicEntity statement = (DynamicEntity) unmarshaller.unmarshal(xmlInputStream); 

오류는 다음과 같습니다 :

javax.xml.bind.JAXBElement cannot be cast to org.eclipse.persistence.dynamic.DynamicEntity 

내 치어 종속성

은 다음과 같습니다

<dependencies> 
     <dependency> 
      <groupId>org.eclipse.persistence</groupId> 
      <artifactId>eclipselink</artifactId> 
      <version>2.5.0</version> 
      <exclusions> 
       <exclusion> 
        <groupId>org.eclipse.persistence</groupId> 
        <artifactId>commonj.sdo</artifactId> 
       </exclusion> 
      </exclusions> 
     </dependency> 
     <dependency> 
      <groupId>com.sun.tools.xjc.maven2</groupId> 
      <artifactId>maven-jaxb-plugin</artifactId> 
      <version>1.1.1</version> 
     </dependency> 
    </dependencies> 
    <repositories> 

내가 코드를 읽고에하려고했는데 다음과 같이

내 코드입니다 Unmarshall이 어떻게 DynamicEntity를 반환 할 수 있는지 이해합니다.

답변

1

MOXy는 정적 모델에서와 동일한 이유로 JAXBElement에 정렬되지 않은 객체를 래핑합니다. 일반적으로 객체가 명명 된 복합 유형에 해당하는 경우입니다.

할 수 있습니다 중 하나 JAXBElement<DynamicEntity>와 객체 정렬 화 :

JAXBElement<DynamicEntity> element = (JAXBElement<DynamicEntity>) unmarshaller.unmarshal(xmlInputStream); 
DynamicEntity statement = element.getValue(); 

또는 활용 JAXBIntrospector :

DynamicEntity statement = (DynamicEntity) JAXBIntrospector.getValue(unmarshaller.unmarshal(xmlInputStream)); 
+0

적합합니다. 감사. –