We help IT Professionals succeed at work.

Check out our new AWS podcast with Certified Expert, Phil Phillips! Listen to "How to Execute a Seamless AWS Migration" on EE or on your favorite podcast platform. Listen Now

x

java.lang.NoClassDefFoundError

Ronayne
Ronayne asked
on
Medium Priority
504 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);
      }
}
Comment
Watch Question

CERTIFIED EXPERT
Top Expert 2016

Commented:
Sounds like the Apache Axis libraries not in classpath. Place jars in all lib\ext directories
Type:
D:\DS\dsSoapLab>java -cp .;<location of axis.jar> gmit.CalcClient
CERTIFIED EXPERT
Top Expert 2016

Commented:
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.
CERTIFIED EXPERT
Top Expert 2016

Commented:
Here is some general info on the classpath:

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

Author

Commented:
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

Author

Commented:

I have axis.jar in my jre/lib/ext folder in my jdk
CERTIFIED EXPERT
Top Expert 2016

Commented:
>>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
CERTIFIED EXPERT
Top Expert 2016

Commented:
>>and try it again

Meaning running, not compiling

Author

Commented:

I tried that and I got the same error
CERTIFIED EXPERT
Top Expert 2016

Commented:
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);
            }
      }
}

Author

Commented:

I removed the classpath from my environmental variable settings but still the same error
CERTIFIED EXPERT
Top Expert 2016

Commented:
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.

Author

Commented:

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

Author

Commented:

i saved a copy in notepad anyway, i wouldnt be so daft as to stop myself from undoing the changes I make
CERTIFIED EXPERT
Top Expert 2016

Commented:
OK. That's where that Axis jar should be

Author

Commented:

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

Author

Commented:

I thought jdk automatically looks in jre/lib/ext for jar files?
CERTIFIED EXPERT
Top Expert 2016

Commented:
>>I thought jdk automatically looks in jre/lib/ext for jar files?

Yes it does. Your axis.jar must not have been there originally
CERTIFIED EXPERT
Top Expert 2016
Commented:
Unlock this solution and get a sample of our free trial.
(No credit card required)
UNLOCK SOLUTION

Author

Commented:

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  
CERTIFIED EXPERT
Top Expert 2016

Commented:
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 ;-)

Author

Commented:

ive done that and everything is working fine now, just one of those things I geuss.
CERTIFIED EXPERT
Top Expert 2016

Commented:
OK - we'll let it ride ;-)

Author

Commented:
Fine by me
Unlock the solution to this question.
Thanks for using Experts Exchange.

Please provide your email to receive a sample view!

*This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply.

OR

Please enter a first name

Please enter a last name

8+ characters (letters, numbers, and a symbol)

By clicking, you agree to the Terms of Use and Privacy Policy.