(关于这个问题的后续处理:Getting raw XML response from Java web service client)如何将数据从SOAP处理程序传回web服务客户端?
我有一个SOAP消息处理程序能够获取Web服务响应的原始XML。我需要将这个XML放入web服务客户端,以便在发送它之前对响应执行一些XSL转换。我很难找出从SOAP处理程序获取数据的好方法,该处理程序捕获传入消息,并使原始XML可用于生成(来自WSDL)Web服务客户端。任何想法,如果这是可行的?
我想出这样的事情:
public class CustomSOAPHandler implements javax.xml.ws.handler.soap.SOAPHandler<javax.xml.ws.handler.soap.SOAPMessageContext>
{
private String myXML;
public String getMyXML()
{
return myXML;
}
...
public boolean handleMessage(SOAPMessageContext context)
{
...
myXML = this.getRawXML(context.getMessage());
}
//elsewhere in the application:
...
myService.doSomething(someRequest);
for (Handler h: ((BindingProvider)myService).getBinding().getHandlerChain())
{
if (h instanceof CustomSOAPHandler)
{
System.out.println("HandlerResult: "+ ((CustomSOAPHandler)h).getMyXML());
}
}
在非常简单的测试,这似乎工作。但是这个解决方案有点像一个便宜的黑客。我不喜欢将原始XML设置为链处理程序的成员,我有一种直觉认为这违反了许多其他最佳实践。有没有人有一个更优雅的方式来做到这一点?
你可以在HttpSession中设置一个DOM对象吗? – davidfmatheson 2012-08-18 19:38:10
@davidfmatheson:也许,但为什么我会使用DOM对象而不是字符串,这正是我真正想要的? – FrustratedWithFormsDesigner 2012-08-20 13:06:43