2011-03-14 4 views
1

XML을 내보내기/가져 오기 형식으로 사용하는 더 큰 프로젝트의 경우 XSD 스키마 파일을 수신했습니다. JAXB를 사용하여 클래스를 생성하고 생성 된 클래스에 데이터를 채우는 루틴을 추가했습니다. 이제 전체 파일을 디스크의 XML 파일로 마샬링합니다.JSP 응용 프로그램에서 Tomcat, JAXB 마샬링 : 스키마 추가 예외 적용

Spmigration mig = new Spmigration(); //Main migration object 
mig.setBestellungen(new OrdersImpl().getOrders(shop)); 
JAXBContext jc = JAXBContext.newInstance("my.migration.context"); 
Marshaller m = jc.createMarshaller(); 
m.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, Boolean.TRUE); 
m.marshal(mig, new File("test.xml")); 

이것은 매력처럼 작동합니다. 출력 파일은 올바른 형식이며 올바른 스키마가 주어지면 유효합니다. 이제 파일을 내보내려고하지만 스키마를 직접 추가하려고합니다. 나는 몇 줄을 추가 :

Spmigration mig = new Spmigration(); //Main migration object 
mig.setBestellungen(new OrdersImpl().getOrders(shop)); 
JAXBContext jc = JAXBContext.newInstance("my.migration.context"); 
Marshaller m = jc.createMarshaller(); 
SchemaFactory schemaFactory = SchemaFactory.newInstance("http://www.w3.org/2001/XMLSchema"); 
Schema schema = schemaFactory.newSchema(new File("myschema.xsd")); 
m.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, Boolean.TRUE); 
m.setSchema(schema); 
m.marshal(mig, new File("test.xml")); 

스키마 파일이 존재하고 (내가 먼저 시도 할 때 파일을 제공하는 것을 잊었다 때 다른 오류를 가지고 있기 때문에 내가 아는) 읽을 수 있습니다.

물론

java.lang.VerifyError: (class: org/apache/xerces/impl/xs/XSAnnotationImpl, method: writeToDOM signature: (Lorg/w3c/dom/Node;S)V) Incompatible object argument for function call org.apache.jasper.runtime.PageContextImpl.doHandlePageException(PageContextImpl.java:862)

이 전체 스택 추적되지 않습니다 : 자,

Schema schema = schemaFactory.newSchema(new File("myschema.xsd")); 

라인은 다음과 같은 예외를 생성합니다. 그러나 그것은 문제인 것으로 보인다. 나는이 특정 오류 메시지로 인해 그물이 알고있는 매우 적은 수의 문제에서 중대한 것을 읽지 않을 것이다.

확인할 수있는 것이 있습니까? 내가 잘못하고있는 것이 있습니까?

+1

'VerifyError'는 심각합니다. 뭔가 클래스 파일을 방해하고 있다는 뜻입니다 ... – skaffman

답변

0

정말 해결책은 아니지만 마침내 우리가 한 것은 스키마에 설명 된 메소드를 추가하는 것이 아니라 나중에 다른 단계에서 텍스트 대체를 통해 스키마를 추가하는 것입니다.