Я пытаюсь написать модуль для приложения Java, который обращается к веб-сервису, описываемому WSDL. Источник WSDL был загружен прямо из того, что я считаю веб-сервисом ASP.NET; URL-адрес службы заканчивается расширением .asmx и просмотр URL-адреса службы в браузере показывает ссылку, которая может быть использована для загрузки WSDL.
Ключевым требованием для меня является возможность отключить URL-адрес службы без перекомпиляции. Указанный мне URL-адрес, очевидно, является тестовым сервером, и я знаю, что на производстве мне будет предоставлен URL-адрес для создания. Я также хотел бы иметь возможность самостоятельно создавать макетный сервер для тестирования и сохранять возможность указывать новый URL-адрес в будущем без перекомпиляции, если служба будет перемещена. На самом деле, я хотел бы, чтобы установка нашего приложения позволяла создавать несколько экземпляров веб-службы на разных URL-адресах.
Но моя концепция, похоже, не соответствует тому, что делает инструмент wsimport для меня. Следуя f1sh answer здесь, я сгенерировал Java-код из загруженного WSDL с помощью этой команды:
wsimport -Xnocompile -keep -b binding.xml wsdlFile.wsdl
Я нахожу, что сгенерированный код имеет жесткую ссылку на мой загруженный wsdlFile.wsdl, который содержит URL-адрес службы. Наше приложение не будет работать таким образом, чтобы его можно было настроить, отредактировав файл WSDL во время выполнения. Мне нужно, чтобы код был скомпилирован в мое приложение во время сборки и может иметь URL-адрес службы во время создания экземпляра.
Я не совсем уверен, почему WSDL даже нужно разбирать во время выполнения; я понял, что WSDL предоставляет достаточную информацию для генерации кода, который может получить доступ к веб-сервису, поэтому я не уверен, что он предоставляет сгенерированному коду, отличному от URL-адреса службы, и я не уверен, почему URL-адрес службы не указан в конструктор или настраиваемый с помощью метода в созданном классе webservice. Мне что-то не хватает.
Какова общая практика для этого сценария? Большинство людей регенерируют код для каждого отдельного URL-адреса, который они будут использовать? Создается ли код во время выполнения? Есть ли другой инструмент WSDL, который я могу использовать, который построит клиентский код с настраиваемым URL?