我也遇到了,
最简单的应用,根本不会耗时。但是就是在call.invoke(new Object[] { test });时卡住了。要等好几分钟才会有返回结果。服务端立马返回了结果,但是客户端就是在等待中。我查过很多资料有的说因为服务端和客户端采用的底层协议不一致或者说http版本不一致,一个是http1.0,一个是http1.1但是没有结果
最简单的应用,根本不会耗时。但是就是在call.invoke(new Object[] { test });时卡住了。要等好几分钟才会有返回结果。服务端立马返回了结果,但是客户端就是在等待中。我查过很多资料有的说因为服务端和客户端采用的底层协议不一致或者说http版本不一致,一个是http1.0,一个是http1.1但是没有结果
解决方案 »
- 关于spring事务处理的问题。
- struts1.x如何实现当点击table的一条记录后跳转页面显示该条记录的全部信息
- 求助,新手学struts2,出错,但是找不到原因,折磨
- webservice,XFire,这个问题怎么解决?
- 从URL获取文件保存到本地的JAVA代码
- Hibernate里使用Criteria的问题
- 关于这个异常java.lang.IllegalArgumentException: javacc,ant,commons-collections,log4j,junit-Extension-Name
- 一个JAVA文件包含多个类,如何编译?
- EJB3笔记3-实作EJB3第二步:EJB3最终还是java世界的面向对象数据标准
- 使用ant中遇到的问题!
- 跪求关于action请求问题,请大侠解决,在线等,谢谢!
- 求java开发高手解答
进一步比较axis服务端和jax-ws服务端的响应包发现,axis服务端会在发送响应消息时关闭http连接,而jax-ws为了增加连接重用,返回的http头中,连接信息描述如下:
connection: keep-alive
很显然,axis客户端没有正确处理这一消息,认为http连接如果没有关闭就会继续等待后续数据包。
apache提供了自己的解决方案。即:用他的 httpclient包来管理http连接。用org.apache.axis.transport.http.CommonsHTTPSender来代替org.apache.axis.transport.http.HTTPSender。具体用法如下:
1、 引入三个jar包,commons-codec.jar,commons-httpclient.jar,commons-collections.jar
2、 增加配置文件client-config.wsdd,内容如下:
<?xml version="1.0" encoding="UTF-8"?>
<deployment name="defaultClientConfig"
xmlns="http://xml.apache.org/axis/wsdd/"
xmlns:java="http://xml.apache.org/axis/wsdd/providers/java">
<transport name="http"
pivot="java:org.apache.axis.transport.http.CommonsHTTPSender"/>
<transport name="local"
pivot="java:org.apache.axis.transport.local.LocalSender"/>
<transport name="java"
pivot="java:org.apache.axis.transport.java.JavaSender"/>
</deployment>
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();
即:在生成代理类时,传入配置文件参数进行初始化。
还有另一种方法是,直接在代码中指定使用哪个HttpSender。
通过上述三个步骤修改后的axis客户端,不管调用哪种Web Service服务端,都能在极短时间内返回响应。问题得以解决。