2015-08-03 113 views
0

我需要在另一個Web服務內調用axis2 Web服務。直到現在,我正在使用一個線程來完成它。我創建了一個線程並調用了Web服務,並且工作正常。從另一個Web服務調用Web服務的例外

但是,該線程並不是真的需要,因爲我需要爲迴應而放棄。所以,我已經改變了它,並直接調用它,但它返回以下錯誤

The server did not recognise the action which it received: 
    at es.cecabank.ealiapagos.servicios.wsimpl.operaciones.ws_operaciones_pagoconcargo.WS_operaciones_pagoConCargoSkeleton.realizarConciliacion(WS_operaciones_pagoConCargoSkeleton.java:471) 
    at es.cecabank.ealiapagos.servicios.wsimpl.operaciones.ws_operaciones_pagoconcargo.WS_operaciones_pagoConCargoSkeleton.operacionesPagoConCargo(WS_operaciones_pagoConCargoSkeleton.java:174) 
    at es.cecabank.ealiapagos.servicios.wsimpl.operaciones.ws_operaciones_pagoconcargo.WS_operaciones_pagoConCargoMessageReceiverInOut.invokeBusinessLogic(WS_operaciones_pagoConCargoMessageReceiverInOut.java:64) 
    at org.apache.axis2.receivers.AbstractInOutMessageReceiver.invokeBusinessLogic(AbstractInOutMessageReceiver.java:40) 
    at org.apache.axis2.receivers.AbstractMessageReceiver.receive(AbstractMessageReceiver.java:114) 
    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:754) 
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:847) 
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:295) 
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:214) 
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:230) 
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:149) 
    at org.jboss.as.jpa.interceptor.WebNonTxEmCloserValve.invoke(WebNonTxEmCloserValve.java:50) 
    at org.jboss.as.jpa.interceptor.WebNonTxEmCloserValve.invoke(WebNonTxEmCloserValve.java:50) 
    at org.jboss.as.web.security.SecurityContextAssociationValve.invoke(SecurityContextAssociationValve.java:169) 
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:145) 
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:97) 
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:102) 
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:336) 
    at org.apache.coyote.ajp.AjpProcessor.process(AjpProcessor.java:488) 
    at org.apache.coyote.ajp.AjpProtocol$AjpConnectionHandler.process(AjpProtocol.java:420) 
    at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:920) 
    at java.lang.Thread.run(Thread.java:745) 

我掙扎看到的這個原因。我發現一如既往地在存根中設置了該操作。

_operationClient.getOptions().setAction("op3215"); 

任何人都可以幫忙嗎?

回答

0

在研究軸代碼後,​​我找到了解決方案。用_operationClient.execute(true)實際執行操作之前; ,我改變了消息上下文中的一個屬性。

_messageContext.setProperty(AddressingConstants.DISABLE_ADDRESSING_FOR_OUT_MESSAGES, true); 

這種方式現在可行。我不知道它是否會有其他影響。

至於錯誤的原因,我認爲它與我正在調用的服務的定義有關。它沒有爲輸入特定的名稱和輸出操作:

<wsdl:operation name="op3215"> 
    <soap:operation soapAction="op3215"/> 
    <wsdl:input> 
    <soap:body use="literal"/> 
    </wsdl:input> 
    <wsdl:output> 
    <soap:body use="literal"/> 
    </wsdl:output> 
</wsdl:operation> 

代替

<wsdl:operation name="op3215"> 
    <wsdlsoap:operation soapAction=""/> 
    <wsdl:input name="op3215"> 
     <wsdlsoap:body use="literal"/> 
    </wsdl:input> 
    <wsdl:output name="op3215"> 
     <wsdlsoap:body use="literal"/> 
    </wsdl:output> 
    </wsdl:operation> 

話又說回來,我不能完全肯定,我也不知道爲什麼使用獨立的線程工作得很好。