加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

使用XFire调用WebService需注意的事项

发布时间:2020-12-17 00:57:10 所属栏目:安全 来源:网络整理
导读:使用XFire调用WebService需注意的事项 (一):注意过滤输入和输出参数空白字符 如果出现空白字符解析不了导致调用失败,导致下面的异常: org.codehaus.xfire.fault.XFireFault: Error writing document.. Nested exception is com.ctc.wstx.exc.WstxIOExcepti

使用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");

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读