Domanda

Ho un servlet che consuma anche Sapone ws (in Doget).Voglio vedere la busta di sapone (o qualsiasi altra cosa nel messaggio di sapone).Ho aggiunto questo codice alla mia classe 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 classe separata, ho il mio 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");
}
.

}

Niente è stampato quando faccio la richiesta WS.Non so nemmeno se viene chiamato il gestore.

Come vedere le stampe definite nel gestore?

È stato utile?

Soluzione

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
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top