Home Page
Articoli
Tips & Tricks
News
Forum
Archivio Forum
Blogs
Sondaggi
Rss
Video
Utenti
Chi Siamo
Contattaci
Username:
Password:
Login
Registrati ora!
Recupera Password
Home Page
Stanze Forum
SQL Server 2000/2005/2008, Express, Access, MySQL, Oracle
UTL_DBWS: chiamata web services da PL/SQL
lunedì 03 settembre 2012 - 17.15
Elenco Threads
Stanze Forum
Aggiungi ai Preferiti
Cerca nel forum
Elenco Tags
C#
|
.NET 3.5
|
Oracle 10g
volperubbia
Profilo
| Senior Member
375
messaggi | Data Invio:
lun 3 set 2012 - 17:15
Ciao a tutti,
vorrei creare una funzione oracle (versione 10.2) per chiamare via pl/sql i metodi di un web services
e pensavo di usare UTL_DBWS.
CREATE OR REPLACE FUNCTION FN_WS_CALL_METHOD
(
p_WS_URL VARCHAR2,
p_WS_NAMESPACE VARCHAR2,
p_WS_METHOD VARCHAR2
)
RETURN VARCHAR2
IS
v_WSDL_URL VARCHAR2(4000) := P_WS_URL || '?WSDL';
v_SERVICE SYS.UTL_DBWS.SERVICE;
v_CALL SYS.UTL_DBWS.CALL;
v_RESPONSE SYS.XMLTYPE;
v_REQUEST SYS.XMLTYPE;
v_OUTPUT VARCHAR2(4000) := '';
BEGIN
v_SERVICE := SYS.UTL_DBWS.CREATE_SERVICE(URIFACTORY.GETURI(v_WSDL_URL), SYS.UTL_DBWS.TO_QNAME(p_WS_NAMESPACE, p_WS_METHOD));
v_CALL := SYS.UTL_DBWS.CREATE_CALL(v_SERVICE);
SYS.UTL_DBWS.SET_TARGET_ENDPOINT_ADDRESS(v_CALL, p_WS_URL);
SYS.UTL_DBWS.SET_PROPERTY(v_CALL, 'SOAPACTION_URI', p_WS_NAMESPACE || p_WS_METHOD);
SYS.UTL_DBWS.SET_PROPERTY(v_CALL, 'SOAPACTION_USE', 'TRUE');
SYS.UTL_DBWS.SET_PROPERTY(v_CALL, 'OPERATION_STYLE', 'DOCUMENT');
v_REQUEST := SYS.XMLTYPE(
'<' || p_WS_METHOD || 'XMLNS="' || p_WS_NAMESPACE || '">' ||
-- EVENTUALI PARAMETRI
'</' || p_WS_METHOD || '>'
);
v_RESPONSE := SYS.UTL_DBWS.INVOKE(v_CALL, v_REQUEST);
v_OUTPUT := v_RESPONSE.EXTRACT('//' || p_WS_METHOD || 'RESULT/CHILD::TEXT()', 'XMLNS="' || p_WS_NAMESPACE || '"').GETSTRINGVAL();
SYS.UTL_DBWS.RELEASE_SERVICE(v_SERVICE);
RETURN v_OUTPUT;
END;
/
Può essere un idea o ci sono soluzioni migliori?
Al momento la funzione precedente, a cui manca ancora la gestione di un parametro dove concatenare le coppie chiave / valore dei
parametri del metodo, ritorna il seguente errore:
ORA-29540: LA CLASSE ORACLE/JPUB/RUNTIME/DBWS/DBWSPROXY NON ESISTE.
Come si può risolvere?
Ho provato con:
1)
http://www.oracle-base.com/articles/10g/utl_dbws-10g.php
2) download "10g & 11g latest: dbws-callout-utility-10131.zip (10.1.3.1)"
3) copiati i files *.jar sotto C:\oracle\product\10.2.0\db_1\sqlj\lib
4) CD C:\oracle\product\10.2.0\db_1\sqlj\lib
5) loadjava -u pippo/pippo@pippo -r -v -f -s -grant public -genmissing dbwsclientws.jar dbwsclientdb102.jar
6)
EXEC DBMS_JAVA.GRANT_PERMISSION('pippo', 'SYS:java.lang.RuntimePermission', 'getClassLoader', '');
EXEC DBMS_JAVA.GRANT_PERMISSION('pippo', 'SYS:java.util.logging.LoggingPermission', 'control', '');
EXEC DBMS_JAVA.GRANT_PERMISSION('pippo', 'SYS:java.lang.RuntimePermission', 'setFactory', '');
e ora ottengo:
ORA-29532: chiamata Java terminata a causa di un'eccezione Java non ottenuta: java.lang.IllegalAccessException: java.lang.ExceptionInInitializerError.
Probabilmente occorre installare o inizializzare ancora qualcosa. Qualche idea?
Grazie per l'attenzione,
Davide
Torna su
Stanze Forum
Elenco Threads
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?
Dopo esserti registrato potrai chiedere
aiuto sul nostro
Forum
oppure aiutare gli altri
Consulta le
Stanze
disponibili.
Registrati ora !