Calling remoting destinations from Flash or Java applications

| 1 Comment
The legacy NetConnection API of Flash Player provides a way to call remoting destinations from a standard (non-Flex) Flash application or from ActionScript in a Flex application if desired. The new Java AMF Client in BlazeDS gives you a Java API patterned on the NetConnection API but for calling remoting destinations from a Java application. You can use either of these APIs with BlazeDS, LiveCycle Data Services, or third-party remoting implementations.

Call a remoting destination from a Flash application

You can use the Flash Player flash.net.NetConnection API to call a BlazeDS remoting destination from a Flash application. You use the NetConnection.connection() method to connect to a destination and the NetConnection.call() method to call the service. The following MXML code example shows this legacy way of making remoting object calls with NetConnection instead of RemoteObject:
<?xml version="1.0"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" width="100%" height="100%"
  creationComplete="creationCompleteHandler();">
  <!--
  -->
  
  <mx:Panel id="mainPanel" height="100%" width="100%">
  <mx:HBox> 
  <mx:Label text="Enter a text for the server to echo"/>
  <mx:TextInput id="ti" text="Hello World!"/>
  <mx:Button label="Send" click="echo()"/>
  <mx:Button label="Clear" click='ta.text = ""'/>
  </mx:HBox>
  <mx:TextArea id="ta" width="100%" height="100%"/>
  </mx:Panel>
  <mx:Script>
  <![CDATA[
  import flash.net.NetConnection;
  import flash.net.ObjectEncoding;
  import flash.net.Responder;
  private var nc:NetConnection
   
  private function creationCompleteHandler():void
  {
   nc = new NetConnection();
   nc.objectEncoding = ObjectEncoding.AMF0;
   nc.connect("http://[server]:[port]/yourapp/messagebroker/amf" );
  }
  private function echo():void
   {
    nc.call( "remoting_AMF.echo", new Responder( resultHandler, faultHandler ), ti.text );
   }
  private function resultHandler(result:Object):void
  {
   ta.text += "Server responded: "+ result + "\n";
   }
  private function faultHandler(fault:Object):void
  {
   ta.text += "Received fault: " + fault + "\n";
  }
  ]]>
  </mx:Script>
</mx:Application>

Call a remoting destination from a Java application

The Java AMF Client is new Java client API in the BlazeDS flex-messaging-core.jar file that makes it simple to work with remoting destinations from a Java application. The Java AMF Client is similar to the Flash Player flash.net.NetConnection API, but uses typical Java coding style rather than ActionScript coding style. The Java AMF Client classes are in the flex.messaging.io.amf.client* package in the flex-messaging-amf.jar file. The primary class of the Java AMF Client is the AMFConnection class. You connect to remote URLs with the AMFConnection.connect() method and call the service with the AMFConnection.call() method. You catch ClientStatusException and ServerStatusException exceptions when there are errors. Here's a simple example of how you can use AMFConnection to call a Remoting Service destination from a method in a Java class:
public void callRemoting()
{
  // Create the AMF connection.
  AMFConnection amfConnection = new AMFConnection();

  // Connect to the remote url.
  String url = "http://[server]:[port]/yourapp/messagebroker/amf";
  try
  {
     amfConnection.connect(url);
  }
  catch (ClientStatusException cse)
  {
     System.out.println(cse);
     return;
  }

  // Make a remoting call and retrieve the result.
  try
  {
     Object result = amfConnection.call("remoting_AMF.echo", "echo me1");
  }
  catch (ClientStatusException cse)
  {
     System.out.println(cse);
  }
  catch (ServerStatusException sse)
  {
     System.out.println(sse);
  }
  // Close the connection.
  amfConnection.close();
}
The Java AMF Client automatically handles cookies similarly to the way in which web browsers do, so there is no need for custom cookie handling.

1 Comment

I have a situation in which the server throws an Exception. The client tries to deserialise it, but it does not have the exception type in its classpath. Is there a way to convert this to an exception the client knows about, but with the same message as the Exception raised on the server?

Leave a comment

Community Help

Contribute to Community Help

About this Entry

This page contains a single entry by Michael Peterson published on September 12, 2008 5:02 PM.

Using BlazeDS with Maven was the previous entry in this blog.

New Community Help blog is the next entry in this blog.

Find recent content on the main index or look in the archives to find all content.