Подключитесь к AXIS 1.4 Webservice через прокси - PullRequest
3 голосов
/ 25 ноября 2010

Я использую 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), но это не то, что мне нужно - мне нужно подключиться к конечному веб-сервису через прокси-сервер)

Я уже пыталсявыполните следующие действия:

<code>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без прокси я получаю ошибки.
<code>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 Ответ

4 голосов
/ 15 мая 2013

Попробуйте, в моем случае это работает, не рекомендуется использовать System.setProperty, поскольку он устанавливает значение для виртуальной машины.Использование AxisProperties установит значение только для определенного соединения.Я использую клиент AXIS 1.4.

AxisProperties.getProperties().put("proxySet","true");

    AxisProperties.setProperty("http.proxyHost", PROXY_HOST); 
    AxisProperties.setProperty("http.proxyPort", PROXY_PORT); 
...