如何将数据从SOAP处理程序传递回Web服务客户端?

Fru*_*ner 7 java xml web-services soaphandler

(关注这个问题:从Java Web服务客户端获取原始XML响应)

我有一个SOAP消息处理程序,它能够获取Web服务响应的原始XML.我需要将这个XML放到webservice客户端中,这样我就可以在响应之前对响应执行一些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());
        }
    }
Run Code Online (Sandbox Code Playgroud)

在非常简单的测试中,这似乎有效.但这个解决方案感觉有点像廉价黑客.我不喜欢将原始XML设置为链处理程序的成员,我有一种直觉,这违反了许多其他最佳实践.有没有人有更优雅的方式这样做?

Fru*_*ner 2

解决方案是使用 JAXB 将对象转换回 XML。我其实不想这样做,因为让 Web 服务客户端接收 XML、将其转换为 POJO、然后将该 POJO 转换回 XML 似乎是多余的,但它确实有效。