|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Senior Member
Iscritto dal: Nov 2002
Messaggi: 6790
|
[Java C] Problema JNI e Web Services
Sto cercando di costruire un Web Services che richiama un metodo Java che a sua volta richiama un metodo C mediante JNI. Il fatto è che il metodo c non viene richiamato e non viene restituito alcun errore. Premetto che nel codice C non c'è nessun errore in quanto se provo a richiamarlo da una semplice classe Java funziona perfettamente, Dunque,io creo la classe TestJNI.java, che contiene il metodo nativo:
Codice:
package provajni;
import java.lang.String;
public class TestJNI {
public native void metodoc(String firstarg,String secarg);
}
A questo punto compilo la classe e ,dal lato C creo l'header con javah e la libreria dinamica. Adesso dal lato Java creo il WSDL: java org.apache.axis.wsdl.Java2WSDL -o TestJNI.wsdl -l"http://localhost:8080/axis/services/TestJNI" -n "urn:TestJNI" -p"provajni" "urn: TestJNI " provajni.TestJNI Poi i vari files per il WS: java org.apache.axis.wsdl.WSDL2Java -o . -s -S true -Nurn:TestJNI provajni TestJNI.wsdl Li compilo tutti e li copio sotto Tomcat. In seguito faccio il deploy del ws. Il WSDL di TestJNi quindi appare correttamente sotto i servizi di Axis ed espone il metodo "metodoc". A questo punto creo la classe client: Codice:
import org.apache.axis.client.Call;
import org.apache.axis.client.Service;
import javax.xml.namespace.QName;
//import java.lang.*;
public class ClasseProva
{
public ClasseProva()
{
}
public static void main(String [] args) throws Exception {
String endpoint = "http://localhost:8080/axis/services/TestJNI";
String method = "metodoc" ;
try{
System.loadLibrary("metodoc");
}
catch(UnsatisfiedLinkError e)
{e.printStackTrace();
}
}
Service service = new Service(); //creo un nuovo servizio
Call call = (Call)service.createCall();
call.setTargetEndpointAddress(new java.net.URL(endpoint));
call.setOperationName(method); // Definisco il metodo da invocare
call.invoke( new Object [] {"2","Funzionaaaaa!!!! :) :) "});
System.out.println("Ciao ciao");
}
}
Ringrazio chiunque mi aiuti |
|
|
|
|
|
#2 | |
|
Senior Member
Iscritto dal: Jul 2002
Città: Reggio Calabria -> London
Messaggi: 12112
|
Quote:
non ho mai provato a lanciare una kiamata jni tramite tomcat.. non è ke il problema è proprio ke il classloader di tomcat non riesce a trovarti la libreria nativa? Se non erro bisogna inserire la directory dove hai la libreria nel path di sistema o alternativamente settare il java.library.path per fargli caricare la libreria nativa correttamente... ma cmq possibile ke nn ti lanci nessuna eccezione? hai provato a guardare i log di tomcat?
__________________
|
|
|
|
|
|
|
#3 |
|
Senior Member
Iscritto dal: Nov 2002
Messaggi: 6790
|
In effetti qualcosa c'è:
INFO: The Apache Tomcat Native library which allows optimal performance in production environments was not found on the java.library.path: Ho installato allora APR e jsvc. Devo capire bene come configurarli però. |
|
|
|
|
|
#4 | |
|
Senior Member
Iscritto dal: Jul 2002
Città: Reggio Calabria -> London
Messaggi: 12112
|
Quote:
se nn ricordo male quell'avviso è normale.... Hai visto se la tua libreria JNI è caricata nella variabile di sistema PATH o alternativamente hai fatto partire tomcat con l'opzione -Djava.library.path=<dir_tua_JNI>? Imho ti conviene aggiungerla al path ke è + semplice ...sempre se è questo il problema ma cmq tentar non nuoce
__________________
|
|
|
|
|
|
|
#5 | |
|
Senior Member
Iscritto dal: Nov 2002
Messaggi: 6790
|
Quote:
a libreria c la carica, infatti se la tolgo mi dà "UnsatisfiedLinkError". Solo che poi non va avanti Ultima modifica di Unrue : 20-12-2006 alle 20:22. |
|
|
|
|
|
|
#6 | |
|
Senior Member
Iscritto dal: Jul 2002
Città: Reggio Calabria -> London
Messaggi: 12112
|
Quote:
ma visto ke togliendola ti da l'unsatisfied link error direi ke il problema nn è questo. Le librerie JNI di tomcat servono solo x avere maggiori performance in ambiente di produzione..... onestamente non ho idea di quale sia il problema xkè JNI l'ho usato solo x utilizzare librerie di terze parti.. non mi sono mai messo a usarlo partendo da zero.... quindi mi sa ke non so km aiutarti
__________________
|
|
|
|
|
|
|
#7 |
|
Senior Member
Iscritto dal: Nov 2002
Messaggi: 6790
|
In realtà la libreria la carica perchè la System.loadLibrary la metto nella classe chiamante,non in quella da cui costruisco il Web Service. Il fatto è che se la metto in quella classe, quando uso javaWSDL e crea tutte le interfaccie per il WS, nella classe SoapBingingImpl, la chiamata alla libreria scompare. Boh..
|
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 00:48.


















