文档章节

Spring+CXF配置HTTP代理访问Internet

江江的喵
 江江的喵
发布于 2014/10/30 11:23
字数 548
阅读 92
收藏 1

一个典型的CXF Webservice项目部署到正式环境后,服务器不能访问外网,只能通过代理访问外网,找了很多资料,刚开始想法是不用Spring的配置文件,直接用java编程访问webservice。在java的Http请求中使用代理的方法如下:

String authentication="username:password";//用户+”:”+密码        String encodedLogin= new BASE64Encoder().encode(authentication.getBytes());
        Proxy proxy = new Proxy(Proxy.Type.HTTP, new InetSocketAddress("IP", PORT));
        
        HttpsURLConnection conn = (HttpsURLConnection) console.openConnection(proxy );
        conn.setRequestProperty("Proxy-Authorization", " Basic " + encodedLogin);

使用JaxWsProxyFactoryBean创建client

System.setProperty("http.proxySet", "true");
        System.setProperty("http.proxyHost", "IP");
        System.setProperty("http.proxyPort", "PORT");        
        JaxWsProxyFactoryBean f = new JaxWsProxyFactoryBean();
        f.setAddress("THE URL OF WEBSERVICE");
        f.setServiceClass(IService.class);
        IService client = (IService) f.create();

可以使用代理,但是用户名密码是不能像第一种方法中那样设置到HttpConnection里面去的。

又在网上找了很多资料,终于找到了一个配置的方法。

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans" 
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
        xmlns:cxf="http://cxf.apache.org/core" 
        xmlns:sec="http://cxf.apache.org/configuration/security" 
        xmlns:http-conf="http://cxf.apache.org/transports/http/configuration" 
        xsi:schemaLocation=" 
                http://www.springframework.org/schema/beans
                http://www.springframework.org/schema/beans/spring-beans-2.0.xsd
                http://cxf.apache.org/core http://cxf.apache.org/schemas/core.xsd                http://cxf.apache.org/configuration/security                http://cxf.apache.org/schemas/configuration/security.xsd
                http://cxf.apache.org/transports/http/configuration
                http://cxf.apache.org/schemas/configuration/http-conf.xsd"> 
        <http-conf:conduit name="*.http-conduit"> 
            <http-conf:proxyAuthorization>            
                    <!-- 用户名 -->                    <sec:UserName>***</sec:UserName>                    <!-- 密码 -->                    <sec:Password>***</sec:Password>
                    
             </http-conf:proxyAuthorization>            <!--
                ProxyServer IP                ProxyServerPort PORT
                ProxyServerType: HTTP or SOCKS
             -->            <http-conf:client                    ProxyServer="192.168.1.4" 
                    ProxyServerPort="808"                    ProxyServerType="HTTP"                    Connection="Keep-Alive" 
                    AllowChunking="false"                    ConnectionTimeout="50000" 
                    ReceiveTimeout="120000"                    /> 
    </http-conf:conduit> 

    <!-- Client   -->    </beans>

<http-conf:conduit name="*.http-conduit"这里的name为”*.http-conduit”时,将会对所有的client类启用这个代理,如果要配置某个client类使用代理,可以这么写

<http-conf:conduit name="{http://widgets/widgetvendor.net}widgetSOAPPort.http-conduit>
    ...
  </http-conf:conduit>

{}里面的内容是webservice的wsdl的<wsdl:definitions name="serviceName" targetNamespace="http://hafeyang.blogjava.net"的targetNamespace属性

{}之后.之前的内容是

<wsdl:port name="BasicHttpBinding_IService" binding="i0:BasicHttpBinding_IService">

<soap:address location="the address" />

</wsdl:port>

的name属性。

上述wsdl对应的配置是

<http-conf:conduit name="{http://hafeyang.blogjava.net}BasicHttpBinding_IService.http-conduit> ... </http-conf:conduit>


总结: 

1、<http:conduit>标签是对cxf的客户端,即<jaxws:client>产生影响,对<jaxws:endpoint>没有影响 

2、<http:conduit name="*.http-conduit">会对所有的cxf客户端都生效,可以通过name属性,来指定生效范围


参考资料

http://fusesource.com/docs/framework/2.2/bind_trans/HTTPConsumerConfig.html

http://topic.csdn.net/u/20090331/09/f3ce02e0-29be-40cc-a534-9f2e5ac23f9e.html

http://old.nabble.com/http:conduit-Proxy-td20462360.html

http://mail-archives.apache.org/mod_mbox/servicemix-users/200807.mbox/<4885FCBB.5070506@gmail.com>

http://kyfxbl.iteye.com/blog/1517691

本文转载自:http://www.blogjava.net/Hafeyang/archive/2010/01/12/309178.html

江江的喵
粉丝 2
博文 58
码字总数 5809
作品 0
浦东
程序员
私信 提问
7-CXF与Spring整合发布webservice

Spring+CXF整合来管理webservice 实现步骤: 1. 添加cxf.jar 包(集成了Spring.jar、servlet.jar ),spring.jar包 ,servlet.jar 包 2. 编写业务类,通过CXF来发布webservice 员工管理: 方法...

江戸川
2018/10/21
0
0
基于J2EE应用发布WebService服务

1介绍 CXF号称是SOA框架,上一篇已经简单介绍了下WebService和CXF,这篇不再累述. 可能下面这张图可以很清楚地说明WebService在J2EE系统间的作用,比如系统间信息交互,或者新旧系统的整合等等....

蜡笔小小小新
2015/12/27
154
0
cxf JaxWsProxyFactoryBean的问题

项目使用的是spring+cxf 之前 服务器上 发布了一个 webservice http://localhost:8080/service/IUserService?wsdl 访问都正常 客户端使用java测试: 也正常...

xuzhou2013
2014/05/28
4.8K
3
【Apache CXF】CXF对JAX-RS的支持

用CXF构建RESTful services有两种方式: ·CXF对JAX-RS的实现。 ·使用JAX-WS Provider/Dispatch API。 官网上还有Http Bindings方式,他需要做一些繁琐的工作去创建资源再映射到服务上,这种...

runtimeErr
2014/05/15
0
0
Web Services(2)-Spring+CXF 发布WS

1.在tomcat容器中使用Spring+CXF 发布WS CXF 是Apache旗下一款非常优秀的Web Services 开源框架,具备轻量级的特性, 而且能无缝的整合到spring中 CXF是Celtix与XFire的整合, 前者是一款ESB框...

陈小扁
2016/03/28
149
0

没有更多内容

加载失败,请刷新页面

加载更多

【AI实战】手把手教你深度学习文字识别(文字检测篇:基于MSER, CTPN, SegLink, EAST等方法)

文字检测是文字识别过程中的一个非常重要的环节,文字检测的主要目标是将图片中的文字区域位置检测出来,以便于进行后面的文字识别,只有找到了文本所在区域,才能对其内容进行识别。 文字检...

雪饼
今天
16
0
思维导图XMind 8 Pro 绿化方法(附序列号)

按部就班: Step 1 -全新下载最新版本的 Xmind 8(注必须是英文官方的版本,中文代{过}{滤}理网站的版本修改过,无法使用pj); Step 2 -安装完毕后,点击文末的下载按钮下载pj补丁文件包,将...

一只小青蛙
今天
10
0
数据结构(ER数据库)设计规范

表命名规范 表命名的规则分为3个层级,层级之间通过_分割,例如b_r_identity、d_l_identity。规约为: [leavel]_[type]_[name] [leavel] 表示数据库表的层级和功能,分为: s:业务无关的系统...

随风溜达的向日葵
今天
10
0
阿里Sentinel控制台源码修改-对接Apollo规则持久化

https://github.com/alibaba/Sentinel/wiki/%E5%9C%A8%E7%94%9F%E4%BA%A7%E7%8E%AF%E5%A2%83%E4%B8%AD%E4%BD%BF%E7%94%A8-Sentinel 动态规则扩展 https://github.com/alibaba/Sentinel/wiki......

jxlgzwh
昨天
14
0
在Linux系统中创建SSH服务器别名

如果你经常通过 SSH 访问许多不同的远程系统,这个技巧将为你节省一些时间。你可以通过 SSH 为频繁访问的系统创建 SSH 别名,这样你就不必记住所有不同的用户名、主机名、SSH 端口号和 IP 地...

老孟的Linux私房菜
昨天
16
1

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部