当前位置: 首页 > 知识库问答 >
问题:

如何将Spring webserviceTemplate与@RequestWrapper信息结合起来?

暨宸
2023-03-14

为了能够轻松地测试我的SOAP客户机(通过利用MockWebServiceServer),我想使用Spring的WebServiceTemplate。

SOAPendpoint是.NET服务器。基于wsdl,我能够生成bean(主要是请求类)和endpoint接口。

生成的界面如下:

@WebService(targetNamespace = "http://Microsoft.ServiceModel.Samples", name = "IWcfRed")
@XmlSeeAlso({ObjectFactory.class, com.microsoft.schemas._2003._10.serialization.ObjectFactory.class})
public interface IWcfRed {

    @WebResult(name = "CallCheckXmlResult", targetNamespace = "http://Microsoft.ServiceModel.Samples")
    @Action(input = "http://Microsoft.ServiceModel.Samples/IWcfRed/CallCheckXml", output = "http://Microsoft.ServiceModel.Samples/IWcfRed/CallCheckXmlResponse")
    @RequestWrapper(localName = "CallCheckXml", targetNamespace = "http://Microsoft.ServiceModel.Samples", className = "samples.servicemodel.microsoft.CallCheckXml")
    @WebMethod(operationName = "CallCheckXml", action = "http://Microsoft.ServiceModel.Samples/IWcfRed/CallCheckXml")
    @ResponseWrapper(localName = "CallCheckXmlResponse", targetNamespace = "http://Microsoft.ServiceModel.Samples", className = "samples.servicemodel.microsoft.CallCheckXmlResponse")
    public java.lang.String callCheckXml(
        @WebParam(name = "xmlRequest", targetNamespace = "http://Microsoft.ServiceModel.Samples")
        java.lang.String xmlRequest
    );
}
Request myRequest=generateDummyRequest();
webServiceTemplate.marshalSendAndReceive(myRequest,new SoapActionCallback ("http://Microsoft.ServiceModel.Samples/IWcfRed/CallCheckXml"));

SOAPFaultClientException:反序列化操作“CallCheckXML”的请求消息正文时出错。OperationFormatter遇到无效得消息正文.应找到名为“CallCheckXML”、命名空间为“http://microsoft.serviceModel.samples”得节点类型“Element”.找到名为“Request”、命名空间为“”的节点类型“Element”

所以我的请求应该包装在CallCheckXml元素中。我知道这实际上是在生成的接口中定义的,@RequestWrapper注释中的信息,所以它是有意义的。

但我怎样才能让Spring为我做得更好呢?我需要在WebServiceMessageCallback中自己完成吗?或者我应该忘记webservicetemplate而转移到JaxWsPortProxyFactoryBean?

这两个解决方案中没有一个对我很有吸引力。如果webserviceTemplate是用于SOAP操作的Spring标准,那么我的猜测是我在这里遗漏了一些东西。

谢谢!

共有1个答案

桓风史
2023-03-14

结果表明,负责服务器的团队所做的SOAP建模确实是次优的(为了保持礼貌);实际上,我可以猜到使用默认的“microsoft”名称空间,直接取自一个示例,并不适应我们的上下文。

包装器类实际上正在生成,而我之前并没有注意到这一点。因此,我通过ObjectFactory实例化了包装类,但因为该包装甚至不接受域对象作为属性,所以我首先必须将域对象自己编组到一个JAXBElement,然后在包装器上设置结果。最后,在Spring中配置的封送器将启动,并将包装类封送到适当的查询中。

和我的反应一样,经历了两次解组...

 类似资料:
  • 我想在React项目的后端合并一个使用语音识别的Python文件。 这里我有一段使用语音识别的Python代码: 我尝试在react组件中导入文件,如下所示: 在这里,我尝试将我的按钮链接到Python文件中的函数: 我收到了它未能编译的消息以及以下内容: 我能做些什么来使这个工作?

  • 我使用https://doc.akka.io/docs/alpakka-kafka/current/consumer.html从kafka使用数据,如下所示: 接下来,我将通过akka http websocket客户端将收到的结果转发到webserver 以下是如何构建websocket客户端: 我有两个问题: > 如何将消费者和websocket客户端组合成一个流,并让它将消息发送到Web服务

  • 问题内容: 我已经使用Python asyncio和aiohttp成功构建了一个RESTful微服务,该服务可侦听POST事件以收集来自各种供料器的实时事件。 然后,它构建一个内存结构,以将事件的最后24小时缓存在嵌套的defaultdict / deque结构中。 现在,我想定期检查该结构到磁盘的位置,最好使用pickle。 由于内存结构可以大于100MB,因此我希望避免在检查点结构所需的时间上

  • 问题内容: 如何创建使芹菜任务看起来像的包装器?还是有更好的方法与Celery集成? Celery的创建者@asksol这样说: 将Celery用作异步I / O框架之上的分布式层是很常见的(提示:将CPU绑定的任务路由到prefork worker意味着它们不会阻塞事件循环)。 但是我找不到任何专门针对框架的代码示例。 问题答案: 如官方网站上所述,这可以通过Celery 5.0版实现: htt

  • 我有一个(Spring开机/Spring云)应用程序(微服务'MS'架构)与Netflix工具构建,我想将其部署在kubernetes集群(一个主和2个小跟班),以从其编排事实中获得优势。 顺便说一下,我在集群上创建了一个库贝-dns服务,我还尝试用3个Pod挂载一个eureka服务(名为eurekaservice)。另一方面,我运行了一个带有下一个eureka配置的微服务: 好消息是集群上的每个