Spring+CXF配置HTTP代理訪問Internet
一個(gè)典型的CXF Webservice項(xiàng)目部署到正式環(huán)境后,服務(wù)器不能訪問外網(wǎng),只能通過代理訪問外網(wǎng),找了很多資料,剛開始想法是不用Spring的配置文件,直接用java編程訪問webservice。在java的Http請(qǐng)求中使用代理的方法如下:
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創(chuàng)建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();
可以使用代理,但是用戶名密碼是不能像第一種方法中那樣設(shè)置到HttpConnection里面去的。
又在網(wǎng)上找了很多資料,終于找到了一個(gè)配置的方法。
<?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”時(shí),將會(huì)對(duì)所有的client類啟用這個(gè)代理,如果要配置某個(gè)client類使用代理,可以這么寫
…
<wsdl:port name="BasicHttpBinding_IService" binding="i0:BasicHttpBinding_IService">
<soap:address location="the address" />
</wsdl:port>
… 的name屬性。 上述wsdl對(duì)應(yīng)的配置是 <http-conf:conduit name="{http://hafeyang.blogjava.net}BasicHttpBinding_IService.http-conduit> ... </http-conf:conduit> 參考資料 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>
posted on 2010-01-12 17:10 衡鋒 閱讀(2861) 評(píng)論(1) 編輯 收藏
<http-conf:conduit name="{http://widgets/widgetvendor.net}widgetSOAPPort.http-conduit>
...
</http-conf:conduit>
{}里面的內(nèi)容是webservice的wsdl的<wsdl:definitions name="serviceName" targetNamespace="{}之后.之前的內(nèi)容是