home *** CD-ROM | disk | FTP | other *** search
- package mx.rpc.soap
- {
- import flash.xml.XMLDocument;
- import flash.xml.XMLNode;
- import mx.logging.ILogger;
- import mx.logging.Log;
- import mx.resources.IResourceManager;
- import mx.resources.ResourceManager;
- import mx.rpc.soap.types.ICustomSOAPType;
- import mx.rpc.wsdl.WSDLEncoding;
- import mx.rpc.wsdl.WSDLMessagePart;
- import mx.rpc.wsdl.WSDLOperation;
- import mx.rpc.xml.SchemaConstants;
- import mx.rpc.xml.SchemaDatatypes;
- import mx.rpc.xml.SchemaMarshaller;
- import mx.rpc.xml.XMLEncoder;
-
- public class SOAPEncoder extends XMLEncoder implements ISOAPEncoder
- {
- private var log:ILogger;
-
- private var _ignoreWhitespace:Boolean = true;
-
- private var _wsdlOperation:WSDLOperation;
-
- private var isSOAPEncoding:Boolean = false;
-
- private var resourceManager:IResourceManager = ResourceManager.getInstance();
-
- public function SOAPEncoder()
- {
- super();
- log = Log.getLogger("mx.rpc.soap.SOAPEncoder");
- }
-
- override protected function deriveXSIType(param1:XML, param2:QName, param3:*) : void
- {
- var _loc4_:SchemaDatatypes = null;
- var _loc5_:QName = null;
- var _loc6_:String = null;
- if(isSOAPEncoding)
- {
- _loc4_ = schemaManager.schemaDatatypes;
- if(param2 == _loc4_.anyTypeQName || param2 == _loc4_.anySimpleTypeQName)
- {
- if(isSimpleValue(param3) || param2 == _loc4_.anySimpleTypeQName)
- {
- _loc6_ = SchemaMarshaller.guessSimpleType(param3);
- _loc5_ = new QName(schemaConstants.xsdURI,_loc6_);
- }
- }
- else
- {
- _loc5_ = param2;
- }
- if(_loc5_ != null)
- {
- param1[schemaConstants.getXSIToken(schemaConstants.typeAttrQName)] = schemaConstants.getXSDToken(_loc5_);
- }
- }
- }
-
- public function get soapConstants() : SOAPConstants
- {
- return wsdlOperation.soapConstants;
- }
-
- public function set wsdlOperation(param1:WSDLOperation) : void
- {
- _wsdlOperation = param1;
- schemaManager = _wsdlOperation.schemaManager;
- }
-
- protected function encodePartValue(param1:WSDLMessagePart, param2:*) : XMLList
- {
- var _loc3_:XMLList = null;
- if(param1.element != null)
- {
- _loc3_ = encode(param2,param1.element);
- }
- else
- {
- _loc3_ = encode(param2,param1.name,param1.type,param1.definition);
- }
- return _loc3_;
- }
-
- protected function encodeOperationAsRPCEncoded(param1:*, param2:XML) : void
- {
- isSOAPEncoding = true;
- var _loc3_:XML = new XML("<" + wsdlOperation.name + "/>");
- var _loc4_:String = inputEncoding.namespaceURI;
- var _loc5_:String = schemaManager.getOrCreatePrefix(_loc4_);
- var _loc6_:Namespace = new Namespace(_loc5_,_loc4_);
- _loc3_.setNamespace(_loc6_);
- encodeMessage(param1,_loc3_);
- param2.appendChild(_loc3_);
- param2[SOAPConstants.SOAP_ENV_PREFIX + ":encodingStyle"] = soapConstants.encodingURI;
- }
-
- protected function encodeEnvelope(param1:*, param2:Array) : XML
- {
- log.debug("Encoding SOAP request envelope");
- var _loc3_:XML = new XML("<" + soapConstants.envelopeQName.localName + "/>");
- _loc3_.setNamespace(soapConstants.envelopeNamespace);
- _loc3_.addNamespace(schemaConstants.xsdNamespace);
- _loc3_.addNamespace(schemaConstants.xsiNamespace);
- schemaManager.namespaces[soapConstants.envelopeNamespace.prefix] = soapConstants.envelopeNamespace;
- encodeHeaders(param2,_loc3_);
- encodeBody(param1,_loc3_);
- return _loc3_;
- }
-
- protected function encodeHeaders(param1:Array, param2:XML) : void
- {
- var _loc3_:uint = 0;
- var _loc4_:XML = null;
- var _loc5_:uint = 0;
- if(param1 != null)
- {
- _loc3_ = param1.length;
- if(_loc3_ > 0)
- {
- _loc4_ = new XML("<" + soapConstants.headerQName.localName + "/>");
- _loc4_.setNamespace(soapConstants.envelopeNamespace);
- param2.appendChild(_loc4_);
- _loc5_ = 0;
- while(_loc5_ < _loc3_)
- {
- encodeHeaderElement(param1[_loc5_],_loc4_);
- _loc5_++;
- }
- }
- }
- }
-
- protected function encodeOperationAsDocumentLiteral(param1:Object, param2:XML) : void
- {
- var _loc4_:QName = null;
- var _loc5_:XML = null;
- var _loc6_:String = null;
- var _loc7_:Namespace = null;
- var _loc3_:Array = wsdlOperation.inputMessage.parts;
- if(wsdlOperation.inputMessage.isWrapped)
- {
- _loc4_ = wsdlOperation.inputMessage.wrappedQName;
- _loc5_ = new XML("<" + _loc4_.localName + "/>");
- if(_loc4_.uri != null && _loc4_.uri != "")
- {
- _loc6_ = schemaManager.getOrCreatePrefix(_loc4_.uri);
- _loc7_ = new Namespace(_loc6_,_loc4_.uri);
- _loc5_.setNamespace(_loc7_);
- }
- encodeMessage(param1,_loc5_);
- param2.appendChild(_loc5_);
- }
- else
- {
- encodeMessage(param1,param2);
- }
- }
-
- override public function encode(param1:*, param2:QName = null, param3:QName = null, param4:XML = null) : XMLList
- {
- var _loc5_:XMLList = null;
- var _loc6_:uint = 0;
- var _loc7_:uint = 0;
- var _loc8_:XMLList = null;
- var _loc9_:Boolean = false;
- if(param4 != null)
- {
- _loc5_ = new XMLList();
- _loc6_ = getMaxOccurs(param4);
- _loc7_ = getMinOccurs(param4);
- if(_loc6_ == 0)
- {
- return _loc5_;
- }
- if(param1 == null && _loc7_ == 0)
- {
- return _loc5_;
- }
- if(_loc6_ > 1)
- {
- _loc8_ = new XMLList();
- _loc9_ = schemaManager.pushNamespaceInScope(param2.uri);
- encodeGroupElement(param4,_loc8_,param2,param1);
- if(_loc9_)
- {
- schemaManager.releaseScope();
- }
- return _loc5_ + _loc8_;
- }
- }
- return super.encode(param1,param2,param3,param4);
- }
-
- protected function encodeMessage(param1:*, param2:XML) : void
- {
- var _loc3_:Array = null;
- var _loc6_:String = null;
- var _loc8_:WSDLMessagePart = null;
- var _loc9_:* = undefined;
- var _loc10_:String = null;
- var _loc11_:XMLList = null;
- var _loc12_:String = null;
- if(wsdlOperation.inputMessage != null)
- {
- _loc3_ = wsdlOperation.inputMessage.parts;
- }
- if(_loc3_ == null)
- {
- return;
- }
- var _loc4_:Object = {};
- var _loc5_:int = 0;
- var _loc7_:uint = 0;
- while(_loc7_ < _loc3_.length)
- {
- _loc8_ = _loc3_[_loc7_];
- _loc9_ = undefined;
- if(param1 is Array)
- {
- _loc9_ = param1[_loc7_];
- if(_loc9_ === undefined)
- {
- if(!_loc8_.optional)
- {
- _loc6_ = resourceManager.getString("rpc","missingInputParameter",[_loc7_]);
- throw new Error(_loc6_);
- }
- _loc5_++;
- }
- }
- else
- {
- _loc10_ = _loc8_.name.localName;
- if(param1 != null)
- {
- _loc9_ = param1[_loc10_];
- }
- _loc4_[_loc10_] = _loc9_;
- if(_loc9_ === undefined || param1 != null && !param1.hasOwnProperty(_loc10_))
- {
- if(!_loc8_.optional)
- {
- _loc6_ = resourceManager.getString("rpc","missingInputParameterWithName",[_loc10_]);
- throw new Error(_loc6_);
- }
- _loc5_++;
- }
- }
- if(_loc9_ !== undefined)
- {
- _loc11_ = encodePartValue(_loc8_,_loc9_);
- param2.appendChild(_loc11_);
- }
- _loc7_++;
- }
- if(param1 != null)
- {
- if(param1 is Array)
- {
- if(param1.length < _loc3_.length - _loc5_)
- {
- _loc6_ = resourceManager.getString("rpc","tooFewInputParameters",[_loc3_.length,param1.length]);
- throw new Error(_loc6_);
- }
- }
- else
- {
- for(_loc12_ in param1)
- {
- if(!_loc4_.hasOwnProperty(_loc12_))
- {
- _loc6_ = resourceManager.getString("rpc","unexpectedInputParameter",[_loc12_]);
- throw new Error(_loc6_);
- }
- }
- }
- }
- }
-
- protected function preEncodedCheck(param1:*) : Object
- {
- var _loc3_:XMLDocument = null;
- var _loc4_:XMLNode = null;
- var _loc2_:Object = null;
- if(param1 != null)
- {
- if(param1 is XMLList)
- {
- _loc2_ = param1 as XMLList;
- }
- else if(param1 is XML)
- {
- _loc2_ = param1 as XML;
- }
- else if(param1 is XMLDocument)
- {
- _loc3_ = param1 as XMLDocument;
- _loc2_ = new XML(_loc3_.firstChild.toString());
- }
- else if(param1 is XMLNode)
- {
- _loc4_ = param1 as XMLNode;
- _loc2_ = new XML(_loc4_.toString());
- }
- }
- return _loc2_;
- }
-
- protected function encodeBody(param1:*, param2:XML) : void
- {
- log.debug("Encoding SOAP request body");
- var _loc3_:XML = new XML("<" + soapConstants.bodyQName.localName + "/>");
- _loc3_.setNamespace(soapConstants.envelopeNamespace);
- var _loc4_:Object = preEncodedCheck(param1);
- if(_loc4_ != null)
- {
- _loc3_.appendChild(_loc4_);
- }
- else if(wsdlOperation.style == SOAPConstants.DOC_STYLE)
- {
- if(inputEncoding.useStyle != SOAPConstants.USE_LITERAL)
- {
- throw new Error("WSDL 1.1 supports operations with binding style \'document\' only if use style is \'literal\'.");
- }
- encodeOperationAsDocumentLiteral(param1,_loc3_);
- }
- else
- {
- if(wsdlOperation.style != SOAPConstants.RPC_STYLE)
- {
- throw new Error("Unrecognized binding style \'" + wsdlOperation.style + "\'. Only \'document\' and \'rpc\' styles are supported.");
- }
- if(inputEncoding.useStyle == SOAPConstants.USE_LITERAL)
- {
- encodeOperationAsRPCLiteral(param1,_loc3_);
- }
- else
- {
- if(inputEncoding.useStyle != SOAPConstants.USE_ENCODED)
- {
- throw new Error("WSDL 1.1 does not support operations with binding style \'rpc\' and use style " + inputEncoding.useStyle + ".");
- }
- encodeOperationAsRPCEncoded(param1,_loc3_);
- }
- }
- param2.appendChild(_loc3_);
- }
-
- public function encodeRequest(param1:* = null, param2:Array = null) : XML
- {
- var oldPrettyPrinting:Boolean;
- var oldIgnoreWhitespace:Boolean;
- var envelopeXML:XML = null;
- var args:* = param1;
- var headers:Array = param2;
- reset();
- oldIgnoreWhitespace = Boolean(XML.ignoreWhitespace);
- oldPrettyPrinting = Boolean(XML.prettyPrinting);
- try
- {
- XML.ignoreWhitespace = ignoreWhitespace;
- XML.prettyPrinting = false;
- envelopeXML = encodeEnvelope(args,headers);
- }
- finally
- {
- XML.ignoreWhitespace = oldIgnoreWhitespace;
- XML.prettyPrinting = oldPrettyPrinting;
- }
- return envelopeXML;
- }
-
- public function set ignoreWhitespace(param1:Boolean) : void
- {
- _ignoreWhitespace = param1;
- }
-
- public function get wsdlOperation() : WSDLOperation
- {
- return _wsdlOperation;
- }
-
- protected function encodeOperationAsRPCLiteral(param1:Object, param2:XML) : void
- {
- var _loc3_:XML = new XML("<" + wsdlOperation.name + "/>");
- var _loc4_:String = schemaManager.getOrCreatePrefix(inputEncoding.namespaceURI);
- var _loc5_:Namespace = new Namespace(_loc4_,inputEncoding.namespaceURI);
- _loc3_.setNamespace(_loc5_);
- encodeMessage(param1,_loc3_);
- param2.appendChild(_loc3_);
- }
-
- public function get schemaConstants() : SchemaConstants
- {
- return schemaManager.schemaConstants;
- }
-
- override public function encodeType(param1:QName, param2:XML, param3:QName, param4:*, param5:XML = null) : void
- {
- var _loc9_:String = null;
- var _loc10_:String = null;
- var _loc6_:SchemaDatatypes = schemaManager.schemaDatatypes;
- var _loc7_:QName = getXSIType(param4);
- if(_loc7_ != null)
- {
- param1 = _loc7_;
- }
- if(isSOAPEncoding)
- {
- _loc7_ = param1;
- if(SOAPConstants.isSOAPEncodedType(param1))
- {
- if(param1 == soapConstants.soapBase64QName)
- {
- param1 = _loc6_.base64BinaryQName;
- }
- else
- {
- _loc9_ = param1.localName;
- if(_loc9_ != "Array" && _loc9_ != "arrayType")
- {
- param1 = schemaConstants.getQName(_loc9_);
- }
- }
- }
- }
- var _loc8_:ICustomSOAPType = SOAPConstants.getCustomSOAPType(param1);
- if(_loc8_ != null)
- {
- _loc8_.encode(this,param2,param3,param4,param5);
- }
- else
- {
- super.encodeType(param1,param2,param3,param4,param5);
- }
- if(_loc7_ != null)
- {
- _loc10_ = param2[schemaConstants.getXSIToken(schemaConstants.typeAttrQName)];
- if(_loc10_ == null || _loc10_ == "")
- {
- super.setXSIType(param2,_loc7_);
- }
- }
- }
-
- override public function encodeComplexRestriction(param1:XML, param2:XML, param3:QName, param4:*) : void
- {
- var _loc8_:ICustomSOAPType = null;
- var _loc5_:SchemaConstants = schemaManager.schemaConstants;
- var _loc6_:String = param1.@base;
- var _loc7_:QName = schemaManager.getQNameForPrefixedName(_loc6_,param1);
- if(_loc7_ == soapConstants.soapencArrayQName)
- {
- _loc8_ = SOAPConstants.getCustomSOAPType(_loc7_);
- if(_loc8_ != null)
- {
- _loc8_.encode(this,param2,param3,param4,param1);
- return;
- }
- }
- super.encodeComplexRestriction(param1,param2,param3,param4);
- }
-
- public function get ignoreWhitespace() : Boolean
- {
- return _ignoreWhitespace;
- }
-
- protected function encodeHeaderElement(param1:Object, param2:XML) : void
- {
- var _loc4_:XMLList = null;
- var _loc5_:XML = null;
- var _loc6_:String = null;
- var _loc7_:String = null;
- var _loc8_:Namespace = null;
- var _loc3_:* = preEncodedCheck(param1);
- if(_loc3_ != null)
- {
- param2.appendChild(param1);
- }
- else
- {
- _loc4_ = new XMLList();
- if(param1.content != null && Boolean(param1.content.hasOwnProperty(param1.qname.localName)))
- {
- param1.content = param1.content[param1.qname.localName];
- }
- _loc3_ = preEncodedCheck(param1.content);
- if(_loc3_ != null)
- {
- if(_loc3_ is XMLList)
- {
- _loc4_ = _loc3_ as XMLList;
- }
- else
- {
- _loc4_ = new XMLList(_loc3_);
- }
- }
- else
- {
- _loc4_ = encode(param1.content,param1.qname);
- }
- for each(_loc5_ in _loc4_)
- {
- if(param1.qname.uri != null && param1.qname.uri.length > 0 && _loc5_.namespace().uri != param1.qname.uri)
- {
- _loc7_ = schemaManager.getOrCreatePrefix(param1.qname.uri);
- _loc8_ = new Namespace(_loc7_,param1.qname.uri);
- _loc5_.setNamespace(_loc8_);
- }
- if(param1.mustUnderstand)
- {
- _loc6_ = schemaManager.getOrCreatePrefix(soapConstants.mustUnderstandQName.uri);
- _loc5_[_loc6_ + ":" + soapConstants.mustUnderstandQName.localName] = "1";
- }
- if(param1.role != null)
- {
- _loc6_ = schemaManager.getOrCreatePrefix(soapConstants.actorQName.uri);
- _loc5_[_loc6_ + ":" + soapConstants.actorQName.localName] = param1.role;
- }
- }
- param2.appendChild(_loc4_);
- }
- }
-
- protected function get inputEncoding() : WSDLEncoding
- {
- return _wsdlOperation.inputMessage.encoding;
- }
- }
- }
-
-