在XFire1.2以后支持SOAP消息的GZip壓縮傳輸,在合適的地方啟動(dòng)GZip壓縮可以減少網(wǎng)絡(luò)傳輸?shù)臄?shù)據(jù)量,加快速度。
文章目錄
1. jar下載地址
??https://sourceforge.net/projects/pjl-comp-filter/??
或者直接點(diǎn)擊下載最新版本:
??https://sourceforge.net/projects/pjl-comp-filter/files/latest/download??
2. 服務(wù)端
服務(wù)端啟動(dòng)GZip:在服務(wù)端啟動(dòng)GZip只需將PJL Compressing Filter下的jar包(用到的)導(dǎo)入到web的/WEB-INF/lib目錄下。
并在web.xml文件中增加如下配置:
<filter>
<filter-name>CompressingFilter</filter-name>
<filter-class>
com.planetj.servlet.filter.compression.CompressingFilter
</filter-class>
<init-param>
<param-name>debug</param-name>
<param-value>false</param-value>
</init-param>
<init-param>
<param-name>statsEnabled</param-name>
<param-value>true</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>CompressingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
服務(wù)端加入GZip時(shí)web.xml中增加的配置
注:根據(jù)web.xml文法定義,這個(gè)定義必須位于servlet定義之前。
二、客戶端啟用GZip:客戶端啟動(dòng)GZip只要將客戶端的GZip的屬性設(shè)為true卻可。代碼如下:
3.客戶端
早期:客戶端調(diào)用的修改(不建議使用)
= "http://192.168.0.225/ldaxfire/services/LDAService";
String namespace = "http://test.yicha.cn/adreport";
// 創(chuàng)建service對(duì)象
Service serviceModel = new ObjectServiceFactory().create(ServiceInf.class, null,
namespace,null);
XFireProxyFactory serviceFactory = new XFireProxyFactory();
// 獲取服務(wù)對(duì)象
ServiceInf service = (ServiceInf) serviceFactory.create(serviceModel, serviceURL);
// 獲取客戶端代理
Client client = ((XFireProxy) Proxy.getInvocationHandler(service)).getClient();
/**
* 此屬性作用:開啟GZip壓縮傳輸
* 客戶端配置屬性影響:當(dāng)服務(wù)端沒有啟用GZip,客戶端啟用請(qǐng)求GZip壓縮時(shí),會(huì)產(chǎn)生SOAP解析錯(cuò)誤
* 服務(wù)端配置屬性影響:服務(wù)端這個(gè)配置不管配不配置(也就是說(shuō):如果服務(wù)端啟動(dòng)了GZip壓縮功能,客戶端是否啟用GZip都沒有影響)
*/
// 啟動(dòng)response壓縮
client.setProperty(CommonsHttpMessageSender.GZIP_RESPONSE_ENABLED, Boolean.TRUE);
// 啟動(dòng)request壓縮
client.setProperty(CommonsHttpMessageSender.GZIP_RESPONSE_ENABLED,Boolean.TRUE);
// 同時(shí)啟動(dòng)response和request壓縮
client.setProperty(CommonsHttpMessageSender.GZIP_ENABLED,Boolean.TRUE);
// 忽略超時(shí)
client.setProperty(CommonsHttpMessageSender.HTTP_TIMEOUT, "0");
// 調(diào)用服務(wù) //這里的nciicCompare是服務(wù)端接口 accreditFile是秘鑰 reqXML2請(qǐng)求報(bào)文
String data = service.nciicCompare("","");
注:在同時(shí)啟用時(shí),不必再分別啟用response和request的GZip壓縮。
注意,當(dāng)服務(wù)端沒有啟用GZip,客戶端啟用請(qǐng)求GZip壓縮時(shí),會(huì)產(chǎn)生SOAP解析錯(cuò)誤,如果服務(wù)端啟動(dòng)了GZip壓縮功能,客戶端是否啟用GZip都沒有影響。
推薦企業(yè)級(jí)xfire搭建
???IDEA快速 實(shí)現(xiàn) SpringMVC 整合xfire 發(fā)布 WebService 服務(wù)??