2013-03-17 45 views
0

我正在嘗試Apache最簡單的「Hello World」webservice(http://cxf.apache.org/docs/a-simple-jax-ws-service.html);我有意改變它一點,以瞭解更多關於如何做事情而不是僅僅複製他們所有的代碼。簡單的網絡服務:把endpointname,servicename等放在一起

我的服務實現指定它實現了在包界面中的「硬件」:

@WebService(endpointInterface = "hw.HelloWorld", serviceName = "HelloWorld") 

說,「發佈」 Web服務(這是我收集手段作爲服務器爲它工作),該程序具有執行在自己的(完全正確)包裝:

HelloWorldImpl implementor = new hwimpl.HelloworldImpl(); 
Endpoint.publish("http://localhost:9000/helloworld", implementor); 

,然後睡5分鐘,在此期間,指示說,擺在瀏覽器的URL顯示WSDL。這很有效。

http://localhost:9000/helloWorld?wsdl 

我的客戶有:

private static final QName SERVICE_NAME 
    = new QName("http://server.hw.demo/", "HelloWorld"); 
private static final QName PORT_NAME 
    = new QName("http://server.hw.demo/", "HelloWorldPort"); 

// the following in a method, of course 
String endpointAddress = "http://localhost:9000/helloWorld"; 
service.addPort(PORT_NAME, SOAPBinding.SOAP11HTTP_BINDING, endpointAddress); 
HelloWorld hw = service.getPort(HelloWorld.class); 
System.out.println(hw.sayHi("Albert")); 

我不知道SERVICE_NAME和port_name中指如何與我的服務。 「server.hw.demo」字符串來自示例,並且不對應於我的代碼中的包,或者「反轉」的包似乎用於名稱空間;他們應該嗎?他們對應什麼?我的代碼中沒有任何東西,除了這裏,使用「server.hw.demo」;那個字符串應該是什麼?

難道我的實現和我的接口是在不同的類嗎?

我的客戶不工作,我發佈這個問題,但它很長,沒有人迴應。我在刺探理解這一部分;在我看來,這是最可能的罪魁禍首。如果我知道如何,我會刪除其他問題。

+0

好吧,我得到了客戶通過改變工作「 server.hw.demo「改爲」hw「,這是我的界面的完整軟件包名稱。我仍然想知道什麼是關係 - 示例代碼需要一個包a.b.c,在「QName」中指定c.b.a - 我知道這是一個「約定」,但是它的工作方式是(唯一)嗎?是否需要反轉軟件包名稱以指定客戶端中服務類的服務和端口名稱? – arcy 2013-03-17 00:17:47

回答