Вызов веб-службы через CXF дает пустые параметры

У меня есть два проекта кода, оба используют CXF для использования веб-сервисов. Когда я делаю вызов из проекта A в проект B, метод, который я вызываю, получает нулевые параметры. Я включил ведение журнала, и входящее сообщение действительно содержит правильные параметры. Я также пытался вызвать свой сервис из SoapUI (инструмент тестирования веб-сервиса). Это передает параметры, как я ожидаю. У кого-нибудь есть идеи, что происходит не так?

Интерфейс сервиса:

@WebService
public interface IShortlistService {

  public IShortlist createOrUpdateShortlist(@WebParam(name = "sessionId") String sessionId,
      @WebParam(name = "datastoreInstance") String datastoreInstance,
      @WebParam(name = "datastoreRecordId") String datastoreRecordId);
}

Услуга подразумевает:

@Name("shortlistService")
@WebService(endpointInterface = "com.oobjects.shortlist.service.IShortlistService", serviceName = "ShortlistService")
@Features(features = "org.apache.cxf.feature.LoggingFeature")
@Transactional
public class ShortlistService implements IShortlistService {
  public IShortlist createOrUpdateShortlist(String sessionId, String datastoreInstance,
      String datastoreRecordId) {
    // At this point all inputs are null
  }
}

Регистрация входящего сообщения, подтверждающего, что все в порядке:

INFO: Inbound Message
----------------------------
Encoding: UTF-8
Content-Type: text/xml; charset=UTF-8
Headers: {cache-control=[no-cache], content-type=[text/xml; charset=UTF-8], connection=[keep-alive], host=[mypc.mycompany.com:8080], content-length=[391], SOAPAction=[""], user-agent=[Apache CXF 2.2.5], Accept=[*/*], pragma=[no-cache]}
Payload: <soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"><soap:Body><ns1:createOrUpdateShortlist xmlns:ns1="http://service.shortlist.mycompany.com/"><sessionId>854a48b5-922f-4081-9c76-b6d08b58a341</sessionId><datastoreInstance>http://mypc.mycompany.com:8080/shortlist-app/services/ShortlistService</datastoreInstance></ns1:createOrUpdateShortlist></soap:Body></soap:Envelope>
--------------------------------------

Версии CXF одинаковые (2.2.5). Я не могу думать, что еще проверить!

Некоторая запрошенная информация...

  • @Name — это аннотация шва
  • Настраивается программно
  • Привязка данных Aegis (JAXWS не любит интерфейсы)

person Lee Theobald    schedule 18.01.2010    source источник
comment
Как вы настраиваете? Какая привязка данных? что за имя?   -  person bmargulies    schedule 18.01.2010
comment
Я добавил информацию, которую вы просили в конце.   -  person Lee Theobald    schedule 18.01.2010
comment
Тогда простой фронтенд? Он не будет уважать эти аннотации @WebService. Боюсь, это лучше сработает на cxf-пользователях. Это не просто «я могу ответить на ваш вопрос», это будет расширенное диагностическое упражнение.   -  person bmargulies    schedule 18.01.2010
comment
Грустно, что ответ на эту проблему не опубликован здесь, так как у меня сейчас такая же проблема.   -  person Akku    schedule 27.09.2010
comment
@Tim Я не думаю, что когда-либо добирался до причины, но я считаю, что это как-то связано с использованием аннотаций @WebParam. Принимающая сторона ожидала результатов с установленными именами, и это было не то, что у меня было в аннотации @WebParam, она ожидала arg0, arg1 и т. д. Когда я удалил @WebParam, я считаю, что это сработало.   -  person Lee Theobald    schedule 29.09.2010
comment
Это не имело ничего общего с аннотацией @WebParam. Я написал решение ниже.   -  person Akku    schedule 04.10.2010


Ответы (2)


@ Ли Теобальд ... в опубликованном вами вопросе нет ничего очевидного, что объясняет, почему он у вас не работает. В этом случае «ответ», как он есть, заключается в том, чтобы запросить помощь для «Пользователей CXF» и, при необходимости, открыть JIRA. Воспроизведение 20 вопросов в комментариях к вопросу не очень эффективно, и в этом списке гораздо больше глазных яблок CXF-экспертов, чем здесь на данный момент. Мы могли бы принести сюда измененный вопрос и ответ, как только тайна будет раскрыта.

person bmargulies    schedule 18.01.2010
comment
Да я согласен. Хотя просто знать, что я не сделал очевидной ошибки, уже хорошо. - person Lee Theobald; 20.01.2010

Хорошо, проблема решена как ошибка. Парень, чей интерфейс я использовал, не обновлялся из репозитория перед развертыванием своего сервиса, и, поскольку что-то изменилось с его стороны (было удалено предложение throws), которое он зарегистрировал, но не развернул, я использовал более свежую версию из хранилище. Его версия интерфейса вызывала исключение, а моя версия интерфейса этого не говорила. Так:

Эта ошибка может возникнуть, если поставщик услуг и клиент службы используют несколько разные интерфейсы.

person Akku    schedule 04.10.2010
comment
О, я ответил на этот вопрос, так как у меня была такая же проблема, и я узнал об этом. Почему-то думал, что я задал вопрос в первую очередь. - person Akku; 04.10.2010