Solved

java.lang.NoClassDefFoundError

Posted on 2004-03-30
24
451 Views
Last Modified: 2007-12-19
Hi experts, I get this error when I try to execute a java file. Thanks

D:\DS\dsSoapLab>java gmit.CalcClient
Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/axis/utils
/Options
        at gmit.CalcClient.main(CalcClient.java:12)

the java file:
package gmit;

import org.apache.axis.client.Call;
import org.apache.axis.client.Service;
import org.apache.axis.encoding.XMLType;
import org.apache.axis.utils.Options;

import javax.xml.rpc.ParameterMode;

public class CalcClient{
      public static void main(String [] args) throws Exception{
            Options options = new Options(args);

            String endpoint = "http://localhost:8080/axis/Calculator.jws";

            // Do argument checking
             args = options.getRemainingArgs();

             if (args == null || args.length != 3){
                  System.err.println("Usage: CalcClient <add|subtract arg1 arg2");
                 return;
             }

             String method = args[0];
             if (!(method.equals("add") || method.equals("subtract"))) {
                  System.err.println("Usage: CalcClient <add|subtract arg1 arg2");
                  return;
             }

            // Make the call
             Integer i1 = new Integer(args[1]);
             Integer i2 = new Integer(args[2]);

             Service service = new Service();
             Call call = (Call) service.createCall();

        call.setTargetEndpointAddress(new java.net.URL(endpoint));
        call.setOperationName( method );
        call.addParameter("op1", XMLType.XSD_INT, ParameterMode.IN);
        call.addParameter("op2", XMLType.XSD_INT, ParameterMode.IN);
        call.setReturnType(XMLType.XSD_INT);

        Integer ret = (Integer) call.invoke( new Object [] { i1, i2 });

        System.out.println("Got result : " + ret);
      }
}
0
Comment
Question by:Ronayne
  • 12
  • 11
24 Comments
 
LVL 86

Expert Comment

by:CEHJ
ID: 10715149
Sounds like the Apache Axis libraries not in classpath. Place jars in all lib\ext directories
0
 
LVL 14

Expert Comment

by:Tommy Braas
ID: 10715271
Type:
D:\DS\dsSoapLab>java -cp .;<location of axis.jar> gmit.CalcClient
0
 
LVL 86

Expert Comment

by:CEHJ
ID: 10715272
More particularly, your runtime classpath does not correspond to your compile time one. If you want to keep the number of copies of these jars down to a minimum, you can avoid following my first suggestion but instead, you'll have to set the runtime classpath to the same one that was used at compile time.
0
 
LVL 86

Expert Comment

by:CEHJ
ID: 10715282
Here is some general info on the classpath:

http://mindprod.com/jgloss/classpath.html
0
 

Author Comment

by:Ronayne
ID: 10715990
This is my classpath

C:\>set classpath
CLASSPATH=.;C:\j2sdk1.4.0_03\lib;c:\rmi\gmit;C:\Program Files\Apache Group\Tomca
t 4.1\server\lib\catalina.jar;D:\xml-xindice-1.0\java\lib\xindice.jar;c:\castor-
0.9.5.2.jar;d:\DS\dsSoapLab\gmit
0
 

Author Comment

by:Ronayne
ID: 10715991

I have axis.jar in my jre/lib/ext folder in my jdk
0
 
LVL 86

Expert Comment

by:CEHJ
ID: 10716032
>>d:\DS\dsSoapLab\gmit

That one's not actually right in fact. Should be

d:\DS\dsSoapLab

But forget that for the moment. Before running from that directory , type

set classpath=

and try it again
0
 
LVL 86

Expert Comment

by:CEHJ
ID: 10716042
>>and try it again

Meaning running, not compiling
0
 

Author Comment

by:Ronayne
ID: 10716113

I tried that and I got the same error
0
 
LVL 86

Expert Comment

by:CEHJ
ID: 10716144
Now there's no classpath, run this program with the parameter "java.ext.dirs" and tell me the output:

public class Props {
      
      public static void main(String[] args) {
            if (args.length > 0) {
                  for (int i = 0; i < args.length; i++) {
                        System.out.println(System.getProperty(args[0]));
                  }
            }
            else {
                  System.getProperties().list(System.out);
            }
      }
}
0
 

Author Comment

by:Ronayne
ID: 10716152

I removed the classpath from my environmental variable settings but still the same error
0
 
LVL 86

Expert Comment

by:CEHJ
ID: 10716183
You shouldn't have done that really, but no matter - you posted it here so you can restore it. You can unset/set the classpath per instance of a command window, so there's no need to do that. Anyway, leave it empty for the moment and compile and run the above.
0
How your wiki can always stay up-to-date

Quip doubles as a “living” wiki and a project management tool that evolves with your organization. As you finish projects in Quip, the work remains, easily accessible to all team members, new and old.
- Increase transparency
- Onboard new hires faster
- Access from mobile/offline

 

Author Comment

by:Ronayne
ID: 10716188

I ran that program and got this:
c:\program files\java\j2re1.4.0_03\lib\ext
0
 

Author Comment

by:Ronayne
ID: 10716206

i saved a copy in notepad anyway, i wouldnt be so daft as to stop myself from undoing the changes I make
0
 
LVL 86

Expert Comment

by:CEHJ
ID: 10716210
OK. That's where that Axis jar should be
0
 

Author Comment

by:Ronayne
ID: 10716345

that is brilliant, thank you very much, how does your code work?
0
 

Author Comment

by:Ronayne
ID: 10716348

I thought jdk automatically looks in jre/lib/ext for jar files?
0
 
LVL 86

Expert Comment

by:CEHJ
ID: 10716370
>>I thought jdk automatically looks in jre/lib/ext for jar files?

Yes it does. Your axis.jar must not have been there originally
0
 
LVL 86

Accepted Solution

by:
CEHJ earned 50 total points
ID: 10716391
Since you already have a classpath set, you may as well simply add a path to the jar to it, or you may find you have to put another copy in C:\j2sdk1.4.0_03\lib\ext if you want to compile against it - it's up to you though.
0
 

Author Comment

by:Ronayne
ID: 10716444

my axis jar file was always in jre/lib/ext, even when it threw my original error, thats why im confused. Id just like to know why it did'nt work  
0
 
LVL 86

Expert Comment

by:CEHJ
ID: 10716558
I'm not sure at the moment. Keep the jar where it is and reset the classpath (in environment variables) to *exactly* what it was before and we'll see if we can break it again ;-)
0
 

Author Comment

by:Ronayne
ID: 10716674

ive done that and everything is working fine now, just one of those things I geuss.
0
 
LVL 86

Expert Comment

by:CEHJ
ID: 10716721
OK - we'll let it ride ;-)
0
 

Author Comment

by:Ronayne
ID: 10716835
Fine by me
0

Featured Post

Do You Know the 4 Main Threat Actor Types?

Do you know the main threat actor types? Most attackers fall into one of four categories, each with their own favored tactics, techniques, and procedures.

Join & Write a Comment

An old method to applying the Singleton pattern in your Java code is to check if a static instance, defined in the same class that needs to be instantiated once and only once, is null and then create a new instance; otherwise, the pre-existing insta…
INTRODUCTION Working with files is a moderately common task in Java.  For most projects hard coding the file names, using parameters in configuration files, or using command-line arguments is sufficient.   However, when your application has vi…
This tutorial covers a practical example of lazy loading technique and early loading technique in a Singleton Design Pattern.
This theoretical tutorial explains exceptions, reasons for exceptions, different categories of exception and exception hierarchy.

744 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question

Need Help in Real-Time?

Connect with top rated Experts

11 Experts available now in Live!

Get 1:1 Help Now