2011-09-02 3 views
0

배포 한 웹 서비스에 요청을 보내는 방법을 이해하는 데 문제가 있습니다. 나는 다음과 같은 튜토리얼을 따라 갔다. 성공적으로 적용한 잘만 된 튜토리얼은 다음과 같다. http://wso2.org/library/1719축 2에서 "확장 모드"코드 생성

. 튜토리얼은 간단했고 웹 서비스 클라이언트를 쉽게 만들었습니다. 내가 한 모든 것은 노출 된 웹 서비스 메서드에서 "요청"개체를 만들고 인수를 설정 한 다음 웹 서비스 스텁을 사용하여 노출 된 웹 서비스 메서드에 요청 개체를 전달하고 응답을 얻었습니다.

이제는 웹 서비스 클라이언트를 구축해야하는 WSDL 파일을 받았습니다. 문제는 WSDL에서 생성 된 파일이 내가 따라 한 튜토리얼의 파일과 크게 다르다는 것이다. 나중에 ADB를 사용하여 클라이언트를 생성 할 때 "외부 요소 및 명명 된 복합 유형 각각에 대한 클래스"를 생성하는 "확장 모드"라는 모드가 있음을 알게되었습니다 (http://axis.apache.org/axis2/). java/core/docs/adb/adb-howto.html # gen_modes). 문제는 요청 객체를 생성하고 생성 된 클래스에서 웹 서비스의 응답을받는 방법을 이해할 수 없다는 것입니다. 위의 코드에서

GetMfrInventoryProductItemsListE wrapper = new GetMfrInventoryProductItemsListE(); 
GetMfrInventoryProductItemsList request = new GetMfrInventoryProductItemsList(); 
request.setArg0(deviceId); 
request.setArg1(macAddresses); 
request.setArg2(mfrKey); 
wrapper.setGetMfrInventoryProductItemsList(request); 
GetMfrInventoryProductItemsListResponseE wrapperResponse = wmService.getMfrInventoryProductItemsList(wrapper); 
GetMfrInventoryProductItemsListResponse response = wrapperResponse.getGetMfrInventoryProductItemsListResponse(); 
return response.get_return(); 

getGetMfrInventoryProductItemsList 내 노출 웹 서비스 메서드의 이름이고, wmService 내 그루터기 다음과 같이 내 최선이었다. 단지

GetMfrInventoryProductItemsListResponseE wrapperResponse = wmService.getMfrInventoryProductItemsList(wrapper); 

내가 :

org.apache.axis2.AxisFault: Read timed out 
    at org.apache.axis2.AxisFault.makeFault(AxisFault.java:430) 
    at org.apache.axis2.transport.http.HTTPSender.sendViaPost(HTTPSender.java:197) 
    at org.apache.axis2.transport.http.HTTPSender.send(HTTPSender.java:75) 
    at org.apache.axis2.transport.http.CommonsHTTPTransportSender.writeMessageWithCommons(CommonsHTTPTransportSender.java:404) 
    at org.apache.axis2.transport.http.CommonsHTTPTransportSender.invoke(CommonsHTTPTransportSender.java:231) 
    at org.apache.axis2.engine.AxisEngine.send(AxisEngine.java:443) 
    at org.apache.axis2.description.OutInAxisOperationClient.send(OutInAxisOperation.java:406) 
    at org.apache.axis2.description.OutInAxisOperationClient.executeImpl(OutInAxisOperation.java:229) 
    at org.apache.axis2.client.OperationClient.execute(OperationClient.java:165) 
    at wavemark.wmservice.soap.WMServiceStub.getMfrInventoryProductItemsList(WMServiceStub.java:3275) 
    at wavemark.linkserver.supplierconnect.controller.WsStub.getMfrInventoryProductItemsList(WsStub.java:107) 
    at wavemark.linkserver.supplierconnect.controller.WsManager.getProductItems(WsManager.java:384) 
    at wavemark.linkserver.supplierconnect.webservices.SupplierConnect.getProductItems(SupplierConnect.java:396) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) 
    at java.lang.reflect.Method.invoke(Method.java:585) 
    at org.apache.axis2.rpc.receivers.RPCUtil.invokeServiceClass(RPCUtil.java:212) 
    at org.apache.axis2.rpc.receivers.RPCMessageReceiver.invokeBusinessLogic(RPCMessageReceiver.java:117) 
    at org.apache.axis2.receivers.AbstractInOutMessageReceiver.invokeBusinessLogic(AbstractInOutMessageReceiver.java:40) 
    at org.apache.axis2.receivers.AbstractMessageReceiver.receive(AbstractMessageReceiver.java:110) 
    at org.apache.axis2.engine.AxisEngine.receive(AxisEngine.java:181) 
    at org.apache.axis2.transport.http.HTTPTransportUtils.processHTTPPostRequest(HTTPTransportUtils.java:172) 
    at org.apache.axis2.transport.http.AxisServlet.doPost(AxisServlet.java:146) 
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:710) 
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:803) 
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290) 
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) 
    at org.jboss.web.tomcat.filters.ReplyHeaderFilter.doFilter(ReplyHeaderFilter.java:96) 
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235) 
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) 
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:230) 
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175) 
    at org.jboss.web.tomcat.security.SecurityAssociationValve.invoke(SecurityAssociationValve.java:179) 
    at org.jboss.web.tomcat.security.JaccContextValve.invoke(JaccContextValve.java:84) 
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128) 
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:104) 
    at org.jboss.web.tomcat.service.jca.CachedConnectionValve.invoke(CachedConnectionValve.java:156) 
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109) 
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:241) 
    at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:844) 
    at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:580) 
    at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447) 
    at java.lang.Thread.run(Thread.java:595) 
Caused by: java.net.SocketTimeoutException: Read timed out 
    at java.net.SocketInputStream.socketRead0(Native Method) 
    at java.net.SocketInputStream.read(SocketInputStream.java:129) 
    at java.io.BufferedInputStream.fill(BufferedInputStream.java:218) 
    at java.io.BufferedInputStream.read(BufferedInputStream.java:235) 
    at org.apache.commons.httpclient.HttpParser.readRawLine(HttpParser.java:78) 
    at org.apache.commons.httpclient.HttpParser.readLine(HttpParser.java:106) 
    at org.apache.commons.httpclient.HttpConnection.readLine(HttpConnection.java:1116) 
    at org.apache.commons.httpclient.MultiThreadedHttpConnectionManager$HttpConnectionAdapter.readLine(MultiThreadedHttpConnectionManager.java:1413) 
    at org.apache.commons.httpclient.HttpMethodBase.readStatusLine(HttpMethodBase.java:1973) 
    at org.apache.commons.httpclient.HttpMethodBase.readResponse(HttpMethodBase.java:1735) 
    at org.apache.commons.httpclient.HttpMethodBase.execute(HttpMethodBase.java:1098) 
    at org.apache.commons.httpclient.HttpMethodDirector.executeWithRetry(HttpMethodDirector.java:398) 
    at org.apache.commons.httpclient.HttpMethodDirector.executeMethod(HttpMethodDirector.java:171) 
    at org.apache.commons.httpclient.HttpClient.executeMethod(HttpClient.java:397) 
    at org.apache.axis2.transport.http.AbstractHTTPSender.executeMethod(AbstractHTTPSender.java:621) 
    at org.apache.axis2.transport.http.HTTPSender.sendViaPost(HTTPSender.java:193) 
    ... 42 more 

문제를 디버깅하려고하면, 나는이 예외를 던지고 줄 것을 발견했다 :

이 결과는 다음과 같은 스택 추적했다 여러분이 요청/응답 객체를 사용하는 방식이 올바른지 말해 주길 바래. 도움이 많이 주어졌다.

+0

* ".. 스택 추적 .. 잘린 .."* 추적에 '원인으로 인한'부분이 있었습니까? –

+0

내 게시물에 나머지 스택 추적을 포함 시켰습니다. 나는 이것이 디버그하기가 더 쉽기를 바란다. –

답변

0

마지막으로, 문제를 해결하는 방법을 알아 냈습니다. 분명히 내가 작성한 웹 서비스 호출은 스택 추적이 표시 될 때까지 시간이 많이 걸렸습니다. 내 클라이언트 스텁을 인스턴스화 된 위치 그래서이 부분에 내 코드에 다음과 같은 추가 :

  wmService = new WMServiceStub(); 

      Options options = new Options(); 
      EndpointReference epr = new EndpointReference(url); 
      options.setTo(epr); 
      options.setProperty(HTTPConstants.SO_TIMEOUT, new Integer(300000));    

      wmService._getServiceClient().setOptions(options); 

이 5 분으로 축이 웹 서비스 '소켓 타임 아웃을 증가 결과, 대부분에 충분를해야하는 웹 서비스 호출. 일부 개발자에게 이것이 도움이되기를 바랍니다.

관련 문제