Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1068738
  • 博文数量: 282
  • 博客积分: 10865
  • 博客等级: 上将
  • 技术积分: 2480
  • 用 户 组: 普通用户
  • 注册时间: 2006-05-12 12:35
文章存档

2017年(1)

2016年(3)

2015年(10)

2014年(12)

2013年(5)

2012年(10)

2011年(29)

2010年(3)

2008年(13)

2007年(92)

2006年(104)

我的朋友

分类: Java

2016-09-29 09:33:03

转载:http://blog.csdn.net/lyt567/article/details/8049604 
解决这个问题可以用两种方式:

一、代码里面指定所使用的连接

1. 使用http1.1。 默认情况下,axis1.4使用的transport handler是HttpSender,这个类默认使用http1.0作为它的传输标准。而http1.0是不提供persistent connection(keep-alive)模式的,这样每次call都会建立一次新的连接,尤其是对于ssl的连接来说,这个开销就有点霸道了。http11的标准提供了keep-alive机制,把axis的transport升级成http11能节约不必要的连接建立开销。具体做法有:

     (1)调用client call(org.apache.axis.client.Call)来setProperty(MessageContext.HTTP_TRANSPORT_VERSION, HTTPConstants.HEADER_PROTOCOL_11);

     (2)把transport handler改成Jakarta的CommonsHTTPSender。这个需要设置axis engine使其来使用CommonsHTTPSender,在初始化axis.client.Service之前set engine configuration(因为在初始化Service的时候axis回去加载engine configuration)。AxisProperties.setProperty(EngineConfigurationFactory.SYSTEM_PROPERTY_NAME, "com.test.CustomerEngineConfiguraiontFactory"),这样写的目的是告诉axis去使用我们自己定义的factory。 这个CustomerEngineConfiguraiontFactory实现了axis的EngineConfigurationFactory接口,在这个接口实现类里面set了engine configuration。一个简单的实现如下: 
public EngineConfiguration getClientEngineConfig() { 
   SimpleProvider engineProvider = new SimpleProvider (); 
   engineProvider.deployTransport(HTTPTransport.DEFAULT_TRANSPORT_NAME 
     , new CommonsHTTPSender()); 
   return engineProvider; 
}

2. 压缩传输数据。 这个需要在设置了transport为http11后才能使用。用axis.client.Call去set相应的property:

call.setProperty(HTTPConstants.MC_GZIP_REQUEST, Boolean.TRUE); 
   call.setProperty(HTTPConstants.MC_ACCEPT_GZIP, Boolean.TRUE);

可以参考这里,http://www.pocketsoap.com/weblog/2005/10/1565.html

---------------------------------------------------------------------------------------------------上面是写在代码里面的:

 

二、配置文件指定使用的连接

1、  引入三个jar包,commons-codec.jar,commons-httpclient.jar,commons-collections.jar
2、  增加配置文件client-config.wsdd,内容如下:


      xmlns=""
      xmlns:="">
            pivot="java:org.apache.axis.transport.http.CommonsHTTPSender"/>
            pivot="java:org.apache.axis.transport.local.LocalSender"/>
            pivot="java:org.apache.axis.transport.java.JavaSender"/>

  
3、  在axis自动生成的代理类XXProxy中,修改init方法(下面的例子表示调用kaopuUpSoap服务):

private void _initKaopuUpSoapProxy(){
        try {
            EngineConfiguration conf = new FileProvider(this.getClass().getResourceAsStream("/client-config.wsdd"));
            kaopuUpSoap = (newcom.zte.iups.wbs.up.wsdl.KaopuUpServiceLocator(conf)).getkaopuUpSoapPort();
 

       即:在生成代理类时,传入配置文件参数进行初始化。
通过上述三个步骤修改后的axis客户端,不管调用哪种Web Service服务端,都能在极短时间内返回响应。问题得以解决。

阅读(1713) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~