簡體   English   中英

連接到 web 服務導致 com.sun.xml.internal.ws.client.ClientTransportException:服務器發送 HTTP 狀態碼 200

[英]Connecting to webservice results in com.sun.xml.internal.ws.client.ClientTransportException: The server sent HTTP status code 200: OK

我使用 sun-jaxws 制作了 wsdl。 我在Netbeanse中創建了web服務客戶端,並成功調用了wsdl web服務。 然后我將我的 nginx 服務器配置為通過 https 訪問 web 服務。 When I call service over https I get error 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 中。

問題在於我網址中的額外斜線。 我將網址從https://somesite.com/mywsdl/?wsdl更改為https://somesite.com/mywsdl?wsdl ,問題就消失了。

您通常會收到ClientTransportException: The server sent HTTP status code 200: OK當您的客戶端連接到的 SOAP 服務器發送content-type text/html的響應時。

We can see that in the following code: com.sun.xml.ws.transport.http.client.HttpTransportPipe (from jaxws-rt , or the same class from the internal JRE package 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
  • 您的請求有效,但服務器在處理它時遇到問題(例如 HTTP4xx 或 HTTP5xx 未找到/錯誤頁面為 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,只是內容類型錯誤 header(如果服務器未正確實現)。

有關此類 SOAP 問題的更多信息,您還可以閱讀以下問題:

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM