tomcat-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Luis Rivera" <luiggii...@gmail.com>
Subject Re: java.lang.LinkageError: Class soap/xsd/CompanyInfo violates loader constraints
Date Mon, 24 Jul 2006 22:37:37 GMT
    Dear Martin,

Thanks again for the reply.

I added some questions to your responses, hoping that I can clarify what I
am trying to do. I think I have been very confusing and probably the
solution is so obvious I am just missing it.

2)
> ClassLoader delegation-
> Straight from the doc at
> http://docs.sun.com/app/docs/doc/819-2556/6n4rap8qm?a=view
>
> "Servlet specification recommends that the Web Classloader look in the
> local class loader before delegating to its parent. To make the Web
> Classloader follow the delegation model in the Servlet specification, set
> delegate="false" in the class-loader element of the sun-web.xml file. *It's
> safe to do this only for a web module that does not interact with any other
> modules."*
>
> "The default value is delegate="true", which causes the Web Classloader to
> delegate in the same manner as the other classloaders. Use delegate="true"for a web application
that accesses EJB components or that acts as a web
> service client or endpoint. For details about sun-web.xml, see The
> sun-web.xml File<http://docs.sun.com/app/docs/doc/819-2556/6n4rap8u6?a=view>
> ."
>
> from the doc if your webapp is standalone set delegate = false
> If it's accessing EJB components or is a webservice client and or endpoint
> delegate = true
> I defer to the sun application server site for accuracy on configuration
> and installation details
>

If I understand this, this means this is possible in J2EE, which I had read
about. But, what about TOMCAT? Is it possible to do the same thing in
Tomcat, just to see if that would solve my problem?

I have looked around on the web, documentaiton and configuration files and
this does not seem to be possible in Tomcat


> 3)
> JNI:
> I *assume* you are attempting to build and configure your own mod_jk
> worker?
> http://tomcat.apache.org/connectors-doc/install/apache2.html
> This is system related stuff which assumes you are backing up your current
> installation beforehand
> and using Platform specific utilities (cl/gcc/iSeries) to essentially make
> your platform-specific binaries
> The important point here is to use the platform specific
> install/configuration/compile scripts which are blesses by the platform's
> vendor-
>

No, I am trying to do something a lot simpler.

See, we already have a server side implementation of the services in C++
(Roguewave), but we are looking into a cheaper option, which is why I was
looking into axis/tomcat. My clients are using Axis anyway, so I thought
using Tomcat was going to be straight forward.

So, we don't want to reimplement everything in Java, which means I only need
a jni wrapper in the axis server to call my DCE proxies in C++.  So, the
picture looks like this

axis Client --> axis Server --> jniWrapper --> DCEProxy (C++ implementation)

And the problem lies on the fact that I need to place the jniWrapper outside
of the TOMCAT_HOME/webapps directory, causing all kind of problems with the
class loaders, despite the fact that all the classes are supposedly
correctly resolved. I still have that LinkageError, regardless of where I
place the classe (shared or common).

As I said before, if all the application is placed under
TOMCAT_HOME/webapps/axis/classes, there are no exceptions thrown!

Hope this clarifies my situation and if you have any advice, I would greatly
appreciate it.

    Thanks in advance,
    -Luis R.

HTH,
> M-
> *********************************************************************
>
> This email message and any files transmitted with it contain confidential
> information intended only for the person(s) to whom this email message is
> addressed.  If you have received this email message in error, please
> notify
> the sender immediately by telephone or email and destroy the original
> message without making a copy.  Thank you.
>
>
>
>
> ----- Original Message -----
> *From:* Luis Rivera <luiggiilca@gmail.com>
> *To:* Raju Balugu <raju.balugu@gmail.com>
> *Cc:* Tomcat Users List <users@tomcat.apache.org>
> *Sent:* Monday, July 24, 2006 5:18 AM
> *Subject:* Re: java.lang.LinkageError: Class soap/xsd/CompanyInfo violates
> loader constraints
>
>
>       Dear Raju and Martin,
>
> First of all, thanks a lot for the replies. I do appreciate it. I am
> including the WSDL so you can take a look if you have a chance. I will post
> it over the axis lists very soon.
>
> Martin:
> 1) I don't think it is the WSDL, because as you could appreciate in the
> WSDL, it is defined. Also, if I have all the application inside
> webapps/axis/WEB-INF/classes, it works! But as soon as I take the class that
> load the JNI DLL to the common/classes or shared/classes directories, then I
> run into the trouble with the class loaders. First I noticed that the errors
> were due to classes I did not copy to the common directory (CompanyInfo), so
> I did and the error changed to what LinkageError.
>
> 2) Regarding the class loading model. I understand why it is recommended,
> but is it possible to change it? The reason I ask is because I found on the
> web an email from a guy with the same exception, but using  J2EE and he said
> that by setting the delegation to true in the sun-web.xml file, the
> problem was solved!!!
>
> 3) Could you let me know which libraries are you talking about? The
> bootstrap.jar file under the TOMCAT_HOME/bin directory?
>
> Raju:
>
> I am using the common/classes, after migrating from the shared/classes
> directory, thinking that might solve the problem, but no luck. Both of those
> directories are defined for the common and shared loader respectively in the
> catalina.properties directory. Let me just try to illustrate what I am
> trying to do:
>
> CRLImpl.java: Entry point, file generated by WSDL2Java (inside
> webapps/axis/WEB-INF/classes)
>
>      void getCompany(CompanyInfoHolder company, StringHolder result)
>      {
>            crl.nada(company, result);
>      }
>
> jniCRLimpl.java: jni wrapper that will load the crl.DLL library (inside
> common/classes)
>
>      void nada(CompanyInfoHolder company, StringHolder result)
>      {
>           company.value = new soap.xsd.CompanyInfo(); // The problem comes
> here !!!
>           ....
>      }
>
> This exact same code, works if all is located under
> webapps/axis/WEB-INF/classes, but as the TOMCAT documentation lets me know,
> I have to take the jniCRLimpl.java to the shared or common directory to
> prevent TOMCAT from trying to load my DLL more than once.
>
>    Thanks again and in advance for any pointer you all can give me,
>    --Luis R.
>
> On 7/23/06, Raju Balugu <raju.balugu@gmail.com> wrote:
> >
> >  Hi ,
> >
> > How you are loading the outside(which are not there in classpath) jars
> > and classes in tomcat? try to load the outside jar and class files from the
> > catalina.properties(/conf).It may solve ur problem?please let me know
> > server configuration too.
> >
> > Regards
> >  Raju
> >
> >
> >  On 7/24/06, Luis Rivera < luiggiilca@gmail.com> wrote:
> > >
> > >   Dear Martin Gainty,
> > >
> > > I have posted this issue on the axis (devs and users) lists, without
> > > any
> > > luck. I really thought it was because it was a tomcat issue, so I am
> > > posting
> > > it here. The only thing I have not posted is my WSDL, which I will do,
> > > in
> > > both places. But in case I still have your attention, please let me
> > > know if
> > > you or somebody who reads this know the answer to these questions?
> > >
> > > Q1) Does this mean this is an axis isseu?
> > >
> > > Q2) Is there a way to change the class loading policy in Tomcat? (I
> > > know
> > > that delegation works under the servel model)
> > >
> > > Q3) Is it true that in Tomcat I need to place the classes that load
> > > JNI
> > > libraries outside of the webapps directory? If not, then my problem is
> > > solved.
> > >
> > >   Thanks in advance,
> > >   --Luis R.
> > >
> > > On 7/23/06, Martin Gainty < mgainty@hotmail.com > wrote:
> > > >
> > > > Luis please post this email and your WSDL to axis-user@ws.apache.org
> > > > Martin --
> > > >
> > > *********************************************************************
> > > > This email message and any files transmitted with it contain
> > > confidential
> > > > information intended only for the person(s) to whom this email
> > > message is
> > > > addressed.  If you have received this email message in error, please
> > >
> > > > notify
> > > > the sender immediately by telephone or email and destroy the
> > > original
> > > > message without making a copy.  Thank you.
> > > >
> > > >
> > > >
> > > > ----- Original Message -----
> > > > From: "Luis Rivera" < luiggiilca@gmail.com>
> > > > To: < users@tomcat.apache.org>
> > > > Sent: Sunday, July 23, 2006 8:03 AM
> > > > Subject: java.lang.LinkageError : Class soap/xsd/CompanyInfo
> > > violates
> > > > loader constraints
> > > >
> > > >
> > > > >   HELP PLEASE, PLEASE PLEASE,
> > > > >
> > > > >   Any tomcat Guru knows what can cause this exception? I need to
> > > have
> > > > some
> > > > > classes either in shared or common, outside of the webapps
> > > directory.
> > > > This
> > > > > is causing my a great headache, and only by activating the loggin
> > > in the
> > > > > webapps directory I saw the trace you will see below. I solved all
> > > the
> > > > > problems of the classloaders not finding the classes, but I don't
> > > know
> > > > how
> > > > > to solve this one.
> > > > >
> > > > > I read in another website that the problem might be the
> > > classloading
> > > > > delegation, but I don't think Tomcat has a way to change the
> > > > classloading
> > > > > delegation model. Besides, I don't believe that would solve it,
> > > because
> > > > I
> > > > > don't think the problem is that it is not finding the classes, but
> > >
> > > > something
> > > > > else ... what constraints and where are they set? I am not using
a
> > > > Security
> > > > > Manager, so it is not about permissions in the catalina.policyfile.
> > > > >
> > > > > Here is the full stack trace
> > > > >
> > > > > 27782 [http-8095-Processor25] DEBUG org.apache.axis.enterprise  -
> > > > Mapping
> > > > > Exception to AxisFault^M
> > > > > java.lang.reflect.InvocationTargetException^M
> > > > >        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native
> > > Method)^M
> > > > >        at sun.reflect.NativeMethodAccessorImpl.invoke(
> > > > > NativeMethodAccessorImpl.java:39)^M
> > > > >        at sun.reflect.DelegatingMethodAccessorImpl.invoke (
> > > > > DelegatingMethodAccessorImpl.java:25)^M
> > > > >        at java.lang.reflect.Method.invoke(Method.java:585)^M
> > > > >        at org.apache.axis.providers.java.RPCProvider.invokeMethod(
> > > > > RPCProvider.java:397)^M
> > > > >        at
> > > org.apache.axis.providers.java.RPCProvider.processMessage(
> > > > > RPCProvider.java:186)^M
> > > > >        at org.apache.axis.providers.java.JavaProvider.invoke(
> > > > > JavaProvider.java:323)^M
> > > > >        at org.apache.axis.strategies.InvocationStrategy.visit(
> > > > > InvocationStrategy.java:32)^M
> > > > >        at org.apache.axis.SimpleChain.doVisiting(SimpleChain.java:118)^M
> > > > >        at org.apache.axis.SimpleChain.invoke(SimpleChain.java:83)^M
> > > > >        at org.apache.axis.handlers.soap.SOAPService.invoke(
> > > > SOAPService.java
> > > > > :454)^M
> > > > >        at org.apache.axis.server.AxisServer.invoke(AxisServer.java
> > > > :281)^M
> > > > >        at org.apache.axis.transport.http.AxisServlet.doPost (
> > > > > AxisServlet.java:699)^M
> > > > >        at javax.servlet.http.HttpServlet.service (HttpServlet.java
> > > :709)^M
> > > > >        at org.apache.axis.transport.http.AxisServletBase.service(
> > > > > AxisServletBase.java:327)^M
> > > > >        at javax.servlet.http.HttpServlet.service (HttpServlet.java
> > > > :802)^M
> > > > >        at
> > > > org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(
> > > > > ApplicationFilterChain.java:252)^M
> > > > >        at org.apache.catalina.core.ApplicationFilterChain.doFilter(
> > > > > ApplicationFilterChain.java :173)^M
> > > > >        at org.apache.catalina.core.StandardWrapperValve.invoke(
> > > > > StandardWrapperValve.java:213)^M
> > > > >        at org.apache.catalina.core.StandardContextValve.invoke (
> > > > > StandardContextValve.java:178)^M
> > > > >        at org.apache.catalina.core.StandardHostValve.invoke(
> > > > > StandardHostValve.java:126)^M
> > > > >        at org.apache.catalina.valves.ErrorReportValve.invoke (
> > > > > ErrorReportValve.java:105)^M
> > > > >        at org.apache.catalina.core.StandardEngineValve.invoke (
> > > > > StandardEngineValve.java:107)^M
> > > > >        at org.apache.catalina.connector.CoyoteAdapter.service (
> > > > > CoyoteAdapter.java:148)^M
> > > > >        at org.apache.coyote.http11.Http11Processor.process(
> > > > > Http11Processor.java:869)^M
> > > > >        at
> > > > >
> > > >
> > > org.apache.coyote.http11.Http11BaseProtocol$Http11ConnectionHandler.processConnection
> > > > > (Http11BaseProtocol.java:664)^M
> > > > >        at org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket
> > > (
> > > > > PoolTcpEndpoint.java:527)^M
> > > > >        at
> > > org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt (
> > > > > LeaderFollowerWorkerThread.java:80)^M
> > > > >        at
> > > org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(
> > > > > ThreadPool.java:684)^M
> > > > >        at java.lang.Thread.run ( Thread.java :595)^M
> > > > > Caused by: java.lang.LinkageError: Class soap/xsd/CompanyInfo
> > > violates
> > > > > loader constraints^M
> > > > >        at java.lang.ClassLoader.defineClass1(Native Method)^M
> > > > >        at java.lang.ClassLoader.defineClass (ClassLoader.java
> > > :620)^M
> > > > >        at java.security.SecureClassLoader.defineClass(
> > > > > SecureClassLoader.java:124)^M
> > > > >        at java.net.URLClassLoader.defineClass (URLClassLoader.java
> > > :260)^M
> > > > >        at java.net.URLClassLoader.access$100 (URLClassLoader.java
> > > :56)^M
> > > > >        at java.net.URLClassLoader$1.run(URLClassLoader.java:195)^M
> > > > >        at java.security.AccessController.doPrivileged (Native
> > > Method)^M
> > > > >        at java.net.URLClassLoader.findClass ( URLClassLoader.java
> > > :188)^M
> > > > >        at java.lang.ClassLoader.loadClass(ClassLoader.java:306)^M
> > > > >        at java.lang.ClassLoader.loadClass (ClassLoader.java:251)^M
> > > > >        at java.lang.ClassLoader.loadClassInternal (
> > > ClassLoader.java
> > > > :319)^M
> > > > >        at vsa.jniCRLimpl.nada(jniCRLimpl.java:100)^M
> > > > >        at soap.wsdl.CRLImpl.getCompany (CRLImpl.java:94)^M
> > > > >        at soap.wsdl.CRLSkeleton.getCompany(Unknown Source)^M
> > > > >        ... 30 more^M
> > > > >
> > > > > Thanks in advance,
> > > > > --Luis R.
> > > > >
> > >
> > >
> >
>  ------------------------------
>
> ---------------------------------------------------------------------
> To start a new topic, e-mail: users@tomcat.apache.org
> To unsubscribe, e-mail: users-unsubscribe@tomcat.apache.org
> For additional commands, e-mail: users-help@tomcat.apache.org
>
>

Mime
  • Unnamed multipart/alternative (inline, None, 0 bytes)
View raw message