Hi all
We're trying to get a connection to work from our Royale-based code to a
LiveCycle back-end, and having to debug why the AMF message is different
between the Flex version and the Royale version (and trying to work out why the
server is rejecting our initial ping message..)
One thing that's cropped up is that Flex embeds the name of the class - or
rather, the alias of this - when it writes the object:
[RemoteClass(alias="flex.messaging.messages.CommandMessage")]
In Royale, this capability exists in the AMFBinaryData.writeObjectVariant()
method where it's using the "localTraits", and we have:
var alias:String = classInfo.alias;// getAliasByClass(instance.constructor as
Class); //<- @todo possible optimization: registerClassAlias implementation
stores in the classInfo Object, access directly
The commented-out code does exactly what the new code does, which is that it
accesses the ROYALE_CLASS_INFO structure:
var classInfo:Object =
instance.ROYALE_CLASS_INFO;
so to make this work, we've added an extra section at the end of the
ROYALE_CLASS_INFO for the CommandMessage (in the generated JavaScript, so this
is not a proper solution!):
mx.messaging.messages.CommandMessage.prototype.ROYALE_CLASS_INFO = { names: [{
name: 'CommandMessage', qName: 'mx.messaging.messages.CommandMessage', kind:
'class' }] , alias: 'flex.messaging.messages.CommandMessage' };
Interestingly, the compiler looks at all the [RemoteClass(alias="")] tags, and
outputs a list of these in the main application's .js file:
TestBackend.prototype.info = function() {
return { "mixins": [mx.messaging.config.LoaderConfig,
mx.styles.StyleManagerImpl],
"remoteClassAliases": {"mx.messaging.messages.CommandMessage":
"flex.messaging.messages.CommandMessage",
"org.apache.royale.net.remoting.messages.ActionMessage":
"flex.messaging.io.amf.ActionMessage", ... etc },
"compiledLocales": ["en_US"]}};
but I can't see anywhere that this list is accessed/used.
So it looks to me like there's a discrepancy between how the compiler is trying
to make this work, and how the framework is expecting it to be set up by the
compiler. I was wondering if anyone know what had been going on here and
whether we should go for one way or another .. and by preference I think,
getting the compiler to add the alias directly into the ROYALE_CLASS_INFO as
that seems to be a better way of doing it I think..?
thanks
Andrew
p.s. we've had a few other issues with the AMF format, e.g. using 'unknown
length' and having this as +1 rather than -1; plus a single message was being
packaged as an array, whereas Flex/Flash Player doesn't do that.. I'm wondering
whether anyone has a problem if we try to make the AMF messages generated from
a Royale app to be as similar as possible to how the Flash Player does it..?!