|
|
|
![]() |
|
Strumenti |
![]() |
#1 |
Senior Member
Iscritto dal: Nov 2002
Messaggi: 6019
|
[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: 6019
|
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: 6019
|
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 19: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: 6019
|
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: 04:44.