ServiceMix, Twitter Account Activity API

Abstract#

Sometime I have developed web services such as gnssws, tlews and https://github.com/tateshitah/webhook. I would like to record information related to web service.

Topic#

How to describe the interface#

It should be referred existing web services such as recruit web service[1].

How to make it#

  • General
I like Java, so Jersey which is one of implementation of JAX-RS[2] should be recommended.
check [3]!Servlet3.0以降、Tomcat7以降だとweb.xmlの設定がいらなくなるが、その条件として、ResourceConfigクラスを継承したConfigクラスをつくり、Pathを指定しておくのがポイントか。うまくいくと、hostname/application name/ResourceConfigで設定したpath/Pathアノテーションで設定したパス名?**=**...でアクセスできるようになります。最後までインプットしないと404がでるかも。
まあ、別にWeb.xmlを編集してもいいんだけどね。gnsswsは、そっちでやってます。
  • POSTの扱い
Twitterのwebhookに成功すると。JSONをPostしてきます。POSTアノテーションを指定したメソッドでその処理をするのですが、JSONのようなTextを受け取るときのやり方が意外と探すのに苦労。ここ[4]をみながら、以下のように実装するとできた。
    @POST
    public Response postIt(String body){
        ResponseBuilder builder=Response.ok();
        System.out.println("something posted!"+body);
        return builder.build();
    }
  • Jerseyを使っていて、JDK11にすると、コンパイルは通るけど実行上は、java.lang.NoClassDefFoundError: javax/activation/DataSourceとか起きて、動きません。原因は、Jerseyの中で使っているJAFとJAXBがJDK11ではなくなっているため。[5]で解決。Jerseyのアップデートでも解決するのだろうか。。

Reference#

  1. [#1]Recruit Co., Ltd., リクルート WEBサービス, http://webservice.recruit.co.jp
  2. [#2]Oracle Corporation, Jersey, https://jersey.github.io
  3. [#3]edgegram, 2015-11-25, Jerseyの設定2(web.xmlとかApplicationクラスとか), https://edgegram.hatenablog.jp/entry/2015/11/25/194919
  4. [#4]Stack Over Flow, 2016-12-16, How do I get the JSON body in Jersey?, https://stackoverflow.com/questions/41157949/how-do-i-get-the-json-body-in-jersey
  5. [#5]YUICHI SAKURABA, 2018年7月4日, 事例から学ぶ、Java SE 11移行、http://www.javainthebox.com/2018/07/java-se-11.html