为JAX-WS(CXF)请求设置HTTP代理而不设置系统范围的属性?

时间:2016-09-12 14:53:00

标签: java soap proxy cxf

我开发了一个Web应用程序,它在不同的后端(第三方)之间作为Web服务转换器工作(我避免使用word Proxy-Server)。在这个Web应用程序的一侧,我想通过代理与SOAP服务器(第三方)通信。 SOAP-Sever位于可通过代理访问的区域中(例如examaple-proxy.com:80)。

我必须澄清,应该只为应用程序的这一部分设置代理,其他部分应该能够在没有任何代理的情况下与其他后端进行通信。我发现this问题,但在所有评论之后,我的问题都没有答案。我非常感谢有关此问题的任何解决方案。

修改

经过更多研究并缩小问题范围后,我意识到每个SOAP-Service实现都有一个特定的解决方案来设置代理设置。在我的案例中,solution暗示因为我使用Apache CXF来实现SOAP服务的服务,我可以执行以下操作来设置代理:

import org.apache.cxf.frontend.ClientProxy;
import org.apache.cxf.endpoint.Client;
import org.apache.cxf.transport.http.HTTPConduit;

import from.my.wsdl.generated.schema.EventService;
import from.my.wsdl.generated.schema.EventPortType;


EventService es = new EventService();
EventPortType port = es.getEventPort();

Client client = ClientProxy.getClient(port);
HTTPConduit http = (HTTPConduit) client.getConduit();
http.getClient().setProxyServer("examaple-proxy.com");
http.getClient().setProxyServerPort(80);
http.getProxyAuthorization().setUserName("user proxy");
http.getProxyAuthorization().setPassword("password proxy");

注意

EventService EventPortType 是wsdl自动生成的类。我通过Maven Plugin (cxf-codegen-plugin)完成了这项工作,如下所示:

<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>${project.build.directory}/generated/cxf</sourceRoot>
            <wsdlOptions>
                <wsdlOption>
                    <wsdl>${basedir}/src/main/resources/myService.wsdl</wsdl>
                </wsdlOption>
            </wsdlOptions>
        </configuration>
        <goals>
            <goal>wsdl2java</goal>
        </goals>
    </execution>
</executions>
</plugin>

0 个答案:

没有答案