当服务器没有响应时,JAX-WS SOAP服务会冻结

时间:2014-01-16 08:00:50

标签: java web-services soap wsdl jax-ws

我使用JAX-WS wsgen工具从wsdl架构实现了SOAP客户端 这是在Windows 32bit JDK 1.6.0_45,JAX-WS RI 2.1.6,生成的源版本:2.1

下完成的。


当服务没有响应时,我的代码在尝试调用服务构造函数时就会挂起。

我花了很长时间寻找解决方案。我发现了:
1)添加超时系统属性,如:

sun.rmi.transport.connectionTimeout=50
sun.rmi.transport.tcp.handshakeTimeout=50
sun.rmi.transport.tcp.responseTimeout=50
sun.rmi.transport.tcp.readTimeout=50
sun.net.client.defaultConnectTimeout=50
sun.net.client.defaultReadTimeout=50
timeout=50

2)向BindingProvider的RequestContext添加超时属性:

port = service.getExampleServicePort();
        BindingProvider prov = (BindingProvider) port;
        prov.getRequestContext().put("com.sun.xml.internal.ws.request.timeout", requestTimeout);
        prov.getRequestContext().put("com.sun.xml.ws.request.timeout", requestTimeout);
        prov.getRequestContext().put("com.sun.xml.internal.ws.connect.timeout", connectTimeout);
        prov.getRequestContext().put("com.sun.xml.ws.connect.timeout", connectTimeout);

问题是,代码在我获得端口之前冻结,特别是当我调用生成的服务类的构造函数时,它扩展了javax.xml.ws.Service:

   service = new ExampleService(url, new QName("http://query.services.example.com/", "ExampleService")); 
//freezes here

以下是导致问题的构造函数:

/**
 * This class was generated by the JAX-WS RI.
 * JAX-WS RI 2.1.6 in JDK 6
 * Generated source version: 2.1
 * 
 */
@WebServiceClient(name = "ExampleService", targetNamespace = "http://query.services.example.com/", wsdlLocation = "http://myservicehost/services/Query.asmx?WSDL")
public class ExampleService
    extends Service
{

    public ExampleService(URL wsdlLocation, QName serviceName) {
        super(wsdlLocation, serviceName);
    }

    //....
}

最后,这种服务方法只是挂起

protected Service(java.net.URL wsdlDocumentLocation, QName serviceName) {
        delegate = Provider.provider().createServiceDelegate(wsdlDocumentLocation,
                serviceName,
                this.getClass());
    }

如果服务没有响应(不使用Apache Axis或JBoss WS等其他库),如何防止我的ExampleService冻结?

谢谢!

1 个答案:

答案 0 :(得分:2)

我相信同样的answer适用于您的问题 - 在本地保存WSDL文档。

相关问题