Я использую эталонную реализацию JAX-WS (2.1.7) и хочу отслеживать запросы / ответы SOAP на стороне клиента .На самом деле, мне нужно изучить некоторые заголовки Http, когда я получу ответ.
После этих предыдущих вопросов ( Трассировка XML-запроса / ответов с JAX-WS и Java JAX-Клиент веб-службы WS: как регистрировать запрос и ответ xml? ), я создал свой собственный обработчик для регистрации при отправке запроса и получении ответа:
public class SHandler implements SOAPHandler<SOAPMessageContext>
{
private static final Logger log = Logger.getLogger(SHandler.class);
@Nullable
@Override
public Set<QName> getHeaders()
{
log.debug(">>>>>>>>>>> GetHeaders");
return null;
}
@Override
public boolean handleMessage(SOAPMessageContext soapMessageContext)
{
log.debug(">>>>>>>>>>> HandleMessage");
return true;
}
@Override
public boolean handleFault(SOAPMessageContext soapMessageContext)
{
log.debug(">>>>>>>>>>> HandleFault");
return true;
}
@Override
public void close(MessageContext messageContext)
{
log.debug(">>>>>>>>>>> Close");
}
}
и добавляюобработчик цепочки обработчиков во время инициализации службы:
@WebServiceClient(name = "MyService", targetNamespace = "http://www.whatever.com/", wsdlLocation = "file:/path/to/wsdl")
public class MyService extends Service
{
public MyService(URL wsdlLocation) {
super(...);
initializeBinding();
}
@WebEndpoint(name = "MyOperation")
public MyPort getMyPort() {
return super.getPort(new QName("http://www.whatever.com/", "MyPort"), MyPort.class);
}
private void initializeBinding() {
MyPort port = getMyPort();
BindingProvider bindingProvider = ((BindingProvider) port);
List handlerChain = bindingProvider.getBinding().getHandlerChain();
handlerChain.add(new SHandler());
bindingProvider.getBinding().setHandlerChain(handlerChain);
}
...
}
Проблема в том, что это не работает вообще на стороне клиента.Я не вижу никаких журналов, и мой обработчик никогда не выполняется, когда я отправляю запрос и получаю ответ.
Обратите внимание, что нет никакого конкретного WSDL, связанного с этой проблемой, потому что я работаю на платформе MDA, которая генерирует артефакты клиент / сервер из любого WSDL.Кроме того, я не могу сделать это на уровне конфигурации, так как все сгенерировано, поэтому я могу сделать это только программно (я гуглял это, и все решения, которые я нашел, были либо в исходном посте, либо с использованием цепочки обработчиков).XML-файл конфигурации).
Я что-то упустил?Есть ли другой способ сделать это?
Заранее спасибо.