java - 服务器不响应时 JAX-WS SOAP 服务卡住

标签 java web-services soap wsdl jax-ws

我已经使用 JAX-WS wsgen 工具从 wsdl 模式实现了 SOAP 客户端。
这是在 Windows 32 位 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);
    }

    //....
}

最后这个Service的方法直接挂了

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

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

谢谢!

最佳答案

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

关于java - 服务器不响应时 JAX-WS SOAP 服务卡住,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21156280/

相关文章:

java - java中大数的十进制格式

java - 在链表中插入节点的逻辑错误(Java)

iphone - 需要为我的 iOS 游戏制作一个 DLC "packet"系统

java - Web 服务返回 java.lang.reflect.InvocationTargetException

java - 如何在Tomcat中启动Mule?

java - 字段变量产生与递归局部变量不同的结果

java - 如何使用 SolrJ Java 应用程序索引不同类型的文件(pdf、word、html 等)

web-services - 我可以在没有 JDK(仅 JRE)的机器上在 Tomcat 下运行 Grails war 吗?

php - 在 PHP 中使用命名空间解析 SOAP 响应

java - 通过应用程序名称而不是bean名称访问Web服务oracle 12c?