Web Services 连接到Web服务会导致出现com.sun.xml.internal.ws.client.客户端传输异常:服务器发送了HTTP状态代码200:好的

7rtdyuoh  于 2022-11-15  发布在  其他
关注(0)|答案(2)|浏览(400)

我使用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中。

mfpqipee

mfpqipee1#

问题出在我的url中多余的斜线上。我把url从https://somesite.com/mywsdl/?wsdl改成https://somesite.com/mywsdl?wsdl,问题就消失了。

vaqhlq81

vaqhlq812#

当您的客户端连接到的SOAP服务器发送带有content-typetext/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的同一类)

if (contentType != null && contentType.contains("text/html") && binding instanceof SOAPBinding) {
    throw new ClientTransportException(ClientMessages.localizableHTTP_STATUS_CODE(con.statusCode, con.statusMessage));
}

通常,当您收到来自SOAP服务器的回应时,应该会取得下列内容类型做为回应:

  • SOAP v1.1使用内容类型text/xml
  • SOAP v1.2使用内容类型application/soap+xml

当响应标记为HTML时,可能是以下问题之一:

  • 您的请求发往错误的端点,并且您会看到一些HTML状态页面(例如,SOAPUI也会在未知的模拟端点上执行此操作)
  • 您的请求对于给定的端点无效,并且服务器没有发送正确的SOAPFault
  • 您的请求有效,但服务器在处理它时遇到问题(例如,找不到HTTP 4xx或HTTP 5xx/HTML格式的错误页面。但这些页面通常没有代码200 OK),并且没有或无法发送正确的SOAPFault

在任何情况下,如果您要对此进行调试,第一步都应该是在SOAP客户端上启用以下vmoptions:

-Dcom.sun.xml.ws.transport.http.client.HttpTransportPipe.dump=TRUE
-Dcom.sun.xml.internal.ws.transport.http.client.HttpTransportPipe.dump=TRUE
-Dcom.sun.xml.ws.transport.http.HttpAdapter.dump=TRUE
-Dcom.sun.xml.internal.ws.transport.http.HttpAdapter.dump=TRUE
-Dcom.sun.xml.internal.ws.transport.http.HttpAdapter.dumpTreshold=999999

这将转储/记录整个HTTP请求+响应(头和正文)。通过这个,你可以根据端点和(可能的)HTML页面正文分析错误到底在哪里。可能是HTML,因为它也很可能是一个普通的SOAPFault XML,只是带有错误的内容类型头(如果服务器没有正确实现)。
有关此类SOAP问题的更多信息,您还可以阅读以下问题:

相关问题