WS 작업이 실행 된 후 SoAphandler가 호출되지 않습니다
-
14-11-2019 - |
문제
나는 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
제휴하지 않습니다 StackOverflow