我使用了jboss 5.1
我在我的项目中使用了soap webservice。
大部分时间Web服务都有效 正确地
但有时候我有这个错误:
faultCode: {http://schemas.xmlsoap.org/soap/envelope/}Server.userException
faultSubcode:
faultString: java.net.SocketTimeoutException: Read timed out
faultActor:
faultNode:
faultDetail:
{http://xml.apache.org/axis/}stackTrace:java.net.SocketTimeoutException: Read timed out
at java.net.SocketInputStream.socketRead0(Native Method)
at java.net.SocketInputStream.read(SocketInputStream.java:129)
at java.io.BufferedInputStream.fill(BufferedInputStream.java:218)
at java.io.BufferedInputStream.read(BufferedInputStream.java:237)
at org.apache.axis.transport.http.HTTPSender.readHeadersFromSocket(HTTPSender.java:583)
at org.apache.axis.transport.http.HTTPSender.invoke(HTTPSender.java:143)
at org.apache.axis.strategies.InvocationStrategy.visit(InvocationStrategy.java:32)
at org.apache.axis.SimpleChain.doVisiting(SimpleChain.java:118)
at org.apache.axis.SimpleChain.invoke(SimpleChain.java:83)
at org.apache.axis.client.AxisClient.invoke(AxisClient.java:165)
at org.apache.axis.client.Call.invokeEngine(Call.java:2784)
at org.apache.axis.client.Call.invoke(Call.java:2767)
at org.apache.axis.client.Call.invoke(Call.java:2443)
at org.apache.axis.client.Call.invoke(Call.java:2366)
at org.apache.axis.client.Call.invoke(Call.java:1812)
at com.web.service.BalanceServiceSoapBindingStub.getInfo(BalanceServiceSoapBindingStub.java:550)
at com.web.manager.impl.TestManagerImpl.newEmp(TestManagerImpl.java:893)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
这是我的肥皂客户端代码:
BalanceServiceServiceLocator balance = new BalanceServiceServiceLocator();
BalanceServiceSoapBindingStub service = new BalanceServiceSoapBindingStub(new URL(
balance.getBalanceServiceAddress()), balance);
EmployeeEntity employeeDetail = service.getInfo(matricule);
我认为我应该增加超时时间并尝试使用此代码:
BalanceServiceServiceLocator balance = new BalanceServiceServiceLocator();
BalanceServiceSoapBindingStub service = new BalanceServiceSoapBindingStub(new URL(
balance.getBalanceServiceAddress()), balance);
org.apache.axis.client.Stub s = service;
s.setTimeout(new Integer(1000*120));
EmployeeEntity employeeDetail = service.getInfo(matricule);
是解决问题的最佳方法
已更新:
有时在增加超时后我解决了我的问题 但有时会再次出现相同的错误:faultString:java.net.SocketTimeoutException:read timed out
请注意,soap webservice客户端和服务器位于两个不同的网络范围内
是网络,防火墙的问题 是否可以在防火墙中进行配置以接受HTTP流量,
或如何修改我的代码以处理此异常含义 我在我的应用程序中显示我有网络问题 例如30秒之后没有得到回复