Как повторно использовать класс на стороне сервера в клиенте JAX-WS? - PullRequest
6 голосов
/ 14 мая 2011

У меня есть класс на стороне сервера: 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>

Итак, как все части соединяются здесь, чтобы повторно использовать класс на стороне сервера?

1 Ответ

0 голосов
/ 14 мая 2011

Вы должны добавить класс ForumEntry в схему, чтобы клиент мог сгенерировать его и использовать этот сгенерированный класс на стороне вашего сервера. Или добавьте в свою схему новый класс, содержащий данные, аналогичные ForumEntry, и попросите сервер создать эти объекты в ответ на ваши объекты ForumEntry и вместо этого вернуть эти созданные объекты.

...