使用XFire调用WebService需注意的事项
(一):注意过滤输入和输出参数空白字符
如果出现空白字符解析不了导致调用失败,导致下面的异常:
org.codehaus.xfire.fault.XFireFault: Error writing document.. Nested exception is com.ctc.wstx.exc.WstxIOException: Invalid null character in text to output
at org.codehaus.xfire.fault.XFireFault.createFault(XFireFault.java:89)
at org.codehaus.xfire.client.Invocation.invoke(Invocation.java:83)
at org.codehaus.xfire.client.Invocation.invoke(Invocation.java:114)
at org.codehaus.xfire.client.Client.invoke(Client.java:336)
at org.codehaus.xfire.client.Client.invoke(Client.java:368)
String.trim()一下即可。
(二):连接时注意修改一些参数
比如:HttpClientParams.CONNECTION_MANAGER_TIMEOUT // 设置Timeout
这其实不止是这里需要,任何网络编程都需要注意此事项。当对方服务死了或网络异常,
如果不做timeout处理,按照默认的时间去处理,将会导致服务积压严重甚至被脱死。
HttpClientParams.USE_EXPECT_CONTINUE //client handshake
如果服务不需要传输大量的数据,保持长连接,还是建议关闭掉此功能,设置为false。
否则,在业务量很大的情况下,很容易将服务端和自己都搞的很慢甚至拖死。
HttpClientParams params = new HttpClientParams();
// 避免'Expect: 100-continue' handshake
params.setParameter(HttpClientParams.USE_EXPECT_CONTINUE,Boolean.FALSE);
//设置ws连接超时时间
params.setParameter(HttpClientParams.CONNECTION_MANAGER_TIMEOUT, 1000);
client.setProperty(CommonsHttpMessageSender.HTTP_CLIENT_PARAMS,params);
//设置连接参数
HttpClientParams hcparams = new HttpClientParams();
//避免'Expect: 100-continue' handshake
hcparams.setParameter(HttpClientParams.USE_EXPECT_CONTINUE, Boolean.FALSE);
hcparams.setParameter(HttpClientParams.CONNECTION_MANAGER_TIMEOUT, 120* 1000);//单位是毫秒
Client mclient = Client.getInstance(service);
mclient.setProperty(CommonsHttpMessageSender.HTTP_CLIENT_PARAMS, params);
public Client loadClient() throws MalformedURLException, Exception{
Client client = new Client(new URL(url));
client.setTimeout(20000);
HttpClientParams params = new HttpClientParams();
// 避免'Expect: 100-continue' handshake
params.setParameter(HttpClientParams.USE_EXPECT_CONTINUE,Boolean.FALSE);
//设置ws连接超时时间
params.setParameter(HttpClientParams.CONNECTION_MANAGER_TIMEOUT, 20000l);
client.setProperty(CommonsHttpMessageSender.HTTP_CLIENT_PARAMS,params);
return client;
}
以上的做法在实际项目中发现行不通,现修改为:
URL _url = new URL(url);
HttpURLConnection httpConnection = (HttpURLConnection)_url.openConnection();
httpConnection.setReadTimeout(20000);//设置http连接的读超时,单位是毫秒
httpConnection.connect();
Client _client = new Client(httpConnection.getInputStream(), null);
_client.setProperty(CommonsHttpMessageSender.HTTP_TIMEOUT, String.valueOf(20000 ));//设置发送的超时限制,单位是毫秒;
_client.setProperty(CommonsHttpMessageSender.DISABLE_KEEP_ALIVE, "true");
_client.setProperty(CommonsHttpMessageSender.DISABLE_EXPECT_CONTINUE, "true");
分享到:
相关推荐
java使用XFire调用webService接口
此程序demo详细描述的从发布接口到调用接口的全部过程,详细描述了Xfire调用webservice参数无法传递的问题。
Java使用XFire调用WebService接口.docx
xfire调用webservice
此程序demo详细描述的从发布接口到调用接口的全部过程,详细描述了Xfire调用webservice参数无法传递的问题。
java xfire调用webservice 调用本地自己写的webService 调用网站webxml.com.cn的webservice
Java使用XFire调用WebService接口.docx
本例子使用XFire发布WebService+XFire调用WebService-示例
java用XFire调用webservice例子.docxjava用XFire调用webservice例子.docx
使用xfire开发webservice的客户端需要的完整jar包,直接导入开放就可以用了。使用Xfire构建JAVA的webService全过程(从服务端到客户端)
NULL 博文链接:https://zhangzhaoaaa.iteye.com/blog/1706367
利用Xfire调用WebService(Java)
xfire开发webservice与调用 用起来比axis简单,容易上手。没有axis那么复杂。性能也比axis好。附件里面包含教程文档及实例代码
Xfire客户端调用webservice接口所需 jar包,亲测可用。
xfire开发webservice以及Android利用ksoap2访问webservice。包括源码和jar包
NULL 博文链接:https://thoreau.iteye.com/blog/1754054
这个自己写的xFire发布WebService,包含发布和调用,可以用在企业中,而且所用的jar也比较少,不会出现很多jar的问题,一共才9个jar,[commons-codec-1.3.jar,commons-httpclient-3.0.jar,commons-logging-1.0.4.jar,...
使用xfire创建webservice极简demo,包含服务端,及客户端调用代码
NULL 博文链接:https://hi-beijing.iteye.com/blog/1299951