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.





