0
웹 서비스 요청/응답을 로깅하기위한 튜토리얼이 많이 읽 혔고 같은 일을하고 있지만 모두 할 수 없다는 것을 알았습니다. 요청을 기록하지만 오류가 발생하지 않는 것은 올바른 것으로 보입니다. 여기 샘플 코드를 주면 실수가 어디서 무엇인지 알 수 있다면 좋을 것입니다.웹 서비스에서 아무 것도 로깅하지 않는 처리기 (메트로를 사용하는 바람둥이)
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);
}
}
}
com.sun.metro.samples.tubeinterceptor.tube -> 정보 javax.enterprise.resource.webservices.assembler -> FINER javax.enterprise.resource.webservices -> 정보 이 로깅 매개 변수를 구성하고 확인하십시오. – Phani