Soaphandler non appelé après l'opération WS est exécuté
-
14-11-2019 - |
Question
J'ai un servlet qui consomme également du savon WS (à Joket).Je veux voir l'enveloppe du savon (ou quoi que ce soit d'autre dans le message SOAP).J'atdudd ce code à ma classe de servlet:
class ClientHandlerResolver implements HandlerResolver {
public List<Handler> getHandlerChain(PortInfo port_info) {
List<Handler> hchain = new ArrayList<Handler>();
hchain.add(new TestHandler()); // soap handler defined in TestHandler.java dumps messages to stdout
return hchain;
}
}
i une classe séparée, j'ai mon testhandler:
public class TestHandler implements SOAPHandler<SOAPMessageContext> {
private static final String LoggerName = "ClientSideLogger";
private Logger logger;
private final boolean log_p = true; // set to false to turn off
public TestHandler() {
logger = Logger.getLogger(LoggerName);
}
public boolean handleMessage(SOAPMessageContext ctx) {
if (log_p)
logger.info("Test::handleMessage");
// Is this an outbound message, i.e., a request?
Boolean request_p = (Boolean)
ctx.get(MessageContext.MESSAGE_OUTBOUND_PROPERTY);
// Manipulate the SOAP only if it's a request
if (request_p) {
try {
SOAPMessage msg = ctx.getMessage();
msg.writeTo(System.out);
}
catch(SOAPException e)
{ System.err.println(e);
}
catch(IOException e)
{ System.err.println(e);
}
}
return true; // continue down the chain
}
public boolean handleFault(SOAPMessageContext ctx) {
return true;
}
public Set<QName> getHeaders() {
if (log_p)
logger.info("getHeaders");
return null;
}
public void close(MessageContext messageContext) {
if (log_p)
logger.info("close");
}
}
Rien n'est imprimé lorsque je fais une demande WS.Je ne sais même pas si le gestionnaire est appelé.
Comment voir les impressions définies dans le gestionnaire?
La solution
I'm not sure what Eclipse is generating for you, but here's one way to do it. Assume MyService
is the interface generated from the WSDL:
URL wsdlURL = new URL("...");
QName serviceName = new QName("...", "...");
Service service = Service.create(wsdlURL, serviceName);
HandlerResolver handlerResolver = new ClientHandlerResolver();
service.setHandlerResolver(handlerResolver);
MyService myService = service.getPort(MyService.class);
// invoke methods (operations) on myService
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow