我正在尝试使用Spring WS 2.2.2发行版的类 org.springframework.ws.client.core.WebServiceTemplate 来使用基于SOAP的Web服务,如下所示:
webServiceTemplate.setDefaultUri(uri);
webServiceTemplate.setMessageSender(new SOAPMessageSenderWithAuth());
res = (RESPONSE) webServiceTemplate.marshalSendAndReceive(request);
请求是使用从Web服务的WSDL文件生成的类构建的。
使用SOAP UI成功测试了webservice,但是当使用Java访问它时,异常“ SoapMessageCreationException:无法从InputStream创建消息:无法从给定源创建信封(SAAJ0511) “和” 无法从给定来源创建信封,因为根元素未命名为“信封”(SAAJ0514) “。
有没有人对此例外有任何建议?
提前致谢!
webServiceTemplate 的Spring bean定义如下:
<bean id="webServiceTemplate" class="org.springframework.ws.client.core.WebServiceTemplate"
p:marshaller-ref="jaxbMarshaller"
p:unmarshaller-ref="jaxbMarshaller"
p:defaultUri="...">
<constructor-arg ref="messageFactory"/>
<property name="messageSender">
<bean class="org.springframework.ws.transport.http.HttpComponentsMessageSender">
<property name="credentials">
<bean class="org.apache.http.auth.UsernamePasswordCredentials">
<constructor-arg value="..."/>
<constructor-arg value="..."/>
</bean>
</property>
</bean>
</property>
</bean>
例外是:
org.springframework.ws.soap.SoapMessageCreationException:无法从InputStream创建消息:无法从给定的源创建信封:;嵌套异常是com.sun.xml.internal.messaging.saaj.SOAPExceptionImpl:无法从给定源创建信封
这是使用Spring WS模板的Web服务客户端的类:
import javax.annotation.Resource;
import org.apache.log4j.Logger;
import org.springframework.ws.client.WebServiceIOException;
import org.springframework.ws.client.core.WebServiceTemplate;
import com.myproject.soap.client.services.SOAPWebServiceClient;
/**
*
* @param <REQUEST>
* @param <RESPONSE>
*/
public class DefaultSOAPWebServiceClient<REQUEST, RESPONSE> implements SOAPWebServiceClient<REQUEST, RESPONSE>
{
private final static Logger LOG = Logger.getLogger(DefaultSOAPWebServiceClient.class.getName());
@Resource(name = "webServiceTemplate")
private WebServiceTemplate webServiceTemplate;
@Override
public RESPONSE sendAndReceive(final REQUEST request, final String uri)
{
LOG.info("SOAP URL-" + uri);
LOG.info("REQUEST-" + request.toString());
RESPONSE res = null;
try
{
res = (RESPONSE) webServiceTemplate.marshalSendAndReceive(uri, request);
}
catch (final WebServiceIOException e)
{
e.printStackTrace();
LOG.error("Service with URI: " + uri + " is unreachable");
}
return res;
}
}
方法 sendAndReceive 的调用如下:
public MYDATAResponse createCustomer(final MYDATA request)
{
return (MYDATAResponse) soapWebServiceClient.sendAndReceive((REQUEST) request, getCreateCustomerURI());
}
答案 0 :(得分:0)
如果在解析服务响应时遇到异常,请尝试从soap UI发送请求并检查它是否正常工作。 如果它在肥皂ui工作而不在这里,那么你没有得到正确的反应,这可能是因为不正确的请求。 在我的情况下,问题是我的端点url在代码中由&#34;?wsdl&#34;组成。移除后工作完全正常。