2016-11-21 139 views
2

我已经有一个C++服务器,它包含一个将用户插入数据库的服务,当我在控制台上测试时服务工作非常好。Axis客户端gsoap服务器

但事实是,我正在开发一个Java客户端应用程序,它使用Apache Axis使用该服务,但不幸的是它不起作用。我一直在寻找可以帮助我解决这个问题的信息,但我没有看到任何类似的实施。

我的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(); 
    } 

    } 
} 

但是当我excecute:

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

这看起来像是你的类路径没有正确设置的简单情况。

有对特定主题的信息在这里:http://axis.apache.org/axis/java/install.html#Classpath_setup

您需要确保包含javax.xml.rpc.ServiceException的jar文件存在。

我看到你正在使用-cp $AXIS2_HOME设置你的类路径,这是行不通的。在最好的,如果你的罐子是$AXIS2_HOME,那么你将需要做$AXIS2_HOME/*.jar但是这一切liklihood你需要有更多的东西一样:

java -cp $AXISCLASSPATH 

有了:

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 

然后调用程序关于Axis和Gsoap之间的整合,它确实应该非常简单。实际上不应该有任何特殊的干预,因为你在java和c世界之间穿越 - 至少对于简单的使用情况。