[OCI]Oracle Functions: Oracle FunctionsからのSOAP WebServiceの呼び出し (2020/12/23)

Oracle Functions: Oracle FunctionsからのSOAP WebServiceの呼び出し (2020/12/23)

https://blogs.oracle.com/cloud-infrastructure/oracle-functions%3acalling-soap-webservice-from-oracle-functions
投稿者:Chandan Saikia | Principal Consultant

本記事では、Java上に構築されたOracle FunctionsからSOAPサービスを呼び出す方法について解説します。
Oracle FunctionsからUniversal Content Management (UCM) SOAP APIを呼び出して、
Oracle Engagement Cloud UCMサーバーから添付ファイルをダウンロードするユースケースを考えます。
API GatewayはこのFunctionsをRESTエンドポイントとして公開しているので、PostmanなどのRESTクライアントからFunctionsを呼び出してテストすることができます。

どこから始めるか


この例では、Java 開発キット (JDK) 8 パッケージ javax.xml.soap を使用しています。
このパッケージは JDK 11 では非推奨です。Fn init コマンドを使用してFunctionsを作成すると、Functionsは常にデフォルトの JDK (JDK 11) を使用します。
そのため、Functions内ではJDKのバージョンをJDK 8と指定します。

Functionsを作成して、Functionsで使用しているデフォルトのJDKのバージョンを確認してみましょう。
以下のコマンドでFunctionsを新規作成します。

fn init --runtime java testFunctionChandan

このFunctionsのために以下のfunc.yamlファイルが生成されます。

schema_version: 20180708
name: testfunctionchandan
version: 0.0.1
runtime: java
build_image: fnproject/fn-java-fdk-build:jdk11-1.0.109
run_image: fnproject/fn-java-fdk:jre11-1.0.109
cmd: com.example.fn.HelloFunction::handleRequest


func.yamlでは、Fn initコマンドでJDKのバージョンが指定されていない場合、JDKを11として使用していることがわかります。
JDK 8を使用するFunctionsを作成するには、以下のFn initコマンドを使用します。

fn init --runtime java8 attachment-demo

このコマンドは、func.yamlで新しいFunctionsを作成します。

schema_version: 20180708
name: attachment-demo
version: 0.0.1
runtime: java8
build_image: fnproject/fn-java-fdk-build:1.0.109
run_image: fnproject/fn-java-fdk:1.0.109
cmd: com.example.fn.HelloFunction::handleRequest


そして、このfunc.yamlを修正して、パッケージで自分のFunctions名を使うようにします。

schema_version: 20180708
name: attachment-demo
version: 0.0.1
runtime: java8
build_image: fnproject/fn-java-fdk-build:1.0.109
run_image: fnproject/fn-java-fdk:1.0.109
cmd: com.function.demo.AttachmentDemoFunction::handleRequest
timeout: 120


また、Oracle Functionsでサポートされている最大のタイムアウトである120秒のタイムアウトを追加しました。

Fn init で生成された pom.xml ファイルを修正して、このFunctionsの依存関係を含めることをお勧めします。
更新された pom.xml ファイルは pom.xml からダウンロードできます。

UCM SOAP APIはセキュアなので、アクセスするにはユーザーの認証情報を渡す必要があります。
このFunctionsを呼び出すときには、リクエストのヘッダーにAuthorizationトークンを渡す必要があります。
このトークンは、UCM SOAP API にアクセスするために使用されます。

http ヘッダにアクセスするには、Java クラス AttachmentDemoFunction.java 内の以下の import ステートメントを使用します。

import com.fnproject.fn.api.httpgateway.HTTPGatewayContext;
import com.fnproject.fn.api.Headers;

添付の Java クラス AttachmentDemoFunction.java の getInputParameters(context) メソッドは、http ヘッダからトークンを抽出し、
このFunctionsの REST エンドポイントからパスパラメータを抽出します。
このエンドポイントのパスパラメータには、添付ファイルの UCM コンテンツ ID の値が格納されています。

java クラスのソースコードは、AttachmentDemoFunction.java にあります。

API Gatewayの構成


このFunctionsを呼び出すために、Oracle Cloud Infrastructure Console で API ゲートウェイを構成します。
デプロイのパスを「/attachment/{documentId}」と設定し、{documentId} は添付ファイルの UCM コンテンツ ID です。



API Gatewayのデプロイが成功すると、エンドポイントが Console に表示されます。
このFunctionsの REST エンドポイントは https://host:port/demo/attachment/{documentId} のようなものです。



API Gatewayでは、このRESTエンドポイントのセキュリティは構成されていません。
必要であれば、以下の認証・認可機能のいずれかを設定することで、このエンドポイントのセキュリティを確保することができます。

  • HTTP 基本認証
  • APIキー認証
  • OAuth 認証と認可
  • Oracle Identity Cloud Service(IDCS)認証

API Gateway の認証および認可機能の詳細については、「API デプロイメントへの認証および認可の追加」を参照してください。

Postman を使用した REST エンドポイントのテスト


Postmanを使って、このAPI Gateway RESTエンドポイントを呼び出すことができます。
以下の画像のように、認証ヘッダにベアラートークンを使用しました。
ベアラートークンを生成するために、IDCSとOEC間でSSOを設定しました。



ベアラートークンを持っていない場合は、ヘッダーで基本認証をパスすることができます。

Authorization: Basic <base64 encoded string of username:password>

Postmanからのリクエスト送信中に「保存してダウンロード」をクリックすると、添付ファイルがダウンロードされ、ローカルディレクトリに保存されます。



まとめ
今回の記事では、JDK 8 のパッケージを使用して SOAP サービスを呼び出すための Oracle Functions の機能を見てみました。
また、API Gatewayを設定することで、このFunctionが REST エンドポイントとしてどのように公開されているかを見てみました。
最後に、OEC UCM サーバーから添付ファイルをダウンロードして保存するためにベアラートークンを渡すことで、Postman からこの REST エンドポイントをテストしました。

詳細については、以下のリソースを参照してください。

コメント

このブログの人気の投稿

Oracle APEXのInteractive Gridで、Oracle Formsと比較して、重複行の検証を制御/通過させる方法 (2022/07/21)

Oracle APEX 24.1の一般提供の発表 (2024/06/17)

Oracle Cloudのデータベースをオブジェクト・ストレージにバックアップする3つの方法 (2021/12/13)