我已实施网络服务:
@WebServiceClient(//parameters//)
@HandlerChain(file = "handlers.xml")
public class MyWebServiceImpl {...}
此外,我已经实现了ObjectFactory以及用于创建请求和响应的类列表。对于示例类测试。
我需要获得xml的响应。
我尝试使用JAX-WS SOAP处理程序,因此我添加了此@HandlerChain(file = "handlers.xml")
anotation。
我的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();
我想在文件中获取xml响应&#34; soap_responce&#34; + System.currentTimeMillis()。但是这样的文件甚至都没有创建。请建议如何获取xml响应,我是Web服务的新手,可能会做错事。谢谢
答案 0 :(得分:1)
使用SOAP处理程序是恕我直言,完全可以完成这项任务。我会以同样的方式接近它。
我能够使用您的配置进行微小修改以使示例运行。结果我能够看到生成的文件。如果您看不到它们,请检查您是否检查了正确的路径,例如使用:
File file = new File("soap_responce" + System.currentTimeMillis());
System.out.println(file.getAbsolutePath());
我改变的是:
java.com.webservice.service.LoggingHandler
到com.webservice.service.LoggingHandler
的软件包,因为以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
工具。您可以在提到的项目中查看如何使用它。