blob: d35fce43fb12198ba5c3f2d70bec76362d2e3200 [file] [log] [blame]
////////////////////////////////////////////////////////////////////////////////
//
// Licensed to the Apache Software Foundation (ASF) under one or more
// contributor license agreements. See the NOTICE file distributed with
// this work for additional information regarding copyright ownership.
// The ASF licenses this file to You under the Apache License, Version 2.0
// (the "License"); you may not use this file except in compliance with
// the License. You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
//
////////////////////////////////////////////////////////////////////////////////
package mx.rpc.soap
{
/* import flash.events.Event;
*/
import org.apache.royale.events.Event;
import mx.core.mx_internal;
/* import mx.logging.ILogger;
import mx.logging.Log;
import mx.messaging.ChannelSet;
import mx.messaging.channels.DirectHTTPChannel;
import mx.messaging.config.LoaderConfig;
import mx.resources.IResourceManager;
import mx.resources.ResourceManager;
import mx.rpc.AbstractOperation;
import mx.rpc.AbstractService;
import mx.rpc.AsyncRequest;
import mx.rpc.Fault;
import mx.rpc.events.FaultEvent;
import mx.rpc.events.WSDLLoadEvent;
import mx.rpc.http.HTTPService;
import mx.rpc.wsdl.WSDL;
import mx.rpc.wsdl.WSDLLoader;
import mx.rpc.wsdl.WSDLOperation;
import mx.rpc.wsdl.WSDLPort;
import mx.utils.URLUtil;
import mx.utils.XMLUtil;
*/
use namespace mx_internal;
/**
* The <code>LoadEvent.LOAD</code> is dispatched when the WSDL
* document has loaded successfully.
*
* @eventType mx.rpc.soap.LoadEvent.LOAD
*
* @langversion 3.0
* @playerversion Flash 9
* @playerversion AIR 1.1
* @productversion Royale 0.9.4
*/
/* [Event(name="load", type="mx.rpc.soap.LoadEvent")]
[ResourceBundle("rpc")] */
/**
* The WebService class provides access to SOAP-based web services on remote
* servers.
*
* @langversion 3.0
* @playerversion Flash 9
* @playerversion AIR 1.1
* @productversion Royale 0.9.4
*/
public dynamic class WebService
{ // extends AbstractWebService
//--------------------------------------------------------------------------
//
// Constructor
//
//--------------------------------------------------------------------------
/**
* Creates a new WebService. The destination, if specified, should match
* an entry in services-config.xml. If unspecified, the WebService uses
* the DefaultHTTP destination. The <code>rootURL</code> is required if you
* intend to use a relative URL to find the WSDL document for this WebService.
*
* @param destination The destination of the WebService, should match a destination
* name in the services-config.xml file.
*
* @param rootURL The root URL of the WebService.
*
* @langversion 3.0
* @playerversion Flash 9
* @playerversion AIR 1.1
* @productversion Royale 0.9.4
*/
public function WebService(destination:String = null, rootURL:String = null)
{
/* super(destination, rootURL);
_ready = false;
_log = Log.getLogger("mx.rpc.soap.WebService"); */
}
//-------------------------------------------------------------------------
//
// Variables
//
//-------------------------------------------------------------------------
/**
* @private
*/
/* private var resourceManager:IResourceManager =
ResourceManager.getInstance(); */
//-------------------------------------------------------------------------
//
// Properties
//
//-------------------------------------------------------------------------
/* mx_internal function get wsdlFault():Boolean
{
return _wsdlFault;
}
[Inspectable(defaultValue="true", category="General")] */
/**
* The location of the WSDL document for this WebService. If you use a
* relative URL, make sure that the <code>rootURL</code> has been specified
* or that you created the WebService in MXML.
*
* @langversion 3.0
* @playerversion Flash 9
* @playerversion AIR 1.1
* @productversion Royale 0.9.4
*/
/* public function get wsdl():String
{
return _wsdlURL;
}
public function set wsdl(w:String):void
{
_wsdlURL = w;
} */
//-------------------------------------------------------------------------
//
// Methods
//
//-------------------------------------------------------------------------
/**
* Returns a Boolean value that indicates whether the WebService is ready to
* load a WSDL (does it have a valid destination or wsdl specified).
*
* @return Returns <code>true</code> if the WebService is ready to load a WSDL;
* otherwise, returns <code>false</code>.
*
* @langversion 3.0
* @playerversion Flash 9
* @playerversion AIR 1.1
* @productversion Royale 0.9.4
*/
/* public function canLoadWSDL():Boolean
{
if (wsdl)
return true;
if (destination != DEFAULT_DESTINATION_HTTP
&& destination != DEFAULT_DESTINATION_HTTPS)
return true;
return false;
} */
/**
* Returns an Operation of the given name. If the Operation wasn't
* created beforehand, a new <code>mx.rpc.soap.Operation</code> is created
* during this call. Operations are usually accessible by simply naming
* them after the service variable (<code>myService.someOperation</code>),
* but if your Operation name happens to match a defined method on the
* service (like <code>setCredentials</code>), you can use this method to
* get the Operation instead.
* @param name Name of the Operation.
* @return Operation that executes for this name.
*
* @langversion 3.0
* @playerversion Flash 9
* @playerversion AIR 1.1
* @productversion Royale 0.9.4
*/
/* override public function getOperation(name:String):mx.rpc.AbstractOperation
{
var op:mx.rpc.AbstractOperation = super.getOperation(name);
if (op == null)
{
op = new Operation(this, name);
_operations[name] = op;
op.asyncRequest = asyncRequest;
op.setKeepLastResultIfNotSet(_keepLastResult);
initializeOperation(op as Operation);
}
return op;
} */
/**
* Instructs the WebService to download the WSDL document. The WebService
* calls this method automatically WebService when specified in the
* WebService MXML tag, but it must be called manually if you create the
* WebService object in ActionScript after you have specified the
* <code>destination</code> or <code>wsdl</code> property value.
*
* @param uri If the wsdl hasn't been specified previously, it may be
* specified here.
*
* @langversion 3.0
* @playerversion Flash 9
* @playerversion AIR 1.1
* @productversion Royale 0.9.4
*/
public function loadWSDL(uri:String = null):void
{
/* if (uri != null)
{
wsdl = uri;
}
// If wsdl is not set check useProxy is true and a destination has
// been set...
if (!wsdl)
{
var message:String;
if (!useProxy)
{
message = resourceManager.getString(
"rpc", "mustSpecifyWSDLLocation");
var fault:Fault = new Fault("Client.WSDL", message);
dispatchEvent(FaultEvent.createEvent(fault));
return;
}
else if ((destination == null) || !destinationSet
|| (destination == DEFAULT_DESTINATION_HTTP)
|| (destination == DEFAULT_DESTINATION_HTTPS))
{
message = resourceManager.getString(
"rpc", "destinationOrWSDLNotSpecified");
var fault1:Fault = new Fault("Client.WSDL", message);
dispatchEvent(FaultEvent.createEvent(fault1));
return;
}
}
// If a destination wasn't set and the app was loaded via HTTPS
// then use DefaultHTTPS instead of DefaultHTTP for our destination
if (!destinationSet && URLUtil.isHttpsURL(wsdl))
{
// We avoid changing super.destination as we don't want to change
// the current useProxy flag...
asyncRequest.destination = DEFAULT_DESTINATION_HTTPS;
destinationSet = true;
}
_wsdlLoader = new WSDLLoader(deriveHTTPService());
_wsdlLoader.addEventListener(WSDLLoadEvent.LOAD, wsdlHandler);
_wsdlLoader.addEventListener(FaultEvent.FAULT, wsdlFaultHandler);
// Get the WSDL
_wsdlFault = false;
_wsdlLoader.load(wsdl); */
}
/**
* Represents an instance of WebService as a String, describing
* important properties such as the destination id and the set of
* channels assigned.
*
* @return Returns a String representation of the WebService.
*
* @langversion 3.0
* @playerversion Flash 9
* @playerversion AIR 1.1
* @productversion Royale 0.9.4
*/
/* public function toString():String
{
var s:String = "[WebService ";
s += " destination=\"" + destination + "\"";
if (wsdl)
s += " wsdl=\"" + wsdl + "\"";
s += " channelSet=\"" + channelSet + "\"]";
return s;
} */
//---------------------------------
// Helper methods
//---------------------------------
/* mx_internal function wsdlFaultHandler(event:FaultEvent):void
{
// remember that the wsdl failed
_wsdlFault = true;
// we just chain and fire
dispatchEvent(event);
// also inform enqueued operations of the wsdl failure
unEnqueueCalls(event.fault);
} */
/* mx_internal function wsdlHandler(event:WSDLLoadEvent):void
{
_log.debug("WSDL loaded");
_wsdl = event.wsdl;
// Record the SOAP address location as the "endpointURI"
try
{
var wsdlPort:WSDLPort = _wsdl.getPort(service, port);
_endpointURI = wsdlPort.endpointURI;
// Resolve any relative endpoint URLs against the WSDL URL
if (!URLUtil.isHttpURL(_endpointURI) && event.location != null)
_endpointURI = URLUtil.getFullURL(event.location, _endpointURI);
_service = wsdlPort.service.name;
_port = wsdlPort.name;
// Operations may have been created before the WSDL was loaded so
// we initialize them here before unenqueuing any calls.
for each (var op:Operation in _operations)
{
initializeOperation(op);
}
_ready = true;
// Now that we're ready, dispatch load event
// Note that we dispatch a legacy mx.rpc.soap.LoadEvent here instead to
// maintain backwards compatibility...
var loadEvent:LoadEvent = LoadEvent.createEvent(event.wsdl, event.location);
dispatchEvent(loadEvent);
unEnqueueCalls();
}
catch(fault:Fault)
{
var faultEvent:FaultEvent = FaultEvent.createEvent(fault);
dispatchEvent(faultEvent);
super.unEnqueueCalls(fault); // Jump straight to fault handling; ops cannot be initialized.
return;
}
catch(error:Error)
{
var errorMessage:String = error.message ? error.message : "";
var message:String = resourceManager.getString(
"rpc", "unexpectedException", [ errorMessage ])
var fault:Fault = new Fault("WSDLError", message);
fault.rootCause = error;
var faultEvent2:FaultEvent = FaultEvent.createEvent(fault);
dispatchEvent(faultEvent2);
super.unEnqueueCalls(fault); // Jump straight to fault handling; ops cannot be initialized.
return;
}
} */
/**
* @private
*/
/* mx_internal function deriveHTTPService():HTTPService
{
var httpService:HTTPService = new HTTPService();
httpService.asyncRequest = asyncRequest;
httpService.setKeepLastResultIfNotSet(_keepLastResult);
if (destination)
httpService.destination = destination;
httpService.useProxy = useProxy;
httpService.resultFormat = HTTPService.RESULT_FORMAT_XML;
httpService.rootURL = rootURL;
httpService.headers = httpHeaders;
return httpService;
} */
/**
* Initializes a new Operation.
*
* @param operation The Operation to initialize.
*
* @langversion 3.0
* @playerversion Flash 9
* @playerversion AIR 1.1
* @productversion Royale 0.9.4
*/
/* protected function initializeOperation(operation:Operation):void
{
if (_wsdl != null)
{
var wsdlOp:mx.rpc.wsdl.WSDLOperation = _wsdl.getOperation(operation.name, service, port);
if (operation.endpointURI == null) // Only set if the operation has not override the endpoint URI.
operation.endpointURI = endpointURI;
operation.wsdlOperation = wsdlOp;
}
} */
/* private function dispatchFault(faultCode:String, faultString:String, faultDetail:String = null):void
{
var fault:Fault = new Fault(faultCode, faultString, faultDetail);
var event:FaultEvent = FaultEvent.createEvent(fault);
dispatchEvent(event);
} */
//--------------------------------------------
// Backing variables for public getter/setters
//--------------------------------------------
//private var _wsdlURL:String;
//---------------------------------
// Internal properties
//---------------------------------
/* private var _log:ILogger;
private var _wsdlFault:Boolean;
private var _wsdl:mx.rpc.wsdl.WSDL;
private var _wsdlLoader:WSDLLoader; */
//--------------------------------------------------------------------------
//
// Static Constants
//
//--------------------------------------------------------------------------
/* public static const DEFAULT_DESTINATION_HTTP:String = "DefaultHTTP";
public static const DEFAULT_DESTINATION_HTTPS:String = "DefaultHTTPS"; */
}
}