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)
}