JAXWS 클라이언트를 설정하고 SoapHandler 구현을 Binding handlerChain에 추가했습니다. 이 모든 것이 원시 서비스 응답을 볼 때 실행되지 않을 때 볼 수 있기를 바랍니다.잘못된 응답의 jaxws 핸들러 동작
모든 것이 괜찮 으면 내 handler.handleMessage()가 요청에 대해 한 번, 응답에 대해 두 번 호출됩니다.
하지만 서비스의 응답이 왜곡 된 XML이거나 나빠질 경우 handler.handleFault가 호출되기를 기대했지만 아무 일도 일어나지 않았을 것입니다. 여기
이 경우 관련 스택 트레이스의 일부입니다
com.sun.xml.internal.ws.streaming.XMLStreamReaderException: XML reader error: javax.xml.stream.XMLStreamException: ParseError at [row,col]:[1,1]
Message: Premature end of file.
com.sun.xml.internal.ws.streaming.XMLStreamReaderUtil.wrapException(XMLStreamReaderUtil.java:256)
com.sun.xml.internal.ws.streaming.XMLStreamReaderUtil.next(XMLStreamReaderUtil.java:84)
com.sun.xml.internal.ws.streaming.XMLStreamReaderUtil.nextContent(XMLStreamReaderUtil.java:99)
com.sun.xml.internal.ws.streaming.XMLStreamReaderUtil.nextElementContent(XMLStreamReaderUtil.java:89)
com.sun.xml.internal.ws.encoding.StreamSOAPCodec.decode(StreamSOAPCodec.java:164)
com.sun.xml.internal.ws.encoding.StreamSOAPCodec.decode(StreamSOAPCodec.java:292)
com.sun.xml.internal.ws.encoding.StreamSOAPCodec.decode(StreamSOAPCodec.java:118)
com.sun.xml.internal.ws.encoding.SOAPBindingCodec.decode(SOAPBindingCodec.java:278)
com.sun.xml.internal.ws.transport.http.client.HttpTransportPipe.process(HttpTransportPipe.java:180)
com.sun.xml.internal.ws.transport.http.client.HttpTransportPipe.processRequest(HttpTransportPipe.java:83)
com.sun.xml.internal.ws.transport.DeferredTransportPipe.processRequest(DeferredTransportPipe.java:105)
com.sun.xml.internal.ws.api.pipe.Fiber.__doRun(Fiber.java:587)
com.sun.xml.internal.ws.api.pipe.Fiber._doRun(Fiber.java:546)
com.sun.xml.internal.ws.api.pipe.Fiber.doRun(Fiber.java:531)
com.sun.xml.internal.ws.api.pipe.Fiber.runSync(Fiber.java:428)
com.sun.xml.internal.ws.client.Stub.process(Stub.java:211)
com.sun.xml.internal.ws.client.sei.SEIStub.doProcess(SEIStub.java:124)
com.sun.xml.internal.ws.client.sei.SyncMethodHandler.invoke(SyncMethodHandler.java:98)
com.sun.xml.internal.ws.client.sei.SyncMethodHandler.invoke(SyncMethodHandler.java:78)
com.sun.xml.internal.ws.client.sei.SEIStub.invoke(SEIStub.java:107)
내가 XML하고 내 처리기가 이미 컨텍스트에 좋은 XML을 기대할부터하지 않을 수 있습니다 교환 년대 RAW 데이터를 얻을 싶습니다. getMessage(). getSOAPPart() 이것이 내가가는 길이라고 생각하지 않습니다.
I 해요 SOAP 스택을 우회하고 데이터를 얻을 수 있지만,이 못생긴 작은 비트
정말 그 길을 갈해야 찾기 위해 HTTP를 통해 직접 내 요청을 실행하는 유혹?
또한 문제를 해결하는 좋은 방법이기도합니다. 코드가 전송하는 요청을 정확하게 다시 작성할 수 있다고 가정합니다. 당신의 코드가 어딘가에서 실제로 생성되는 로그라면 앱의 잘못된 입력으로 인한 문제를 재현하는 데 어려움을 겪을 것입니다. –
원격 엔드가 제대로 작동하는지 쉽게 확인할 수있는 '기본 쿼리'가 있기 때문에 제 경우에는 작동합니다. – user691154
내부 JAX-WS, 즉 rt.jar의 JRE와 함께 제공된 JAX-WS를 사용하는 경우 com.sun.xml.internal.ws.transport.http.client.HttpTransportPipe.dump = true를 사용해야합니다 (추가 'internal') (이 질문에 대한 답변에서) (http://stackoverflow.com/questions/5350476/tracing-xml-request-responses-with-jax-ws-when-error-cuurs). – Hok