Java 处理程序未从web服务记录任何内容,甚至未抛出错误(在使用metro的tomcat上)

Java 处理程序未从web服务记录任何内容,甚至未抛出错误(在使用metro的tomcat上),java,web-services,tomcat,handler,java-metro-framework,Java,Web Services,Tomcat,Handler,Java Metro Framework,我阅读了很多关于记录web服务请求/响应的教程,发现它们都在做相同的事情,但我无法记录请求,尽管事情似乎是正确的,但它甚至没有抛出错误。这里我给出了我的示例代码,如果有人能告诉我哪里出了错,哪里出了错,那就太好了 My web service @WebService(endpointInterface = "com.sample.ws.SampleWS", serviceName = "SampleWS") @HandlerChain(file="/com/sample/ws/handler

我阅读了很多关于记录web服务请求/响应的教程,发现它们都在做相同的事情,但我无法记录请求,尽管事情似乎是正确的,但它甚至没有抛出错误。这里我给出了我的示例代码,如果有人能告诉我哪里出了错,哪里出了错,那就太好了

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);
  }
  }
}
我的web服务
@WebService(endpointInterface=“com.sample.ws.SampleWS”,serviceName=“SampleWS”)
@HandlerChain(文件=“/com/sample/ws/handler.xml”)
公共类SampleWSImpl实现SampleWS{
公共SampleWSImpl(){}
公共字符串hello(字符串s){
返回“Hello”+s;
}
}
我的handler.xml。
com.sample.LoggingHandler
我的日志处理程序类。
公共类LoggingHandler实现SOAPHandler{
@凌驾
公共集getHeaders(){
返回null;
}
@凌驾
公共无效关闭(MessageContext上下文){
}
@凌驾
公共布尔handleFault(SOAPMessageContext上下文){
logToSystemOut(上下文);
返回true;
}
@凌驾
公共布尔handleMessage(SOAPMessageContext上下文){
logToSystemOut(上下文);
返回true;
}
专用void logToSystemOut(SOAPMessageContext smc){
Boolean outboundProperty=(Boolean)smc.get(MessageContext.MESSAGE\u OUTBOUND\u属性);
试一试{
如果(!outboundProperty.booleanValue()){
SOAPMessage=smc.getMessage();
System.out.println(“传入消息:”);
ByteArrayOutputStream=新建ByteArrayOutputStream();
message.writeTo(流);
System.out.println(stream.toString());
System.out.println(“======================================================================”);
}
}
捕获(例外e){
System.out.println(“处理程序中的异常:+e”);
}
}
}

您可以实现MessageHandler,它应该可以工作:

公共类MyLoggingHandler实现MessageHandler{ 私有静态最终记录器Logger=LoggerFactory.getLogger(MyLoggingHandler.class)

公共布尔handleMessage(MessageHandlerContext mhc){
Message m=mhc.getMessage().copy();
ByteArrayOutputStream=新建ByteArrayOutputStream();
XMLStreamWriter writer=XMLStreamWriterFactory.create(流);
试一试{
m、 书面(作者);
如果(stream.size()>0){

LOGGER.debug(“>>Message com.sun.metro.samples.tubeinterceptor.tube->INFO javax.enterprise.resource.webservices.assembler->FINER javax.enterprise.resource.webservices->INFO配置此日志参数并检查。
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;
}