Spring Webservices向Soap Request添加元素

时间:2015-09-16 08:04:24

标签: java spring web-services soap

在我的java项目中,我使用Spring Webservices将xml消息发送到我的供应商提供的端点。 (他们要求我们这样做)

但是我注意到我的一个请求失败了。通过发布请求bin的请求进一步分析 - 我注意到某些元素正在添加到我的soap消息中,前缀为SOAP-ENV

我的问题是 - 是否可以使用spring webservices但没有将这些额外元素添加到我的soap消息中

代码调用Webservice

public void 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消息

 <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>

请求文件夹中的邮件

    <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>

由于 达明

1 个答案:

答案 0 :(得分:1)

您调用的Web服务不是SOAP Web服务,而是基于纯XML的Web服务。默认情况下,WebServiceTemplate假定您正在发送SOAP消息,因此会创建SaajSoapMessageFactory

如果您不想发送SOAP消息,则需要配置WebServiceTemplate以发送纯XML消息。为此,将DomPoxMessageFactory作为消息工厂添加到WebServiceTemplate。 (判断您使用WebServiceGateway基类的代码。

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

另见参考指南的this section