Axis客户端gsoap服务器

时间:2016-11-21 07:48:54

标签: java axis gsoap

我已经有一个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的简单实现,我也会很高兴。

感谢您的关注:)。

1 个答案:

答案 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世界之间穿越 - 至少对于简单的用例来说。