7

wiem, że to nie jest do końca poprawny sposób, aby zadać pytanie, ale mam problem:Client WS z Prokurentem i Autentification

mam WSDL przechowywanych lokalnie, i muszę stworzyć Web Klient usług, aby połączyć się z tą usługą sieciową. Problem polega na tym, że usługa znajduje się za firewallem i muszę się z nią połączyć za pośrednictwem serwera proxy, a następnie muszę uwierzytelnić się, aby połączyć się z WS.

co zrobiłem jest generowanie klienta WS z Apache CXF 2.4.6 następnie ustawić system szeroko proxy

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

wiem, że to nie jest najlepsza praktyka, więc proszę sugerować lepsze rozwiązanie, czy też ktoś może mi dać wskazówkę, w jaki sposób ustawić uwierzytelnianie I'dd naprawdę docenić to

Odpowiedz

16

z Apache CXF

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"); 
+0

Wielkie dzięki. Prawdziwa użyteczna porada –

0

można również ustawić nazwę użytkownika i hasło przy użyciu proxy java.net.Authent Klasa icator, ale nie jestem pewien, czy nie jest to ustawienie "systemowe".

Spójrz tutaj: Authenticated HTTP proxy with Java

4

Oto odpowiednia konfiguracja Wiosna XML:

Dokumentacja: http://cxf.apache.org/docs/client-http-transport-including-ssl-support.html

<beans xmlns="http://www.springframework.org/schema/beans" 
    xmlns:http-conf="http://cxf.apache.org/transports/http/configuration" 
    xmlns:sec="http://cxf.apache.org/configuration/security" 
    xsi:schemaLocation="http://www.springframework.org/schema/beans 
         http://www.springframework.org/schema/beans/spring-beans.xsd 
         http://cxf.apache.org/transports/http/configuration http://cxf.apache.org/schemas/configuration/http-conf.xsd 
         http://cxf.apache.org/configuration/security http://cxf.apache.org/schemas/configuration/security.xsd"> 

<http-conf:conduit name="*.http-conduit"> 
    <http-conf:client ProxyServer="proxy" ProxyServerPort="8080"/> 

    <http-conf:proxyAuthorization> 
     <sec:UserName>proxy_user</sec:UserName> 
     <sec:Password>proxy_pass</sec:Password> 
    </http-conf:proxyAuthorization> 
</http-conf:conduit> 

Aby to zadziałało trzeba importować cxf.xml:

<import resource="classpath:META-INF/cxf/cxf.xml"/> 

Zwróć uwagę, że ten httpConduit będzie włączony dla wszystkich klientów CXF (jeśli jest ich kilka).

Należy skonfigurować nazwę przewodu dopasować tylko swój Conduit serwisowy:

name="{http://example.com/}HelloWorldServicePort.http-conduit" 
+1

proxy host = "ProxyServer" właściwość, port = "ProxyServerPort" właściwość, wydaje się, że nie rozumiem twojego pytania – yunandtidus

4

Jeśli re korzystają konfigurację Wiosna Java, aby skonfigurować klienta JAX-WS z Apache CXF (3.xx), to następujący kod zadziała:

import org.apache.cxf.endpoint.Client; 
import org.apache.cxf.frontend.ClientProxy; 
import org.apache.cxf.jaxws.JaxWsProxyFactoryBean; 
import org.apache.cxf.transport.http.HTTPConduit; 
import org.springframework.beans.factory.annotation.Value; 
import org.springframework.context.annotation.Bean; 
import org.springframework.context.annotation.Configuration; 

import de.codecentric.namespace.weatherservice.WeatherService; 

@Configuration 
public class WeatherServiceConfiguration { 

    @Bean 
    public WeatherService weatherService() { 
     JaxWsProxyFactoryBean jaxWsFactory = new JaxWsProxyFactoryBean(); 
     jaxWsFactory.setServiceClass(WeatherService.class); 
     jaxWsFactory.setAddress("http://yourserviceurl.com/WeatherSoapService_1.0"); 
     return (WeatherService) jaxWsFactory.create(); 
    } 

    @Bean 
    public Client client() { 
     Client client = ClientProxy.getClient(weatherService()); 
     HTTPConduit http = (HTTPConduit) client.getConduit(); 
     http.getClient().setProxyServer("yourproxy"); 
     http.getClient().setProxyServerPort(8080); // your proxy-port 
     return client; 
    } 
} 
+0

to działa również dla mnie! Dziękuję Ci! – ncowboy