はじめに
今回は、Talendの中でも、結構マニアックな話題です。
内容は、「tSOAPコンポーネントでWebserviceを呼び出す際に、諸事情があってサービスが呼べないけどテスト用にジョブは流したい!どうしよう!」
という場合の解決方法についてです。
最近は、SOAPよりRESTの方がメジャーですし、なんというか、マニアックすぎて需要はあまりないかとは思うのですけれど、備忘として残しておきます。
ほぼ、私のための記事です。
tSOAPって…なに?
TalendのInternetという分類に収まっているSOAP呼出用のコンポーネントです。
SOAPは…まぁ、ネットワークを介して情報をやり取りするプロトコルの1種で、どんなデータをやりとりするよ、みたいなデータ構造XMLを事前定義し、その通りに実際のデータが飛んできます。
XML形式なんでデータ量がかさばりがちな点や、XML事前定義が面倒だという点などで、構造が複雑な場合以外はあまり使われないようです。
一般的には、シンプルで軽量なRESTが採用されますけれど。最近は。
もちろん、TalendにはtRESTというコンポーネントも用意されていますよ。
ちなみに、tSOAPを使用したジョブフローのサンプルは下記のような感じです。
tSOAPコンポーネントの設定は、エンドポイント(どのURLに)、SOAP Action(どんな操作を要求するか)、と最後のSOAP Message の3点はしっかり行う必要があります。
ここで、後にtXMLMapなどで楽にデータ分割やマッピングを行いたい場合は、Output in Documentというチェックを付与しておくと楽です。
で、ここからが今回の主題
さて。tSOAPの話はここまでにして。
実際の業務においては、tSOAPでWebserviceを呼ぶと困る場合がありますよね。
例えば、何かの登録操作を行うサービスで、しかも簡単に登録後のデータを消すことができない場合、とか。
こうした場合は、気軽にはtSOAPコンポーネントを呼べません(まぁ、ダミーの動作をするサービスを作ればいいんですけど)。
しかし、後のフローの確認を行いたい場合…一般的には、SOAPのResponseとなるXML文字列をDocument型に変換して次の処理に渡せば良いじゃん、となりますよね。
なのですが!
どんなに調べてもJavaの公式ドキュメントやTalendのドキュメントを見ても、Document型を作り出す方法が出てきません!
Javaでは、org.w3c.domのDocumentクラスばかりが出てきますが、これでTalendのDocumentに押し込もうとすると、エラーで動きませんし…困った。
この解消が今回の記事の主題です。はい。
で、解決方法
Talendが用意している下記のメソッドを使用します。[java] ParserUtils.parseTo_Document
[/java]
これだけ。
tSoapのJavaのコードを見てみると、このメソッドを使用してDocument型を得ているようだったので、同じようにtJavaしてみた所、無事に成功しました。
具体的には、上記のようにxmlをstring型で一旦受けておいて、それを前述のメソッドの引数として渡し、戻り値を次のフローへの入力のDocument型に渡します。
おわりに
まず、tSoapについての記事を書けよ感はありますが…
結構詰まっていたので、もし他の人の参考になれば幸いです。
今回は以上です。