简体   繁体   English

Spring Webservices向Soap请求添加元素

[英]Spring Webservices Adding Elements to Soap Request

In my java project, I am using Spring Webservices to send an xml message to an endpoint that my vendor has supplied. 在我的Java项目中,我正在使用Spring Webservices向供应商提供的端点发送xml消息。 (They asked us to do it this way ) (他们要求我们这样做)

However I noticed 1 of my requests was failing. 但是我注意到我的请求之一失败了。 On further analysis by posting the request to request bin - I noticed that certain elements were being adding to my soap message with the prefix of SOAP-ENV 通过发布请求到请求bin的进一步分析-我注意到某些元素正在添加到带有SOAP-ENV前缀的我的soap消息中

My question is - is it possible to use spring webservices but not have these extra elements added to my soap message 我的问题是-是否可以使用spring webservices但不将这些额外的元素添加到我的soap消息中

Code To Call Webservice 调用Web服务的代码

public void callWebservice(String corpId) { 公共无效的callWebservice(String corpId){

StringBuilder soapMessage = FileUtil.readFileContent(BASE_TALEO_CONFIG_LOCATION + "/CallWebservice.xml");

StreamSource source = new StreamSource(new StringReader(soapMessage.toString()));
ByteArrayOutputStream bos = new ByteArrayOutputStream();
StreamResult result = new StreamResult(bos);

boolean webserviceResult = webServiceTemplate.getWebServiceTemplate().sendSourceAndReceiveToResult(baseURL, source, result);
System.out.println("webserviceResult:" + webserviceResult);

} }

XML Message I want to send 我要发送的XML消息

 <retrieve:retrieveEntities xmlns:retrieve="http://www.test/2009/04/retrieve">
  <retrieve:mappingVersion>http://www.test.com/2009/04</retrieve:mappingVersion>
  <retrieve:query>    
  </retrieve:query>
  <retrieve:attributes />
</retrieve:retrieveEntities>

Message in Request Bin 请求箱中的消息

    <SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/">
<SOAP-ENV:Header/>
<SOAP-ENV:Body>
<retrieve:retrieveEntities xmlns:retrieve="http://www.test/2009/04/retrieve"><retrieve:mappingVersion>http://www.test.com/2009/04</retrieve:mappingVersion><retrieve:query/>
<retrieve:attributes/>
</retrieve:retrieveEntities>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>

Thanks Damien 谢谢达米安

The web service you are calling isn't a SOAP web service but a plain XML based web service. 您要调用的Web服务不是SOAP Web服务,而是基于XML的普通Web服务。 By default the WebServiceTemplate assumes that you are sending SOAP messages and as such creates a SaajSoapMessageFactory . 默认情况下, WebServiceTemplate假定您正在发送SOAP消息,因此将创建一个SaajSoapMessageFactory

If you don't want to send SOAP messages you need to configure the WebServiceTemplate to send plain XML messages. 如果您不想发送SOAP消息,则需要将WebServiceTemplate配置为发送纯XML消息。 For this add the DomPoxMessageFactory as message factory to the WebServiceTemplate . 为此,将DomPoxMessageFactory作为消息工厂添加到WebServiceTemplate (Judging on the code you are using the WebServiceGateway base class. (根据您正在使用WebServiceGateway基类的代码进行判断。

<bean id="yourGateway" class="your class">
    <property name="messageFactory">
        <bean class="org.springframework.ws.pox.dom.DomPoxMessageFactory" />
    </property>
</bean>

See also this section of the reference guide. 另请参阅参考指南的本部分

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM