Как позвонить в веб-сервис, используя JavaEE? - PullRequest
0 голосов
/ 12 марта 2012

Я использовал rpclib для автоматической генерации WSDL и реализации его на Python.

Затем я хотел вызвать веб-сервис *, который имеет этот WSDL, используя JavaEE, поэтому я просто использовал Веб-служба из WSDL в мастере создания в Eclipse (Indigo 3.7.1 с OEPE), но затем сборка Ant завершилась с исключением (вкратце):

weblogic.wsee.tools.WsBuildException Error running JAX-WS wsdlc
Caused by java.lang.NoSuchMethodException: javax.xml.bind.annotation.XmlElementRef.required()

Что следует сделатьЯ делаю?Как я могу вызвать веб-сервис с использованием JavaEE?

* Веб-сервис настроен на: Apache HTTP Server 2.2.2 + mod_wsgi 3.3 + Python 2.6.5 + rpclib 2.6.1.

1 Ответ

3 голосов
/ 14 марта 2012

Хорошо, наткнулся на ваш пост во второй раз, так что я уточню свой комментарий, приведенный ранее:).

Сначала я подведу итоги вашей установки:

  • У вас есть работающий веб-сервис и URL-адрес, указывающий на соответствующий WSDL
  • Вы попытаетесь вызвать методы WS из другого проекта Java EE на другом компьютере

Общие параметры для вызова WS:

  1. Используйте Внедрение зависимостей , чтобы ввести ссылку WS
  2. Создайте свои собственные заглушки WS

Первый вариант не будет работать в вашей настройке, потому что DI будет работать только в среде, управляемой контейнером (см. Мой комментарий). Это означает, что класс WS и исполняющий класс должны находиться в одном контейнере (например, на одном и том же сервере).

Итак, осталось только создать свои заглушки WS вручную. Поэтому вы можете использовать инструмент wsimport, упомянутый в вашем собственном ответе. Есть несколько разных способов использовать этот инструмент. Давайте посмотрим на использование CLI:

  1. Перейдите в папку projekt клиента WS, используемого вашей IDE: %IDE_WORKSPACE%/your project/src
  2. создайте новую папку, например, stub
  3. открыть окно командной строки в этом каталоге
  4. выполнить следующую команду: wsimport -keep <http://yourwsdl?wsdl>
  5. После обновления вы увидите несколько созданных файлов

Вернитесь в свою IDE:

Теперь вы можете использовать сгенерированные заглушки для подключения к WS, получив port из сгенерированного service -файла

public class WsClient {

  public static void main(String[] args) {
    //Create Service
    'GeneratedFile'Service service = new 'GeneratedFile'Service();

    //create proxy
    'GeneratedFile' proxy = service.get'GeneratedFile'Port();

    //invoke
    System.out.println(proxy.yourMethod(yourParam));
  }
}

Последние подсказки:

  • Для определения цели проверьте сгенерированные файлы. В своих аннотациях иногда файл WSDL связан с локальной копией. Просто измените это обратно на ваш WSDL-URL.
    AFAIK В инструменте wsimport есть опция , чтобы установить ее непосредственно в процедуре импорта.
  • Существует плагин для Eclipse под названием soapUI , который позволяет использовать инструмент wsimport в графическом интерфейсе пользователя Eclipse. После настройки это должно ускорить вашу работу.
  • Я также нашел краткое руководство по началу работы по разработке клиентов WS с eclipse.

Надеюсь, это помогло, повеселись!

РЕДАКТИРОВАТЬ: Просто чтобы уточнить:

needed files after wsimport generation

После того, как вы использовали инструмент wsimport, у вас должен быть каталог, содержащий файлы, как показано на рисунке. Чтобы прояснить этот пример, вам нужно получить Service от RequestFileService (это моя операция WS), например RequestFileService service = new RequestFileService();, и после этого вам понадобится Port на этом сервисе типа RequestFile proxy = service.getRequestFilePort();.
После этого вы можете вызывать вызовы вашего метода, используя порт proxy.yourMethod(yourParam);

...