Создание заглушки клиента Java SOAP с конечной точкой службы, определенной во время выполнения
Ранее я писал SOAP-клиенты на Python и использовал библиотеку SUDS. Не вдаваясь в подробности, генерация "заглушки" действительно довольно динамична, так как она выполняется во время выполнения, а благодаря тому, что Python настолько не типизирован, я могу ссылаться на ожидаемые методы, сгенерированные WSDL, без предварительно скомпилированной заглушки. Я в порядке с созданием заглушки с чем-то вроде wsimport, потому что здорово иметь состав SOAP-сообщений, обрабатываемых через хорошую структуру Java-объектов. Итак, я не ищу механизм динамической генерации, похожий на SUDS в python.
Моя проблема в том, что все простые примеры JAX-WS, которые я вижу, относятся к тому, что я буду называть "статически расположенным веб-сервисом". Я пытаюсь подключиться к веб-сервису с известным WSDL, из которого я могу генерировать заглушки во время компиляции, но местоположение которого известно только во время выполнения. Например, допустим, я хочу получить доступ к веб-службам Microsoft SharePoint. Везде, где развернуто мое приложение, будет работать другой сервер (или серверы) SharePoint, который необходимо будет указать во время выполнения. Все простые примеры, которые я видел, имеют URL-адрес местоположения службы, жестко запрограммированный в заглушках через wsimport. Есть ли способ генерировать заглушки, но указывать местоположение службы во время выполнения?
Я действительно удивлен, что не могу найти никаких примеров этого, потому что я полагаю, что то, что я пытаюсь сделать, должно быть очень распространенным явлением с веб-сервисами. Возможно, ответ заключается в том, что я не могу быть ленивым и получить хорошую объективированную версию методов WSDL, если местоположение сервера известно только во время выполнения. Я видел примеры SAAJ, но там, конечно, я должен сам генерировать сообщения SOAP вручную. Это было бы таким позором, когда WSDL известен во время компиляции. Разве я не могу взять свой пирог и съесть его тоже?
1 ответ
Если я правильно понимаю ваш вопрос, вы хотите подключиться к нескольким веб-службам, которые предоставляют один и тот же WSDL, но расположены по разным адресам, а ваш клиент содержит только адрес службы, использованной для его создания?
В этом случае взгляните на этот пост: Изменение URL-адреса WSDL (конечной точки) в клиенте JAX-WS.