01.Json送受信のスタブをCamelで作ってみる
概要
お遊びです。
Jsonを送信するアプリを作成すると、Jsonを受信してJsonを返すスタブが欲しくなります。
ここでは、Camelを使ってJson送受信のスタブを作ってみます。
【必要なjarについて】
Camelのトップのページにpomのサンプルが記述してありますので、そちらを参照ください。
Jsonの受信スタブ
受信するスタブのサンプルです。
jettyというWEBサーバを起動して、Jsonの受信待ちをし、固定のJsonを返しています。
package com.example.json.recv;
import org.apache.camel.Exchange;
import org.apache.camel.Processor;
import org.apache.camel.builder.RouteBuilder;
import org.apache.camel.main.Main;
import org.apache.camel.model.dataformat.JsonLibrary;
import com.example.json.bean.JsonRecvObjSample;
//Jsonを受け取るWEB
public class MainJsonReciever {
public static void main(String args[]) throws Exception {
test_web();
}
public static void test_web() throws Exception{
Main main = new Main();
main.addRouteBuilder(new RouteBuilder(){
@Override
public void configure() throws Exception {
from("jetty:http://localhost:10002/json/myservice?useContinuation=false")
//コメントアウトしたが受け取ったJsonをPOJOに変換することもできる。
//.unmarshal().json(JsonLibrary.Jackson, JsonRecvObjSample.class)
//Jsonを返却する処理
.process(new Processor() {
@Override
public void process(Exchange ex) throws Exception {
//受信したPOJOを使用したい場合の例
//JsonSendObjSample p = ex.getIn().getBody(JsonSendObjSample.class);
//レスポンス
System.out.println("RecvServer: " + ex.getIn().getBody(String.class));
JsonRecvObjSample recv = new JsonRecvObjSample();
recv.setResult("ok!");
ex.getOut().setBody(recv);
}
})
.marshal().json(JsonLibrary.Jackson)
.to("log:test");
}
});
main.run();
}
}
Jsonの送信スタブ
送信するスタブのサンプルです。
eclipseでは2つのアプリを同時起動できるので、上記の受信スタブを実行した後、この送信スタブを実行すると
スタブ同士で動作を確認することもできます。
package com.example.json.factory;
import org.apache.camel.builder.RouteBuilder;
import org.apache.camel.main.Main;
import org.apache.camel.model.dataformat.JsonLibrary;
import com.example.json.bean.JsonSendObjSample;
public class MainSendJson {
public static void main(String args[]) throws Exception {
test_json();
}
public static void test_json() throws Exception{
Main main = new Main();
main.addRouteBuilder(new RouteBuilder(){
@Override
public void configure() throws Exception {
//Jsonオブジェクトに値を設定する
JsonSendObjSample json = new JsonSendObjSample();
json.getSample().setMsg("あああ");
//Camelの設定開始。タイマーで1度だけ起動する。
from("timer://runOnce?repeatCount=1")
.process(ex->ex.getIn().setBody(json))
//Jsonオブジェクトを文字列のJson形式に変換する
.marshal().json(JsonLibrary.Jackson)
//サーバにJsonを送信する
.to("http://localhost:10002/json/myservice");
}
});
//setDurationを設定すると指定の時間が経つとシャットダウンするがログが煩わしい
//main.setDuration(2000);
main.run();
}
}
(注意)自動で停止しないのでeclipseの起動停止を押してください 。
自動停止する方法はいくつかあるようですが面倒です。
setDuration()は停止が簡易ですがログが煩わしいです。
Created Date: 2017/01/23