2012-12-18 60 views
0

我使用WSDL編輯器所做的WSDL文件在Eclipse中。我製作了使用CXF的服務器(maven插件方式)。有一個簡單的函數getCities(),我從C#中成功調用。但是我無法從Java客戶端調用它。消費使用com.sun.xml.ws.client.ClientTransportException CXF結果從Java Web服務:服務器發送HTTP狀態碼200:OK

@WebResult(name = "out", targetNamespace = "") 
@RequestWrapper(localName = "getCities", targetNamespace = "http://www.example.org/BookingServer/", className = "org.example.bookingserver.GetCities") 
@ResponseWrapper(localName = "getCitiesResponse", targetNamespace = "http://www.example.org/BookingServer/", className = "org.example.bookingserver.GetCitiesResponse") 
@WebMethod(action = "http://www.example.org/BookingServer/getCities") 
public java.util.List<org.example.bookingserver.Cities> getCities(); 

這是這樣,我如何調用服務(再次使用Apache的CXF):

QName SERVICE_NAME = new QName("http://www.example.org/BookingServer/", "BookingServer"); 
URL wsdlURL = BookingServer_Service.WSDL_LOCATION; 
BookingServer_Service ss = new BookingServer_Service(wsdlURL, SERVICE_NAME); 
BookingServer port = ss.getBookingServerSOAP(); 
java.util.List<org.example.bookingserver.Cities> result = port.getCities(); 

,但我得到javax.ejb.EJBException ... Caused by: com.sun.xml.ws.client.ClientTransportException: The server sent HTTP status code 200: OK

我想不出有關此異常谷歌任何東西。

我也嘗試過使用NetBeans Web服務客戶端GUI,但例外的是一樣的。當我在服務器中放置斷點時,它永遠不會中斷。所以問題出在客戶端。

任何人都知道我在做什麼錯?

+0

難道你不打,你以爲你是SOAP終點,而是得到一個正常的網頁回來?我會嘗試在中間放置一個代理並記錄您的請求和響應,以查看HTTP層發生了什麼。 – Charlie

+0

你說得對。我看到連接轉到www.example.org IP。但我應該如何強制Java連接到本地主機?我從Eclipse中生成的WSDL生成服務客戶端 - 所以它應該在wsdl中指定? –

+0

我試圖改變肥皂:地址本地URL,但是我得到另一個異常:'產生的原因:com.sun.xml.ws.fault.ServerSOAPFaultException:客戶端從服務器接收SOAP錯誤:無法找到{HTTP分派方法:// www.example.org/BookingServer/}getCities請參閱服務器日誌,查找有關該failure.' –

回答

0

我不得不改變肥皂:地址和然後的主要問題是,我使用GUI嚮導時,通過改寫爲web服務所產生@WebService註釋由CXF生成的接口的@WebService註釋。因此webservice的位置是不同的。

+1

BTW的確切cuase更多詳細信息:如果你想以編程方式更改SE,您可以用 ((BindingProvider)端口) .getRequestContext()。put(BindingProvider.ENDPOINT_ADDRESS_PROPERTY,...); – Drunix