木曜日 6 05, 2008

Mash up Award 4thがはじまったそうです

ちょっと話題的には出遅れましたが、1年ぶりにMash up Award 4thが始まったようです。最優秀賞の賞金は100万円!マッシュアップ対象のAPIも今回はさらにパワーアップしています。期間は9月16日11時59分までですので、夏休みのチャレンジとして参加されてはいかがでしょうか。その他詳細は、Mash up Award 4th公式ページか、nabejunさんのブログをご参照ください。
R0017285.JPG
今回も個人的には参加したいのはやまやまですが、主催企業社員ですので参加できません (参照: 参加規約)。1回目と、2回目あたりは参加だけならokだったと思いますが、まあしょうがないですね。というわけで、今回もブログで個人的に細々とMash upアプリを作ろうと思います。最近の流れなら、JRubyとかJython、JavaScriptなどLL系の言語でパパっと作るのがイキなんでしょうけれど、今回はあえて焦点が当たりにくい、重量級の実装で望もうと思います(笑)。
R0017273.JPG
今回の個人的なテーマはOpen ESBでMash upです。ESBにつなげてしまえば、Mash upするのも簡単なはず!(でもその道のりは簡単じゃないかもね)という意気込みでがんばります。

月曜日 7 23, 2007

Mash up Award 3rdキャラバン 札幌

本日から来週月曜日にかけてMash up Caravan ~ Mash up Award 3rd 開発者向けセミナー ~というナイトセミナーが日本各地4カ所を巡って行われます。 岡崎はこのうちMash up Caravan in 札幌に参加させていただき、かんたんJavaでRESTful WebサービスというセッションでJavaを使ったWebサービスの利用方法をご紹介させていただく予定です。
参加は無料ですが事前登録制になっておりますのでお申し込みの上ご参加ください。

Mash up Award 3rdが始まっています

先週はMash up Award 3rdに協賛いただいている企業の方々との懇親会が行われました。
R0017155.JPG
懇親会、といっても、どちらかというと大名刺交換大会、といった感じで岡崎も大量に持っていったつもりの名刺がほとんどなくなってしまいました。この懇親会でいろいろな方とお話ししていて感じたのは、かつてインターネット黎明期に生活を支えるサービスが次々にWebブラウザ上に展開されてきたのと同様に、いまそれと同じことがWebサービスにもおころうとしているのではないかということです。
たとえば、初期のWebサービスといえば何かの検索のようなサービスが多かったと思うのですが、ネットプリントのようなサービスのように物理的な印刷物を受け取ることができるサービスも提供されいることからも、Webサービスが生活に生かされ始めようとしている時代になってきたのだと感じました。

木曜日 7 05, 2007

Mash up Award 3rdが始まったそうです

もうとっくにご存じの方も多いと思いますが、マッシュアップコンテストのMash up Award 3rdが始まっています。今回は最優秀賞金100万円、また協賛いただいている企業・団体もぶわっと増えています。
また今回特におもしろいのが「つくるぶ(tkrb.jp)」というデベロッパー応援プロジェクトです。これはWeb上の部活みたいな感じだそうで、アイデアを持ち寄る人、プログラムを作る人などそれぞれの得意分野を生かして分業することができる応援サイトです。なので、自分にはアイデアがない、とか逆に自分にはプログラミング能力がない・・と参加をあきらめられていた方も、今回はアイデアだけ!とか、プログラムだけ!といった形でも参加されてみてはいかがでしょうか。

木曜日 2 01, 2007

マッシュアップ2 : RailGoで駅検索

昨日は2時間で学ぶ今月のJavaホットトピック(1月号)にご来場いただきました皆様ありがとうございました。さて、昨日ご紹介した内容の中で、「Mash up Award 2nd」で利用できるAPIのうちのひとつ、経路検索Webサービスの「RailGo」をご紹介しました。おさらいとしてここでそのやり方を紹介していきます。
RailGO APIはSOAPを使ったWebサービスとして提供されています。SOAPを使ったWebサービスはツールさえ対応していれば使用は手軽です。今回はNetBeans 5.5を使ってWebサービスを利用する方法を紹介します。

Webサービス・クライアントの作成

まず、SOAPを使ったWebサービスを利用する場合にはWSDLというWebサービスの内容を定義したファイルをツールに取り込みます。NetBeansでは「Webサービスクライアント」を作成する事で取り込むことができます。
Mash up Award 2nd, How to use RailGo API - 1 of 6
プロジェクトを選択して、新規の「Webサービスクライアント」を選択します。
Mash up Award 2nd, How to use RailGo API - 2 of 6
Webサービスクライアントの設定で、WSDLを選択してRailGo のWebサービス定義のアドレスである「http://webservice.railgo.jp/expservice04.asmx?WSDL」を入力し、パッケージ名を適当に入力します。この処理の際実際にこのアドレスにアクセスして処理が行われるので、ネットワーク接続にプロクシサーバを利用する場合にはその設定を行ってください。
Mash up Award 2nd, How to use RailGo API - 3 of 6
完了するとこのようにWebサービス参照がプロジェクトにWebサービスの定義が追加されます。
Mash up Award 2nd, How to use RailGo API - 4 of 6

このWebサービスのメソッド定義をドラッグ&ドロップでソースコードに持っていくと(図ではSearchStationというメソッド)、自動的にそのメソッドを呼び出すためのコードを書いてくれます。通常はこれで実行すればすぐ使えるようになるんですが、RailGo ではSOAP通信のヘッダ部分にRailGo 独自の認証情報を送付しなければならなくなっているため、このままでは認証エラーで終了してしまいます。

認証ヘッダの追加

ユーザ認証の方式にWS-Security等の標準的な仕様が利用されていればツールやライブラリ側の設定だけでそれほど苦労しないのですが、今回のRailGo のように独自の方式が採用されている場合には少し苦労を伴います。上記のドラッグ&ドロップして作成したWebサービス呼び出しコードでは、SOAPヘッダに情報を追加する事ができないため、今回はJAX-WSのハンドラ、とよばれる仕組みを使ってヘッダに認証情報を追加する事にします。

ハンドラについては「A little bit about Handlers in JAX-WS」にある図がわかりやすいと思いますが、Web サービスを実行する際に、その途中でメッセージに対して付加的な処理を行う事ができる仕組みです。典型的にはこの方法を利用してWebサービスのログを取得するように利用します。

では早速RailGo 独自認証に対応するハンドラを作る事にします。ハンドラを作るには javax.xml.ws.handler.soap.SOAPHandler インタフェースを実装します。実際に RailGoの独自認証に対応したハンドラが次のソースコードです。

/\*
\* RailGoAuthHandler, Created on 2007/02/01, 11:21
\*/

package quickmashup;

import java.util.Set;
import javax.xml.namespace.QName;
import javax.xml.soap.SOAPElement;
import javax.xml.soap.SOAPEnvelope;
import javax.xml.soap.SOAPException;
import javax.xml.soap.SOAPHeader;
import javax.xml.soap.SOAPHeaderElement;
import javax.xml.ws.handler.MessageContext;
import javax.xml.ws.handler.soap.SOAPHandler;
import javax.xml.ws.handler.soap.SOAPMessageContext;

/\*\*
\* @author takayuki
\*/
public class RailGoAuthHandler implements SOAPHandler<SOAPMessageContext> {
/\*\*
\* SOAPメッセージをハンドルする.
\* @param context メッセージコンテキスト.
\* @return 処理を継続する場合true、処理をブロックする場合false.
\*/
public boolean handleMessage(SOAPMessageContext context) {
// 外向き(クライアント→サーバ)のメッセージか、内向き(サーバ→クライアント)の
// メッセージかを振り分ける.
Boolean outboundProperty = (Boolean) context.get(
MessageContext.MESSAGE_OUTBOUND_PROPERTY);

if (outboundProperty.booleanValue()) {
return handleOutboundMessage(context);
} else {
return handleInboundMessage(context);
}
}

/\*\*
\* 外向きメッセージの処理.
\* @param context メッセージコンテキスト.
\* @return 処理を継続する場合true、処理をブロックする場合false.
\*/
public boolean handleOutboundMessage(SOAPMessageContext context) {
try {
SOAPEnvelope env = context.getMessage().getSOAPPart().getEnvelope();
SOAPHeader header = env.getHeader();

// SOAPヘッダが設定されていなければ追加する
if (header == null) {
header = env.addHeader();
}

// SOAPヘッダに認証エレメントを追加
SOAPHeaderElement he = header.addHeaderElement(
env.createName("Authentication", "",
"http://expart.est.co.jp/ExpService04.asmx"));
SOAPElement usr = he.addChildElement("User");
SOAPElement passwd = he.addChildElement("Password");

usr.setTextContent("mctuser");
passwd.setTextContent("skusnag4");

return true;
} catch (SOAPException ex) {
ex.printStackTrace();
return false;
}
}

/\*\*
\* 内向きメッセージの処理.
\* @param context メッセージコンテキスト.
\* @return 処理を継続する場合true、処理をブロックする場合false.
\*/
public boolean handleInboundMessage(SOAPMessageContext context) {
// 何もしない
return true;
}

public boolean handleFault(SOAPMessageContext context) {
// 何もしない
return true;
}

public void close(MessageContext context) {
// 何もしない
}

public Set getHeaders() {
return null;
}
}
ハンドラの実装が終われば、このハンドラが自動的に呼び出されるように設定します。
Mash up Award 2nd, How to use RailGo API - 5 of 6
Webサービスの定義をクリックして、「ハンドラの設定」を選びます。
Mash up Award 2nd, How to use RailGo API - 6 of 6
次にダイアログで先ほど作成したハンドラを選びます。ハンドラの設定が終わったらこの設定を反映させるために一度「プロジェクトの成果物を削除して構築」処理を行っておきましょう。

気を取り直して Webサービスの呼び出し

ではこれで認証は通るはずなので、Web サービスへ追加するパラメータを設定して呼び出してみましょう。

package quickmashup;

import jp.railgo.webservice.AreaType;
import jp.railgo.webservice.Station;
import jp.railgo.webservice.StationType;
/\*\* \* \* @author takayuki \*/ public class Main { /\*\* Creates a new instance of Main \*/ public Main() { } /\*\* \* @param args the command line arguments \*/ public static void main(String[] args) { try { // Call Web Service Operation jp.railgo.webservice.ExpService04 service = new jp.railgo.webservice.ExpService04(); jp.railgo.webservice.ExpService04Soap port = service.getExpService04Soap(); // TODO initialize WS operation arguments here java.lang.String stationYomi = "しぶや";
jp.railgo.webservice.AreaType areaType = AreaType.fromValue("Japan");
jp.railgo.webservice.StationType stationType = StationType.fromValue("RailRoad");
int date = 20070201;
// TODO process result here
jp.railgo.webservice.ArrayOfStation result =
port.searchStation(stationYomi, areaType, stationType, date);

for (Station s : result.getStation()) { System.out.println("駅名: " + s.getName()); System.out.println("よみ: " + s.getYomi()); System.out.printf("%s %s度%d分%f秒\\n", "E".equals(s.getLongitude().getBearing()) ? "東経" : "西経", s.getLongitude().getDegree(), s.getLongitude().getMinutes(), s.getLongitude().getSecond()); System.out.printf("%s %s度%d分%f秒\\n", "N".equals(s.getLatitude().getBearing()) ? "北緯" : "南緯", s.getLatitude().getDegree(), s.getLatitude().getMinutes(), s.getLatitude().getSecond()); } } catch (Exception ex) { // TODO handle custom exceptions here } } }

太字にしてあるところが書き換えたところです。stationYomi は駅名の読みがな、areaType は検索地域です。この AreaTypeのように、定数のものは AreaType.fromValueのようなメソッドを利用して名前に対応するインスタンスを取得します(Japan以外には tohokuとか、kinkiなどが選べます)。stationTypeも同様に設定します。RailRoadは鉄道、BusStopならバス停です。次の dateは int型で yyyymmdd となるように設定します。
あとは生成されたコード通り呼び出せば次のような結果が得られます。結果の取り出しは上記のコードを参考にしてみてください。
駅名: 渋谷
よみ: しぶや
東経 139度42分15.900000秒
北緯 35度39分19.300000秒

 

いかがでしょうか。RailGoのような身近なサービスは何かと組み合わせが思いつくサービスですのでぜひともご活用ください。

金曜日 1 26, 2007

2時間で学ぶ今月のJavaホットトピック (1月号)

来週の水曜日(1月31日)の夕方に2時間で学ぶ今月のJavaホットトピック(1月号)が開催されます。今回は、マッシュアップ・コンテスト「Mash up Award 2nd」も始まったので、最新のJavaを使ったRESTful Webサービスの使い方、マッシュアップ・アプリケーション作成のTIPSをご紹介します。
場所はサンの用賀本社 27Fで、参加は無料です。参加されたい方はイベントページから申し込み手順に従って申し込んでください。
追記: イベントの時間は 午後6時30分(午後6時受付開始)~午後8時30分です。

水曜日 1 24, 2007

Sun X Recruitマッシュアップ Award 2nd!


昨年8月に続き、第2回目のMash Up Awardコンテストが開始になったそうです。今回は前回に比べ大幅に利用できるAPIも追加になっており、17社から辞書、動画、SNS、ブログ、IP電話、CRM、お食事などなど選ぶだけでも目移りしそうなぐらいAPIが揃っています。
今回の開催期間は昨日 1月23日から3月12日午後6時まで。ちょうど大学生方であれば春休みの腕試しという感じで参加できそうですね。岡崎も時間が許す限りこのブログでマッシュアップ・アプリを紹介していきたいと思います。
About

okazaki

Search

Archives
« 4月 2014
  
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
   
       
今日