サーバ→AIR連携サンプル・・・Wicketを使う

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"/>