Есть несколько способов сделать это. Я лично предпочитаю переопределять собственный класс SOAPEncoder, который предоставил вам доступ к фактическому конверту мыла перед его отправкой. Это позволяет вам лучше контролировать и добавлять такие вещи, как ws-адресация и пользовательские заголовки аутентификации.
public class myEncoder
extends SOAPEncoder
{
private const WSSE_NS:Namespace = new Namespace("wsse", "http://docs.oasis-open.org/wss/2004/01/oasis-200401-wsswssecurity-secext-1.0.xsd");
//--------------------------------------------------------------------------
//
// Constructor
//
//--------------------------------------------------------------------------
public function wsseEncoder()
{
super();
}
//--------------------------------------------------------------------------
//
// Methods
//
//--------------------------------------------------------------------------
/**
* <p> override super classes method and recieve raw soap message to manpulate soap envelope
* </p>
*/
public override function encodeRequest(args:* = null, headers:Array = null):XML
{
//get soap envelope from super class
var SOAPEnvelope:XML = super.encodeRequest(args, headers);
//create a header in xml and append it at as a child
securityHeaderXml = <Security/>;
securityHeaderXml.setNamespace(WSSE_NS);
securityHeaderXml.@[mustUnderstand] = 1;
//set deafult ws-security namespace - filters to all child nodes
securityHeaderXml.setNamespace(WSSE_NS);
var id:XML = <Identity/>;
id.appendChild('value here');
SOAPEnvelope.prependChild(id);
SOAPEnvelope.prependChild(headerXml);
return SOAPEnvelope;
}
}
}
Тогда все, что вам нужно сделать, это заменить кодировщик по умолчанию на этот, если вы используете классы генерации веб-служб, перейдите в serviceBase и найдите метод 'Call' и измените эту строку на
var enc: SOAPEncoder = new myEncoder (); // вместо этого -> new SOAPEncoder ();
если нет, то что-то вроде myService.encoder = new myEncoder ();
Так просто.
Очевидно, что переопределение класса кодировщика дает вам больше контроля. Вы также можете сделать то же самое с классом SOAPDecoder, чтобы поймать конверт с мылом перед его десериализацией.
Надеюсь, это поможет
Jon