tomcat-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Martin Gainty" <mgai...@hotmail.com>
Subject Re: java.lang.LinkageError: Class soap/xsd/CompanyInfo violates loader constraints
Date Tue, 25 Jul 2006 12:44:34 GMT
MG>Good Morning Luis I preface my comments with MG>

> 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?
MG>Tomcat is a container for servlets..not an EJB server..the good thing is you can run
Tomcat inside *most* J2EE compliant EJB servers such as
MG>OpenEJB/JBoss/OAS/SunAppServer
MG>http://www.onjava.com/pub/a/onjava/2003/02/12/ejb_tomcat.html
MG>http://www.theserverside.com/news/thread.tss?thread_id=2188
MG>http://www.oracle.com/appserver/index.html
MG>http://www.sun.com/software/products/appsrvr/index.xml
MG>I am most familiar with the Oracle offering and can help you with that
> 
> 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)
MG>Assuming you placed axis.jar in your web-inf/lib
MG>Assuming you have placed all of your supporting jars in (saaj.jar ..) in commons/lib
MG>be mindful that you MUST declare Datatypes initially as SOAPDatatype and then convert
to java datatype and then convert to C++ Datatype
MG>the SOAP Datatype is covered by the WSDL declaration
MG>The Java datatype is usually a Java bean
MG>There is a JNI spec which covers how to declare Java methods and pass Java Datatypes
to C apps please read
MG>http://www.camtp.uni-mb.si/books/Thinking-in-Java/AppendixB.html
MG>be mindful of introduction of objects in a method's parameter list changes the signature
which has the unfortunate side effect of making the MG>method unrecognisable to extrenal
entities..be mindful to make the method visible use the method calling convention supported
by JNI of
MG>extern "C" JNIEXPORT void JNICALL 
MG>to specify how parameters are pushed on the stack

> 
> 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
View raw message