2011-05-14 83 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