2016-01-08 35 views
0

我有一個現有的WSDL,並使用eclipse版本4.5生成客戶端。這給了我一個代碼生成的代理提供者。我試過以下沒有成功(順便說一句,我使用java 7.079):無法在JAX-WS上設置自定義超時Eclipse生成的客戶端

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

這是我設置端點,basic-auth和timeout的方式。此代碼僅與您獲得「服務」實例的方式不同。

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");    
    } 
} 
+0

實際上,它似乎是你從com.sun.xml.ws.developer調用JASXWSProperties,我不這樣做。讓我嘗試一下。爲什麼哦爲什麼有這麼多不同的答案,似乎應該是非常直截了當的? – Matt1776

+0

我實際上沒有可用的com.sun.xml.ws包,我也沒有javax.xml.ws.client包,它似乎與jaxws-rt.jar有關 - 這個jar文件從我的SE Java7.079 Oracle下載。我很茫然。 – Matt1776

+0

你是對的我的JAXWSProperties來自jaxws-rt-2.2.10.jar。但常量的值與您直接設置的值相同。 ==> public static final String CONNECT_TIMEOUT = 「com.sun.xml.ws.connect.timeout」; ==> public static final String REQUEST_TIMEOUT = 「com.sun.xml.ws.request.timeout」; –

相關問題