Java 执行WS操作后未调用SoapHandler

Java 执行WS操作后未调用SoapHandler,java,web-services,servlets,soaphandler,Java,Web Services,Servlets,Soaphandler,我有一个servlet,它也使用soapws(在doGet中)。我想查看SOAP信封(或SOAP消息中的任何其他内容)。我将此代码添加到我的servlet类中: class ClientHandlerResolver implements HandlerResolver { public List<Handler> getHandlerChain(PortInfo port_info) { List<Handler> hchain = new Ar

我有一个servlet,它也使用soapws(在doGet中)。我想查看SOAP信封(或SOAP消息中的任何其他内容)。我将此代码添加到我的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;
    }
}
}

}

当我提出WS请求时,没有打印任何内容。我甚至不知道handler是否被调用


如何查看处理程序中定义的打印输出

我不确定Eclipse为您生成了什么,但这里有一种方法。假设
MyService
是从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

您还没有展示如何将处理程序解析器绑定到服务调用中。您是否使用类似于
javax.xml.ws.Service.setHandlerResolver
?嗯,我没有类似的东西。我应该把它放在哪里,作为webservice调用的参数?调用该服务的代码是什么样子的?您是否使用
服务
类?我只是创建MyService\u ServiceLocator和MyService\u端口对象,然后调用对MyService\u端口对象的操作,如p.getApples();我为WS-client编写的所有代码都是从Eclipse.Aha中的WSDL生成的,我发现我应该在我的服务对象上调用setHandlerResolver()。问题是在我生成的Eclipse生成的类中没有这样的方法。Eclipse生成的Axis1代码不允许我设置HandlerResolver。然后我使用了CLI中的wsiimport工具(在JDK6代码中生成JAX-WSRI2.1.6),现在我可以使用处理程序了。
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");
}
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