2012-04-11 15 views
0

Ich lese viele Tutorial für die Protokollierung der Web-Service-Anfrage/Antwort und festgestellt, dass sie alle das gleiche tun, aber ich bin nicht in der Lage protokollieren Sie die Anfrage, aber die Sache scheint korrekt zu sein, es wirft nicht einmal den Fehler. hier habe ich meinen Beispielcode gegeben, es wäre toll, wenn mir jemand sagen könnte, wo und was der Fehler ist.Handler keine Logging-Sache von Web-Service nicht einmal werfen Fehler (auf Kater mit U-Bahn)

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); 
    } 
    } 
} 
+0

com.sun.metro.samples.tubeinterceptor.tube -> INFO javax.enterprise.resource.webservices.assembler -> FINER javax.enterprise.resource.webservices -> INFO Konfigurieren Sie diese Protokollparameter und überprüfen Sie. – Phani

Antwort

1

Sie können eine Message implementieren, sollte diese Arbeit:

public class MyLoggingHandler implementiert Message { private static final 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; 
} 

}