This is also based on a post from OTN.
I have used WebserviceX.NET :: XML Web Services solution provider. This has many webservices that you can use for your practice (I do).
Here is one demo of converting temperature. The code, coding standard and comments are signature of Billy~Verreynne. This is build on function called
Now, the question comes where did I get this SOAP envelop. If you go to that WebService detail page and click on the name then you can see various envelops.
I have used WebserviceX.NET :: XML Web Services solution provider. This has many webservices that you can use for your practice (I do).
Here is one demo of converting temperature. The code, coding standard and comments are signature of Billy~Verreynne. This is build on function called
GetCityWeather.
Now, the question comes where did I get this SOAP envelop. If you go to that WebService detail page and click on the name then you can see various envelops.
[oracle@localhost ~]$ sqlplus scott/tiger SQL*Plus: Release 11.2.0.1.0 Production on Tue Jul 12 12:04:34 2016 Copyright (c) 1982, 2009, Oracle. All rights reserved. Connected to: Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production With the Partitioning, OLAP, Data Mining and Real Application Testing options SQL> -- My dtabase version. SQL> select * from v$version; BANNER -------------------------------------------------------------------------------- Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production PL/SQL Release 11.2.0.1.0 - Production CORE 11.2.0.1.0 Production TNS for Linux: Version 11.2.0.1.0 - Production NLSRTL Version 11.2.0.1.0 - Production SQL> ed Wrote file afiedt.buf 1 create or replace function ConvertTemperature( Temperature integer, FromUnit varchar2, ToUnit varchar2 ) return XmlType is 2 --// URL to call 3 SOAP_URL constant varchar2(1000) := 'http://www.webservicex.net/ConvertTemperature.asmx'; 4 --// SOAP envelope template, containing $ substitution variables 5 SOAP_ENVELOPE constant varchar2(32767) := 6 '<?xml version="1.0" encoding="utf-8"?> 7 <soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"> 8 <soap:Body> 9 <ConvertTemp xmlns="http://www.webserviceX.NET/"> 10 <Temperature>$TEMPERATURE</Temperature> 11 <FromUnit>$FROMUNIT</FromUnit> 12 <ToUnit>$TOUNIT</ToUnit> 13 </ConvertTemp> 14 </soap:Body> 15 </soap:Envelope>'; 16 --// we ll identify ourselves using an IE9/Windows7 generic browser signature 17 C_USER_AGENT constant varchar2(4000) := 'Mozilla/5.0 (compatible; MSIE 9.0 Windows NT 6.1 Trident/5.0)'; 18 --// these variables need to be set if web access 19 --// is via a proxy server 20 proxyServer varchar2(20) default null; 21 proxyUser varchar2(20) default null; 22 proxyPass varchar2(20) default null; 23 --// our local variables 24 soapEnvelope varchar2(32767); 25 proxyURL varchar2(4000); 26 request utl_http.req; 27 response utl_http.resp; 28 buffer varchar2(32767); 29 soapResponse clob; 30 xmlResponse XmlType; 31 eof boolean; 32 begin 33 --// create the SOAP envelope 34 soapEnvelope := replace( SOAP_ENVELOPE, '$TEMPERATURE', Temperature ); 35 soapEnvelope := replace( soapEnvelope, '$FROMUNIT', FromUnit ); 36 soapEnvelope := replace( soapEnvelope, '$TOUNIT', ToUnit ); 37 --// our "browser" settings 38 utl_http.set_response_error_check( true ); 39 utl_http.set_detailed_excp_support( true ); 40 utl_http.set_cookie_support( true ); 41 utl_http.set_transfer_timeout( 10 ); 42 utl_http.set_follow_redirect( 3 ); 43 utl_http.set_persistent_conn_support( true ); 44 --// configure for web proxy access if applicable 45 if proxyServer is not null then 46 proxyURL := 'http://'||proxyServer; 47 if (proxyUser is not null) and (proxyPass is not null) then 48 proxyURL := Replace( proxyURL, 'http://', 'http://'||proxyUser||':'||proxyPass||'@' ); 49 end if; 50 utl_http.set_proxy( proxyURL, null ); 51 end if; 52 --// make the POST call to the web service 53 request := utl_http.begin_request( SOAP_URL, 'POST', utl_http.HTTP_VERSION_1_1 ); 54 utl_http.set_header( request, 'User-Agent', C_USER_AGENT ); 55 utl_http.set_header( request, 'Content-Type', 'text/xml; charset=utf-8' ); 56 utl_http.set_header( request, 'Content-Length', length(soapEnvelope) ); 57 utl_http.set_header( request, 'SoapAction', 'http://www.webserviceX.NET/ConvertTemp' ); 58 utl_http.write_text( request, soapEnvelope ); 59 --// read the web service HTTP response 60 response := utl_http.get_response( request ); 61 dbms_lob.CreateTemporary( soapResponse, true ); 62 eof := false; 63 loop 64 exit when eof; 65 begin 66 utl_http.read_line( response, buffer, true ); 67 if length(buffer) > 0 then 68 dbms_lob.WriteAppend( 69 soapResponse, 70 length(buffer), 71 buffer 72 ); 73 end if; 74 exception when utl_http.END_OF_BODY then 75 eof := true; 76 end; 77 end loop; 78 utl_http.end_response( response ); 79 --// as the SOAP responds with XML, we convert 80 --// the response to XML 81 xmlResponse := XmlType( soapResponse ); 82 dbms_lob.FreeTemporary( soapResponse ); 83 return( xmlResponse ); 84 exception when OTHERS then 85 if soapResponse is not null then 86 dbms_lob.FreeTemporary( soapResponse ); 87 end if; 88 raise; 89* end; 90 / Function created. SQL> exit Disconnected from Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production With the Partitioning, OLAP, Data Mining and Real Application Testing options [oracle@localhost ~]$ sqlplus / as sysdba SQL*Plus: Release 11.2.0.1.0 Production on Tue Jul 12 12:05:45 2016 Copyright (c) 1982, 2009, Oracle. All rights reserved. Connected to: Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production With the Partitioning, OLAP, Data Mining and Real Application Testing options SQL> BEGIN DBMS_NETWORK_ACL_ADMIN.CREATE_ACL(acl => 'ConverTemperature.xml', description => 'ConverTemperature ACL', principal => 'SCOTT', is_grant => true, privilege => 'connect'); DBMS_NETWORK_ACL_ADMIN.ADD_PRIVILEGE(acl => 'ConverTemperature.xml', principal => 'SCOTT', is_grant => true, privilege => 'resolve'); DBMS_NETWORK_ACL_ADMIN.ASSIGN_ACL(acl => 'ConverTemperature.xml', host => 'www.webservicex.net'); commit; END; 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 / PL/SQL procedure successfully completed. SQL> conn scott/tiger Connected. SQL> set line 1000 SQL> set long 100000 SQL> select ConvertTemperature(20,'degreeCelsius','degreeFahrenheit') from dual; CONVERTTEMPERATURE(20,'DEGREECELSIUS','DEGREEFAHRENHEIT') ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- <?xml version="1.0" encoding="US-ASCII"?> <soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> <soap:Body> <ConvertTempResponse xmlns="http://www.webserviceX.NET/"> <ConvertTempResult>68</ConvertTempResult> </ConvertTempResponse> </soap:Body> </soap:Envelope> SQL> select ConvertTemperature(68,'degreeFahrenheit','degreeCelsius') from dual; CONVERTTEMPERATURE(68,'DEGREEFAHRENHEIT','DEGREECELSIUS') ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- <?xml version="1.0" encoding="US-ASCII"?> <soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> <soap:Body> <ConvertTempResponse xmlns="http://www.webserviceX.NET/"> <ConvertTempResult>20</ConvertTempResult> </ConvertTempResponse> </soap:Body> </soap:Envelope> SQL>
No comments :
Post a Comment