문제

나는 SOAP WS (Doget)를 소비하는 서블릿이 있습니다.나는 비누 봉투 (또는 비누 메시지의 다른 것)를보고 싶습니다.이 코드를 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 별도의 클래스, 저는 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");
}
.

}

WS 요청을 할 때 인쇄되지 않습니다.핸들러가 호출되는지 여부를 알지 못합니다.

핸들러에 정의 된 인쇄물을 보는 방법은 무엇입니까?

도움이 되었습니까?

해결책

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
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top