Wicket1.4 で書いたXML 出力ページを AIR プログラムで参照するサンプル。
Wicket サーバ側ではページクラスに対する HTML は、空で用意する。
送信サイズの指定に注意!
AIR 側は、mx.rpc.http.HTTPService で、指定URL で HTTP-GETする。
サーバ側、、、、
import org.apache.wicket.markup.html.WebPage;
import org.apache.wicket.protocol.http.WebResponse;
/**
* XML出力
* mountBookmarkablePage("/getdata",OutPage.class);
*/
public class OutPage extends WebPage{
private String data;
public TextOutPage(){
WebResponse res = (WebResponse)getWebRequestCycle().getResponse();
res.write(this.outData());
}
@Override
protected void setHeaders(WebResponse response){
response.setContentType("text/xml; charset=UTF-8");
response.setContentLength(this.data.getBytes().length);
}
private String outData(){
StringBuilder sb = new StringBuilder();
sb.append("<?xml version=\"1.0\" encoding=\"UTF-8\"?>");
sb.append("<shop>");
sb.append("<item id=\"1\"><name>りんご</name><price>100</price></item>");
sb.append("<item id=\"2\"><name>オレンジ</name><price>200</price></item>");
sb.append("<item id=\"3\"><name>いちご</name><price>250</price></item>");
sb.append("</shop>");
this.data = sb.toString();
return this.data;
}
}
mxmlで書くもの
ResultEvent の result からXMLタグ名で参照することがポイント
<fx:Script>
<![CDATA[
import mx.collections.ArrayCollection;
import mx.controls.Alert;
import mx.rpc.events.FaultEvent;
import mx.rpc.events.ResultEvent;
import mx.rpc.http.HTTPService;
protected function button1_clickHandler(event:MouseEvent):void{
var service:HTTPService = new HTTPService();
service.method = URLRequestMethod.GET;
service.url = "http://xxxxx/yyy/getdata";
service.addEventListener(ResultEvent.RESULT,resultHandler);
service.addEventListener(FaultEvent.FAULT,faulrHandler);
// リクエスト送信
service.send();
}
// 結果イベントハンドラ
private function resultHandler(e:ResultEvent):void{
var s:String ="";
var items:ArrayCollection = e.result.shop.item;
var i:int;
for(i=0;i < items.length;i++){
s = s+"id=" + items[i].id+" ["+items[i].name+"] ["+items[i].price+"]\n";
}
// TextArea に表示
textarea.text = s;
}
// エラーイベントハンドラ
private function faulrHandler(e:FaultEvent):void{
Alert.show(e.fault.message);
}
]]>
</fx:Script>
// レイアウト
<s:Button x="34" y="35" label="get" click="button1_clickHandler(event)"/>
<s:TextArea id="textarea" x="34" y="94" width="324" height="187"/>