Поведение обработчика jaxws на ошибочных ответах - PullRequest
2 голосов
/ 21 октября 2011

Я установил клиент JAXWS и добавил реализацию SoapHandler к его обработчику привязки Chain.Все это в надежде увидеть необработанный ответ службы, когда он не работает должным образом.

Когда все в порядке, мой 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)

Я хотел бы получить обмениваемые данные RAW, которые могут не являться XML, и, поскольку мой обработчик уже ожидает хорошего XML в своем context.getMessage (). GetSOAPPart () Я не думаю, что этопуть

Я испытываю желание обойти стек SOAP и выполнить мой запрос напрямую через HTTP для получения данных, но считаю это немного уродливым

Должен ли я действительно пойти по этому пути?

1 Ответ

2 голосов
/ 24 октября 2011

AFAIK, нет способа программно получить поток необработанных данных для службы JAX-WS.

, чтобы получить поток данных, вам нужно вставить какой-нибудь обработчик в линию протокола HTTP (или что-то еще) протокола.Я уверен, что есть способы сделать это в зависимости от вашей реализации и версии JAX-WS, но ни один из них не является частью стандарта JAX-WS.(снова AFAIK ..)

, если вам просто нужно устранить неполадку и действительно просто хотите зарегистрировать запрос и ответ от конвейера HTTP, вы можете использовать это системное свойство, чтобы заставить транспортный канал HTTPрегистрировать все, что проходит через него:

-Dcom.sun.xml.ws.transport.http.client.HttpTransportPipe.dump=true
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...