WebService 클라이언트에서 작업 중이고 WebService 호출에 대한 시간 초과를 설정하려고합니다. 나는 다른 접근법을 시도했지만 여전히 이것을 성취 할 수 없다. WSDL에서 코드 생성을 위해 JAX-WS를 사용하고 있습니다. 저는 JBoss-eap-5.1을 App Server 및 JDK1.6.0_27로 사용하고 있습니다. 시간 제한을 설정하기 위해 이러한 diff 접근 방식을 찾았지만 어느 것도 나를 위해 일하고 있지 않습니다. 지금은 무엇을했는지에 대한 JAX-WS WebService 호출에 대한 시간 제한을 설정하는 방법
URL mbr_service_url = new URL(null,GlobalVars.MemberService_WSDL, new URLStreamHandler() {
@Override
protected URLConnection openConnection(URL url) throws IOException {
URL clone_url = new URL(url.toString());
HttpURLConnection clone_urlconnection = (HttpURLConnection) clone_url.openConnection();
// TimeOut settings
clone_urlconnection.setConnectTimeout(10000);
clone_urlconnection.setReadTimeout(10000);
return (clone_urlconnection);
}
});
MemberService service = new MemberService(mbr_service_url);
MemberPortType soap = service.getMemberPort();
ObjectFactory factory = new ObjectFactory();
MemberEligibilityWithEnrollmentSourceRequest request = factory.createMemberEligibilityWithEnrollmentSourceRequest();
request.setMemberId(GlobalVars.MemberId);
request.setEligibilityDate(value);
((BindingProvider) soap).getRequestContext().put(com.sun.xml.ws.client.BindingProviderProperties.REQUEST_TIMEOUT, 10000);
((BindingProvider) soap).getRequestContext().put(com.sun.xml.ws.client.BindingProviderProperties.CONNECT_TIMEOUT, 10000);
((BindingProvider) soap).getRequestContext().put(com.sun.xml.internal.ws.client.BindingProviderProperties.REQUEST_TIMEOUT, 10000);
((BindingProvider) soap).getRequestContext().put(com.sun.xml.internal.ws.client.BindingProviderProperties.CONNECT_TIMEOUT, 10000);
((BindingProvider) soap).getRequestContext().put(com.sun.xml.ws.developer.JAXWSProperties.REQUEST_TIMEOUT, 10000);
((BindingProvider) soap).getRequestContext().put(com.sun.xml.ws.developer.JAXWSProperties.CONNECT_TIMEOUT, 10000);
((BindingProvider) soap).getRequestContext().put(com.sun.xml.internal.ws.developer.JAXWSProperties.REQUEST_TIMEOUT, 10000);
((BindingProvider) soap).getRequestContext().put(com.sun.xml.internal.ws.developer.JAXWSProperties.CONNECT_TIMEOUT, 10000);
System.setProperty("sun.net.client.defaultConnectTimeout", "10000");
System.setProperty("sun.net.client.defaultReadTimeout", "10000");
MemberEligibilityWithEnrollmentSourceResponse response = soap.getMemberEligibilityWithEnrollmentSource(request);
logger.log("Call to member service finished.");
, 나는 집행자 내부에서 내 웹 서비스 방법을 불렀다한다. 나는 그 좋은 접근 방식이 아니라 나를 위해 일한다는 것을 안다. 얘들 아, 제게 올바른 방법으로 도와주세요.
javax.xml.ws.client.connectionTimeout
javax.xml.ws.client.receiveTimeout
:
logger.log("Parameters set for createorUpdateContact call.\nGoing in Executor Service.");
ExecutorService executorService = Executors.newSingleThreadExecutor();
executorService.execute(new Runnable() {
@Override
public void run() {
try {
response = soap.getMemberEligibilityWithEnrollmentSource(request);
} catch (MemberServiceException ex) {
logger.log("Exception in call to WebService", ex.fillInStackTrace());
}
}
});
executorService.shutdown();
try {
executorService.awaitTermination(GlobalVars.WSCallTimeOut, TimeUnit.SECONDS);
} catch (InterruptedException ex) {
logger.log("Thread Interrupted!", ex);
executorService.shutdownNow();
}
StubExt.PROPERTY_CLIENT_TIMEOUT이 나를 위해 일하지만, 예외가 전용 후'3 * timeoutMillisecond' 를 throw되는 com.sun.xml.internal.ws.developer.JAXWSProperties에서 위 필드의
값 예 : 예외보다 'timeoutMillisecond = 3000'이 9000 밀리 초 후에 throw되지만 로그 아웃 파일에'Timeout after : 3000ms'이 기록 된 경우 – mariami
감사합니다. @mariami 저에게 효과적입니다. 그리고 예외는 3 * timeoutMillisecond 후에가 아니라 적절한 시간에 throw됩니다. 그것이 작동하도록하기 위해 jax와 관련된 jboss lib에서 jar를 제거해야했지만 그렇지 않은 경우 NoClassDefFoundError를 제공했습니다. javax/xml/ws/spi/Provider21. –