4
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Talend ESB で REST/SOAP を扱う際のポイント

Posted at

Talend (Open Studio利用) for ESB で REST や SOAP のサービスを構築した際に、色々と慣れるまでに苦労した点を、つらつらと記録します。

1. REST

1-1. tRESTRequest のエンドポイントには相対パス

Getting Started Guide でも Components Reference Guide でも、tRESTRequest を使ったサンプルではエンドポイントを http://[IP/Domain]:[Port]/[ServiceName] のような形で指定している。
だがそうすると、Studio での実行時は問題ないが、Talend Runtime 環境に持ってゆくとデプロイに失敗する。
(trun -> list すると Failure と表示される。refresh してもダメ。)

ではどうするか。

エンドポイントには /[ServiceName] とだけ指定すればよい。
環境に応じて次のようにデプロイされる。
(ポート番号は標準設定の場合のもの。)

実行環境 URL
Studio http://localhost:8090/[ServiceName]
Talend Runtime http://[IP/Domain]:8040/services/[ServiceName]

1-2. OSGIビルド時のコンテキスト切替

ビルド時に "自律実行ジョブ" が選択されていると、コンテキストスクリプトの切り替えオプションが画面に表示されるので問題ないが、"OSGIバンドル (ESB)" を選択するとこのオプションが消える。

ではどうするか。

例えばジョブ名が MyRESTService で、コンテキストに Default と Prod の2つが用意され、本番は Prod で運用したい場合には、デプロイ先サーバの "[TalendRuntimePath]/container/etc/" ディレクトリに、"MyRESTService.cfg" というテキストファイルを作成し、中に次の1行を記載すればよい。

[TalendRuntimePath]/container/etc/MyRESTService.cfg
context = Prod

2. SOAP

2-1. tESBConsumer で SOAP ログを確認

tESBConsumer の "Log messages(ログメッセージ)" オプションをオンにすると、実際にやりとりした Outbound と Inboud のメッセージがログに出力される。
だがいつの頃から、このオプションが効かなくなった。(TOS_ESB v6.3.0 で確認。)

ではどうするか。

"File(ファイル)" -> "Edit Project Properties(プロジェクトプロパティの編集)" -> "Log4j" の順に開いて、次の設定をテンプレートに加えてやればよい。

<logger name="org.apache.cxf.services">
	<level value="INFO" />
	<appender-ref ref="CONSOLE" />
</logger>

参考: source4code.info: JAX-WS - CXF logging request and response SOAP messages using Log4j


2-2. REST/SOAP 同居

REST と SOAP の2つの入り口を設け、内部処理は同じもの、返す値も同じものとしたい場合。
REST は普通にジョブ作成から始まり .jar ファイルが生成される。
SOAP はサービス作成から始まり .kar ファイルが生成される。
つまり一つのジョブに2つの入り口は設けられそうにない。

ではどうするか。

実際の処理は別ジョブで作成し、tRunJob で連携させればよい。
メンテナンス性も向上するし、いいことづくめ。

1. REST入口ジョブ: tRESTRequest -> tFlowToIterate -> tRunJob(3.へ) -> tRESTResponse
2. SOAP入口ジョブ: tESBProviderRequest -> tXMLMap -> tRunJob(3.へ) -> tXMLMap(WSDLに合わせる) -> tESBProviderResponse
3. 実際の処理ジョブ: (contextで引数受け取り) -> (実際の処理やエラー処理) -> tXMLMap -> tBufferOutput

(以上)

4
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?