2012-12-06 2 views
0

두 개의 다른 XML 스키마를 수신하지만 동일한 속성 이름 (루트 요소 포함)을받는 기존 웹 서비스 프로젝트가 있습니다. 나는 마샬링/언 마샬링을 위해 Spring, OXM, JAXB2를 사용하고있다.Spring OXM을 사용하는 여러 마샬 러/언 마샬 러

another question으로 이전 호를 해결 했으므로 SAX 파서를 사용하여 사용할 언 마샬 러를 결정합니다. XML이 파싱되면 값을 확인한 다음 언 마샬 러나 다른 언 마샬 러를 사용할 수 있습니다.

스프링 OXM을 사용하여 marshaller/unmarhsallers를 정의하려고하면 문제가 발생합니다. 2 개의 패키지로 클래스 패스를 설정하면, unmarshaller는 같은 XMLRootElement를 가지는 2 개의 클래스를 찾습니다. 클래스 바인딩 목록을 설정하면 실패합니다. unmarshaller는 클래스 목록의 마지막 항목 (항상 같은 XMLRootElement, unmarshaller는 언 마샬링 할 클래스를 알지 못함)에 항상 언 마샬해야합니다.

내가 JAXBContext에 사용하는 경우 그러나 그것은 제대로 작동 :

JAXBContext jc = JAXBContext.newInstance(MyClass1.class); 
myClass1Object = (MyClass1) jc.createUnmarshaller().unmarshal(new StreamSource(new StringReader(xml))); 

그리고

JAXBContext jc = JAXBContext.newInstance(MyClass2.class); 
myClass2Object = (MyClass2) jc.createUnmarshaller().unmarshal(new StreamSource(new StringReader(xml))); 

어떻게 더 봄 (OXM) 접근 방식이를 변환 할 수 있습니까?

답변

0

우선 응용 프로그램 컨텍스트 파일에서 JAXBContext 인스턴스를 선언하려고했지만 마침내 XML 스키마의 네임 스페이스를 변경했습니다. 이제 Spring OXM을 사용하여 두 개의 XML 스키마를 아무 문제없이 마샬링/언 마샬링합니다.

관련 문제