全部,
我正在使用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";
}
}
我只是问这确认。据我了解,你有两个独立的实例在Windows和Linux上运行。你有没有在两个实例中部署相同的文件?您是否也可以让我知道WSO2应用服务器版本? –
是的,我正在运行2个不同的相同.aar文件的实例。我已经安装了ESB并添加了应用程序服务器功能。我的ESB版本是4.6.0,用于添加功能的存储库是http://dist.wso2.org/p2/carbon/releases/4.0.5。谢谢。 –