我已经有一个C ++服务器,其中包含一个将用户插入数据库的服务,当我在控制台上测试它时服务工作很棒。
但事实是我正在开发一个使用Apache Axis服务的Java客户端应用程序,遗憾的是它不起作用。我一直在寻找可以帮助我解决这个问题的信息,但我没有看到任何类似的实现。
我的Apache Axis文件位于/ usr / share / java中,这是我的AXIS2_HOME变量的值,为了执行它:
java -cp $AXIS2_HOME org.apache.axis.wsdl.WSDL2Java -p CrearAlumno http://localhost/CrearAlumno.wsdl
生成文件,稍后我执行:
javac -cp $AXIS2_HOME *.java
编译我的文件包括客户端类
//CrearAlumnoClient.java
package CrearAlumno;
import java.rmi.RemoteException;
import javax.xml.rpc.ServiceException;
public class CrearAlumnoClient{
public static void main(String[] args)
{
Input in = new Input("asdf", "adgfsdf", "asdg", 453, "asdf", "asdfasdf", "pasdfsd", "asdfsd");
try{
CrearAlumno_Service service = new CrearAlumno_ServiceLocator();
CrearAlumnoPortType port = service.getCrearAlumno();
String response = port.getInfo(in);
}catch(RemoteException e){
e.printStackTrace();
}catch(ServiceException e){
e.printStackTrace();
}
}
}
但是当我执行时:
java CrearAlumno.CrearAlumnoClient
我的应用程序抛出了这个错误:
Error: A JNI error has occurred, please check your installation and try again
Exception in thread "main" java.lang.NoClassDefFoundError: javax/xml/rpc/ServiceException
at java.lang.Class.getDeclaredMethods0(Native Method)
at java.lang.Class.privateGetDeclaredMethods(Class.java:2701)
at java.lang.Class.privateGetMethodRecursive(Class.java:3048)
at java.lang.Class.getMethod0(Class.java:3018)
at java.lang.Class.getMethod(Class.java:1784)
at sun.launcher.LauncherHelper.validateMainClass(LauncherHelper.java:544)
at sun.launcher.LauncherHelper.checkAndLoadMain(LauncherHelper.java:526)
Caused by: java.lang.ClassNotFoundException: javax.xml.rpc.ServiceException
at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331)
at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
... 7 more
我不知道如何解决这个错误,我一直在寻找一个实现,但此时此刻,我没有。
如果有人能向我展示Axis和gsoap的简单实现,我也会很高兴。
感谢您的关注:)。
答案 0 :(得分:0)
这看起来像是没有正确设置类路径的简单情况。
此处有关于该特定主题的信息:http://axis.apache.org/axis/java/install.html#Classpath_setup
您需要确保包含javax.xml.rpc.ServiceException
的jar文件存在。
我看到你正在使用-cp $AXIS2_HOME
来设置你的类路径,这不会起作用。最好是如果你的罐子在$AXIS2_HOME
,那么你需要做$AXIS2_HOME/*.jar
但是你可能需要更多的东西:
set AXIS_HOME=/usr/axis
set AXIS_LIB=$AXIS_HOME/lib
set AXISCLASSPATH=$AXIS_LIB/axis.jar:$AXIS_LIB/commons-discovery.jar:
$AXIS_LIB/commons-logging.jar:$AXIS_LIB/jaxrpc.jar:$AXIS_LIB/saaj.jar:
$AXIS_LIB/log4j-1.2.8.jar:$AXIS_LIB/xml-apis.jar:$AXIS_LIB/xercesImpl.jar:
$AXIS_LIB/wsdl4j.jar
export AXIS_HOME; export AXIS_LIB; export AXISCLASSPATH
然后使用以下命令调用您的应用程序:
java -cp $AXISCLASSPATH
关于Axis和Gsoap之间的集成,它确实应该非常简单。不应该有任何特殊的干预措施,因为你要在java和c世界之间穿越 - 至少对于简单的用例来说。