【发布时间】:2015-11-17 15:38:33
【问题描述】:
我需要有关调用 Web 服务的帮助。
我用org.springframework.ws.client调用WS,代码如下:
Response response = (Response) getWebServiceTemplate().marshalSendAndReceive(
"http://ip:port/DefaultRequestListener?workflow=WsdlCPF&soapAction=Import",
request,
new SoapActionCallback("http://ip:port/DefaultRequestListener?workflow=WsdlCPF&soapAction=Import"));
我还可以使用 SOAP UP 使用此链接http://ip:port/DefaultRequestListener?workflow=WsdlCPF&soapAction=Import(看起来很奇怪)调用 WS 并接收响应。它工作正常。
从 IDE 运行代码后,我收到下一个堆栈跟踪:
Exception in thread "main" java.lang.IllegalStateException: Failed to execute CommandLineRunner
at org.springframework.boot.SpringApplication.runCommandLineRunners(SpringApplication.java:677)
at org.springframework.boot.SpringApplication.afterRefresh(SpringApplication.java:693)
at org.springframework.boot.SpringApplication.run(SpringApplication.java:322)
at org.springframework.boot.SpringApplication.run(SpringApplication.java:969)
at org.springframework.boot.SpringApplication.run(SpringApplication.java:958)
at com.mayacomp.feeder.Application.main(Application.java:33)
Caused by: org.springframework.ws.soap.SoapMessageCreationException: Could not create message from InputStream: Invalid Content-Type:text/html. Is this an error message instead of a SOAP response?; nested exception is com.sun.xml.internal.messaging.saaj.SOAPExceptionImpl: Invalid Content-Type:text/html. Is this an error message instead of a SOAP response?
at org.springframework.ws.soap.saaj.SaajSoapMessageFactory.createWebServiceMessage(SaajSoapMessageFactory.java:216)
at org.springframework.ws.soap.saaj.SaajSoapMessageFactory.createWebServiceMessage(SaajSoapMessageFactory.java:60)
at org.springframework.ws.transport.AbstractWebServiceConnection.receive(AbstractWebServiceConnection.java:92)
at org.springframework.ws.client.core.WebServiceTemplate.doSendAndReceive(WebServiceTemplate.java:611)
at org.springframework.ws.client.core.WebServiceTemplate.sendAndReceive(WebServiceTemplate.java:555)
at org.springframework.ws.client.core.WebServiceTemplate.marshalSendAndReceive(WebServiceTemplate.java:390)
at com.mayacomp.feeder.Client.createApplication(ExternalChannelClient.java:133)
at com.mayacomp.feeder.Application.lambda$0(Application.java:45)
at org.springframework.boot.SpringApplication.runCommandLineRunners(SpringApplication.java:674)
... 5 more
Caused by: com.sun.xml.internal.messaging.saaj.SOAPExceptionImpl: Invalid Content-Type:text/html. Is this an error message instead of a SOAP response?
at com.sun.xml.internal.messaging.saaj.soap.MessageImpl.identifyContentType(Unknown Source)
at com.sun.xml.internal.messaging.saaj.soap.MessageImpl.<init>(Unknown Source)
at com.sun.xml.internal.messaging.saaj.soap.ver1_1.Message1_1Impl.<init>(Unknown Source)
at com.sun.xml.internal.messaging.saaj.soap.ver1_1.SOAPMessageFactory1_1Impl.createMessage(Unknown Source)
at org.springframework.ws.soap.saaj.SaajSoapMessageFactory.createWebServiceMessage(SaajSoapMessageFactory.java:188)
... 13 more
所以根本问题是:
Invalid Content-Type:text/html. Is this an error message instead of a SOAP response?
您能否推荐一些解决方法来解决此问题? 如果需要,我已准备好获取任何其他信息。
更新 据我了解,问题在于接下来的事情:
在客户端发送的请求中我有:
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/">
<SOAP-ENV:Header/>
<SOAP-ENV:Body>
<ns3:request xmlns:ns3="http://mayacom/Generic/Ws">
但应该有:
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ws="http://mayacom/Generic/Ws">
<soapenv:Header/>
<soapenv:Body>
<ws:request>
如何设置?
@Bean
public Jaxb2Marshaller marshaller() {
Jaxb2Marshaller marshaller = new Jaxb2Marshaller();
marshaller.setContextPath("com.mayacomp.feeder.Client");
return marshaller;
}
@Bean
public ExternalChannelClient externalChannelClient(Jaxb2Marshaller marshaller) {
ExternalChannelClient client = new ExternalChannelClient();
client.setDefaultUri("http://ip:port/DefaultRequestListener?workflow=WsdlCPF&soapAction=Import");
client.setMarshaller(marshaller);
client.setUnmarshaller(marshaller);
return client;
}
【问题讨论】: