Apache CXF -Enunciate Ошибка генерации WSDL - PullRequest
1 голос
/ 26 июня 2010

Для создания веб-сервисов мы используем подход Apache CXF, основанный на коде. У нас есть специальный заголовок мыла для передачи учетных данных пользователя.

Я пытаюсь передать пользовательские данные в SEI с помощью аннотации @webparam.

Это две операции в классе Service.

@Path("/item/{id}")
@GET
public Item getItem(@PathParam("id") String id,
 @WebParam(name="userDetails", header=true, mode=Mode.IN) UserDetails details) throws NotFoundException;

@Path("/name/{id}")
@GET
public Item getItemByName(@PathParam("id") String id,
 @WebParam(name="userDetails", header=true, mode=Mode.IN) UserDetails details) throws NotFoundException;

Enunciate при генерации wsdl выдает ошибку, говорящую

D: \ workspace \ myService \ src \ main \ java \ com \ ws \ api \ ItemPublicationWebService.java: 52: [xml] Веб-метод определяет часть сообщения с именем 'userDetails', которая идентична названию сети часть сообщения, определенная в D: \ workspace \ myService \ src \ main \ java \ com \ ws \ api \ ItemPublicationWebService.java: 41. Пожалуйста, используйте аннотации для устранения неоднозначности.

Я обнаружил, что сохранение уникального имени webParam приведет к созданию wsdl. Но это не ожидаемый результат.

Что мне здесь не хватает?

1 Ответ

0 голосов
/ 01 июля 2010

Здесь Enunciate пытается создать хороший, чистый, консолидированный WSDL для вашего API веб-сервиса.Enunciate отличается от других генераторов WSDL тем, что работает во время компиляции и пытается сгруппировать все элементы заголовка в один консолидированный файл XML-схемы, на который может ссылаться WSDL.(Другие генераторы WSDL работают во время выполнения и, следовательно, могут генерировать схемы по мере необходимости, на лету, но существует множество дубликатов элементов XML и т. Д.)он видит элемент заголовка с именем «userDetails» и добавляет этот элемент XML в создаваемый документ схемы XML.Затем Enunciate обнаруживает ваш метод getItemByName и видит, что есть еще один элемент заголовка с именем userDetails, и он недостаточно умен, чтобы видеть, что это один и тот же элемент.Поэтому, думая, что есть конфликт, он выдает ошибку.

Я зарегистрировал проблему JIRA для вас:

http://jira.codehaus.org/browse/ENUNCIATE-453

Пока, если вы неЕсли Enunciate сгенерирует для вас WSDL, вы можете отключить модуль Enunciate 'xml':

<enunciate...>
  ...
  <modules>
    <xml disabled="true"/>
  </modules>
</enunciate>
...