如何在JAX-WS客户端中重用服务器端类?

And*_*rew 6 jax-ws jaxb

我在服务器端有一个类:ForumEntry,我有一个Web服务,它返回一个ForumEntry列表:

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

  @WebMethod
  public List<ForumEntry> getLatestTopics(String keyword,int count){
  ...
  }
}
Run Code Online (Sandbox Code Playgroud)

当使用wsimport生成webservice客户端时,它完成得很好,但是基于Web服务创建了一个新的ForumEntry类型.这是有道理的,因为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
Run Code Online (Sandbox Code Playgroud)

然后使用schemagen生成剧集文件,然后使用-b参数将其传递给wsimport.但是我遇到了问题,因为生成的剧集文件包含'forumEntry'的条目:

[ERROR] SCD "~forumEntry" didnt match any schema component
Run Code Online (Sandbox Code Playgroud)

我想这意味着'forumEntry没有出现在WSDL中,这是正确的:

<message name="getLatestTopics">
<part name="parameters" element="tns:getLatestTopics"></part>
</message>
<message name="getLatestTopicsResponse">
<part name="parameters" element="tns:getLatestTopicsResponse"></part>
</message>
Run Code Online (Sandbox Code Playgroud)

那么如何在这里将所有部分组合在一起,重用服务器端类?

Kal*_*see -1

您应该将 ForumEntry 类添加到架构中,以便客户端可以生成它,并在服务器端使用该生成的类。或者将一个新类添加到您的架构中,其中包含与 ForumEntry 类似的数据,并让服务器根据您的 ForumEntry 对象的响应创建这些对象,然后返回这些创建的对象。