Как добавить HTTP-прокси в JAX-WS? - PullRequest
0 голосов
/ 16 июня 2020

У меня есть файл WSDL, который я превратил в код Java с помощью WSDL2 Java внутри SoapUI, он работает нормально, но теперь мне нужно добавить к нему прокси-сервер моей компании, поэтому каждый SOAP http-запрос будет go через него (но не другие HTTP-запросы).

Я просмотрел несколько потоков, касающихся одной и той же проблемы, и нашел следующие варианты:

  1. в масштабе всей системы прокси, добавив

    System.getProperties().put("proxySet", "true");
    System.getProperties().put("https.proxyHost", "10.10.10.10");
    System.getProperties().put("https.proxyPort", "8080"); 
    

    , который у меня не работает, так как он влияет на весь jvm.

  2. добавляя следующий код

    HelloService hello = new HelloService();
    HelloPortType helloPort = cliente.getHelloPort();
    org.apache.cxf.endpoint.Client client = ClientProxy.getClient(helloPort);
    HTTPConduit http = (HTTPConduit) client.getConduit();
    http.getClient().setProxyServer("proxy");
    http.getClient().setProxyServerPort(8080);
    http.getProxyAuthorization().setUserName("user proxy");
    http.getProxyAuthorization().setPassword("password proxy");
    

    , который я не понимаю, как использовать. В моем сгенерированном коде нет следов org. apache .cxf , только javax. xml .ws .

  3. Добавление этого в конфигурацию моего порта:

    ((BindingProvider) port).getRequestContext().put("http.proxyHost", "proxy@example.com");
    ((BindingProvider) port).getRequestContext().put("http.proxyPort", "80");
    

    Здесь я использую случайный несуществующий прокси и ожидаю получить ошибку любого вида (тайм-аут, недействительный прокси и т. Д. c.), Но вместо этого проходит без ошибок.

1 Ответ

0 голосов
/ 17 июня 2020

Вот пример без использования сторонних библиотек.

https://github.com/schuch/jaxws-proxy-example/blob/master/jaxws-client-with-proxy/src/main/java/ch/schu/example/helloworld/Client.java

package ch.schu.example.helloworld;

import java.net.ProxySelector;

import ch.schu.example.hello.HelloImpl;
import ch.schu.example.hello.HelloImplService;

public class Client {

    public static void main(String[] args) {

        ProxySelector.setDefault(new MyProxySelector());

        HelloImplService service = new HelloImplService();
        HelloImpl hello = service.getHelloImplPort();
        System.out.println(hello.sayHello("Howard Wollowitz"));
    }

}

https://github.com/schuch/jaxws-proxy-example/blob/master/jaxws-client-with-proxy/src/main/java/ch/schu/example/helloworld/MyProxySelector.java

package ch.schu.example.helloworld;

import java.io.IOException;
import java.net.InetSocketAddress;
import java.net.*;
import java.util.*;

public class MyProxySelector extends ProxySelector {

    @Override
    public List<Proxy> select(URI uri) 
    {
        System.out.println("select for " + uri.toString());
        Proxy proxy = new Proxy(Proxy.Type.HTTP, new InetSocketAddress("localhost", 9999));
        ArrayList<Proxy> list = new ArrayList<Proxy>();
        list.add(proxy);
        return list;   
    }

    @Override
    public void connectFailed(URI uri, SocketAddress sa, IOException ioe) {
        System.err.println("Connection to " + uri + " failed.");
    }
}
...