我在服务器端有一个类:ForumEntry,我有一个Web服务,它返回一个ForumEntry列表:
@WebService(name="ForumGeneral",serviceName="ForumGeneralService")
public class ForumGeneralService {
@WebMethod
public List<ForumEntry> getLatestTopics(String keyword,int count){
...
}
}
当使用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
然后使用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 :(得分:-1)
您应该将一个ForumEntry类添加到架构中,以便客户端可以生成它,并在服务器端使用该生成的类。或者向您的架构添加一个新类,其中包含与ForumEntry类似的数据,并让服务器在您的ForumEntry对象的响应中创建这些对象,并返回这些创建的对象。