[ https://issues.apache.org/jira/browse/AXIS2-3947?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Deepal Jayasinghe reassigned AXIS2-3947: ---------------------------------------- Assignee: sumedha rubasinghe Sumedha, As I remember correct you wrote the EJB providers, so could you please have a look at this? Deepal > EJB provider run only once > -------------------------- > > Key: AXIS2-3947 > URL: https://issues.apache.org/jira/browse/AXIS2-3947 > Project: Axis 2.0 (Axis2) > Issue Type: Bug > Components: rpc > Affects Versions: 1.4, 1.3 > Environment: Weblogic 10.0MP1 (10.0.1.0) > JDK 1.5.0_15-b04 > Windows XP SP2, Solaris 10 > Reporter: Jean-Philippe HAUTIN > Assignee: sumedha rubasinghe > Priority: Blocker > Attachments: ejbModuleWebServices.zip, WebServicesEJB.zip > > > I made a simple web service towards an EJB using Axis2 1.3, following the > tutorial at this URL http://ws.apache.org/axis2/1_2/ejb-provider.html > It works fine once (the first run) but when I try to run it a second time in > a row, I have this response in SOAP UI > > <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"> > <soapenv:Body> > <soapenv:Fault> > <faultcode>soapenv:Server</faultcode> > <faultstring>object is not an instance of declaring > class</faultstring> > <detail> > <Exception>org.apache.axis2.AxisFault: object is not an instance > of declaring class > at org.apache.axis2.AxisFault.makeFault(AxisFault.java:417) > at > org.apache.axis2.rpc.receivers.RPCMessageReceiver.invokeBusinessLogic(RPCMessageReceiver.java:156) > at > org.apache.axis2.receivers.AbstractInOutMessageReceiver.invokeBusinessLogic(AbstractInOutMessageReceiver.java:40) > at > org.apache.axis2.receivers.AbstractMessageReceiver.receive(AbstractMessageReceiver.java:96) > at org.apache.axis2.engine.AxisEngine.receive(AxisEngine.java:145) > at > org.apache.axis2.transport.http.HTTPTransportUtils.processHTTPPostRequest(HTTPTransportUtils.java:275) > at > org.apache.axis2.transport.http.AxisServlet.doPost(AxisServlet.java:120) > at javax.servlet.http.HttpServlet.service(HttpServlet.java:727) > at javax.servlet.http.HttpServlet.service(HttpServlet.java:820) > at > weblogic.servlet.internal.StubSecurityHelper$ServletServiceAction.run(StubSecurityHelper.java:226) > at > weblogic.servlet.internal.StubSecurityHelper.invokeServlet(StubSecurityHelper.java:124) > at > weblogic.servlet.internal.ServletStubImpl.execute(ServletStubImpl.java:283) > at > weblogic.servlet.internal.ServletStubImpl.execute(ServletStubImpl.java:175) > at > weblogic.servlet.internal.WebAppServletContext$ServletInvocationAction.run(WebAppServletContext.java:3370) > at > weblogic.security.acl.internal.AuthenticatedSubject.doAs(AuthenticatedSubject.java:321) > at weblogic.security.service.SecurityManager.runAs(Unknown Source) > at > weblogic.servlet.internal.WebAppServletContext.securedExecute(WebAppServletContext.java:2117) > at > weblogic.servlet.internal.WebAppServletContext.execute(WebAppServletContext.java:2023) > at > weblogic.servlet.internal.ServletRequestImpl.run(ServletRequestImpl.java:1359) > at weblogic.work.ExecuteThread.execute(ExecuteThread.java:200) > at weblogic.work.ExecuteThread.run(ExecuteThread.java:172) > Caused by: java.lang.IllegalArgumentException: object is not an instance of > declaring class > 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:585) > at > org.apache.axis2.rpc.receivers.RPCUtil.invokeServiceClass(RPCUtil.java:194) > at > org.apache.axis2.rpc.receivers.RPCMessageReceiver.invokeBusinessLogic(RPCMessageReceiver.java:98) > ... 19 more</Exception> > </detail> > </soapenv:Fault> > </soapenv:Body> > </soapenv:Envelope> > I investigated a bit. I found out a problem within the « caching system » > used to prevent introspection to resolve which Java method/class to call. > Here is a simple of > org.apache.axis2.rpc.receivers.RPCMessageReceiver.invokeBusinessLogic() : > Object obj = getTheImplementationObject(inMessage); > Class ImplClass = obj.getClass(); > AxisOperation op = > inMessage.getOperationContext().getAxisOperation(); > method = (Method)(op.getParameterValue("myMethod")); > AxisService service = inMessage.getAxisService(); > OMElement methodElement = > inMessage.getEnvelope().getBody().getFirstElement(); > AxisMessage inAxisMessage = > op.getMessage(WSDLConstants.MESSAGE_LABEL_IN_VALUE); > String messageNameSpace = null; > if (method == null) { > String methodName = op.getName().getLocalPart(); > Method[] methods = ImplClass.getMethods(); > for (int i = 0; i < methods.length; i++) { > if (methods[i].getName().equals(methodName)) { > method = methods[i]; > op.addParameter("myMethod", method); > break; > } > } > if (method == null) { > throw new AxisFault("No such method '" + methodName + > "' in class " + ImplClass.getName()); > } > } > The first time, everything is fine, "obj" is new, "method" is null and is > fill correctly with loop made of ImplClass.getMethods();. During the second > call, "obj" is a new instance but "method" comes from "op" and is the one > from the previous call. But it doesn't match "obj". "method" is related to > the previous instance of "obj" instanciated from the previous call. It seems > that the saving of "obj" in the ServiceContext class didn't work properly. > The quick fix is to comment the line method = > (Method)(op.getParameterValue("myMethod")); but that implies to launch the > introspection framework at every call. It may be time consuming. > I tested it with Axis2 1.3 and 1.4 too and it doesn't work any better > I make a unit Test Eclipse workspaces with 2 projects : > - project "ejbModuleWebService" is the project with a very simple EJB, > - project WebServiceEJB contains the web service definition. > We have the bug on Weblogic 10, I didn't test it on another application > server. -- This message is automatically generated by JIRA. - You can reply to this email to add a comment to the issue online.