Hi all, I am trying to deploy a service which access an EJB for which I am getting an IllegalAccessException at EJBProvider.getServiceClass(EJBProvider.java:208). This is happening as a result of using reflection to get a handle to the RemoteInterface. Has anybody seen this error before?
protected Class getServiceClass(MessageContext msgContext, String beanJndiName) throws Exception { Handler serviceHandler = msgContext.getServiceHandler(); // Get the EJB Home object from JNDI Object ejbHome = getEJBHome(msgContext, beanJndiName); String homeName = (String) getStrOption(homeInterfaceNameOption, serviceHandler); if (homeName == null) throw new AxisFault( JavaUtils.getMessage("noOption00", homeInterfaceNameOption, msgContext.getTargetService())); // Load the Home class name given in the config file Class homeClass = msgContext.getClassLoader().loadClass(homeName); // Make sure the object we got back from JNDI is the same type // as the what is specified in the config file Object ehome = javax.rmi.PortableRemoteObject.narrow(ejbHome, homeClass); // Invoke the getEJBMetaData method of the ejbHome class without actually // touching any EJB classes (i.e. no cast to EJBHome) Method getEJBMetaData = homeClass.getMethod("getEJBMetaData", empty_class_array); Object metaData = getEJBMetaData.invoke(ehome, empty_object_array); Method getRemoteInterfaceClass = metaData.getClass().getMethod("getRemoteInterfaceClass", empty_class_array); Class interfaceClass = //LINE 208 (Class) getRemoteInterfaceClass.invoke(metaData, empty_object_array); // got it, return it return interfaceClass; } AxisFault faultCode: http://xml.apache.org/axis/:Server.userException faultString: java.lang.IllegalAccessException faultActor: null faultDetail: stackTrace: java.lang.IllegalAccessException at java.lang.reflect.Method.invoke(Native Method) at org.apache.axis.providers.java.EJBProvider.getServiceClass(EJBProvider.java:208) at org.apache.axis.providers.java.JavaProvider.generateWSDL(JavaProvider.java:303) at org.apache.axis.strategies.WSDLGenStrategy.visit(WSDLGenStrategy.java:72) at org.apache.axis.SimpleChain.doVisiting(SimpleChain.java:151) at org.apache.axis.SimpleChain.generateWSDL(SimpleChain.java:137) at org.apache.axis.server.AxisServer.generateWSDL(AxisServer.java:437) at org.apache.axis.transport.http.AxisServlet.doGet(AxisServlet.java:267) at javax.servlet.http.HttpServlet.service(HttpServlet.java:740) at javax.servlet.http.HttpServlet.service(HttpServlet.java:853) at weblogic.servlet.internal.ServletStubImpl.invokeServlet(ServletStubImpl.java:265) at weblogic.servlet.internal.ServletStubImpl.invokeServlet(ServletStubImpl.java:200) at weblogic.servlet.internal.WebAppServletContext.invokeServlet(WebAppServletContext.java:2456) at weblogic.servlet.internal.ServletRequestImpl.execute(ServletRequestImpl.java:2039) at weblogic.kernel.ExecuteThread.execute(ExecuteThread.java:139) at weblogic.kernel.ExecuteThread.run(ExecuteThread.java:120) Here is the service declaration in the .wsdd file <service name="UserManager" provider="java:EJB"> <parameter name="beanJndiName" value="UserManager"/> <parameter name="homeInterfaceName" value ="com.itemxchange.users.ejb.UserManagerHome"/> <parameter name="allowedMethods" value="timedGetAllUsers deleteUserById updateUser getUserById getAllUsers getUserByName addUser"/> <parameter name="jndiURL" value="t3://localhost:7001"/> <parameter name="jndiContextClass" value ="weblogic.jndi.WLInitialContextFactory"/> </service>