Ronayne
asked on
java.lang.NoClassDefFoundError
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.NoClassDefFoundE rror: org/apache/axis/utils
/Options
at gmit.CalcClient.main(CalcC lient.java :12)
the java file:
package gmit;
import org.apache.axis.client.Cal l;
import org.apache.axis.client.Ser vice;
import org.apache.axis.encoding.X MLType;
import org.apache.axis.utils.Opti ons;
import javax.xml.rpc.ParameterMod e;
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.setTargetEndpointAddr ess(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);
}
}
D:\DS\dsSoapLab>java gmit.CalcClient
Exception in thread "main" java.lang.NoClassDefFoundE
/Options
at gmit.CalcClient.main(CalcC
the java file:
package gmit;
import org.apache.axis.client.Cal
import org.apache.axis.client.Ser
import org.apache.axis.encoding.X
import org.apache.axis.utils.Opti
import javax.xml.rpc.ParameterMod
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:
return;
}
String method = args[0];
if (!(method.equals("add") || method.equals("subtract"))
System.err.println("Usage:
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.setTargetEndpointAddr
call.setOperationName( method );
call.addParameter("op1", XMLType.XSD_INT, ParameterMode.IN);
call.addParameter("op2", XMLType.XSD_INT, ParameterMode.IN);
call.setReturnType(XMLType
Integer ret = (Integer) call.invoke( new Object [] { i1, i2 });
System.out.println("Got result : " + ret);
}
}
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
D:\DS\dsSoapLab>java -cp .;<location of axis.jar> gmit.CalcClient
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.
ASKER
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.ja r;D:\xml-x indice-1.0 \java\lib\ xindice.ja r;c:\casto r-
0.9.5.2.jar;d:\DS\dsSoapLa b\gmit
C:\>set classpath
CLASSPATH=.;C:\j2sdk1.4.0_
t 4.1\server\lib\catalina.ja
0.9.5.2.jar;d:\DS\dsSoapLa
ASKER
I have axis.jar in my jre/lib/ext folder in my jdk
>>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
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
>>and try it again
Meaning running, not compiling
Meaning running, not compiling
ASKER
I tried that and I got the same error
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. getPropert y(args[0]) );
}
}
else {
System.getProperties().lis t(System.o ut);
}
}
}
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.
}
}
else {
System.getProperties().lis
}
}
}
ASKER
I removed the classpath from my environmental variable settings but still the same error
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.
ASKER
I ran that program and got this:
c:\program files\java\j2re1.4.0_03\li
ASKER
i saved a copy in notepad anyway, i wouldnt be so daft as to stop myself from undoing the changes I make
OK. That's where that Axis jar should be
ASKER
that is brilliant, thank you very much, how does your code work?
ASKER
I thought jdk automatically looks in jre/lib/ext for jar files?
>>I thought jdk automatically looks in jre/lib/ext for jar files?
Yes it does. Your axis.jar must not have been there originally
Yes it does. Your axis.jar must not have been there originally
ASKER CERTIFIED SOLUTION
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
ASKER
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
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 ;-)
ASKER
ive done that and everything is working fine now, just one of those things I geuss.
OK - we'll let it ride ;-)
ASKER
Fine by me