首页 文章

Axis客户端gsoap服务器

提问于
浏览
2

我已经有一个包含将用户插入数据库的服务的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

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

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

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

    我看到你正在使用 -cp $AXIS2_HOME 设置你的类路径,这将无法正常工作 . 充其量,如果你的 jar 在 $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世界之间穿越 - 至少对于简单的用例 .

相关问题