2013-09-01 3 views
0

Unmarshaller에 JAXB에 스키마 위치 추가 "주"javax.xml.bind.UnmarshalException - 링크 제외 : [조직. xml.sax.SAXParseException; lineNumber : 1; columnNumber : 456; 접두사 속성 "이 xsi ''는 xsi : nil을". "customerProductStatus"가 결합되어 있지 않은 요소 유형과 연관된]는 I가 서버로부터 반환되는 XML 보았다는 JABX이 Unmarshaller에는 XML을 스레드에서</p> <p>예외를 언 마샬링 할 때 나는 아래의 오류에 직면하고있다

, 그것은 아래와 같다 :

<customerProductStatus xsi:nil = "true"></customerProductStatus> 

상위 태그에 정의 된 xsi가 표시되지 않습니다. 바인딩을 변경하지 않고 unmarshaller에 schemaLocation을 추가 할 수 있습니까?

JAXBContext jaxbContext1 = JAXBContext.newInstance(Request.class); 
Unmarshaller jaxbUnMarshaller1 = jaxbContext1.createUnmarshaller(); 
Request request = (Request)jaxbUnMarshaller1.unmarshal(receiveData.getBinaryStream()); 

답변

2

이 작업을 추가 할 수 있습니다

//Gets schema 
SchemaFactory schemaFactory = SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI); 
Schema schema = schemaFactory.newSchema(xmlSchema); 

JAXBContext jaxbContext1= JAXBContext.newInstance(Request.class); 
Unmarshaller jaxbUnMarshaller1 = jaxbContext1.createUnmarshaller(); 

//Sets schema with unmarshaller 
jaxbUnMarshaller1 .setSchema(schema); 

Request request = (Request)jaxbUnMarshaller1.unmarshal(receiveData.getBinaryStream()); 

필요한 패키지는 다음과 같습니다

import javax.xml.validation.Schema; 
import javax.xml.validation.SchemaFactory; 
+0

감사 재이을. 내 WSDL에서 JAXB 클래스를 생성했으며 스키마 파일이 없습니다. 어떻게 스키마를 여기에 설정해야합니까? setSchema (스키마) –

+0

WSDL에 익숙하지 않습니다.이 [샘플]에 대해 어떻게 할 수 있습니까 (http://stackoverflow.com/questions/8979044/validating-soap-message-against-wsdl). -with-multiple-xsds)? 스키마를 가져 오기 위해 WSDL 파일을 기본으로 사용합니다. – jaimetotal

+0

이 문제를 해결하기 위해 binding.xml의 내용을 업데이트하는 방법이 있습니까? –

관련 문제