2010-12-03 233 views
4

我有一个Spring WS客户端。我通过wsimport生成了WSDL存​​根。Spring WS无效的内容类型

当我尝试发送一个请求,我得到一个无效的内容类型异常:

重度:SAAJ0537:无效的内容类型。可能是错误消息而不是SOAP消息 线程“main”中的异常org.springframework.ws.soap.SoapMessageCreationException:无法从InputStream创建消息:无效的Content-Type:text/html。这是一个错误消息,而不是SOAP响应?嵌套的异常是com.sun.xml.messaging.saaj.SOAPExceptionImpl:无效的Content-Type:text/html。这是一个错误消息,而不是SOAP响应?

这是表明我发送的消息具有无效的内容类型,或者收到的响应具有无效的内容类型?如果它在客户端,我如何设置内容类型?

我试图通过Soap UI嘲笑Web服务。我能够发送和接收正确的答复。

编辑:

在我的日志,它表明该请求被发送:

DEBUG [org.springframework.ws.client.MessageTracing.sent] - 发送的请求

然后我得到这个例外:

线程“主”org.springframework.ws.soap.SoapMes异常sageCreationException:

回答

5

问题已解决。

原来我没有发送任何SOAP内容。 SOAP标头设置正确。但是SOAP体是空的。要解决这个问题,我必须附上我要求的内容。

前:

GetDeletedRequest request = new GetDeletedRequest(); 
JAXBElement res = (JAXBElement) webServiceTemplate.marshalSendAndReceive(request, new WebServiceMessageCallback() {...} 

后:

GetDeletedRequest request = new GetDeletedRequest(); 
request.setGetDeletedFilter(deleteFilter); // This is the content that I'm missing! 
JAXBElement res = (JAXBElement) webServiceTemplate.marshalSendAndReceive(request, new WebServiceMessageCallback() {...} 

这个错误是由我忽视,因为我是专注于移植的AXIS 1.x的客户端实现一个Spring WS实现。

有些人,包括Arjen Poustma,建议使用tcpmon来嗅探发送的内容。我没有设法正确配置和运行(这是另一个无关的问题)。但是这给了我一个想法,首先检查我的应用程序发送了什么。

我环顾四周,在春季论坛上看到类似的问题,关于无效内容类型WS Client using JAXB for marshalling。最后的海报建议使用CommonsHttpMessageSender,就像他在Web Service Client with Spring-WS(这是一个很好的例子)中提供的例子。随着CommonsHttpMessageSender它能够打印出我的整个SOAP信封:

<property name="messageSender"> 
    <bean class="org.springframework.ws.transport.http.CommonsHttpMessageSender" /> 
</property> 

我记录我在这里的经历,因为我知道有一天会有另一个人喜欢我,谁将会有同样的问题。