我使用sun-jaxws创建了一个wsdl。我在Netbeans中创建了一个Web服务客户端,并成功地调用了wsdl Web服务。然后我配置了我的nginx服务器以通过https访问Web服务。当我通过https调用服务时,我得到了以下错误:com.sun.xml.internal.ws.client.ClientTransportException: The server sent HTTP status code 200: OK
我的wsdl可以通过地址https://somesite.com/mywsdl/?wsdl
获得。在wsdl中,我看到这样的服务位置:
<service name="GenericService">
<port name="GenericServicePort" binding="tns:GenericServicePortBinding">
<soap:address location="https://somesite.com:443/mywsdl"/>
</port>
</service>
我不知道问题是在我的nginx配置中,还是在我的jaxws中。
2条答案
按热度按时间mfpqipee1#
问题出在我的url中多余的斜线上。我把url从
https://somesite.com/mywsdl/?wsdl
改成https://somesite.com/mywsdl?wsdl
,问题就消失了。vaqhlq812#
当您的客户端连接到的SOAP服务器发送带有
content-type
text/html
的响应时,您通常会得到ClientTransportException: The server sent HTTP status code 200: OK
。我们可以在下面的代码中看到:
com.sun.xml.ws.transport.http.client.HttpTransportPipe
(来自jaxws-rt
,或来自internal
JRE包com.sun.xml.internal.ws.transport.http.client.HttpTransportPipe
的同一类)通常,当您收到来自SOAP服务器的回应时,应该会取得下列内容类型做为回应:
text/xml
application/soap+xml
当响应标记为HTML时,可能是以下问题之一:
SOAPFault
SOAPFault
在任何情况下,如果您要对此进行调试,第一步都应该是在SOAP客户端上启用以下vmoptions:
这将转储/记录整个HTTP请求+响应(头和正文)。通过这个,你可以根据端点和(可能的)HTML页面正文分析错误到底在哪里。可能是HTML,因为它也很可能是一个普通的SOAPFault XML,只是带有错误的内容类型头(如果服务器没有正确实现)。
有关此类SOAP问题的更多信息,您还可以阅读以下问题: