从另一个Web服务调用Web服务的异常

时间:2015-08-03 11:18:26

标签: java web-services axis2

我需要在另一个Web服务中调用axis2 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");

任何人都可以帮忙吗?

1 个答案:

答案 0 :(得分: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>

然后,我不完全确定,我也不知道为什么使用独立的线程可以正常工作。