2016-11-21 146 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世界之間穿越 - 至少對於簡單的使用情況。