Anda dapat menemukan beberapa contoh di internet untuk mengaktifkan layanan web asli di Database Oracle 11g. Misalnya. http://www.liberidu.com/blog/2008/07/08/howto-create-a-native-database-webservice/ adalah titik awal yang baik untuk melakukannya.
Saya mencoba menguji layanan Web saya di SOAPUI dan tidak berhasil … pada awalnya.
Saya menggunakan tescript dari Mark Drake yang dapat ditemukan di OTN
clear screen clear buffer connect / AS sysdba -- call dbms_xdb.sethttpport(80); -- alter system register; grant dba, xdbadmin to scott; alter user scott identified by tiger account unlock; set echo on set termout on set feed on cle scre --------------------------------------------------------- -- Show User and "orawsv" new xdbconfig.xml entry ---------------------------------------------------------- show user -- DECLARE SERVLET_NAME VARCHAR2(32) := 'orawsv'; BEGIN DBMS_XDB.deleteServletMapping(SERVLET_NAME); DBMS_XDB.deleteServlet(SERVLET_NAME); DBMS_XDB.addServlet ( NAME => SERVLET_NAME , LANGUAGE => 'C' , DISPNAME => 'Oracle Query Web Service' , DESCRIPT => 'Servlet for issuing queries as a Web Service' , SCHEMA => 'XDB' ); DBMS_XDB.addServletSecRole ( SERVNAME => SERVLET_NAME , ROLENAME => 'XDB_WEBSERVICES' , ROLELINK => 'XDB_WEBSERVICES' ); DBMS_XDB.addServletMapping ( PATTERN => '/orawsv/*' , NAME => SERVLET_NAME ); END; / pause -- def USERNAME=SCOTT def PASSWORD=tiger -- pause clear screen ---------------------------------------------------------- -- Drop the Access Control List XML file if it exists ---------------------------------------------------------- begin dbms_network_acl_admin.drop_acl('/public/localhost.xml'); end; / commit; pause clear screen ---------------------------------------------------------- -- Create and Assign ACL's to localhost ---------------------------------------------------------- begin dbms_network_acl_admin.create_acl ( '/public/localhost.xml' , 'ACL for 127.0.0.1' , '&USERNAME' , true , 'connect' ); dbms_network_acl_admin.assign_acl ( '/public/localhost.xml' , '127.0.0.1' ); end; / COMMIT / pause clear screen ---------------------------------------------------------- -- Show and grant NDWS Roles to a user account ---------------------------------------------------------- -- Only HTTPS allowed GRANT XDB_WEBSERVICES TO &USERNAME / -- HTTP also allowed GRANT XDB_WEBSERVICES_OVER_HTTP TO &USERNAME / -- Access also allowed that are accessible to PUBLIC. GRANT XDB_WEBSERVICES_WITH_PUBLIC TO &USERNAME / pause clear screen connect &USERNAME/&PASSWORD set echo on set termout on set feed on SET long 10000 clear screen ---------------------------------------------------------- -- Show the now active WSDL URL ---------------------------------------------------------- show user var url varchar2(700) BEGIN :url := 'http://&USERNAME:&PASSWORD@localhost:'|| dbms_xdb.getHttpPort()|| '/orawsv?wsdl'; end; / print url pause SET long 10000 pages 0 cle scre ---------------------------------------------------------- -- Show the output via PL/SQL when WSDL URL called ---------------------------------------------------------- SELECT httpuritype( :url ).getXML() FROM dual / pause cle scre ---------------------------------------------------------- -- Create simple function that can be called via the NDWS ---------------------------------------------------------- create or replace function GET_SQRT ( INPUT_VALUE number ) return number as begin return SQRT(INPUT_VALUE); end; / pause SET long 10000 pages 0 cle scre ---------------------------------------------------------- -- Setting the URL as input for consumption ---------------------------------------------------------- BEGIN :url := 'http://&USERNAME:&PASSWORD@localhost:'||dbms_xdb.getHttpPort()||'/orawsv/SCOTT/GET_SQRT'; end; / print url SELECT httpuritype( :url||'?wsdl' ).getXML() FROM dual / --cle scre ---------------------------------------------------------- -- Consume NDWS function call via PL/SQL ---------------------------------------------------------- set serveroutput on -- DECLARE V_SOAP_REQUEST XMLTYPE := XMLTYPE( '<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> <SOAP-ENV:Body> <m:SNUMBER-GET_SQRTInput xmlns:m="http://xmlns.oracle.com/orawsv/&USERNAME/GET_SQRT"> <m:INPUT_VALUE-NUMBER-IN>2>/m:INPUT_VALUE-NUMBER-IN> </m:SNUMBER-GET_SQRTInput> </SOAP-ENV:Body> </SOAP-ENV:Envelope>' ); V_SOAP_REQUEST_TEXT CLOB := V_SOAP_REQUEST.getClobVal(); V_REQUEST UTL_HTTP.REQ; V_RESPONSE UTL_HTTP.RESP; V_BUFFER VARCHAR2(1024); BEGIN V_REQUEST := UTL_HTTP.BEGIN_REQUEST(URL => :URL, METHOD => 'POST'); UTL_HTTP.SET_HEADER(V_REQUEST, 'User-Agent', 'Mozilla/4.0'); V_REQUEST.METHOD := 'POST'; UTL_HTTP.SET_HEADER ( R => V_REQUEST , NAME => 'Content-Length' , VALUE => DBMS_LOB.GETLENGTH(V_SOAP_REQUEST_TEXT) ); UTL_HTTP.WRITE_TEXT ( R => V_REQUEST , DATA => V_SOAP_REQUEST_TEXT ); -- V_RESPONSE := UTL_HTTP.GET_RESPONSE(V_REQUEST); LOOP UTL_HTTP.READ_LINE(V_RESPONSE, V_BUFFER, TRUE); DBMS_OUTPUT.PUT_LINE(V_BUFFER); END LOOP; UTL_HTTP.END_RESPONSE(V_RESPONSE); EXCEPTION WHEN UTL_HTTP.END_OF_BODY THEN UTL_HTTP.END_RESPONSE(V_RESPONSE); END; /
Jadi di SOAPUI saya membuat sebuah proyek baru. Sebagai basis-WSDL saya menggunakan http baru: http:// SCOTT: TIGER @ localhost: 8080 / orawsv / SCOTT / GET_SQRT.
Dalam sifat permintaan saya masuk scott dan macan (huruf kecil)
Dan itu tidak berhasil.
Menganalisis http-log permintaan saya menemukan bahwa dua permintaan di mana mengirim. Yang pertama kekurangan “Otorisasi: Dasar … ..” kunci di header HTTP. Tanggapan dari server adalah kesalahan HTTP 401 yang menunjukkan kebutuhan akan nama pengguna / pwd. Permintaan kedua dikirim dengan kunci Dasar Otorisasi dan server tidak merespons.
Solusinya adalah memasukkan kunci dalam permintaan pertama.
Dalam preferensi SOAPUI di bagian HTTP thet Anda harus memeriksa “Menambahkan informasi otentikasi ke permintaan keluar”.
Restart SOAPUI dan berhasil.