Maciej Nowicki Java Developer
Temat: Logowanie request/response w JAX-WS
Mam problem z logowaniem zawartości request i response do webservice'ów za pomocą JAX-WS. Niestety na konsolę (docelowo do loggera, ale to zrobię potem) trafia tylko pusty string:
<2012-04-11 12:07:48 CEST> <Error> <MyServiceImpl> <BEA-000000> <Invoking ws>
Request:
Response:
<2012-04-11 12:07:48 CEST> <Error> <MyServiceImpl> <BEA-000000> <got result: 3>
Środowisko to JDeveloper 11.1.1.4 + ADF, więc wszystko robiłem za pomocą tych kreatorów next-next-serxt-finish. Na pierwszy rzut oka wszystko wygląda dobrze:
Mój Handler:
public class RequestLoggingHandler implements SOAPHandler<SOAPMessageContext> {
private NonCatalogLogger logger = new NonCatalogLogger("RequestLog");
public static final String REQUEST = "Request:\n";
public static final String RESPONSE = "Response:\n";
private static PrintStream out = System.out;
public RequestLoggingHandler() {
super();
}
public Set<QName> getHeaders() {
return Collections.emptySet();
}
public boolean handleMessage(SOAPMessageContext context) {
try {
Boolean outboundProperty = (Boolean) context.get(MessageContext.MESSAGE_OUTBOUND_PROPERTY);
String direction = outboundProperty ? REQUEST : RESPONSE;
SOAPMessage msg = context.getMessage();
out.println(direction);
msg.writeTo(out);
out.println("");
} catch (Exception e) {
throw new JAXRPCException(e);
}
return true;
}
public boolean handleFault(SOAPMessageContext context) {
return true;
}
public void close(javax.xml.ws.handler.MessageContext context) {
}
}
wygenerowany handler chain:
<handler-chains xmlns="http://java.sun.com/xml/ns/javaee">
<handler-chain>
<handler>
<handler-name>RequestLoggingHandler</handler-name>
<handler-class>com.mypackage.RequestLoggingHandler</handler-class>
</handler>
</handler-chain>
</handler-chains>
Handler chain dodany do klienta:
@WebServiceClient(wsdlLocation="http://myhost/MyService.svc?wsdl",
targetNamespace="http://tempuri.org/", name="MyService")
@HandlerChain(file="MyServiceProxy-HandlerChain.xml")
public class MyService
Co robię źle? Nie mam doświadczenia z handlerami, wcześniej logowanie obsługiwałem za pomocą features w CXF i działało mi bez problemów.