当前位置: 首页 > 面试题库 >

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

颛孙喜
2023-03-14
问题内容

我有一个SOAP消息处理程序,它能够获取Web服务响应的原始XML。我需要将此XML放入Web服务客户端,以便可以在响应发送之前对响应执行一些XSL转换。我在寻找一种从SOAP处理程序获取数据的好方法方面遇到了麻烦,该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设置为链处理程序的成员,而且我有一种直觉,认为这违反了许多其他最佳实践。有人有更优雅的方法吗?


问题答案:

解决方案是使用JAXB将对象转换回XML。我并不是真的想要这样做,因为让Web服务客户端接收XML,将其转换为POJO,只是将POJO转换回XML似乎是多余的,但是它确实可行。



 类似资料:
  • 问题内容: 因此,我阅读了android AIDL文档,并对RPC在活动和服务之间的工作方式有一个大致的了解。但是,对于我的应用程序来说,实现这些功能似乎有些麻烦:基本上,我想向Service传递一个不错的处理程序,以便其线程可以将数据传递给Activity。目前,我正在通过使用静态公共成员(黑客)来解决此问题,但我更希望仅在服务的启动Intent中传递Handler对象。例如,我可以在创建时轻松

  • 我创建了一个应用程序,按照指南http://spring.io/guides/gs/producing-web-service/ 执行Web服务“getCountry”工作正常,但现在我需要在执行getCountry之前拦截SOAP消息。 我创建了一个实现“SOAPHandler”的类,但在将请求传递给getCountry之前,我必须告诉spring boot使用这个处理程序。 知道怎么做吗?

  • 问题内容: 我试图将我的数据库对象传递给我的处理程序,而不是具有全局对象。但是我不知道这是否可行,我使用的是Gorilla Mux软件包,我可以看到它把闭包作为第二个参数。 然后定义了我可以使用的参数,理想情况下,我希望拥有这样的第三个参数。 有解决方法吗?还是我需要一个全局数据库对象?我是Go的新手,所以请详细说明可能的答案。 问题答案: 欢迎来到。 可以使用全局变量,特别是数据库对象。 但是,

  • 我有一个非常简单的SOAP客户机,它是我在wsimport实用程序的帮助下针对自己的web服务创建的。客户端工作得非常好,但是当我添加一个处理程序时就崩溃了。下面是我的工作客户端,它将“1”打印到控制台... 现在,有趣的部分来了,这是同一个客户机,处理程序实现后面跟着输出... 输出 请注意,在输出中,在异常之前打印了3行,这些来自我的处理程序类,这证明它已注册并正常工作。我意识到这是一些有限的

  • 我试图通过“网络在行动”这本书来掌握网络概念。 在我看来,有几个概念解释得不太好或太模糊。因此,我想我会来这里就这些话题做一些明确的解释。 渠道管道: 所以我有一个这样的渠道管道: 对于channelInitializer,从概念上讲,我会假设该过程将按以下顺序进行:

  • 我为RSocket消息编写了一个小演示 问题是我无法访问endpoint,我从服务器收到以下异常: 客户端:配置: 我非常肯定这与新的函数有关,因为它接受了一个新的参数,所以我将它设置为application/json,但似乎不起作用 堆栈跟踪: