IBM Connect 2016 XPAGES 最新動向 Part 2 – 外部連携

前回のIBM Connect 2016レポートブログでIBM Championがスピーカーを務めるセッションが熱いと題し、Single Page ApplicationをXPAGESで作るセッションやモダンなXPAGESアプリケーションを作るためのライブラリ群などの紹介をしました。

XPages,Javaを使って外部システムと連携

今回はIBM ChampionであるJulian Robichaux氏とKathy Brown氏による「AD-1387 Outside The Box: Integrating with Non-Domino Apps using XPages and Java」のセッションに参加した内容を振り返ってみたいと思います。

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操作 – OpenCSV

手始めにCSVの扱い方から説明が始まりました。今更CSVの話なんて聞きたところでなにも面白くないだろうと思い、このセッションに参加したことを少し不安に思っていたところ、そこはやっぱりIBM Champion達。XPAGESでCSVに限らずメタデータを扱うときはJava Bean(Modelクラス of MVC)を作りましょう、とCSVは単なる滑り出しのためのトピックであり、実際はどんどんとディープな内容で進んで行きました。

Java Beanのサンプルは以下のようになります。

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;
    }
}

そして、CSVの読み込み自体はOpenCSVというライブラリを使うという内容でした。ここで注意点は最新版のVersion 3.6はJava 7+となっており、依存関係の問題からJava 6を使っているDomino 9.0.2 FP4ではVersion 2.3を使うことになります。

こちらにOpenCSVを使ったサンプルコードを載せておきます。

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;
  }
}

XMLをパースするためのJAXB

こちらのソリューションは既にJava 6+に含まれているためインストールの必要はありません。利用の仕方はJava Beanの記述にアノテーションを利用しどのフィールドがXMLのどのエレメントにマッピングされるかを明示してやります。

サンプルコードは以下のようになります。

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;
  }
}

JSONのパース

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をパースする呼び出し部分は以下のようになります。

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;
  }
}

JAXBを使ったJSONのアンマーシャルもネットではいくつもサンプルコードが公開されていますので、それと合わせてXPAGES用の独自アンマーシャルコードを作ってみるのがいいと思います。

XAGENT, REST, SocialSDKと内容がてんこ盛り

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」のセッション資料がいずれ公開されると思いますので時間をおいて確認してみてください。

About ktatsuki

ktatsuki

ケートリック株式会社 代表をしています。 が、根っからのエンジニア脳です。 IBM Notes/Dominoの開発を得意としますが、 C++ / Java / PHP / Javascript などの言語を使ってWEBアプリ、iPhone / Android アプリ開発などをしたりします。 XPagesの仕事をしているとテンションが通常の1.25倍ぐらい高くなります。 I am owner of KTrick Co., Ltd. and Notes/Domino developer. IBM Champion for 2015 - 2017. I am interested in web application development and preferred languages are Notes/Domino, C++ / Java / PHP / Javascript.

2 Comments

    1. ktatsuki
      ktatsuki

      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!

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です