我的项目是webservice的客户端,今天在接一个大的订单时报错,算了下,不到300K,报错如下
java.net.SocketTimeoutException: Read timed out
在stackoverflow上查了下,发现可以通过设置超时时间解决,代码如下:
IEAMDtNegotiationRecordService service = new IEAMDtNegotiationRecordService();
IEAMDtNegotiationRecordServicePortType servicePort = service.getIEAMDtNegotiationRecordServiceHttpPort();
Map<String, Object> requestContext = ((javax.xml.ws.BindingProvider)servicePort).getRequestContext();
requestContext.put("com.sun.xml.internal.ws.connect.timeout", 150000); // Timeout in millis
requestContext.put("com.sun.xml.internal.ws.request.timeout", 150000); // Timeout in millis
但是在我的工程里这段代码无效,把webservice放到一个新建的工程里没问题,原来超时的也不超时了可以正常接收到了,大概90s。
可能是跟公司平台的底层代码有关系,明天继续找。