2011-05-14 84 views
6

我有服務器端類:ForumEntry,我必須返回ForumEntry列表的Web服務:如何在JAX-WS客戶端中重用服務器端類?

@WebService(name="ForumGeneral",serviceName="ForumGeneralService") 
public class ForumGeneralService { 

    @WebMethod 
    public List<ForumEntry> getLatestTopics(String keyword,int count){ 
    ... 
    } 
} 

使用的wsimport生成Web服務客戶端,它完成罰款,而是一個新的ForumEntry類型的創建基於Web服務。這是有道理的,因爲Web服務的本質是客戶端和服務器端是分離的。

但是如果我想重用服務器端ForumEntry並避免創建客戶端虛擬類,該怎麼辦?我發現一個帖子:http://jamablog.blogspot.com/2007/08/how-to-make-jax-ws-client-reuse_22.html

按照想法,我加了JAXB標註到我的服務器端ForumEntry類:

@XmlAccessorType(XmlAccessType.FIELD) 
@XmlType(name = "forumEntry", propOrder = { 
    "forumId", 
    "forumName", 
}) 
public class ForumEntry 

然後使用schemagen生成情節文件,然後通過它使用-b參數的wsimport。但我的問題,因爲生成的事件文件具有條目「forumEntry」:

[ERROR] SCD "~forumEntry" didnt match any schema component 

我猜它的意思是「forumEntry沒有顯示出來的WSDL,這是正確的:

<message name="getLatestTopics"> 
<part name="parameters" element="tns:getLatestTopics"></part> 
</message> 
<message name="getLatestTopicsResponse"> 
<part name="parameters" element="tns:getLatestTopicsResponse"></part> 
</message> 

那麼,如何做部件在這裏合在一起,重用服務器端類?

回答

0

您應該添加一個ForumEntry類到架構,以便客戶端可以生成它,並在您的服務器端使用生成的類。或者向包含與ForumEntry類似數據的模式添加一個新類,讓服務器根據ForumEntry對象的響應創建這些對象,然後返回這些創建的對象。

+0

謝謝,但你能更具體嗎?我返回一個List,而FourmEntry是一個類型。雙方如何使用Forumentry課程?謝謝。 – Andrew 2011-05-15 14:50:52

+0

你必須在客戶端生成ForumEntry類並使用它。 – 2011-05-15 18:13:12

+0

雖然這個問題很老,但我也有類似的問題。問題是我已經有了一堆使用某些類作爲數據類型的服務器端代碼,以及這些類中的一些實用程序方法。如果服務器端更改爲使用客戶端生成的類,這將是一項重大工作。 – 2015-11-16 14:42:06