У меня есть класс на стороне сервера: ForumEntry, и у меня есть веб-сервис, который возвращает список ForumEntry:
@WebService(name="ForumGeneral",serviceName="ForumGeneralService")
public class ForumGeneralService {
@WebMethod
public List<ForumEntry> getLatestTopics(String keyword,int count){
...
}
}
При использовании wsimport для генерации клиента веб-сервиса он завершается нормально, но на основе веб-сервиса создается новый тип ForumEntry. Это имеет смысл, поскольку природа веб-службы заключается в том, что стороны клиента и сервера не связаны между собой.
Но что, если я захочу повторно использовать серверную часть 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 для генерации файла эпизода, а затем передал его в wsimport с помощью параметра -b. Но у меня возникла проблема, поскольку в сгенерированном файле эпизода есть записи для '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>
Итак, как все части соединяются здесь, чтобы повторно использовать класс на стороне сервера?