Pregunta

Tengo un servlet que también consume SAPA SOAP WS (en DOGGET).Quiero ver el sobre de jabón (o cualquier otra cosa en el mensaje de jabón).Añadir este código a mi clase 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 Una clase separada, tengo mi 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");
}

}

No se imprime nada cuando hago una solicitud WS.Ni siquiera sé si se llama Handler.

¿Cómo ver las impresiones definidas en el controlador?

¿Fue útil?

Solución

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
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top