XCITE 2014にて「liveness Portlet IC」が初お披露目されます!
2014年5月21,22日に開催される「IBM Softwa...
前回のIBM Connect 2016レポートブログでIBM Championがスピーカーを務めるセッションが熱いと題し、Single Page ApplicationをXPAGESで作るセッションやモダンなXPAGESアプリケーションを作るためのライブラリ群などの紹介をしました。
今回はIBM ChampionであるJulian Robichaux氏とKathy Brown氏による「AD-1387 Outside The Box: Integrating with Non-Domino Apps using XPages and Java」のセッションに参加した内容を振り返ってみたいと思います。
XPAGESとJavaを使ったDomino以外のアプリケーション連携ということでCSV、XML、JSONのデータを様々な手法で連携する方法を紹介していました。また後半ではIBM Social SDKやOAuthやQUICKBASEを使った連携、RDB連携にも触れまさに外部連携を網羅する内容になっていました。
手始めにCSVの扱い方から説明が始まりました。今更CSVの話なんて聞きたところでなにも面白くないだろうと思い、このセッションに参加したことを少し不安に思っていたところ、そこはやっぱりIBM Champion達。XPAGESでCSVに限らずメタデータを扱うときはJava Bean(Modelクラス of MVC)を作りましょう、とCSVは単なる滑り出しのためのトピックであり、実際はどんどんとディープな内容で進んで行きました。
Java Beanのサンプルは以下のようになります。
[code lang=”java” highlight=””]
public class EasyBean {
private String name;
private int count;
public EasyBean() {}
public String getName() { return name; }
public void setName(String name) {
this.name = name;
}
public int getCount() { return count; }
public void setCount(int count) {
this.count = count;
}
}
[/code]
そして、CSVの読み込み自体はOpenCSVというライブラリを使うという内容でした。ここで注意点は最新版のVersion 3.6はJava 7+となっており、依存関係の問題からJava 6を使っているDomino 9.0.2 FP4ではVersion 2.3を使うことになります。
こちらにOpenCSVを使ったサンプルコードを載せておきます。
[code lang=”java” highlight=””]
public static List convertCSV(String csvText) {
try {
CSVReader reader = new CSVReader(new StringReader(csvText));
ColumnPositionMappingStrategy<MovieBean> strat =
new ColumnPositionMappingStrategy<MovieBean>();
strat.setType(MovieBean.class);
String[] columns = new String[] {
"title", "studio", "year", "adjustedRevenue", "unadjustedRevenue"};
strat.setColumnMapping(columns);
CsvToBean csv = new CsvToBean();
List list = csv.parse(strat, reader);
return list;
} catch (Exception e) {
// log this!
return null;
}
}
[/code]
こちらのソリューションは既にJava 6+に含まれているためインストールの必要はありません。利用の仕方はJava Beanの記述にアノテーションを利用しどのフィールドがXMLのどのエレメントにマッピングされるかを明示してやります。
サンプルコードは以下のようになります。
[code lang=”java” highlight=””]
public static MovieBeanList convertXML(String xml) {
try {
// see @XML annotations on Java beans
JAXBContext jc = JAXBContext.newInstance(MovieBeanList.class);
Unmarshaller unmarshaller = jc.createUnmarshaller();
MovieBeanList movies = (MovieBeanList)unmarshaller.unmarshal(
new StringReader(xml));
return movies;
} catch (Exception e) {
// log this!
return null;
}
}
[/code]
JSONのパースにはXPAGESライブラリにあるcom.ibm.commons.util.io.json.JsonParserを使うことが出来ます。この時点でJavaカスタムオブジェクト(=上記で紹介したようなJava Bean)ではなくJava Maps、ListにJSONデータがパースされるためJava Beanを生成するには別途アンマーシャル(JSONからJava Beanを生成するプロセス)が必要ですが、ここではGSONやFlexJSONなどに触れつつDominoで利用する場合にセキュリティの問題が起こることになるため独自でアンマーシャルを記述する方法を紹介していました。
アンマーシャルのロジック自体はありませんが、JSONをパースする呼び出し部分は以下のようになります。
[code lang=”java” highlight=””]
public static List convertJSON(String json) {
try {
Object stuff = JsonParser.fromJson(JsonJavaFactory.instance, json);
List list = buildObjectFromJSON(MovieBean.class, stuff);
return list;
} catch (Exception e) {
// log this!
return null;
}
}
[/code]
JAXBを使ったJSONのアンマーシャルもネットではいくつもサンプルコードが公開されていますので、それと合わせてXPAGES用の独自アンマーシャルコードを作ってみるのがいいと思います。
CSV、XML、JSONのパースとJava Beanによるデータ格納を説明し終えた後は、実際のデータ取得方法としてXAGENTでInputStreamを使い外部システムへのアクセスの説明があり、取得後のObjectをXPAGESへ出力する説明があり、次にRESTでのアクセス方法からSocialSDKを使った連携ではOAuthに触れ、最後にQuickbaseと呼ばれるサービスを使った連携方法まで、まさにこれさえ聞けばXPAGESのシステム連携は基礎はしっかりと抑えられる内容になっていました。
このセッションの内容を全てブログに書き起こすとものすごいボリュームになってしまうため後半の説明は割愛しますが、もし興味があれば「AD-1387 Outside The Box: Integrating with Non-Domino Apps using XPages and Java」のセッション資料がいずれ公開されると思いますので時間をおいて確認してみてください。
Your readers in Japan may like the IBM Connect sessions database I update each year to get tons more of the available content since 2013
http://www.idonotes.com/IdoNotes/IdoConnect2013.nsf
And congrats to a fellow IBM Champion!
Hi Chris,
Thank you for this great information, and it’s very organized. I am writing a new blog regarding feedback of “1279A – Marty, You’re Just Not Thinking Fourth Dimensionally”: Troubleshooting XPages (2016)”, so I will add your site link regarding this session. Thanks!