Обработчик не регистрирует ничего из веб-сервиса и даже не выдает ошибку (на tomcat, используя metro)

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

My web service 

@WebService(endpointInterface = "com.sample.ws.SampleWS", serviceName = "SampleWS")
@HandlerChain(file="/com/sample/ws/handler.xml")
public class SampleWSImpl implements SampleWS {
 public SampleWSImpl() {}
 public String hello(String s) {
 return "Hello "+s;
 }
}



 my handler.xml.

<?xml version="1.0" encoding="UTF-8"?>
<handler-chains xmlns="http://java.sun.com/xml/ns/javaee">
 <handler-chain>
 <handler>
 <handler-class>com.sample.LoggingHandler</handler-class>
 </handler>
 </handler-chain>
</handler-chains>



my log handler class .

public class LoggingHandler implements SOAPHandler<SOAPMessageContext> {

 @Override
 public Set<QName> getHeaders() {
 return null;
 }

 @Override
 public void close(MessageContext context) {
 }

 @Override
 public boolean handleFault(SOAPMessageContext context) {
  logToSystemOut(context);
  return true;


    }

     @Override
     public boolean handleMessage(SOAPMessageContext context) {
     logToSystemOut(context);
      return true;
     }

 private void logToSystemOut(SOAPMessageContext smc) {

  Boolean outboundProperty = (Boolean) smc.get(MessageContext.MESSAGE_OUTBOUND_PROPERTY);

  try {
   if (!outboundProperty.booleanValue()) {

   SOAPMessage message = smc.getMessage();

  System.out.println("Incoming message:");
  ByteArrayOutputStream stream = new ByteArrayOutputStream();
  message.writeTo(stream);

  System.out.println(stream.toString());
  System.out.println("=====================================");                
   }
  }
  catch (Exception e) {
  System.out.println("Exception in handler: " + e);
  }
  }
}

1 ответ

Вы можете реализовать MessageHandler, который должен работать:

открытый класс MyLoggingHandler реализует MessageHandler {частный статический финал Logger LOGGER = LoggerFactory.getLogger (MyLoggingHandler.class);

public boolean handleMessage(MessageHandlerContext mhc) {
    Message m = mhc.getMessage().copy();

    ByteArrayOutputStream stream = new ByteArrayOutputStream();
    XMLStreamWriter writer = XMLStreamWriterFactory.create(stream);
    try {
        m.writeTo(writer);
        if(stream.size() > 0) {
            LOGGER.debug(">> Message << \n{}", new String(stream.toByteArray()));
        }
    } catch (XMLStreamException e) {
        LOGGER.error("Could not log the incoming message, something wrong with the xml?", e);
        return false;
    }
    return true;
}

public boolean handleFault(MessageHandlerContext mhc) {

    return true;
}

public void close(MessageContext messageContext) {
}

public Set getHeaders() {
    return null;
}

}

Другие вопросы по тегам