2014-09-11 27 views
0

일부 데이터를 SOAP 서비스로 보내려고합니다. 이제 WSDL을 기반으로 WSDL2Java로 몇 개의 클래스를 만들었습니다. 이제 통화가 1 분 이상 걸리는 반면 시간 제한은 1 분에 설정됩니다. 타임 아웃을 변경하려면 어떻게해야합니까? 비누 : WSDL2Java를 사용하여 TimeOut을 설정하십시오.

Caused by: javax.xml.ws.WebServiceException: Could not send Message. 
    at org.apache.cxf.jaxws.JaxWsClientProxy.invoke(JaxWsClientProxy.java:145) 
    at com.sun.proxy.$Proxy164.salesOrderProcess(Unknown Source) 
    at com.project.b2b.cq.shimanoexportorder.SalesOrderPrepareInterceptor.onPrepare(SalesOrderPrepareInterceptor.java:133) 
    at com.project.b2b.cq.shimanoexportorder.SalesOrderPrepareInterceptor.onPrepare(SalesOrderPrepareInterceptor.java:1) 
    at de.cq.platform.servicelayer.internal.model.impl.wrapper.ModelWrapper.invokePrepareInterceptors(ModelWrapper.java:251) 
    ... 124 more 
Caused by: java.net.SocketTimeoutException: SocketTimeoutException invoking {URL}: Read timed out 
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) 
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57) 
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) 
    at java.lang.reflect.Constructor.newInstance(Constructor.java:526) 
    at org.apache.cxf.transport.http.HTTPConduit$WrappedOutputStream.mapException(HTTPConduit.java:1422) 
    at org.apache.cxf.transport.http.HTTPConduit$WrappedOutputStream.close(HTTPConduit.java:1407) 
    at org.apache.cxf.transport.AbstractConduit.close(AbstractConduit.java:56) 
    at org.apache.cxf.transport.http.HTTPConduit.close(HTTPConduit.java:640) 
    at org.apache.cxf.interceptor.MessageSenderInterceptor$MessageSenderEndingInterceptor.handleMessage(MessageSenderInterceptor.java:62) 
    at org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java:263) 
    at org.apache.cxf.endpoint.ClientImpl.doInvoke(ClientImpl.java:519) 
    at org.apache.cxf.endpoint.ClientImpl.invoke(ClientImpl.java:449) 
    at org.apache.cxf.endpoint.ClientImpl.invoke(ClientImpl.java:352) 
    at org.apache.cxf.endpoint.ClientImpl.invoke(ClientImpl.java:304) 
    at org.apache.cxf.frontend.ClientProxy.invokeSync(ClientProxy.java:88) 
    at org.apache.cxf.jaxws.JaxWsClientProxy.invoke(JaxWsClientProxy.java:134) 
    ... 128 more 
Caused by: java.net.SocketTimeoutException: Read timed out 
    at java.net.SocketInputStream.socketRead0(Native Method) 
    at java.net.SocketInputStream.read(SocketInputStream.java:152) 
    at java.net.SocketInputStream.read(SocketInputStream.java:122) 
    at java.io.BufferedInputStream.fill(BufferedInputStream.java:235) 
    at java.io.BufferedInputStream.read1(BufferedInputStream.java:275) 
    at java.io.BufferedInputStream.read(BufferedInputStream.java:334) 
    at sun.net.www.http.HttpClient.parseHTTPHeader(HttpClient.java:687) 
    at sun.net.www.http.HttpClient.parseHTTP(HttpClient.java:633) 
    at sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1323) 
    at java.net.HttpURLConnection.getResponseCode(HttpURLConnection.java:468) 
    at org.apache.cxf.transport.http.HTTPConduit$WrappedOutputStream.handleResponseInternal(HTTPConduit.java:1527) 
    at org.apache.cxf.transport.http.HTTPConduit$WrappedOutputStream.handleResponse(HTTPConduit.java:1485) 
    at org.apache.cxf.transport.http.HTTPConduit$WrappedOutputStream.close(HTTPConduit.java:1393) 
    ... 138 more 

은 이미 다음과 같은 시도,하지만하지 어떤 영향을

final SalesOrderServiceSoap salesOrderServiceSoap = new SalesOrderService(url).getSalesOrderServiceSoap(); 
    final Map<String, Object> requestContext = ((BindingProvider) salesOrderServiceSoap).getRequestContext(); 
    requestContext.put(BindingProviderProperties.REQUEST_TIMEOUT, Integer.valueOf(120000)); // Timeout in millis 
    requestContext.put(BindingProviderProperties.CONNECT_TIMEOUT, Integer.valueOf(120000)); // Timeout in millis 

답변

1

을 가지고 나는 다음과 같은 코드를 사용하여 문제를 해결처럼 보인다 :

가져 오기 :

import org.apache.cxf.endpoint.Client; 
    import org.apache.cxf.frontend.ClientProxy; 
    import org.apache.cxf.transport.http.HTTPConduit; 
    import org.apache.cxf.transports.http.configuration.HTTPClientPolicy; 

코드 :

final SalesOrderServiceSoap salesOrderServiceSoap = new SalesOrderService(url).getSalesOrderServiceSoap(); //The service you need to use 
    final Client cl = ClientProxy.getClient(salesOrderServiceSoap); 
    final HTTPConduit httpConduit = (HTTPConduit) cl.getConduit(); 
    final HTTPClientPolicy httpClientPolicy = new HTTPClientPolicy(); 

    httpClientPolicy.setConnectionTimeout(CONNECTION_TIMEOUT); //Time in milliseconds 
    httpClientPolicy.setReceiveTimeout(RECEIVE_TIMEOUT); //Time in milliseconds 
    httpConduit.setClient(httpClientPolicy); 

다음과 같은 라이브러리가 필요합니다 :

cxf-core-3.0.1.jar 
    cxf-rt-frontend-simple-3.0.1.jar 
    cxf-rt-transports-http.3.0.1.jar