Flex RPCサービスコンポーネントの使用


Flex RPCサービスコンポーネントには、WebService、HttpService、RemoteObjectの3つのサービスコンポーネントがあります.RPCサービスコンポーネントは、Flex SDKとFlex Data Service(LiveCycle Data Services、略称LCDS)に含まれています.RemoteObjectコンポーネントはFlex Data Serviceでのみ使用でき、Flex SDKでは使用できません.
 
一、WebServiceコンポーネントの使用
<!--   Flex   Flex SDK     RPC, useProxy      false -->
<mx:WebService id="web" wsdl="http://localhost:8090/dcms/ws/webservice.jws?wsdl" 
	useProxy="false" showBusyCursor="true"/>

<mx:Button id="start" x="10" y="277" label="WebService  " click="loadWebServiceData()"/>

//  WebService      
private function loadWebServiceData():void{
	web.getNextSequenceId("SmSApplyForm");
	txt1.text = web.getNextSequenceId.lastResult.toString();
}

 
二、HttpServiceコンポーネントの使用
1、構成部品
<mx:HTTPService id="http" url="../test.jsp" 
	result="resultHandler(event)"
	fault="faultHandler(event)"
	resultFormat="text"
	method="POST"
	useProxy="false" showBusyCursor="true">

       <!--             -->
	<mx:request xmlns="">
		<username>uid</username>
		<password>pwd</password>
	</mx:request>

</mx:HTTPService>

 
コミットサービス:http.send();
 
2、返却データ処理
1.string形式のデータを返す場合、resultFormat属性値は「text」に設定し、戻り値を取得する方法は以下の通りである.
                event.result.toString()
 
2、xml形式のデータを返す場合、resultFormat属性値は「e 4 x」に設定し、データ処理及び異常処理のコードは以下の通りである.
//            
private function resultHandler(event:ResultEvent):void{
	var xml:XML = XML(event.result);
	txt1.text = xml.username;
}

//            
private function faultHandler(event:FaultEvent):void{
	var fault:Fault = event.fault;
	var s:String = (fault.faultDetail!=null) ? fault.faultDetail : fault.faultString;
	Alert.show(s);
}

 
データ提供ページのソース:
<%@page language="java" contentType="text/html; charset=utf-8"%>
<%
	String username = request.getParameter("username");
	String password = request.getParameter("password");
%>
<?xml version="1.0" encoding="UTF-8"?>
<user>
	<username><%=username%></username>
	<password><%=password%></password>
</user>

 
3、json形式のデータを返す場合、resultFormat属性値は「text」に設定し、データ処理のコードは以下の通りである.
private function resultHandler(event:ResultEvent):void{
	var s:String = String(event.result);
	s = s.replace(/\s/g, ''); //         
	var obj = JSON.decode(s);
	txt1.text = obj.username;
}

 
データ提供ページのソース:
注意:keyとvalueは二重引用符(")で囲まなければなりません.
<%@page language="java" contentType="text/html; charset=utf-8"%>
<%
	String username = request.getParameter("username");
	String password = request.getParameter("password");
%>
{"username":"<%=username%>", "password":"<%=password%>"}

 
三、RemoteObjectコンポーネントの使用
1、mxmlファイルにおけるコンポーネントの構成
<mx:RemoteObject id="ro" destination="remoteObjectService" fault="faultEvent(event)">
	<mx:method name="sayHello" result="resultEvent(event)">
		<mx:arguments>
			<arg>{txt1.text}</arg>
		</mx:arguments>
	</mx:method>
</mx:RemoteObject>

destination:RPCサービス受信ポイントのID.
fault:呼び出しサービスに異常が発生した場合に指定したメソッドをトリガーします.
result:RPCサービスが正常に返された後、指定されたメソッドがトリガーされます.
 
2、ActionScriptコード
<mx:Script>
	<![CDATA[	
		//    	
		private function show():void{
			ro.sayHello();
		}
		
		//    
		private function resultEvent(event:ResultEvent):void{
			var s:String = String(event.result);
			txt2.text = s;
		}
		
		//    
		private function faultEvent(event:FaultEvent):void{
			var fault:Fault = event.fault;
			var s:String = (fault.faultDetail!=null) ? fault.faultDetail : fault.faultString;
			txt2.text = s;
		}
	]]>
</mx:Script>

 
ASコードによる呼び出し方法:
var oper:Operation = ro.getOperation("staticMethod") as Operation;
oper.addEventListener(ResultEvent.RESULT, resultEvent);
oper.send("ddddd");

 
3、remoting-config.xmlファイルに次の構成情報を追加します.
<!-- RPC      -->
<destination id="remoteObjectService">
	<properties>
		<source>com.cjm.flex.RemoteObject</source>
	</properties>
</destination>

 
4、Javaソース
package com.cjm.flex;

public class RemoteObject {
	public String sayHello(String username)throws RuntimeException{
		return "Hello " + username;
	}
}