サンプルプログラムのソースコード:
1 | import java.io.BufferedOutputStream; |
ソースコードについて解説します。
mainメソッド
30行目から37行目
実行時の引数から以下を取得します。
引数 | 変数 | 用途 |
---|---|---|
1 | hostName | CEPサーバのホスト名 |
2 | engineName | CEPエンジン名 |
3 | dataType | イベントデータ形式 |
4 | charSet | 文字セット |
5 | eventTypeId | イベントタイプID |
6 | data | イベントデータ本体 |
7 | lWait | データ送信待ち時間 |
8 | loop | データ送信回数 |
39行目
自身のオブジェクトを生成します。
40行目
送信用メソッドを呼び出します。
引数にはイベントデータ本体、文字セット、データ送信回数、データ送信待ち時間を渡します。
SoapClientコンストラクタ
49,50行目
引数からエンドポイントアドレスを作成します。
52行目
URLオブジェクトを生成します。
openメソッド
61行目
URLオブジェクトから接続先のHttpURLConnectionを作成します。
63行目
POSTメソッドを利用してSOAPメッセージを送信するため、HTTPのメソッドにPOSTを指定します。
64行目
content-typeにtext/xmlを指定します。これは必ずtext/xmlを指定してください。(SOAP1.1の仕様)
イベントデータの文字セットを設定します。
65行目
出力するためのフラグをセットします。
66行目
データ送信先に接続します。
sendMessageメソッド
79行目から112行目
引数で指定したデータ送信回数分のループです。
80行目
openメソッドを実行しデータ送信先に接続します。
81行目
BufferedOutputStreamを取得します。
83行目
イベントデータ本体に含まれる %COUNTER% をループ回数で置換します。
これは、毎回異なるイベントデータを送信するための措置です。
以下のようなイベントデータを想定しています。
"STR0001","CPN0001",%COUNTER%,"30"
84行目
SOAPメッセージを作成します。
94行目
SOAPメッセージを指定した文字コードでwriteします。
96行目
BufferedOutputStreamをflushします。
97行目
BufferedOutputStreamをcloseします。
99,100行目
HttpURLConnectionからInputStreamを取得し、BufferdReaderを作成します。
104行目
BufferdReaderから送信結果を標準出力に書き出します。
107,108行目
InputStreamとBufferdReaderをcloseします。
110行目
HttpURLConnectionを切断します。
111行目
次のイベントデータの送信までwaitします。
サンプルの実行例を以下に記述します。
なお、例ではDebugLogListenerを使用し、エンジンログにデバッグ情報を出力しています。
コマンド実行結果
# java -cp ./ SoapClient localhost CepEngine CSV UTF-8 CSVEvent SOAP,CSV,%COUNTER% 1 3 <ENTER>
<?xml version='1.0' encoding='UTF-8'?><S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/">
<S:Body><ns2:notifyResponse xmlns:ns2="http://adapter.front.cep.cspf.fujitsu.com/"><return>Code=0 Mess
age=Sending message completed normally.</return></ns2:notifyResponse></S:Body></S:Envelope>
<?xml version='1.0' encoding='UTF-8'?><S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/">
<S:Body><ns2:notifyResponse xmlns:ns2="http://adapter.front.cep.cspf.fujitsu.com/"><return>Code=0 Mess
age=Sending message completed normally.</return></ns2:notifyResponse></S:Body></S:Envelope>
<?xml version='1.0' encoding='UTF-8'?><S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/">
<S:Body><ns2:notifyResponse xmlns:ns2="http://adapter.front.cep.cspf.fujitsu.com/"><return>Code=0 Mess
age=Sending message completed normally.</return></ns2:notifyResponse></S:Body></S:Envelope>
(注) 見やすさのため、上記の例では出力の途中に改行を入れています(2-3行目、5-6行目、8-9行目)。実際には一行で続けて表示されます。
エンジンログ出力結果
2012-07-29 13:01:20,693 [DEBUG] abc:length=1 abc[0] operation :CSV: String count :0: String ID :SOAP: String 2012-07-29 13:01:20,730 [DEBUG] abc:length=1 abc[0] operation :CSV: String count :1: String ID :SOAP: String 2012-07-29 13:01:20,768 [DEBUG] abc:length=1 abc[0] operation :CSV: String count :2: String ID :SOAP: String
サンプルの実行例を以下に記述します。
なお、例ではDebugLogListenerを使用し、エンジンログにデバッグ情報を出力しています。
注意
SOAPアダプターを使用し、XMLデータを送信する場合はコマンド実行結果に記載されているようにデータをCDATAで囲んでください。
コマンド実行結果
# java -cp ./ SoapClient localhost CepEngine XML UTF-8 XMLEvent '<![CDATA[<?xml version="1.0"\
encoding="UTF-8"?><XMLEvent><ID>SOAP</ID> <operation>XML</operation> <count>%COUNTER%</count>\
</XMLEvent>]]>' 1 3 <ENTER>
<?xml version='1.0' encoding='UTF-8'?><S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/">
<S:Body><ns2:notifyResponse xmlns:ns2="http://adapter.front.cep.cspf.fujitsu.com/"><return>Code=0 Mess
age=Sending message completed normally.</return></ns2:notifyResponse></S:Body></S:Envelope>
<?xml version='1.0' encoding='UTF-8'?><S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/">
<S:Body><ns2:notifyResponse xmlns:ns2="http://adapter.front.cep.cspf.fujitsu.com/"><return>Code=0 Mess
age=Sending message completed normally.</return></ns2:notifyResponse></S:Body></S:Envelope>
<?xml version='1.0' encoding='UTF-8'?><S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/">
<S:Body><ns2:notifyResponse xmlns:ns2="http://adapter.front.cep.cspf.fujitsu.com/"><return>Code=0 Mess
age=Sending message completed normally.</return></ns2:notifyResponse></S:Body></S:Envelope>
(注1) 見やすさのため、上記の例では入力コマンドの途中で「\」で改行しています。実際には「\」は入力せず、次の行の内容を続けて入力します。
(注2) 見やすさのため、上記の例では出力の途中に改行を入れています(4-5行目、7-8行目、10-11行目)。実際には一行で続けて表示されます。
エンジンログ出力結果
2012-07-29 13:02:21,860 [DEBUG] abc--0:length=1 abc--0[0] operation :XML: String count :0: String ID :SOAP: String 2012-07-29 13:02:21,900 [DEBUG] abc--0:length=1 abc--0[0] operation :XML: String count :1: String ID :SOAP: String 2012-07-29 13:02:21,935 [DEBUG] abc--0:length=1 abc--0[0] operation :XML: String count :2: String ID :SOAP: String