有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java无法在JAXWS Eclipse生成的客户端上设置自定义超时

我有一个现有的WSDL,并从中使用eclipse 4.5版来生成一个客户端。这给了我一个代码生成的代理提供程序。我尝试了以下方法,但没有成功(顺便说一下,我使用的是java 7.079):

this.webservice = new ENC3WebAppServicePortProxy(username, password);
Descriptor desc = webservice._getDescriptor();
desc.setEndpoint(webserviceURL);

// Set timeout
BindingProvider bp = (BindingProvider) webservice._getDescriptor().getProxy();
Map<String, Object> requestContext = bp.getRequestContext();
requestContext.put("com.sun.xml.ws.connect.timeout", 120000); // Timeout in millis
requestContext.put("com.sun.xml.ws.request.timeout", 120000); // Timeout in millis

你知道为什么这行不通吗

仅供参考,我也尝试了使用ibm ws bnd文件让Liberty覆盖超时设置的方法,但事实证明这更加困难,因为无法发现他们希望我在代码生成的客户端上放置@WebServiceRef注释的位置。客户机是由代码生成的,这一事实让我无法完全理解它是如何工作的,而我没有那么多时间


共 (1) 个答案

  1. # 1 楼答案

    这是我设置端点、基本身份验证和超时的方式。此代码与您的代码仅在获取“服务”实例的方式上有所不同

    import com.sun.xml.ws.developer.JAXWSProperties;
    import java.net.URL;
    import javax.xml.ws.BindingProvider;
    
    public void foo(Object service) {
        if (service instanceof BindingProvider) {
            BindingProvider bp = (BindingProvider)service;
            Map<String, Object> ctx = bp.getRequestContext();
            ctx.put(BindingProvider.ENDPOINT_ADDRESS_PROPERTY, new URL("http://localhost/url-to-endpoint"));
            ctx.put(JAXWSProperties.CONNECT_TIMEOUT, 10000);
            ctx.put(JAXWSProperties.REQUEST_TIMEOUT, 60000);
            ctx.put(BindingProvider.USERNAME_PROPERTY, "auth_user");
            ctx.put(BindingProvider.PASSWORD_PROPERTY, "auth_password");            
        }
    }