Как настроить клиент WS после генерации с использованием wsdl2java
Я использую Java для реализации клиента для веб-службы.NET. У меня есть несколько вопросов о правильной практике, а также о проблеме, для которой мне нужно решение.
- Я использую maven и плагин wsdl2java, в настоящее время он настроен на получение wsdl xml из URL-адреса веб-службы, хотя я видел, что в большинстве примеров используется локальная копия wsdl в исходном коде проекта. Есть ли предпочтения? Я также обнаружил, что вам нужно снова указать местоположение wsdl для создания экземпляра сгенерированного класса обслуживания, есть ли способ избежать этого?
- Как указать URL службы при создании экземпляра объекта службы? В настоящее время сгенерированный код автоматически использует URL, указанный в wsdl. Я хотел бы иметь возможность изменить адрес на основе переменных времени выполнения.
- Я хотел бы установить некоторую конфигурацию, например, для WS-ReliableMessaging, в значение true. Какова лучшая практика для этого?
Вот плагин в POM:
<plugin>
<groupId>org.apache.cxf</groupId>
<artifactId>cxf-codegen-plugin</artifactId>
<version>${cxf.version}</version>
<executions>
<execution>
<id>generate-sources</id>
<phase>generate-sources</phase>
<configuration>
<sourceRoot>${basedir}/target/generated/src/main/java</sourceRoot>
<wsdlOptions>
<wsdlOption>
<wsdl>http://ServerNameA/FooService.svc?wsdl</wsdl>
<serviceName>FooService</serviceName>
</wsdlOption>
</wsdlOptions>
</configuration>
<goals>
<goal>wsdl2java</goal>
</goals>
</execution>
</executions>
</plugin>
И вот как я сейчас создаю экземпляр сервисного объекта:
FooService fooService = new FooService(new URL("http://ServerNameA/FooService.svc?wsdl"));
IFooService service = fooService.getWSHttpBindingIFooService();
service.getData(); // Calling one of the ports/service methods