Scroll untuk baca artikel
DatabaseOracleWeb Service

Oracle Native web services and SOAPUI

246
×

Oracle Native web services and SOAPUI

Sebarkan artikel ini
soapUI-logo
soapUI-logo

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”.

soupui-after
Restart SOAPUI dan berhasil.

Tinggalkan Balasan

Alamat email Anda tidak akan dipublikasikan. Ruas yang wajib ditandai *

Situs ini menggunakan Akismet untuk mengurangi spam. Pelajari bagaimana data komentar Anda diproses.

Verified by MonsterInsights