2013-07-02 76 views
0

全部,
我正在使用Axis2 Web服务。这些服务捆绑为.aar file并部署在WSO2 Application Server(AS)。我能够在运行于Windows environment以及Linux environment的WSO2 AS中部署生成的.aar。
问题是,
当我尝试访问在两个环境(Windows & Linux)中托管的POST服务时,我是getting response in Windows while getting the following error in the Linux环境。Axis2 Web服务POST请求在Linux中不工作 - 参数数量错误

java.lang.IllegalArgumentException: wrong number of arguments 
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) 
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
at java.lang.reflect.Method.invoke(Method.java:616) 
at org.apache.axis2.rpc.receivers.RPCUtil.invokeServiceClass(RPCUtil.java:178) 
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:180) 
at org.apache.synapse.transport.passthru.ServerWorker.processEntityEnclosingRequest(ServerWorker.java:434) 
at org.apache.synapse.transport.passthru.ServerWorker.run(ServerWorker.java:219) 
at org.apache.axis2.transport.base.threads.NativeWorkerPool$1.run(NativeWorkerPool.java:172) 
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1146) 
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) 
at java.lang.Thread.run(Thread.java:679) 
TID: [0] [ESB] [2013-07-02 04:18:22,576] ERROR {org.apache.synapse.transport.passthru.ServerWorker} - Error processing POST request for : /services/MyService/postRequest {org.apache.synapse.transport.passthru.ServerWorker} 
org.apache.axis2.AxisFault: wrong number of arguments 
at org.apache.axis2.AxisFault.makeFault(AxisFault.java:430) 
at org.apache.axis2.rpc.receivers.RPCMessageReceiver.invokeBusinessLogic(RPCMessageReceiver.java:211) 
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:180) 
at org.apache.synapse.transport.passthru.ServerWorker.processEntityEnclosingRequest(ServerWorker.java:434) 
at org.apache.synapse.transport.passthru.ServerWorker.run(ServerWorker.java:219) 
at org.apache.axis2.transport.base.threads.NativeWorkerPool$1.run(NativeWorkerPool.java:172) 
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1146) 
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) 
at java.lang.Thread.run(Thread.java:679) 
Caused by: java.lang.IllegalArgumentException: wrong number of arguments 
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) 
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
at java.lang.reflect.Method.invoke(Method.java:616) 
at org.apache.axis2.rpc.receivers.RPCUtil.invokeServiceClass(RPCUtil.java:178) 
at org.apache.axis2.rpc.receivers.RPCMessageReceiver.invokeBusinessLogic(RPCMessageReceiver.java:117) 
... 9 more. 

以下是输入我已经给:

URI: 

    https://localhost:8243/services/MyService/postRequest 

Input XML: 

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ser="http://service.sample.vijay.com"> 
    <soapenv:Header/> 
    <soapenv:Body> 
     <ser:postRequest> 
     <ser:paramOne>Hello</ser:paramOne> 
     <ser:paramTwo>All</ser:paramTwo> 
     <ser:paramThree>This is POST request</ser:paramThree> 
     </ser:postRequest> 
    </soapenv:Body> 
</soapenv:Envelope> 

当我尝试使用其他客户端来访问上述服务Windows machine器(Chrome浏览器 - > CREST插件),它返回我的预期成果。
但是,当我尝试使用相同的URI在Linux environment(主机地址单独更改为Linux IP)相同的请求,结束了上述错误(想知道什么可能是问题)。

Do I need to change any configuration in Linux machine or WSO2 Application Server in Linux machine? 

注:
当我更改URI到https://localhost:8243/services/MyService,在Linux中以及Windows其工作的罚款。但我的要求是在URI中使用Web方法名称(/postRequest here)。
请帮我解决这个奇怪的问题。
在此先感谢。

编辑:

我的services.xml是:

<serviceGroup name="AxisServices"> 
    <service name="MyService"> 
     <description> 
      Please Type your service description here 
     </description> 
     <messageReceivers> 
      <messageReceiver mep="http://www.w3.org/2004/08/wsdl/in-only" 
       class="org.apache.axis2.rpc.receivers.RPCInOnlyMessageReceiver"></messageReceiver> 
      <messageReceiver mep="http://www.w3.org/2004/08/wsdl/in-out" 
       class="org.apache.axis2.rpc.receivers.RPCMessageReceiver"></messageReceiver> 
     </messageReceivers> 
     <parameter name="ServiceClass" locked="false">com.vijay.sample.service.MyService</parameter> 
    </service> 

我的Java类:

package com.vijay.sample.service; 

public class MyService { 

    public String postRequest(String paramOne, String paramTwo, String paramThree) { 

     // Logic here 
     return "Success"; 
    } 
} 
+0

我只是问这确认。据我了解,你有两个独立的实例在Windows和Linux上运行。你有没有在两个实例中部署相同的文件?您是否也可以让我知道WSO2应用服务器版本? –

+0

是的,我正在运行2个不同的相同.aar文件的实例。我已经安装了ESB并添加了应用程序服务器功能。我的ESB版本是4.6.0,用于添加功能的存储库是http://dist.wso2.org/p2/carbon/releases/4.0.5。谢谢。 –

回答

0

你可以试试下面的URI来访问服务

http://localhost:9763/services/MyService/postRequest 

,而不是

https://localhost:8243/services/MyService/postRequest 
+0

嗨Chanaka,感谢您的答复。上面提到的URI在Windows环境中工作正常,但在Linux环境中引发错误。这就是我坚持的地方。请让我知道是否需要在服务器或其他地方进行任何更改。 –

+0

嗨Vijay,你可以分享你的配置文件。由于我们正在测试linux环境中的所有东西,所以很奇怪它不能在linux中工作。 –

+0

嗨Chanaka,我已经包括我的services.xml和Java类上面(下面“编辑”)。请让我知道是否需要进一步的信息。还有一点需要注意的是:当我将上述服务发布到云网关时,它按预期工作。即当我访问我的服务如http:// localhost:9763/services/MyService/postRequest时,它可以正常工作。 –