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>