Создание заглушки клиента Java SOAP с конечной точкой службы, определенной во время выполнения

1

Раньше я писал SOAP-клиенты в Python и использовал библиотеку SUDS. Не вдаваясь в подробности, поколение "заглушки" действительно довольно динамично, как это было во время выполнения, и, поскольку Python настолько бесплоден, я могу ссылаться на ожидаемые методы, созданные WSDL, без предварительно скомпилированного заглушки. Я в порядке с созданием заглушки с чем-то вроде wsimport, потому что здорово, что состав SOAP-сообщений обрабатывается через красивую структуру объектов Java. Итак, я не ищу механизм динамического генерации, подобный SUDS в python.

Моя проблема в том, что все простые примеры JAX-WS, которые я вижу, предназначены для того, что я назову "статически расположенным веб-сервисом". Я пытаюсь подключиться к веб-службе с известным WSDL, из которого я мог бы создавать заглушки во время компиляции, но местоположение которых известно только во время выполнения. Например, я хочу получить доступ к веб-службам Microsoft SharePoint. Где бы ни было развернуто мое приложение, будет запущен другой сервер (или серверы) SharePoint, который необходимо будет указывать во время выполнения. Все простые примеры, которые я видел, имеют URL-адрес местоположения службы, жестко закодированный в заглушки через wsimport. Есть ли способ генерировать заглушки, но предоставить местоположение службы во время выполнения?

Я очень удивлен, не найдя никаких примеров этого, потому что я полагаю, что то, что я пытаюсь сделать, должно быть очень распространенным, поскольку веб-службы идут. Возможно, ответ заключается в том, что я не могу лениться и получить красивую объектизированную версию методов WSDL, если местоположение сервера известно только во время выполнения. Я видел примеры SAAJ, но там, конечно, я сам должен сам создавать SOAP-сообщения. Это было бы таким позором, когда WSDL будет известен во время компиляции. Разве я не могу взять пирог и съесть его?

  • 0
    Я подумал ответить на свой вопрос, но я все еще изучаю «Динамический прокси». Пока это выглядит именно так, как я описал выше. Мне все еще неясно, чем динамические заглушки отличаются от статических заглушек, так как похоже, что wsimport используется для обоих. Любой, кто имеет опыт использования динамического прокси, был бы великолепен.
Теги:
soap
web-services
stub
wsdl

1 ответ

2
Лучший ответ

Если я правильно понял ваш вопрос, вы хотите подключиться к нескольким веб-службам, которые выставляют один и тот же WSDL, но расположены по разным адресам, а ваш клиент содержит только адрес службы, используемой для его создания?

В этом случае посмотрите на это сообщение: Изменение URL-адреса WSDL (конечной точки) в клиенте JAX-WS.

  • 1
    Совершенно верно, большое спасибо @Bogdan! «Другой и лучший путь» - это именно то, что я искал. Глядя на этот пример, я копался в своем простом примере, сгенерированном с помощью wsimport, и увидел, что он действительно генерирует несколько конструкторов для объекта Service, чего я раньше не замечал. Конструктор по умолчанию использует URL-адрес, используемый для создания заглушек, но есть конструктор, в который можно передать URL-адрес новой конечной точки WSDL, указанной во время выполнения. Еще раз большое спасибо!

Ещё вопросы

Сообщество Overcoder
Наверх
Меню