Przykład: implementacja klienta przy użyciu Adobe Flex Framework

Przedstawiony niżej przykład to implementacja klienta serwisu wymagającego uwierzytelnienia przez podanie nazwy użytkownika oraz hasła. Dostępna jest jedna metoda getText. Wywołanie metody usługi sieciowej jest wykonywane asynchronicznie.

 

Kod przykładu w języku ActionScript 3:

package
{
	import mx.rpc.events.FaultEvent;
	import mx.rpc.events.ResultEvent;
	import mx.rpc.soap.Operation;
	import mx.rpc.soap.SOAPHeader;
	import mx.rpc.soap.WebService;

	public class SampleService
	{
		private static const QNAME_PREFIX:String="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-";
		private static const QNAME_PASSWORD:String=QNAME_PREFIX + "username-token-profile-1.0#PasswordText";
		private static const QNAME_SECURITY:String=QNAME_PREFIX + "wssecurity-secext-1.0.xsd";
		private static const QNAME_UTILITY:String=QNAME_PREFIX + "wssecurity-utility-1.0.xsd";
		private static const WSSE_SECURITY:QName=new QName(QNAME_SECURITY, "Security");

		protected var service:WebService;

		public function SampleService(username:String, password:String)
		{
			service=new WebService();
			service.loadWSDL("http://localhost:8080/palio/webservices/sample/SampleService?wsdl");

			addServiceHeaders(service, username, password);
		}

		public function getText(resultHandler:Function):void
		{
			addResultHandler(Operation(service.getText), resultHandler);

			service.getText();
		}

		protected function addResultHandler(opr:Operation, resultHandler:Function):void
		{
			if (resultHandler != null)
			{
				opr.addEventListener(ResultEvent.RESULT, resultHandler, false, 0, false);
			}
		}

		private function addServiceHeaders(service:WebService, username:String, password:String):void
		{
			var userToken:String="UsernameToken-" + Math.round(Math.random() * 999999).toString();
			var headerXML:XML=<wsse:Security xmlns:wsse={QNAME_SECURITY}>
					<wsse:UsernameToken wsu:Id={userToken} xmlns:wsu={QNAME_UTILITY}>
						<wsse:Username>{username}</wsse:Username>
						<wsse:Password Type={QNAME_PASSWORD}>{password}</wsse:Password>
					</wsse:UsernameToken>
				</wsse:Security>

			var header:SOAPHeader=new SOAPHeader(WSSE_SECURITY, headerXML);
			service.addHeader(header);
		}
	}
}

Przykładowe użycie:

import mx.rpc.events.ResultEvent;

private var service:SampleService = new SampleService("user", "pass");

private function invokeService():void {
service.getText(resultHandler);
}

private function resultHandler(event:ResultEvent):void {
var result:Object=event.result;
trace(result)
}