Java 无法从给定源创建信封
我试图使用Spring ws 2.2.2发行版的org.springframework.ws.client.core.WebServiceTemplate类来使用基于SOAP的web服务,如下所示:Java 无法从给定源创建信封,java,spring,web-services,soap,Java,Spring,Web Services,Soap,我试图使用Spring ws 2.2.2发行版的org.springframework.ws.client.core.WebServiceTemplate类来使用基于SOAP的web服务,如下所示: webServiceTemplate.setDefaultUri(uri); webServiceTemplate.setMessageSender(new SOAPMessageSenderWithAuth()); res = (RESPONSE) webServiceTemplate.marsh
webServiceTemplate.setDefaultUri(uri);
webServiceTemplate.setMessageSender(new SOAPMessageSenderWithAuth());
res = (RESPONSE) webServiceTemplate.marshalSendAndReceive(request);
public MYDATAResponse createCustomer(final MYDATA request)
{
return (MYDATAResponse) soapWebServiceClient.sendAndReceive((REQUEST) request, getCreateCustomerURI());
}
该请求是使用从web服务的WSDL文件生成的类构建的
已使用SOAP UI成功测试了Web服务,但当使用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>
如果在解析来自服务的响应时遇到异常,请尝试从SOAPUI发送请求,并检查它是否正常工作。 如果它在soapui中工作,而不是在这里,那么您没有得到正确的响应,这可能是因为请求不正确。
在我的例子中,问题是我的端点url在代码中由“?wsdl”组成“。删除后效果非常好。在构建模板后,为什么还要处理属性呢。您不应该在配置了默认uri或消息发送者之后设置它。删除设置并使用
webServiceTemplate.marshalSendAndReceive(uri,request)
方法。谢谢您的提示!我将对此进行调整,但SAAJ0511和SAAJ0514异常仍然存在…您没有提到异常编号,那么这是什么异常…看起来您只是发送了错误的对象,但没有显示足够的代码。首先:感谢您的帮助!例外编号为SAAJ0514和SAAJ0511。所以您认为我尝试发送的对象与实际的WSDL方案不匹配?我将尝试从相应的WSDL文件再次为请求生成类
public MYDATAResponse createCustomer(final MYDATA request)
{
return (MYDATAResponse) soapWebServiceClient.sendAndReceive((REQUEST) request, getCreateCustomerURI());
}