2011-05-08 167 views
1

我有一個名爲DownloadServer的Axis2 Web服務,它調用另一個名爲Publisher的Axis2 Web服務。他們部署在同一臺服務器上。這是兩個Web服務的代碼。從另一個Web服務調用Web服務時出現Axis2錯誤

在課堂Publisher.java:

public String getFileServers(){ 
    return "http://localhost:8080/axis2/services/FileServer1?wsdl http://localhost:8080/axis2/services/FileServer2?wsdl"; 
} 

在課堂DownloadServer.java:

public synchronized String getBandwidth(String title) { 
     try { 
      // Call Publisher service to get addresses of File Servers 
      RPCServiceClient serviceClient = new RPCServiceClient(); 
      Options options = serviceClient.getOptions(); 
      EndpointReference targetEPR = new EndpointReference(
        "http://localhost:8080/axis2/services/Publisher?wsdl"); 
      options.setProperty(HTTPConstants.AUTO_RELEASE_CONNECTION, 
        org.apache.axis2.Constants.VALUE_TRUE); 
      options.setTo(targetEPR); 
      QName methodName = new QName("http://ws.apache.org/axis2", 
        "getFileServers"); 
      Class[] returnTypes = new Class[] { String.class }; 
      Object[] args = new Object[] {}; 
      // Exception occurs on the next line 
      Object[] response = serviceClient.invokeBlocking(methodName, args, 
        returnTypes); 
      serviceClient.cleanupTransport(); 
      String fileServers = (String) response[0]; 

      return fileServers 
     } catch (Exception e) { 
      e.printStackTrace(out); 
      return "0"; 
     } 
    } 

我正在以下Axis2的故障:

org.apache.axis2.AxisFault: The server did not recognise the action which it received: 
    at org.apache.axis2.handlers.addressing.AddressingInFaultHandler.invoke(AddressingInFaultHandler.java:114) 
    at org.apache.axis2.engine.Phase.invoke(Phase.java:318) 
    at org.apache.axis2.engine.AxisEngine.invoke(AxisEngine.java:254) 
    at org.apache.axis2.engine.AxisEngine.receive(AxisEngine.java:160) 
    at org.apache.axis2.description.OutInAxisOperationClient.handleResponse(OutInAxisOperation.java:364) 
    at org.apache.axis2.description.OutInAxisOperationClient.send(OutInAxisOperation.java:417) 
    at org.apache.axis2.description.OutInAxisOperationClient.executeImpl(OutInAxisOperation.java:229) 
    at org.apache.axis2.client.OperationClient.execute(OperationClient.java:165) 
    at org.apache.axis2.client.ServiceClient.sendReceive(ServiceClient.java:540) 
    at org.apache.axis2.client.ServiceClient.sendReceive(ServiceClient.java:521) 
    at org.apache.axis2.rpc.client.RPCServiceClient.invokeBlocking(RPCServiceClient.java:102) 
    at DownloadServer.getBandwidth(DownloadServer.java:56) 
    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:597) 
    at org.apache.axis2.rpc.receivers.RPCUtil.invokeServiceClass(RPCUtil.java:194) 
    at org.apache.axis2.rpc.receivers.RPCMessageReceiver.invokeBusinessLogic(RPCMessageReceiver.java:102) 
    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:173) 
    at org.apache.axis2.transport.http.HTTPTransportUtils.processHTTPPostRequest(HTTPTransportUtils.java:173) 
    at org.apache.axis2.transport.http.AxisServlet.doPost(AxisServlet.java:144) 
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:637) 
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:717) 
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290) 
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) 
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233) 
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191) 
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127) 
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102) 
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109) 
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:298) 
    at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:859) 
    at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:588) 
    at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489) 
    at java.lang.Thread.run(Thread.java:662) 

有趣的方面是,當我運行DownloadServer類作爲普通Java應用程序(不作爲Web服務調用)時,我不會t得到相同的例外。

有沒有人有任何想法當相同的代碼作爲一個Web服務執行時可能會出錯?

回答

0

好的,我最終找到了答案。看起來像明確地設置SOAP操作解決了問題。它可以這樣完成:

options.setAction("urn:getFileServers");