0

我已经实现了网络服务:

@WebServiceClient(//parameters//)
@HandlerChain(file = "handlers.xml")
public class MyWebServiceImpl {...}

我还使用类列表实现了 ObjectFactory,用于创建我的请求和响应。例如类测试。

我需要得到响应的xml。

我尝试使用 JAX-WS SOAP 处理程序,所以我添加了这个@HandlerChain(file = "handlers.xml")注释。我的 handlers.xml 看起来像:

<?xml version="1.0" encoding="UTF-8"?>
<handler-chains xmlns="http://java.sun.com/xml/ns/javaee">
<handler-chain>
<handler>
<handler-class>java.com.webservice.service.LoggingHandler</handler-class>
</handler>
</handler-chain>
</handler-chains>

我的 LoggingHandler 类是:

import java.io.PrintWriter;
import java.util.Set;

import javax.xml.namespace.QName;
import javax.xml.soap.SOAPMessage;
import javax.xml.ws.handler.MessageContext;
import javax.xml.ws.handler.soap.SOAPMessageContext;

public class LoggingHandler implements javax.xml.ws.handler.soap.SOAPHandler<SOAPMessageContext>     {

    public void close(MessageContext messagecontext) {
    }

    public Set<QName> getHeaders() {
        return null;
    }

    public boolean handleFault(SOAPMessageContext messagecontext) {
        return true;
    }

    public boolean handleMessage(SOAPMessageContext smc) {
        Boolean outboundProperty = (Boolean) smc.get (MessageContext.MESSAGE_OUTBOUND_PROPERTY);

        if (outboundProperty.booleanValue()) {
            System.out.println("\nOutbound message:");
        } else {
        System.out.println("\nInbound message:");
        }

        SOAPMessage message = smc.getMessage();

        try {
        PrintWriter writer = new PrintWriter("soap_responce" + System.currentTimeMillis(), "UTF-8");
        writer.println(message);
        writer.close();
        message.writeTo(System.out);
        System.out.println("");   // just to add a newline
    } catch (Exception e) {
        System.out.println("Exception in handler: " + e);
    }
    return outboundProperty;   
}

}

我有创建请求的测试类,这里是代码的一部分:

MyWebServiceImpl impl = new MyWebServiceImpl(url, qName);
    ws = impl.getMyWebServicePort();
Test req = new Test();

我想在文件“soap_responce”+ System.currentTimeMillis() 中获得 xml 响应。但是甚至没有创建这样的文件。请建议如何获取 xml 响应,我是 Web 服务的新手,可能会做错事。谢谢

4

1 回答 1

1

恕我直言,使用 SOAP 处理程序非常适合此类任务。我会以同样的方式处理它。

我能够使用您的配置稍作修改来运行示例。结果,我能够看到生成的文件。如果您看不到它们,请检查您是否检查了正确的路径,例如使用:

File file = new File("soap_responce" + System.currentTimeMillis());
System.out.println(file.getAbsolutePath());

我改变的是:

  • package from java.com.webservice.service.LoggingHandlerto com.webservice.service.LoggingHandleras 禁止以 java 开头的包

完整的项目可以在这里找到: https ://github.com/destin/SO-answers/tree/master/SO-how-get-xml-responce-using-jax-ws-soap-handler

org.dpytel.jaxws.jaxws_java_first_jboss.client.Main 类展示了我如何获取和执行 Web 服务。

顺便提一句。当你有 WSDL 文件时,你不需要实现客户端存根和对象工厂等。你可以使用wsimport工具。您可以检查如何在提到的项目中使用它。

于 2013-10-17T21:17:44.793 回答