[ 
https://issues.apache.org/jira/browse/AXIS2-3886?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Mirwais Turjalei updated AXIS2-3886:
------------------------------------

    Description: 
As described in http://ws.apache.org/axis2/1_4/spring.html the 
"ServiceLifeCycle" was configured like this:

ClassLoader classLoader = service.getClassLoader();
ClassPathXmlApplicationContext appCtx = new
ClassPathXmlApplicationContext(new String[] {
"my-application-context.xml"}, false);
appCtx.setClassLoader(classLoader);
appCtx.refresh();

In "my-application-context.xml" we add a Spring-Bean to access the ejb:

<bean id="someService" class="org.springframework.jndi.JndiObjectFactoryB ean" 
lazy-init="true">
<property name="proxyInterface" value="org.SomeService" />
<property name="lookupOnStartup" value="false" />
<property name="jndiName" value="SomeService"/>
<property name="jndiTemplate">
<bean class="org.springframework.jndi.JndiTemplate">
<property name="environment">
<props>
<prop key="java.naming.factory.initial">weblogic.jndi.WL 
InitialContextFactory</prop>
<prop key="java.naming.provider.url">t3://localhost:7001</prop>
<prop key="java.naming.security.principal">username</prop>
<prop key="java.naming.security.credentials">password</prop>
</props>
</property>
</bean>
</property>
</bean>

By starting weblogic we get this exception:

... bean with name 'someService' defined in class path resource 
[my-application-context.xml]: Invocation of init method failed; nested 
exception is java.lang.IllegalArgumentException: interface org.SomeService is 
not visible from class loader
at org.apache.axis2.deployment.repository.util.Archiv 
eReader.processServiceGroup(ArchiveReader.java:151 )
at org.apache.axis2.deployment.ServiceDeployer.deploy (ServiceDeployer.java:81)
at org.apache.axis2.deployment.repository.util.Deploy 
mentFileData.deploy(DeploymentFileData.java:136)
at org.apache.axis2.deployment.DeploymentEngine.doDep 
loy(DeploymentEngine.java:597)
at org.apache.axis2.deployment.repository.util.WSInfo 
List.update(WSInfoList.java:144)
at org.apache.axis2.deployment.RepositoryListener.upd 
ate(RepositoryListener.java:330)
at org.apache.axis2.deployment.RepositoryListener.che 
ckServices(RepositoryListener.java:227)
at org.apache.axis2.deployment.DeploymentEngine.loadS 
ervices(DeploymentEngine.java:131)
at org.apache.axis2.deployment.WarBasedAxisConfigurat 
or.loadServices(WarBasedAxisConfigurator.java:284)
at org.apache.axis2.context.ConfigurationContextFacto 
ry.createConfigurationContext(ConfigurationContext Factory.java:82)
at org.apache.axis2.transport.http.AxisServlet.initCo 
nfigContext(AxisServlet.java:511)
at org.apache.axis2.transport.http.AxisServlet.init(A xisServlet.java:431)
at weblogic.servlet.internal.ServletStubImpl$ServletI 
nitAction.run(ServletStubImpl.java:1099)
at weblogic.security.acl.internal.AuthenticatedSubjec 
t.doAs(AuthenticatedSubject.java:321)
at weblogic.security.service.SecurityManager.runAs(Se curityManager.java:121)
at weblogic.servlet.internal.ServletStubImpl.createSe 
rvlet(ServletStubImpl.java:975)
at weblogic.servlet.internal.ServletStubImpl.createIn 
stances(ServletStubImpl.java:954)
at weblogic.servlet.internal.ServletStubImpl.prepareS 
ervlet(ServletStubImpl.java:893)
at weblogic.servlet.internal.WebAppServletContext.pre 
loadServlet(WebAppServletContext.java:3456)
at weblogic.servlet.internal.WebAppServletContext.pre 
loadServlets(WebAppServletContext.java:3401)
at weblogic.servlet.internal.WebAppServletContext.pre 
loadResources(WebAppServletContext.java:3382)
at weblogic.servlet.internal.WebAppServletContext.set 
Started(WebAppServletContext.java:6262)
at weblogic.servlet.internal.WebAppModule.start(WebAp pModule.java:892)
at weblogic.j2ee.J2EEApplicationContainer.start(J2EEA 
pplicationContainer.java:2181)
at weblogic.j2ee.J2EEApplicationContainer.activate(J2 
EEApplicationContainer.java:2222)
at weblogic.j2ee.J2EEApplicationContainer.activate(J2 
EEApplicationContainer.java:2169)
at weblogic.management.deploy.slave.SlaveDeployer$App 
lication.setActivation(SlaveDeployer.java:3111)
at weblogic.management.deploy.slave.SlaveDeployer.set 
ActivationStateForAllApplications(SlaveDeployer.ja va:1769)
at weblogic.management.deploy.slave.SlaveDeployer.res 
ume(SlaveDeployer.java:352)
at weblogic.management.deploy.DeploymentManagerServer 
LifeCycleImpl.resume(DeploymentManagerServerLifeCy cleImpl.java:229)
at weblogic.t3.srvr.SubsystemManager.resume(Subsystem Manager.java:136)
at weblogic.t3.srvr.T3Srvr.resume(T3Srvr.java:965)

By moving the Jar with the EJB-Interface "org.SomeService" into 
"axis2.war/WEB-INF/lib", OR changing
the "ServiceLifeCycle" to the following the error above is gone and it seems 
that all spring-beans are configured correctly:

ClassLoader contextCl = Thread.currentThread().getContextClassLoader();
ClassLoader classLoader = service.getClassLoader();
Thread.currentThread().setContextClassLoader(class Loader);
ClassPathXmlApplicationContext appCtx =
new ClassPathXmlApplicationContext(
new String[]{"my-application-context.xml"}, false);
appCtx.setClassLoader(classLoader);
appCtx.refresh();
Thread.currentThread().setContextClassLoader(conte xtCl);

But by calling the EJB from within the Web-Service (in AAR) we get an 
IllegaleArgumentException with "type mismatch":

org.springframework.remoting.RemoteProxyFailureExc eption: Invocation of RMI 
stub method failed: public abstract org.SomeOutputObject 
org.SomeService.someEjbMethode(org.SomeInputObject ); nested exception is 
java.lang.IllegalArgumentException: argument type mismatch
Caused by: java.lang.IllegalArgumentException: argument type mismatch
at jrockit.reflect.VirtualNativeMethodInvoker.invoke( 
Ljava.lang.Object;[Ljava.lang.ObjectLjava.lang.Object;(Unknown Source)
at 
java.lang.reflect.Method.invoke(Ljava.lang.Object;[Ljava.lang.Object;I)Ljava.lang.Object;(Unknown
 Source)
at org.springframework.remoting.rmi.RmiClientIntercep 
torUtils.doInvoke(RmiClientInterceptorUtils.java:1 03)
at org.springframework.ejb.access.SimpleRemoteSlsbInv 
okerInterceptor.doInvoke(SimpleRemoteSlsbInvokerIn terceptor.java:75)
...

Is this a generel class loader problem?
It seems that the Axis2 class loader is in conflict with Spring class loader.

To put the EJB-Interfaces Jar to System-Classpath can help, because both Axis2 
and Spring uses the System class loader first.
But this is be problematicly if the accessed EJBs are also deployed in the same 
weblogic instance.

  was:
As described in http://ws.apache.org/axis2/1_4/spring.html the 
"ServiceLifeCycle" was configured like this:

ClassLoader classLoader = service.getClassLoader();
ClassPathXmlApplicationContext appCtx = new
ClassPathXmlApplicationContext(new String[] {
"my-application-context.xml"}, false);
appCtx.setClassLoader(classLoader);
appCtx.refresh();

In "my-application-context.xml" we add a Spring-Bean to access the ejb:

<bean id="someService" class="org.springframework.jndi.JndiObjectFactoryB ean" 
lazy-init="true">
<property name="proxyInterface" value="org.SomeService" />
<property name="lookupOnStartup" value="false" />
<property name="jndiName" value="SomeService"/>
<property name="jndiTemplate">
<bean class="org.springframework.jndi.JndiTemplate">
<property name="environment">
<props>
<prop key="java.naming.factory.initial">weblogic.jndi.WL 
InitialContextFactory</prop>
<prop key="java.naming.provider.url">t3://localhost:7001</prop>
<prop key="java.naming.security.principal">username</prop>
<prop key="java.naming.security.credentials">password</prop>
</props>
</property>
</bean>
</property>
</bean>

By starting weblogic we get this exception:

... bean with name 'someService' defined in class path resource 
[my-application-context.xml]: Invocation of init method failed; nested 
exception is java.lang.IllegalArgumentException: interface org.SomeService is 
not visible from class loader
at org.apache.axis2.deployment.repository.util.Archiv 
eReader.processServiceGroup(ArchiveReader.java:151 )
at org.apache.axis2.deployment.ServiceDeployer.deploy (ServiceDeployer.java:81)
at org.apache.axis2.deployment.repository.util.Deploy 
mentFileData.deploy(DeploymentFileData.java:136)
at org.apache.axis2.deployment.DeploymentEngine.doDep 
loy(DeploymentEngine.java:597)
at org.apache.axis2.deployment.repository.util.WSInfo 
List.update(WSInfoList.java:144)
at org.apache.axis2.deployment.RepositoryListener.upd 
ate(RepositoryListener.java:330)
at org.apache.axis2.deployment.RepositoryListener.che 
ckServices(RepositoryListener.java:227)
at org.apache.axis2.deployment.DeploymentEngine.loadS 
ervices(DeploymentEngine.java:131)
at org.apache.axis2.deployment.WarBasedAxisConfigurat 
or.loadServices(WarBasedAxisConfigurator.java:284)
at org.apache.axis2.context.ConfigurationContextFacto 
ry.createConfigurationContext(ConfigurationContext Factory.java:82)
at org.apache.axis2.transport.http.AxisServlet.initCo 
nfigContext(AxisServlet.java:511)
at org.apache.axis2.transport.http.AxisServlet.init(A xisServlet.java:431)
at weblogic.servlet.internal.ServletStubImpl$ServletI 
nitAction.run(ServletStubImpl.java:1099)
at weblogic.security.acl.internal.AuthenticatedSubjec 
t.doAs(AuthenticatedSubject.java:321)
at weblogic.security.service.SecurityManager.runAs(Se curityManager.java:121)
at weblogic.servlet.internal.ServletStubImpl.createSe 
rvlet(ServletStubImpl.java:975)
at weblogic.servlet.internal.ServletStubImpl.createIn 
stances(ServletStubImpl.java:954)
at weblogic.servlet.internal.ServletStubImpl.prepareS 
ervlet(ServletStubImpl.java:893)
at weblogic.servlet.internal.WebAppServletContext.pre 
loadServlet(WebAppServletContext.java:3456)
at weblogic.servlet.internal.WebAppServletContext.pre 
loadServlets(WebAppServletContext.java:3401)
at weblogic.servlet.internal.WebAppServletContext.pre 
loadResources(WebAppServletContext.java:3382)
at weblogic.servlet.internal.WebAppServletContext.set 
Started(WebAppServletContext.java:6262)
at weblogic.servlet.internal.WebAppModule.start(WebAp pModule.java:892)
at weblogic.j2ee.J2EEApplicationContainer.start(J2EEA 
pplicationContainer.java:2181)
at weblogic.j2ee.J2EEApplicationContainer.activate(J2 
EEApplicationContainer.java:2222)
at weblogic.j2ee.J2EEApplicationContainer.activate(J2 
EEApplicationContainer.java:2169)
at weblogic.management.deploy.slave.SlaveDeployer$App 
lication.setActivation(SlaveDeployer.java:3111)
at weblogic.management.deploy.slave.SlaveDeployer.set 
ActivationStateForAllApplications(SlaveDeployer.ja va:1769)
at weblogic.management.deploy.slave.SlaveDeployer.res 
ume(SlaveDeployer.java:352)
at weblogic.management.deploy.DeploymentManagerServer 
LifeCycleImpl.resume(DeploymentManagerServerLifeCy cleImpl.java:229)
at weblogic.t3.srvr.SubsystemManager.resume(Subsystem Manager.java:136)
at weblogic.t3.srvr.T3Srvr.resume(T3Srvr.java:965)

By moving the Jar with the EJB-Interface "org.SomeService" into 
"axis2.war/WEB-INF/lib", OR changing
the "ServiceLifeCycle" to the following the error above is gone and it seems 
that all spring-beans are configured correctly:

ClassLoader contextCl = Thread.currentThread().getContextClassLoader();
ClassLoader classLoader = service.getClassLoader();
Thread.currentThread().setContextClassLoader(class Loader);
ClassPathXmlApplicationContext appCtx =
new ClassPathXmlApplicationContext(
new String[]{"my-application-context.xml"}, false);
appCtx.setClassLoader(classLoader);
appCtx.refresh();
Thread.currentThread().setContextClassLoader(conte xtCl);

But by calling the EJB from wihthin the Web-Service we get an 
IllegaleArgumentException with "type mismatch":

org.springframework.remoting.RemoteProxyFailureExc eption: Invocation of RMI 
stub method failed: public abstract org.SomeOutputObject 
org.SomeService.someEjbMethode(org.SomeInputObject ); nested exception is 
java.lang.IllegalArgumentException: argument type mismatch
Caused by: java.lang.IllegalArgumentException: argument type mismatch
at jrockit.reflect.VirtualNativeMethodInvoker.invoke( 
Ljava.lang.Object;[Ljava.lang.ObjectLjava.lang.Object;(Unknown Source)
at 
java.lang.reflect.Method.invoke(Ljava.lang.Object;[Ljava.lang.Object;I)Ljava.lang.Object;(Unknown
 Source)
at org.springframework.remoting.rmi.RmiClientIntercep 
torUtils.doInvoke(RmiClientInterceptorUtils.java:1 03)
at org.springframework.ejb.access.SimpleRemoteSlsbInv 
okerInterceptor.doInvoke(SimpleRemoteSlsbInvokerIn terceptor.java:75)
...

Is this a generel class loader problem?
It seems that the Axis2 class loader is in conflict with Spring class loader.

To put the EJB-Interfaces Jar to System-Classpath can help, because both Axis2 
and Spring uses the System class loader first.
But this is be problematicly if the accessed EJBs are also deployed in the same 
weblogic instance.


> Class loader problem by invoking EJB from Axis2-AAR with Spring
> ---------------------------------------------------------------
>
>                 Key: AXIS2-3886
>                 URL: https://issues.apache.org/jira/browse/AXIS2-3886
>             Project: Axis 2.0 (Axis2)
>          Issue Type: Bug
>    Affects Versions: 1.4
>         Environment: JDK 1.4, Axis2 1.4, Spring 2.0.8, Weblogic 8.1 SP6
>            Reporter: Mirwais Turjalei
>
> As described in http://ws.apache.org/axis2/1_4/spring.html the 
> "ServiceLifeCycle" was configured like this:
> ClassLoader classLoader = service.getClassLoader();
> ClassPathXmlApplicationContext appCtx = new
> ClassPathXmlApplicationContext(new String[] {
> "my-application-context.xml"}, false);
> appCtx.setClassLoader(classLoader);
> appCtx.refresh();
> In "my-application-context.xml" we add a Spring-Bean to access the ejb:
> <bean id="someService" class="org.springframework.jndi.JndiObjectFactoryB 
> ean" lazy-init="true">
> <property name="proxyInterface" value="org.SomeService" />
> <property name="lookupOnStartup" value="false" />
> <property name="jndiName" value="SomeService"/>
> <property name="jndiTemplate">
> <bean class="org.springframework.jndi.JndiTemplate">
> <property name="environment">
> <props>
> <prop key="java.naming.factory.initial">weblogic.jndi.WL 
> InitialContextFactory</prop>
> <prop key="java.naming.provider.url">t3://localhost:7001</prop>
> <prop key="java.naming.security.principal">username</prop>
> <prop key="java.naming.security.credentials">password</prop>
> </props>
> </property>
> </bean>
> </property>
> </bean>
> By starting weblogic we get this exception:
> ... bean with name 'someService' defined in class path resource 
> [my-application-context.xml]: Invocation of init method failed; nested 
> exception is java.lang.IllegalArgumentException: interface org.SomeService is 
> not visible from class loader
> at org.apache.axis2.deployment.repository.util.Archiv 
> eReader.processServiceGroup(ArchiveReader.java:151 )
> at org.apache.axis2.deployment.ServiceDeployer.deploy 
> (ServiceDeployer.java:81)
> at org.apache.axis2.deployment.repository.util.Deploy 
> mentFileData.deploy(DeploymentFileData.java:136)
> at org.apache.axis2.deployment.DeploymentEngine.doDep 
> loy(DeploymentEngine.java:597)
> at org.apache.axis2.deployment.repository.util.WSInfo 
> List.update(WSInfoList.java:144)
> at org.apache.axis2.deployment.RepositoryListener.upd 
> ate(RepositoryListener.java:330)
> at org.apache.axis2.deployment.RepositoryListener.che 
> ckServices(RepositoryListener.java:227)
> at org.apache.axis2.deployment.DeploymentEngine.loadS 
> ervices(DeploymentEngine.java:131)
> at org.apache.axis2.deployment.WarBasedAxisConfigurat 
> or.loadServices(WarBasedAxisConfigurator.java:284)
> at org.apache.axis2.context.ConfigurationContextFacto 
> ry.createConfigurationContext(ConfigurationContext Factory.java:82)
> at org.apache.axis2.transport.http.AxisServlet.initCo 
> nfigContext(AxisServlet.java:511)
> at org.apache.axis2.transport.http.AxisServlet.init(A xisServlet.java:431)
> at weblogic.servlet.internal.ServletStubImpl$ServletI 
> nitAction.run(ServletStubImpl.java:1099)
> at weblogic.security.acl.internal.AuthenticatedSubjec 
> t.doAs(AuthenticatedSubject.java:321)
> at weblogic.security.service.SecurityManager.runAs(Se curityManager.java:121)
> at weblogic.servlet.internal.ServletStubImpl.createSe 
> rvlet(ServletStubImpl.java:975)
> at weblogic.servlet.internal.ServletStubImpl.createIn 
> stances(ServletStubImpl.java:954)
> at weblogic.servlet.internal.ServletStubImpl.prepareS 
> ervlet(ServletStubImpl.java:893)
> at weblogic.servlet.internal.WebAppServletContext.pre 
> loadServlet(WebAppServletContext.java:3456)
> at weblogic.servlet.internal.WebAppServletContext.pre 
> loadServlets(WebAppServletContext.java:3401)
> at weblogic.servlet.internal.WebAppServletContext.pre 
> loadResources(WebAppServletContext.java:3382)
> at weblogic.servlet.internal.WebAppServletContext.set 
> Started(WebAppServletContext.java:6262)
> at weblogic.servlet.internal.WebAppModule.start(WebAp pModule.java:892)
> at weblogic.j2ee.J2EEApplicationContainer.start(J2EEA 
> pplicationContainer.java:2181)
> at weblogic.j2ee.J2EEApplicationContainer.activate(J2 
> EEApplicationContainer.java:2222)
> at weblogic.j2ee.J2EEApplicationContainer.activate(J2 
> EEApplicationContainer.java:2169)
> at weblogic.management.deploy.slave.SlaveDeployer$App 
> lication.setActivation(SlaveDeployer.java:3111)
> at weblogic.management.deploy.slave.SlaveDeployer.set 
> ActivationStateForAllApplications(SlaveDeployer.ja va:1769)
> at weblogic.management.deploy.slave.SlaveDeployer.res 
> ume(SlaveDeployer.java:352)
> at weblogic.management.deploy.DeploymentManagerServer 
> LifeCycleImpl.resume(DeploymentManagerServerLifeCy cleImpl.java:229)
> at weblogic.t3.srvr.SubsystemManager.resume(Subsystem Manager.java:136)
> at weblogic.t3.srvr.T3Srvr.resume(T3Srvr.java:965)
> By moving the Jar with the EJB-Interface "org.SomeService" into 
> "axis2.war/WEB-INF/lib", OR changing
> the "ServiceLifeCycle" to the following the error above is gone and it seems 
> that all spring-beans are configured correctly:
> ClassLoader contextCl = Thread.currentThread().getContextClassLoader();
> ClassLoader classLoader = service.getClassLoader();
> Thread.currentThread().setContextClassLoader(class Loader);
> ClassPathXmlApplicationContext appCtx =
> new ClassPathXmlApplicationContext(
> new String[]{"my-application-context.xml"}, false);
> appCtx.setClassLoader(classLoader);
> appCtx.refresh();
> Thread.currentThread().setContextClassLoader(conte xtCl);
> But by calling the EJB from within the Web-Service (in AAR) we get an 
> IllegaleArgumentException with "type mismatch":
> org.springframework.remoting.RemoteProxyFailureExc eption: Invocation of RMI 
> stub method failed: public abstract org.SomeOutputObject 
> org.SomeService.someEjbMethode(org.SomeInputObject ); nested exception is 
> java.lang.IllegalArgumentException: argument type mismatch
> Caused by: java.lang.IllegalArgumentException: argument type mismatch
> at jrockit.reflect.VirtualNativeMethodInvoker.invoke( 
> Ljava.lang.Object;[Ljava.lang.ObjectLjava.lang.Object;(Unknown Source)
> at 
> java.lang.reflect.Method.invoke(Ljava.lang.Object;[Ljava.lang.Object;I)Ljava.lang.Object;(Unknown
>  Source)
> at org.springframework.remoting.rmi.RmiClientIntercep 
> torUtils.doInvoke(RmiClientInterceptorUtils.java:1 03)
> at org.springframework.ejb.access.SimpleRemoteSlsbInv 
> okerInterceptor.doInvoke(SimpleRemoteSlsbInvokerIn terceptor.java:75)
> ...
> Is this a generel class loader problem?
> It seems that the Axis2 class loader is in conflict with Spring class loader.
> To put the EJB-Interfaces Jar to System-Classpath can help, because both 
> Axis2 and Spring uses the System class loader first.
> But this is be problematicly if the accessed EJBs are also deployed in the 
> same weblogic instance.

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.


---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to