Подключение к веб-сервису AXIS 1.4 через прокси
Я использую AXIS 1.4 для генерации подпрограмм для моего веб-сервиса. Генерация работает нормально, как есть, но я столкнулся с проблемой подключения к веб-сервису через WebProxy.
Я использую axistools-maven-plugin для генерации моих классов осей.
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>axistools-maven-plugin</artifactId>
<version>1.4</version>
<configuration>
<urls>
<url>http://mywiki/rpc/soap-axis/confluenceservice-v1?wsdl</url>
</urls>
<outputDirectory>${project.build.directory}/generated-wsdl-sources</outputDirectory>
<packageSpace>de.allianz.wsdl.confluence</packageSpace>
<testCases>false</testCases>
<serverSide>false</serverSide>
<subPackageByFileName>false</subPackageByFileName>
</configuration>
<executions>
<execution>
<id>add wsdl source</id>
<phase>generate-sources</phase>
<goals>
<goal>wsdl2java</goal>
</goals>
</execution>
</executions>
<dependencies>
<dependency>
<groupId>axis</groupId>
<artifactId>axis</artifactId>
<version>1.4</version>
</dependency>
</dependencies>
Если я использую следующие свойства перед подключением - все работает нормально, но я устанавливаю свойства VM wide, что нежелательно:
public void setProxyHost(String proxyHost) {
this.proxyHost = proxyHost;
if(proxyHost != null){
System.setProperty("http.proxyHost", proxyHost);
AxisProperties.setProperty("http.proxyHost", proxyHost);
}
}
public void setProxyPort(int proxyPort) {
this.proxyPort = proxyPort;
System.setProperty("http.proxyPort", ""+proxyPort);
AxisProperties.setProperty("http.proxyPort", ""+proxyPort);
}
Есть ли способ указать оси генерировать источники для подключения через прокси? (Я уже читал о том, как указать прокси при генерации исходников (для доступа к WSDL), но это не то, что мне нужно - мне нужно подключиться к конечному веб-сервису через прокси)
Я уже пытался сделать следующее:
private ConfluenceSoapService createConfluenceSoapService()
throws ServiceException {
ConfluenceSoapServiceServiceLocator csssl = new ConfluenceSoapServiceServiceLocator();
ConfluenceSoapService confluenceSoapService;
if (confluenceserviceAddress == null) {
confluenceSoapService = csssl.getConfluenceserviceV1();
} else {
URL endpoint;
try {
//endpoint = new URL(confluenceserviceAddress);
endpoint = new URL("http",proxyHost,proxyPort,confluenceserviceAddress);
} catch (java.net.MalformedURLException e) {
throw new javax.xml.rpc.ServiceException(e);
}
confluenceSoapService = csssl.getConfluenceserviceV1(endpoint);
}
ConfluenceserviceV1SoapBindingStub stub = (ConfluenceserviceV1SoapBindingStub) confluenceSoapService;
stub.setTimeout(timeout);
return confluenceSoapService;
}
и измените конечную точку на URL-адрес с помощью прокси-сервера - но это приводит к следующей проблеме во время выполнения (даже если параметры прокси-сервера правильно установлены для объекта URL-адреса. Если я использую объект URL-адреса без прокси-сервера, я получаю ошибки.
java.net.MalformedURLException: For input string: "8080http:"
at org.apache.axis.AxisFault.makeFault(AxisFault.java:101)
at org.apache.axis.transport.http.HTTPSender.invoke(HTTPSender.java:154)
at org.apache.axis.strategies.InvocationStrategy.visit(InvocationStrategy.java:32)
at org.apache.axis.SimpleChain.doVisiting(SimpleChain.java:118)
at org.apache.axis.SimpleChain.invoke(SimpleChain.java:83)
at org.apache.axis.client.AxisClient.invoke(AxisClient.java:165)
at org.apache.axis.client.Call.invokeEngine(Call.java:2784)
at org.apache.axis.client.Call.invoke(Call.java:2767)
Мои вопросы:
- Я что-то пропустил?
- Есть ли способ указать оси для создания источников для работы с веб-прокси (доступ через веб-прокси)Большое спасибо за вашу помощь! Пожалуйста, дайте мне знать, если вам нужна дополнительная / другая информация, чтобы помочь.
1 ответ
Попробуйте это, в моем случае это работает, не рекомендуется использовать System.setProperty, поскольку он устанавливает значение для виртуальной машины. Использование AxisProperties установит значение только для определенного соединения. Я использую клиент AXIS 1.4.
AxisProperties.getProperties().put("proxySet","true");
AxisProperties.setProperty("http.proxyHost", PROXY_HOST);
AxisProperties.setProperty("http.proxyPort", PROXY_PORT);