JAXB 비 정렬에 문제가 있습니다. 나는 제대로 코딩했다고 생각하지만, unmarshalled 객체는 null 파라미터를 반환한다. 결과적으로, 나는 언 마샬링 할 때 JAXB가 기대하는 적절한 XML 구조를 보지 못하고 있다고 가정하고있다. 그러나 오류 메시지 나 예외가 발생하지 않습니다.JAXB 비 정렬 화를 디버깅하는 방법은 무엇입니까?
언 마샬링 프로세스를 통해 단계적으로 내 개체를 채우지 못하는 이유를 정확히 알 수 있습니까?
실제 비 정렬 화 코드
은 매우 평범한입니다 : 그러나public <T> T unmarshall(Node node, Class<T> clazz) throws JAXBException {
// Creating an unmarshaller
Unmarshaller u = JAXBContext.newInstance(clazz).createUnmarshaller();
// unmarshal an instance node into Java content
return clazz.cast(u.unmarshal(node, clazz).getValue());
}
, 내가 그것을 호출 할 때, 나는 형 clazz에의 목적은 (예상대로) 반환받을 만 채워지지.
언 마샬하려는 DOM 개체가 타사 API에 의해 생성되었습니다. 나는 이미 언 마샬링 (unmarshalling)과 함께 극도로 이상한 행동을하기 때문에이 과정을 디버그 할 수 있기를 바랍니다. 예를 들어 DOM 객체 (예 : doc.getByElementName ("myElement"). item (0)) 내의 하위 요소를 비 정렬 화하려고하면 자동으로 실패합니다. 그러나 문서를 문자열로 변환하고 새 문서로 다시 가져온 다음 변환하면됩니다.
이 문제를 디버깅하는 방법을 알지 못해서 상당히 실망하게되었습니다.
모든 통계를 제공해 주셔서 감사합니다. 당신이 걸릴 수
에릭
감사합니다. 결코 전에 그것을 시도하지 않았다; 그것을 줄 것이다. 그러나 XSD에서 JAXB 클래스를 생성 했으므로 거꾸로 돌아가는 것처럼 보입니다. 그러나 나는 여전히 그것을 우아한 해결책으로 생각하지 않습니다. JAXB는 완벽한 블랙 박스처럼 행동하고 있으며, 무엇을하고 있는지를 설명하는 지표가 없기 때문에 왜 그것이 실패하고 있는지 전혀 알 수 없습니다. 나는 그것이 무엇을하는지 그리고/또는 문제가있는 곳을 "볼"수있는 방법을 찾고 싶다. –
제안 해 주셔서 감사합니다. 나는 validator를 사용해 보았고 이해가되지 않는 오류가 발생했습니다. 나는 그것을 위해 별도의 스레드를 만들었습니다 (http://stackoverflow.com/questions/8761930/jaxb-unmarshal-validation-throws-cvc-elt-1-cannot-find-the-declaration-of-eleme). 당신이 뭔가 제안 할 수 있다면, 나는 그것을 크게 감사 할 것입니다. 감사. –
실제로 [다른 접근법] (http://stackoverflow.com/a/10227684/1864054)은 단순히 좋은 결과 및/또는 생산적인 결과를 산출하지 못하기 때문에 지금까지 발견 한 최선의 방법입니다. 그러나 테스트 메시지를 생성하는 데는'soapUI'를 사용하는 것이 좋을 것입니다. 왜냐하면 에러가 발생하는 모든 것을 수동으로 입력하도록 강요합니다 (특히 큰 메시지의 경우). 대신 Altova의 XMLSpy는 이상하게 작동합니다. SOAP 메뉴에서'새 SOAP 요청 만들기 '항목을 선택하면됩니다. 완벽하게 작동하는 (가짜) 메시지를 얻었 으면 – Withheld