APEX_WEB_SERVICE APIを使用すると、PL/SQLを使用できるアプリケーション内の任意の場所でWebサービスと対話できるため、Application Expressと他のシステムを統合できます。APIには、SOAPおよびRESTful形式のWebサービスをコールするためのプロシージャおよびファンクションが含まれます。また、Webサービスからのレスポンスを解析し、SOAP対応のbase64エンコーディングにエンコード/デコードするファンクションが含まれます。このAPIには、APIからかWebサービス・タイプの標準プロセスを使用するかにかかわらず、WebサービスをコールするときにCookiesおよびHTTPヘッダーを管理するためのパッケージ・グローバルも含まれます。CookiesおよびHTTPヘッダーは、グローバルを移入することによってWebサービスへのコールを起動する前に設定でき、Webサービスのレスポンスから戻されたCookiesおよびHTTPヘッダーは、他のグローバルから読み取ることができます。
トピック:
APEX_WEB_SERVICE APIを使用して、Webサービスを起動し、PL/SQLを使用できるApplication Express内の任意の場所でレスポンスを調べます。
次のような場合に、APEX_WEB_SERVICE APIを使用します。
AJAXを使用してオンデマンド・プロセスでWebサービスを起動する場合。
認証スキームの一部としてWebサービスを起動する場合。
base64でエンコードされたWebサービスにラージ・バイナリ・パラメータを渡す必要がある場合。
検証の一部としてWebサービスを起動する場合。
トピック:
SOAP形式のWebサービスを起動するプロシージャおよびファンクションがあります。プロシージャは、パラメータp_collection_nameによって指定されたコレクションのレスポンスを格納します。ファンクションは、結果をXMLTYPEとして戻します。レスポンスから特定の値を取得するには、結果がコレクションに格納される場合はPARSE_RESPONSEファンクションを、レスポンスがXMLTYPEとして戻される場合はPARSE_XMLファンクションを使用します。base64でエンコードされた文字データとしてバイナリ・パラメータをWebサービスに渡すには、BLOB2CLOBBASE64ファンクションを使用します。逆に、base64でエンコードされたバイナリ・パラメータを含むレスポンスを変換するには、CLOBBASE642BLOBファンクションを使用します。次に、BLOB2CLOBBASE64ファンクションを使用してパラメータをエンコードし、MAKE_REQUESTプロシージャを使用してWebサービスをコールし、PARSE_RESPONSEファンクションを使用してレスポンスから特定の値を抽出する例を示します。
declare l_filename varchar2(255); l_BLOB BLOB; l_CLOB CLOB; l_envelope CLOB; l_response_msg varchar2(32767); BEGIN IF :P1_FILE IS NOT NULL THEN SELECT filename, BLOB_CONTENT INTO l_filename, l_BLOB FROM APEX_APPLICATION_FILES WHERE name = :P1_FILE; l_CLOB := apex_web_service.blob2clobbase64(l_BLOB); l_envelope := q'!<?xml version='1.0' encoding='UTF-8'?>!'; l_envelope := l_envelope '<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:chec="http://www.stellent.com/CheckIn/"> <soapenv:Header/> <soapenv:Body> <chec:CheckInUniversal> <chec:dDocName>'||l_filename||'</chec:dDocName> <chec:dDocTitle>'||l_filename||'</chec:dDocTitle> <chec:dDocType>Document</chec:dDocType> <chec:dDocAuthor>GM</chec:dDocAuthor> <chec:dSecurityGroup>Public</chec:dSecurityGroup> <chec:dDocAccount></chec:dDocAccount> <chec:CustomDocMetaData> <chec:property> <chec:name></chec:name> <chec:value></chec:value> </chec:property> </chec:CustomDocMetaData> <chec:primaryFile> <chec:fileName>'||l_filename'||</chec:fileName> <chec:fileContent>'||l_CLOB||'</chec:fileContent> </chec:primaryFile> <chec:alternateFile> <chec:fileName></chec:fileName> <chec:fileContent></chec:fileContent> </chec:alternateFile> <chec:extraProps> <chec:property> <chec:name></chec:name> <chec:value></chec:value> </chec:property> </chec:extraProps> </chec:CheckInUniversal> </soapenv:Body> </soapenv:Envelope>'; apex_web_service.make_request( p_url => 'http://127.0.0.1/idc/idcplg', p_action => 'http://www.stellent.com/CheckIn/', p_collection_name => 'STELLENT_CHECKIN', p_envelope => l_envelope, p_username => 'sysadmin', p_password => 'welcome1' ); l_response_msg := apex_web_service.parse_response( p_collection_name=>'STELLENT_CHECKIN', p_xpath=>'//idc:CheckInUniversalResponse/idc:CheckInUniversalResult/idc:StatusInfo/idc:statusMessage/text()', p_ns=>'xmlns:idc="http://www.stellent.com/CheckIn/"'); :P1_RES_MSG := l_response_msg; END IF; END;
RESTful形式のWebサービスでは、SOAPより単純なアーキテクチャを使用します。通常、RESTful形式のWebサービスへの入力は、名前/値ペアのコレクションです。レスポンスは、XML文書またはカンマ区切りのレスポンスやJSONなどの単純なテキストです。次に、AJAXからコールできるアプリケーション・プロセスで使用されているMAKE_REST_REQUESTの例を示します。
declare l_clob clob; l_buffer varchar2(32767); l_amount number; l_offset number; begin l_clob := apex_web_service.make_rest_request( p_url => 'http://us.music.yahooapis.com/ video/v1/list/published/popular', p_http_method => 'GET', p_parm_name => apex_util.string_to_table('appid:format'), p_parm_value => apex_util.string_to_table(apex_application.g_x01||':'||apex_application.g_x02)); l_amount := 32000; l_offset := 1; begin loop dbms_lob.read( l_clob, l_amount, l_offset, l_buffer ); htp.p(l_buffer); l_offset := l_offset + l_amount; l_amount := 32000; end loop; exception when no_data_found then null; end; end;
Application Expressでサポートされているいずれかのメソッドを使用してWebサービスを起動すると、WebサービスのレスポンスにCookiesまたはHTTPヘッダーが含まれていた場合、g_response_cookies
およびg_headers
グローバルが移入されます。これらのグローバルは問合せが可能で、コレクションに情報を格納できます。次に、APEX_WEB_SERVICE
グローバルを問い合せてCookieおよびHTTPヘッダーのレスポンスをコレクションに格納する例を示します。
declare i number; secure varchar2(1); begin apex_collection.create_or_truncate_collection('P31_RESP_COOKIES'); for i in 1.. apex_web_service.g_response_cookies.count loop IF (apex_web_service.g_response_cookies(i).secure) THEN secure := 'Y'; ELSE secure := 'N'; END IF; apex_collection.add_member(p_collection_name => 'P31_RESP_COOKIES', p_c001 => apex_web_service.g_response_cookies(i).name, p_c002 => apex_web_service.g_response_cookies(i).value, p_c003 => apex_web_service.g_response_cookies(i).domain, p_c004 => apex_web_service.g_response_cookies(i).expire, p_c005 => apex_web_service.g_response_cookies(i).path, p_c006 => secure, p_c007 => apex_web_service.g_response_cookies(i).version ); end loop; end; declare i number; begin apex_collection.create_or_truncate_collection('P31_RESP_HEADERS'); for i in 1.. apex_web_service.g_headers.count loop apex_collection.add_member(p_collection_name => 'P31_RESP_HEADERS', p_c001 => apex_web_service.g_headers(i).name, p_c002 => apex_web_service.g_headers(i).value, p_c003 => apex_web_service.g_status_code); end loop; end;
Webサービスを起動するプロセスの前に、グローバルg_request_cookies
およびg_request_headers
を移入することによって、Webサービス・リクエストとともに送信する必要があるCookiesおよびHTTPヘッダーを設定します。次に、グローバルを移入して、リクエストとともにCookiesおよびHTTPヘッダーを送信する例を示します。
for c1 in (select seq_id, c001, c002, c003, c004, c005, c006, c007 from apex_collections where collection_name = 'P31_RESP_COOKIES' ) loop apex_web_service.g_request_cookies(c1.seq_id).name := c1.c001; apex_web_service.g_request_cookies(c1.seq_id).value := c1.c002; apex_web_service.g_request_cookies(c1.seq_id).domain := c1.c003; apex_web_service.g_request_cookies(c1.seq_id).expire := c1.c004; apex_web_service.g_request_cookies(c1.seq_id).path := c1.c005; if c1.c006 = 'Y' then apex_web_service.g_request_cookies(c1.seq_id).secure := true; else apex_web_service.g_request_cookies(c1.seq_id).secure := false; end if; apex_web_service.g_request_cookies(c1.seq_id).version := c1.c007; end loop; for c1 in (select seq_id, c001, c002 from apex_collections where collection_name = 'P31_RESP_HEADERS' ) loop apex_web_service.g_request_headers(c1.seq_id).name := c1.c001; apex_web_service.g_request_headers(c1.seq_id).value := c1.c002; end loop;
このファンクションを使用して、BLOBデータ型を、base64でエンコードされたCLOBに変換します。通常、バイナリをWebサービスへの入力として送信する場合に使用します。
構文
APEX_WEB_SERVICE.BLOB2CLOBBASE64 ( p_blob IN BLOB) RETURN CLOB;
パラメータ
表22-1では、BLOB2CLOBBASE64
ファンクションで使用可能なパラメータについて説明します。
例
次に、apex_application_filesビューからアンロードされたファイルを取得し、BLOBをbase64でエンコードされたCLOBに変換する例を示します。
declare l_clob CLOB; l_blob BLOB; begin SELECT BLOB_CONTENT INTO l_BLOB FROM APEX_APPLICATION_FILES WHERE name = :P1_FILE; l_CLOB := apex_web_service.blob2clobbase64(l_BLOB); end;
このファンクションを使用して、base64でエンコードされたCLOBデータ型をBLOBに変換します。通常、バイナリ・パラメータを含むWebサービスから出力を取得する場合に使用します。
構文
APEX_WEB_SERVICE.CLOBBASE642BLOB ( p_clob IN CLOB) RETURN BLOB;
パラメータ
表22-2では、CLOBBASE642BLOB
ファンクションで使用可能なパラメータについて説明します。
例
次に、base64でエンコードされたノードをXML文書からCLOBとして取得し、BLOBに変換する例を示します。
declare l_base64 CLOB; l_blob BLOB; l_xml XMLTYPE; begin l_base64 := apex_web_service.parse_xml_clob(l_xml, ' //runReportReturn/reportBytes/text()'); l_blob := apex_web_service.clobbase642blob(l_base64); end;
このプロシージャを使用して、指定されたSOAPエンベロープとともにSOAP形式のWebサービスを起動し、結果をコレクションに格納します。
構文
APEX_WEB_SERVICE.MAKE_REQUEST ( p_url IN VARCHAR2, p_action IN VARCHAR2 default null, p_version IN VARCHAR2 default '1.1', p_collection_name IN VARCHAR2 default null, p_envelope IN CLOB, p_username IN VARCHAR2 default null, p_password IN VARCHAR2 default null, p_proxy_override IN VARCHAR2 default null, p_transfer_timeout IN NUMBER default 180, p_wallet_path IN VARCHAR2 default null, p_wallet_pwd IN VARCHAR2 default null );
パラメータ
表22-3では、MAKE_REQUEST
プロシージャで使用可能なパラメータについて説明します。
表22-3 MAKE_REQUESTプロシージャのパラメータ
パラメータ | 説明 |
---|---|
|
WebサービスのURLエンドポイント。 |
|
起動する操作に対応するSOAPアクション。 |
|
SOAPのバージョン(1.1または1.2)。デフォルトは1.1。 |
|
レスポンスを格納するコレクションの名前。 |
|
サービスにポストするSOAPエンベロープ。 |
|
このサービスに基本認証が必要な場合はユーザー名。 |
|
このサービスに基本認証が必要な場合はパスワード。 |
|
リクエストに使用するプロキシ。指定したプロキシは、アプリケーション属性で定義したプロキシより優先されます。 |
|
レスポンスを待機する時間(秒単位)。 |
|
URLエンドポイントがHTTPSの場合はウォレットへのファイル・システム・パス。file:/usr/home/oracle/WALLETSなど。指定されたウォレットのパスは、インスタンス設定で定義したウォレットより優先されます。 |
|
ウォレットにアクセスするためのパスワード。 |
例
次の例では、make_request
プロシージャを使用して、SOAP形式のWebサービスからムービーのリストを取得します。レスポンスはApplication ExpressコレクションMOVIE_LISTINGS
に格納されます。
declare l_envelope CLOB; BEGIN l_envelope := '<?xml version="1.0" encoding="UTF-8"?> <soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:tns="http://www.ignyte.com/whatsshowing" xmlns:xs="http://www.w3.org/2001/XMLSchema"> <soap:Body> <tns:GetTheatersAndMovies> <tns:zipCode>43221</tns:zipCode> <tns:radius>5</tns:radius> </tns:GetTheatersAndMovies> </soap:Body> </soap:Envelope>'; apex_web_service.make_request( p_url => ' http://www.ignyte.com/webservices/ignyte.whatsshowing.webservice/moviefunctions.asmx', p_action => ' http://www.ignyte.com/whatsshowing/GetTheatersAndMovies', p_collection_name => 'MOVIE_LISTINGS', p_envelope => l_envelope ); END;
このファンクションを使用して、指定されたSOAPエンベロープとともにSOAP形式のWebサービスを起動し、XMLTYPEで結果を戻します。
構文
APEX_WEB_SERVICE.MAKE_REQUEST ( p_url IN VARCHAR2, p_action IN VARCHAR2 default null, p_version IN VARCHAR2 default '1.1', p_envelope IN CLOB, p_username IN VARCHAR2 default null, p_password IN VARCHAR2 default null, p_proxy_override IN VARCHAR2 default null, p_transfer_timeout IN NUMBER default 180, p_wallet_path IN VARCHAR2 default null, p_wallet_pwd IN VARCHAR2 default null ) RETURN XMLTYPE;
パラメータ
表22-4では、MAKE_REQUEST
ファンクションで使用可能なパラメータについて説明します。
表22-4 MAKE_REQUESTファンクションのパラメータ
パラメータ | 説明 |
---|---|
|
WebサービスのURLエンドポイント。 |
|
起動する操作に対応するSOAPアクション。 |
|
SOAPのバージョン(1.1または1.2)。デフォルトは1.1。 |
|
サービスにポストするSOAPエンベロープ。 |
|
このサービスに基本認証が必要な場合はユーザー名。 |
|
このサービスに基本認証が必要な場合はパスワード。 |
|
リクエストに使用するプロキシ。指定したプロキシは、アプリケーション属性で定義したプロキシより優先されます。 |
|
レスポンスを待機する時間(秒単位)。 |
|
URLエンドポイントがHTTPSの場合はウォレットへのファイル・システム・パス。file:/usr/home/oracle/WALLETSなど。指定されたウォレットのパスは、インスタンス設定で定義したウォレットより優先されます。 |
|
ウォレットにアクセスするためのパスワード。 |
例
次の例では、make_request
ファンクションを使用して、ムービーのリストを戻すSOAP形式のWebサービスを起動します。結果はXMLTYPEで格納されます。
declare l_envelope CLOB; l_xml XMLTYPE; BEGIN l_envelope := ' <?xml version="1.0" encoding="UTF-8"?> <soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:tns="http://www.ignyte.com/whatsshowing" xmlns:xs="http://www.w3.org/2001/XMLSchema"> <soap:Body> <tns:GetTheatersAndMovies> <tns:zipCode>43221</tns:zipCode> <tns:radius>5</tns:radius> </tns:GetTheatersAndMovies> </soap:Body> </soap:Envelope>'; l_xml := apex_web_service.make_request( p_url => ' http://www.ignyte.com/webservices/ignyte.whatsshowing.webservice/moviefunctions.asmx', p_action => ' http://www.ignyte.com/whatsshowing/GetTheatersAndMovies', p_envelope => l_envelope ); END
このファンクションを使用して、名前/値ペア、キャラクタベースのペーロード、バイナリ・ペイロードのいずれかを指定し、レスポンスをCLOBで戻して、RESTful形式のWebサービスを起動します。
構文
APEX_WEB_SERVICE.MAKE_REST_REQUEST( p_url IN VARCHAR2, p_http_method IN VARCHAR2, p_username IN VARCHAR2 default null, p_password IN VARCHAR2 default null, p_proxy_override IN VARCHAR2 default null, p_transfer_timeout IN NUMBER default 180, p_body IN CLOB default empty_clob(), p_body_blob IN BLOB default empty_blob(), p_parm_name IN apex_application_global.VC_ARR2 default empty_vc_arr, p_parm_value IN apex_application_global.VC_ARR2 default empty_vc_arr, p_wallet_path IN VARCHAR2 default null, p_wallet_pwd IN VARCHAR2 default null ) RETURN CLOB;
パラメータ
表22-5では、MAKE_REST_REQUEST
ファンクションで使用可能なパラメータについて説明します。
表22-5 MAKE_REST_REQUESTファンクションのパラメータ
パラメータ | 説明 |
---|---|
|
WebサービスのURLエンドポイント。 |
|
使用するHTTPメソッド(PUT、POST、GET、HEADまたはDELETE)。 |
|
このサービスに基本認証が必要な場合はユーザー名。 |
|
このサービスに基本認証が必要な場合はパスワード。 |
|
リクエストに使用するプロキシ。指定したプロキシは、アプリケーション属性で定義したプロキシより優先されます。 |
|
レスポンスを待機する時間(秒単位)。 |
|
CLOBとして送信するHTTPペイロード。 |
|
バイナリBLOBとして送信するHTTPペイロード。ファイルのポストなど。 |
|
名前/値ペアで使用するパラメータの名前。 |
|
名前/値ペアで使用するパラメータの値。 |
|
URLエンドポイントがHTTPSの場合はウォレットへのファイル・システム・パス。file:/usr/home/oracle/WALLETSなど。指定されたウォレットのパスは、インスタンス設定で定義したウォレットより優先されます。 |
|
ウォレットにアクセスするためのパスワード。 |
例
次の例では、make_rest_request
ファンクションを使用して、パラメータを名前/値ペアとしてサービスに渡すRESTful形式のWebサービスをコールします。サービスからのレスポンスはローカルで宣言されたCLOBで格納されます。
declare l_clob CLOB; BEGIN l_clob := apex_web_service.make_rest_request( p_url => 'http://us.music.yahooapis.com/ video/v1/list/published/popular', p_http_method => 'GET', p_parm_name => apex_util.string_to_table('appid:format'), p_parm_value => apex_util.string_to_table('xyz:xml')); END
このファンクションを使用して、コレクションに格納されたWebサービスからのレスポンスを解析し、結果をVARCHAR2型で戻します。
構文
APEX_WEB_SERVICE.PARSE_RESPONSE ( p_collection_name IN VARCHAR2, p_xpath IN VARCHAR2, p_ns IN VARCHAR2 default null ) RETURN VARCHAR2;
パラメータ
表22-6では、PARSE_RESPONSE
ファンクションで使用可能なパラメータについて説明します。
表22-6 PARSE_RESPONSEファンクションのパラメータ
パラメータ | 説明 |
---|---|
|
Webサービスのレスポンスが格納されるコレクションの名前。 |
|
目的のノードへのXPath式。 |
|
目的のノードへのネームスペース。 |
例
次の例では、STELLENT_CHECKIN
というコレクションに格納されたレスポンスを解析し、値をローカルで宣言されたVARCHAR2変数に格納します。
declare l_response_msg VARCHAR2(4000); BEGIN l_response_msg := apex_web_service.parse_response( p_collection_name=>'STELLENT_CHECKIN', p_xpath => '//idc:CheckInUniversalResponse/idc:CheckInUniversalResult/idc:StatusInfo/idc:statusMessage/text()', p_ns=>'xmlns:idc="http://www.stellent.com/CheckIn/"'); END;
このファンクションを使用して、コレクションに格納されたWebサービスからのレスポンスを解析し、結果をCLOB型で戻します。
構文
APEX_WEB_SERVICE.PARSE_RESPONSE_CLOB ( p_collection_name IN VARCHAR2, p_xpath IN VARCHAR2, p_ns IN VARCHAR2 default null ) RETURN CLOB;
パラメータ
表22-7では、PARSE_RESPONSE_CLOB
ファンクションで使用可能なパラメータについて説明します。
表22-7 PARSE_RESPONSE _CLOBファンクションのパラメータ
パラメータ | 説明 |
---|---|
|
Webサービスのレスポンスが格納されるコレクションの名前。 |
|
目的のノードへのXPath式。 |
|
目的のノードへのネームスペース。 |
例
次の例では、STELLENT_CHECKIN
というコレクションに格納されたレスポンスを解析し、値をローカルで宣言されたCLOB変数に格納します。
declare l_response_msg CLOB; BEGIN l_response_msg := apex_web_service.parse_response_clob( p_collection_name=>'STELLENT_CHECKIN', p_xpath=> '//idc:CheckInUniversalResponse/idc:CheckInUniversalResult/idc:StatusInfo/idc:statusMessage/text()', p_ns=>'xmlns:idc="http://www.stellent.com/CheckIn/"'); END;
このファンクションを使用して、XMLTYPEとして戻されたWebサービスからのレスポンスを解析し、リクエストされた値をVARCHAR2として戻します。
構文
APEX_WEB_SERVICE.PARSE_XML ( p_xml IN XMLTYPE, p_xpath IN VARCHAR2, p_ns IN VARCHAR2 default null ) RETURN VARCHAR2;
パラメータ
表22-8に、PARSE_XML
ファンクションで使用可能なパラメータを示します。
表22-8 PARSE_XMLファンクションのパラメータ
パラメータ | 説明 |
---|---|
|
解析するXMLTYPEとしてのXML文書。 |
|
目的のノードへのXPath式。 |
|
目的のノードへのネームスペース。 |
例
次の例では、make_request
ファンクションを使用してWebサービスをコールし、結果をローカルのXMLTYPE変数に格納します。その後、XMLTYPEに格納されたXML文書の特定ノードの取得にparse_xml
ファンクションが使用され、その結果をローカルに宣言されたVARCHAR2変数に格納します。
declare l_envelope CLOB; l_xml XMLTYPE; l_movie VARCHAR2(4000); BEGIN l_envelope := ' <?xml version="1.0" encoding="UTF-8"?> <soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:tns="http://www.ignyte.com/whatsshowing" xmlns:xs="http://www.w3.org/2001/XMLSchema"> <soap:Body> <tns:GetTheatersAndMovies> <tns:zipCode>43221</tns:zipCode> <tns:radius>5</tns:radius> </tns:GetTheatersAndMovies> </soap:Body> </soap:Envelope>'; l_xml := apex_web_service.make_request( p_url => ' http://www.ignyte.com/webservices/ignyte.whatsshowing.webservice/moviefunctions.asmx', p_action => ' http://www.ignyte.com/whatsshowing/GetTheatersAndMovies', p_envelope => l_envelope ); l_movie := apex_web_service.parse_xml( p_xml => l_xml, p_xpath => ' //GetTheatersAndMoviesResponse/GetTheatersAndMoviesResult/Theater/Movies/Movie/Name[1]', p_ns => ' xmlns="http://www.ignyte.com/whatsshowing"' ); END;
このファンクションを使用して、XMLTYPEとして戻されたWebサービスからのレスポンスを解析し、リクエストされた値をCLOBとして戻します。
構文
APEX_WEB_SERVICE.PARSE_XML_CLOB ( p_xml IN XMLTYPE, p_xpath IN VARCHAR2, p_ns IN VARCHAR2 default null ) RETURN VARCHAR2;
パラメータ
表22-9では、PARSE_XML_CLOB
ファンクションで使用可能なパラメータについて説明します。
表22-9 PARSE_XML_CLOBファンクションのパラメータ
パラメータ | 説明 |
---|---|
|
解析するXMLTYPEとしてのXML文書。 |
|
目的のノードへのXPath式。 |
|
目的のノードへのネームスペース。 |
例
次の例では、make_request
ファンクションを使用してWebサービスをコールし、結果をローカルのXMLTYPE変数に格納します。その後、XMLTYPEに格納されたXML文書の特定ノードの取得にparse_xml
ファンクションが使用され、その結果をローカルに宣言されたVARCHAR2変数に格納します。
declare l_envelope CLOB; l_xml XMLTYPE; l_movie CLOB; BEGIN l_envelope := ' <?xml version="1.0" encoding="UTF-8"?> <soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:tns="http://www.ignyte.com/whatsshowing" xmlns:xs="http://www.w3.org/2001/XMLSchema"> <soap:Body> <tns:GetTheatersAndMovies> <tns:zipCode>43221</tns:zipCode> <tns:radius>5</tns:radius> </tns:GetTheatersAndMovies> </soap:Body> </soap:Envelope>'; l_xml := apex_web_service.make_request( p_url => ' http://www.ignyte.com/webservices/ignyte.whatsshowing.webservice/moviefunctions.asmx', p_action => ' http://www.ignyte.com/whatsshowing/GetTheatersAndMovies', p_envelope => l_envelope ); l_movie := apex_web_service.parse_xml_clob( p_xml => l_xml, p_xpath => ' //GetTheatersAndMoviesResponse/GetTheatersAndMoviesResult/Theater/Movies/Movie/Name[1]', p_ns => ' xmlns="http://www.ignyte.com/whatsshowing"' ); END;