BlazeDS FlashDevelop RPC ArrayList

Hi,<br /><br />I've managed to get RPC working with BlazeDS and FlashDevelop using pure actionscript 3 & rpc.swc.  Great, I can return strings & booleans from the my java objects.<br /><br />I've tried some tutes and the BlazeDS developers guide to try and create custom serialization.  But I am stuck with - ArgumentError: Error #2004: One of the parameters is invalid.  When I try to return an ArrayList?<br /><br />The developers guide says it's possible to associate the java ArrayList with mx.collections.ArrayCollection.  I've tried several methods but so far just get the above error.  <br /><br />Here's the ArrayList<IdeaRO> that I'm trying to serialize;<br /><br />package tbi.DAO;<br /><br />//import java.util.Vector;<br />import java.io.Externalizable;<br />import java.io.IOException;<br />import java.io.ObjectInput;<br />import java.io.ObjectOutput;<br /><br />/**<br /> * <br /> * @author Russell Taylor<br /> * @created 13.06.2008<br /> * <br /> * This result object contains relates to each Idea Touch Point<br /> * and can also be used the Ideas in the related scroll component<br /> *<br /> */<br />public class IdeaRO implements Externalizable {<br />     <br />     private int _id;<br />     private String _title;<br />     private String _imageUrl;<br />     private int _level;<br />     private int _plusScore;<br />     private int _minusScore;<br />     <br />     /**<br />      * BlazeDS needs this to instantiate<br />      */<br />     public IdeaRO(){<br />          <br />     }<br />     <br />     public int getId(){<br />          return _id;<br />     }<br />     <br />     public void setId(int value){<br />          this._id = value;<br />     }<br />     <br />     public String getTitle(){<br />          return _title;<br />     }<br />     <br />     public void setTitle(String value){<br />          this._title = value;<br />     }<br />     <br />     public String getImageURL(){<br />          return _imageUrl;<br />     }<br />     <br />     public void setImageURL(String value){<br />          this._imageUrl = value;<br />     }<br />     <br />     public int getLevel(){<br />          return _level;<br />     }<br />     <br />     public void setLevel(int value){<br />          this._level = value;<br />     }<br />     <br />     public int getPlusScore(){<br />          return _plusScore;<br />     }<br />     <br />     public void setPlusScore(int value){<br />          this._plusScore = value;<br />     }<br />     <br />     public int getMinusScore(){<br />          return _minusScore;<br />     }<br />     <br />     public void setMinusScore(int value){<br />          this._minusScore = value;<br />     }<br />     <br />     /**<br />     * Serializes the server state of an instance of ThirdPartyProxy<br />     * by sending a String for the name, a Map of properties<br />     * String for the description, and a floating point<br />     * integer (single precision) for the price. Notice that the inventory <br />     * identifier is not sent to external clients.<br />     */<br />    public void writeExternal(ObjectOutput out) throws IOException {<br />        // Write out the client properties from the server representation<br />        out.writeFloat(_id);<br />        out.writeObject(_title);<br />        out.writeObject(_imageUrl);<br />        out.writeFloat(_level);<br />        out.writeFloat(_minusScore);<br />        out.writeFloat(_plusScore);<br />    }<br />    <br />    /**<br />     * Deserializes the client state of an instance of ThirdPartyProxy<br />     * by reading in String for the name, a Map of properties<br />     * for the description, and <br />     * a floating point integer (single precision) for the price. <br />     */<br />    public void readExternal(ObjectInput in) throws IOException,<br />        ClassNotFoundException {<br />        // Read in the server properties from the client representation.<br />        _id = (int)in.readFloat();<br />        _title = (String)in.readObject();<br />        _imageUrl = (String)in.readObject();<br />        _level = (int)in.readFloat();<br />        _minusScore = (int)in.readFloat();<br />        _plusScore = (int)in.readFloat();<br />        <br />    }<br /><br />}<br /><br />Any help would be appreciated.<br /><br />Thanks,<br /><br />Russell

<DIV dir=ltr align=left><SPAN class=918365815-23062008><FONT face=Arial <br />color=#0000ff size=2>Oh sorry, I thought you were talking about <br />flex.messaging.io.ArrayList (Server) / mx.collections.ArrayList <br />(Client).</FONT></SPAN></DIV><br /><DIV dir=ltr align=left><SPAN class=918365815-23062008><FONT face=Arial <br />color=#0000ff size=2></FONT></SPAN> </DIV><br /><DIV dir=ltr align=left><SPAN class=918365815-23062008><FONT face=Arial <br />color=#0000ff size=2>You're just asking about the standard java.util.ArrayList <br />collection class. In that case, these are being returned as <br />flex.messaging.io.ArrayCollection instances by default, the equivalent for that <br />class on the client is mx.collections.ArrayCollection. </FONT></SPAN><SPAN <br />class=918365815-23062008><FONT face=Arial color=#0000ff size=2>So.... you would <br />need to ensure mx.collections.ArrayCollection is linked into your SWF in the <br />manner described earlier.</FONT></SPAN></DIV><br /><DIV dir=ltr align=left><SPAN class=918365815-23062008><FONT face=Arial <br />color=#0000ff size=2></FONT></SPAN> </DIV><br /><DIV dir=ltr align=left><SPAN class=918365815-23062008><FONT face=Arial <br />color=#0000ff size=2>Or.... you can change the BlazeDS endpoint <br />serialization setting "legacy-collection" to true to get it to return <br />ActionScript Arrays for Java Collections. See:</FONT></SPAN></DIV><br /><DIV dir=ltr align=left><SPAN class=918365815-23062008><FONT face=Arial <br />color=#0000ff size=2></FONT></SPAN> </DIV><br /><DIV dir=ltr align=left><SPAN class=918365815-23062008><FONT face=Arial <br />color=#0000ff size=2><A <br />href="http://livedocs.adobe.com/blazeds/1/blazeds_devguide/help.html?content=serialize_ data_3.html">http://livedocs.adobe.com/blazeds/1/blazeds_devguide/help.html?content=serial ize_data_3.html</A></FONT></SPAN></DIV><br /><DIV dir=ltr align=left><SPAN class=918365815-23062008><FONT face=Arial <br />color=#0000ff size=2></FONT></SPAN> </DIV><br /><DIV dir=ltr align=left><SPAN class=918365815-23062008><FONT face=Arial <br />color=#0000ff size=2>i.e.</FONT></SPAN></DIV><br /><DIV dir=ltr align=left><SPAN class=918365815-23062008><FONT face=Arial <br />color=#0000ff size=2></FONT></SPAN> </DIV><br /><DIV dir=ltr align=left><SPAN class=918365815-23062008><FONT face=Arial <br />color=#0000ff size=2>        <br />&lt;channel-definition id="my-amf" <br />class="mx.messaging.channels.AMFChannel"&gt;<BR>            <br />&lt;endpoint url="<A <br />href="http://{server.name}:{server.port}/{context.root}/messagebroker/amf">http://{serv er.name}:{server.port}/{context.root}/messagebroker/amf</A>" <br />class="flex.messaging.endpoints.AMFEndpoint"/&gt;<BR>            <br />&lt;properties&gt;<BR>                <br />&lt;polling-enabled&gt;false&lt;/polling-enabled&gt;</FONT></SPAN></DIV><br /><DIV dir=ltr align=left><SPAN class=918365815-23062008><FONT face=Arial <br />color=#0000ff <br />size=2>                &lt;serialization&gt;</FONT></SPAN></DIV><br /><DIV dir=ltr align=left><SPAN class=918365815-23062008><FONT face=Arial <br />color=#0000ff <br />size=2>                    <br />&lt;legacy-collection&gt;true&lt;/legacy-collection&gt;</FONT></SPAN></DIV><br /><DIV dir=ltr align=left><SPAN class=918365815-23062008><FONT face=Arial <br />color=#0000ff <br />size=2>                <br />&lt;/serialization&gt;<BR>            <br />&lt;/properties&gt;<BR>        <br />&lt;/channel-definition&gt;<BR></DIV></FONT></SPAN><BR><br /><DIV class=OutlookMessageHeader lang=en-us dir=ltr align=left><br /><HR tabIndex=-1><br /><FONT face=Tahoma size=2><B>From:</B> Russell C Taylor <br />[mailto:[email protected]] <BR><B>Sent:</B> Monday, June 23, 2008 11:38 <br />AM<BR><B>To:</B> [email protected]<BR><B>Subject:</B> Re: <br />BlazeDS FlashDevelop RPC ArrayList<BR></FONT><BR></DIV><br /><DIV></DIV>A new message was posted by Russell C Taylor in <br /><BR><BR><B>Configuration and Getting Started Discussion</B> <br />--<BR>  BlazeDS FlashDevelop RPC ArrayList<BR><BR>Here's the method <br />that creates the ArrayList I wish to parse to the client. <BR><BR>/** <BR>* <br />Search results method parses the HashMap <BR>* and returns a result list <br />collection <BR>* <BR>* @param ids HashMap&lt;String, int[]&gt; <BR>* <BR>* <br />@return List collection of results <BR>*/ <BR>public static <br />ArrayList&lt;IdeaRO&gt; getSphinxArray(HashMap&lt;String, int[]&gt; ids) throws <br />SQLException{ <BR>ArrayList&lt;IdeaRO&gt; list = new ArrayList&lt;IdeaRO&gt;(); <br /><BR>Connection c = null; <BR><BR>try{ <BR>c = ConnectionHelper.getConnection(); <br /><BR>Statement s = c.createStatement(); <BR>for (Iterator&lt;Map.Entry&lt;String, <br />int[]&gt;&gt; entry=ids.entrySet().iterator(); entry.hasNext();){ <br /><BR>Map.Entry&lt;String, int[]&gt; key = (Map.Entry&lt;String, <br />int[]&gt;)entry.next(); <BR>for(int id:key.getValue()){ <BR>ResultSet rs = <br />s.executeQuery("SELECT `tbi_db_test`.`post`.`title`, `tbi_db_test`.`link`.`url`, <br />`tbi_db_test`.`levelindicator`.`level`, <br />`tbi_db_test`.`scorerelation`.`score_plus`, <br />`tbi_db_test`.`scorerelation`.`score_minus` FROM `tbi_db_test`.`post` JOIN <br />tbi_db_test.link ON tbi_db_test.post.post_id=tbi_db_test.link.post_id_fk JOIN <br />tbi_db_test.levelindicator ON <br />tbi_db_test.post.post_id=tbi_db_test.levelindicator.post_id_fk JOIN <br />tbi_db_test.scorerelation ON <br />tbi_db_test.post.post_id=tbi_db_test.scorerelation.post_id_fk WHERE <br />tbi_db_test.post.post_id="+(int)id); <BR>while(rs.next()){ <BR>IdeaRO result = <br />new IdeaRO(); <BR>result.setId((int)id); <br /><BR>result.setTitle(rs.getString("title")); <br /><BR>result.setImageURL(rs.getString("url")); <br /><BR>result.setLevel(rs.getInt("level")); <br /><BR>result.setPlusScore(rs.getInt("score_plus")); <br /><BR>result.setMinusScore(rs.getInt("score_minus")); <BR>list.add(result); <BR>} <br /><BR>} <BR>} <BR>}finally{ <BR>c.close(); <BR>} <BR><BR>return list; <BR>}; <br /><BR><BR><br /><HR align=left width=200><br />View/reply at <A href="http://www.adobeforums.com/webx?13@@.59b59dad/5">BlazeDS <br />FlashDevelop RPC ArrayList</A><BR>Replies by email are OK.<BR>Use the <A <br />href="http://www.adobeforums.com/webx?280@@.59b59dad!folder=.3c061a84">unsubscribe</A> <br />form to cancel your email subscription.<BR><BR>

Similar Messages

  • JAX-RPC ArrayLists and Jave Beans

    Can any one tell me if JAX-RPC supports an ArrayList of JavaBeans

    In my experience, Apache Axis is capable of serializing and deserializing any java.util.Collection instance, provided it can serialize and deserialize the objects held by the collection. This means that a List populated with beans should cause no problems.
    A word of caution though: XML serialization of objects is nowhere near as fast as the 'usual' Java serialization. This means that -if you're sending or receiving large amounts of beans per call- you might consider sending and receiving the List as attachment (ie: binary). I realize this defeats interoperability for the related web service methods, but having your users wait dozens of seconds on responses is rarely a viable alternative.

  • BlazeDS RPC request-response - Require ability to push server-response asynchronously

    Hi BlazeDS developers,
    I understand that BlazeDS has RPC req-response async client and server mechanism (whats the big deal html UI also has been aync?). It also has publish subcribe pattern with ability to have server side push to client.
    My questions is if below ability present in BlazeDS in request-response RPC?? (Do not want to use pub-sub messaging.):
    Asynchronous mechanism for a response "at server side" (not between client and server) i.e.
    1. a request from flex client using RemoteObject on a POJO at server,
    2. POJO at server processes the request asynchrnously, i.e. spawns a thread, and does some business logic calculation.
    3. Has the response ready after few seconds.
    4. prepares the response and pushes to client
    Server business logic does not have to block client POJO object function call made from RemoteObject RPC from client. (consider RemoteObject use case)
    Thanks in advance for your comments/answers
    Nilesh

    Hi Nilesh,
    What you describe is not currently possible in BlazeDS with request/response RPC requests. While handling of remote object requests is async in the client code, it's not async between the client and the server.
    A bug has been logged to get this functionality added and it is currently targeted for inclusion in the next release of BlazeDS.
    Here is the link to the bug if you want to watch its progress.
    https://bugs.adobe.com/jira/browse/BLZ-184
    Hope that helps.
    -Alex

  • Problem in RPC call (flex,blazeds,spring,H2,tomcat,eclipse)

    Hi, I've problem displaying value from backend onto the flex UI. I'm using Flex,BlazeDS, Spring, H2 in my applicaiton (testdrive app).  
    I've basically added another flex project to the testdrive app i downloaded. everything is working fine except the intended rpc invoke. 
    pls find the code snippets for the related change below :  
    1. FlexHelloWorld.mxml 
    private function resultHandler(event:ResultEvent):void 
    //used for debugging - shows details about result 
    //returned by the Java class method 
    Alert.show("success... in flex"); 
    Alert.show( ObjectUtil.toString(event.result) ); 
    <mx:RemoteObject id="ro" destination="helloServiceDestination" result="resultHandler(event)" fault="faultHandler(event)"/> 
    <mx:Panel x="25" y="10" width="653" height="407" layout="vertical" title="Test Flex 3 Using Java" borderColor="#008040" fontFamily="Arial" fontWeight="bold" fontSize="13"> 
    <mx:Text text="Click The Button To Test Getting Data Into Flex From A Java Class" fontWeight="bold" width="250"/> 
      <mx:Button label="Get Hello World Mesg From Java!" click="ro.getHelloWorld()"/> 
    </mx:Panel> 
    2. remoting-config.xml in flex 
    <destination id="helloServiceDestination" channels="my-amf"> 
         <properties> 
             <source>org.springframework.flex.samples.example.HelloWorld</source> 
         </properties> 
      </destination> 
    3. flex-servlet.xml in spring 
    <flex:remoting-destination ref="helloServiceDestination" /> 
    4. app-config.xml in spring 
    <bean id="helloServiceDestination" class="org.springframework.flex.samples.example.HelloWorld">   
      </bean> 
    5. HelloWorld.java 
    package org.springframework.flex.samples.example; 
      * TODO Document HelloWorld 
      * <p /> 
      * @author Vinod.Jayakumar 
    public class HelloWorld { 
    public String getHelloWorld(){ 
         return "HelloFromJava"; 
    expected result : http://localhost:1977/testdrive/FlexHelloWorld.html on click of button in the screen a alert message "HelloFromJava" should be shown but i get the following error message :  
    (mx.rpc::Fault)#0 
       content = (null) 
       errorID = 0 
       faultCode = "InvokeFailed" 
       faultDetail = "Couldn't establish a connection to 'helloServiceDestination'" 
       faultString = "[MessagingError message='Destination 'helloServiceDestination' either does not exist or the destination has no channels defined (and the application does not define any default channels.)']" 
       message = "faultCode:InvokeFailed faultString:'[MessagingError message='Destination 'helloServiceDestination' either does not exist or the destination has no channels defined (and the application does not define any default channels.)']' faultDetail:'Couldn't establish a connection to 'helloServiceDestination''" 
       name = "Error" 
       rootCause = (null) 
    Request you all to provide your valuable inputs. I know there's really something silly which has gone wrong

    Hi jvk180:
    Firstly, you should either need to define the destination in remoting-config.xml or in app-context.xml, but and in both places.
    Secondly, the error indicates that it is missing the channel information.
    Option 1:
    Assuming your bean "helloServiceDestination" uses other Spring beans, then:
    1. The right place to declare the destinations is in app-context.xml.
    2. In that case, you need to also define the channels that the destination will be exposed over. See documentation for how to do that.
    3. In your remote object declaration, you need to pass the channel set that gets used as well.
    <mx:ChannelSet id="cs">
       <mx:AMFChannel url="http://<yourServerName>:<yourServerPort>:/<yourContextRoot>/messagebroker/amf"/>
    </mx:ChannelSet>
    <mx:RemoteObject id="ro" destination="helloServiceDestination" channelset="{cs}" result="resultHandler(event)" fault="faultHandler(event)"/>
    Option 2:
    If you declare your destination, in remoting-config.xml, then you need to compile your swf with services-config.xml. Refer to documentation for how to do that.
    Hope that helps.
    Rohit

  • BlazeDS Java to ActionScript

    Hello, I am trying to send certain data types from a Java
    back-end through BlazeDS to my Flex clients. I wrote a ant script
    that takes JAXWS generated types and converts them into
    ActionScript types. One problem that I am facing is that the Seq
    classes are not being translated. What I mean is that JAXWS classes
    that contain List get wrapped into a class name ClassBSeq which
    contains a List<T> object. From the Java back-end I send the
    JAXWS types in a List to BlazeDS. The List contain a Seq classes
    that have List<t>. It seems on the client side that the main
    List gets translated but any List after that are null. Seems like
    it translated the top level List but no other List after that. Is
    there a way to tell the channel, in this case a
    StreamingAMFChannel, to transverse the object being translated?
    Here some code to help with my explanation.
    The Java Type:
    package handjam.gmiContainer;
    import java.util.List;
    public class GMIContainer {
    public List dataObjects;
    public String methodName;
    public GMIContainer() {
    public void setMethodName(String methodName) {
    this.methodName=methodName;
    public void setDataObjects(List dataObjects) {
    this.dataObjects=dataObjects;
    The ActionScript Type:
    package generated.handjam.gmiContainer
    import flash.utils.*;
    import mx.collections.ArrayCollection;
    [Bindable]
    [RemoteClass(alias="handjam.gmiContainer.GMIContainer")]
    public class GMIContainer
    private var _dataObjects:ArrayCollection;
    private var _methodName:String;
    public function GMIContainer()
    public function get dataObjects():ArrayCollection {
    return _dataObjects;
    public function get methodName():String {
    return _methodName;
    public function set
    dataObjects(dataObjects:ArrayCollection):void {
    trace("Setting the dataObject from Java = " + dataObjects);
    this._dataObjects=dataObjects;
    public function set methodName(methodName:String):void {
    trace("Setting the methods Name from Java = " + methodName);
    this._methodName=methodName;
    Code setting the List:
    GMIContainer container = new GMIContainer();
    List data = new ArrayList();
    data.add(id);
    data.add(mapItems);
    mapItems is a MapItemTypeSeq Java Type
    package mil.army.monmouth.webmap.data;
    import java.util.ArrayList;
    import java.util.List;
    import javax.xml.bind.annotation.XmlAccessType;
    import javax.xml.bind.annotation.XmlAccessorType;
    import javax.xml.bind.annotation.XmlType;
    * Array of MapItemType
    * <p>Java class for MapItemTypeSeq complex type.
    * <p>The following schema fragment specifies the
    expected content contained within this class.
    * <pre>
    * &lt;complexType name="MapItemTypeSeq">
    * &lt;complexContent>
    * &lt;restriction base="{
    http://www.w3.org/2001/XMLSchema}anyType">
    * &lt;sequence>
    * &lt;element name="mapItems" type="{
    http://www.gmiweb.com/schema/mapdata}MapItemType"
    maxOccurs="unbounded" minOccurs="0"/>
    * &lt;/sequence>
    * &lt;/restriction>
    * &lt;/complexContent>
    * &lt;/complexType>
    * </pre>
    @XmlAccessorType(XmlAccessType.FIELD)
    @XmlType(name = "MapItemTypeSeq", propOrder = {
    "mapItems"
    public class MapItemTypeSeq {
    protected List<MapItemType> mapItems;
    * Gets the value of the mapItems property.
    * <p>
    * This accessor method returns a reference to the live list,
    * not a snapshot. Therefore any modification you make to the
    * returned list will be present inside the JAXB object.
    * This is why there is not a <CODE>set</CODE>
    method for the mapItems property.
    * <p>
    * For example, to add a new item, do as follows:
    * <pre>
    * getMapItems().add(newItem);
    * </pre>
    * <p>
    * Objects of the following type(s) are allowed in the list
    * {@link MapItemType }
    public List<MapItemType> getMapItems() {
    if (mapItems == null) {
    mapItems = new ArrayList<MapItemType>();
    return this.mapItems;
    Here is what the JAXWS Java class look like:
    package mil.army.monmouth.webmap.data {
    import flash.utils.*;
    import mx.collections.ArrayCollection;
    [Bindable]
    [RemoteClass(alias="mil.army.monmouth.webmap.data.MapItemTypeSeq")]
    public class MapItemTypeSeq {
    public var _mapItems:ArrayCollection;
    public function get mapItems():ArrayCollection {
    return _mapItems;
    public function set mapItems(mapItems:ArrayCollection):void
    this._mapItems=mapItems;
    when the message comes to my client the flashlog.txt tells me
    something like this.
    GMIContainer => MapItemTypeSeq
    _mapItems = (null)
    mapItems = null
    Has anyone else ran into this issue with complicated data
    objects? All examples I have seen uses very simple
    data types.
    Thanks for your help,
    dk

    Hi Martin. The way that AMF serialization/deserialization works for BlazeDS is the same regardless of which service is being used, so yes that code will work for messaging as well. On the server, the serialization/deserialization of messages happens at the endpoint. For an incoming message for example, the endpoint deserializes the message and then hands it off to the MessageBroker which decides which service/destination to deliver the message to.
    That was a good question. Thanks for asking it. Lots of people are used to doing custom serialization/deserialization with the RPC services (RemoteObject/RemotingService) but I'm not sure everyone realizes they can do this for messaging as well.
    -Alex

  • BlazeDS configuration with coldfusion/java No destination 'testClass' exists in service flex.messaging.services.RemotingService"

    Hi
      I have an application which requires interaction with both coldfusion and java.I have taken the configuration files from the blazeDS turnkey project and added it to my application.My application server is  coldfusion  deployed in a weblogic.I was able to call coldfusion from my flex but whenever i try making java calls i get the following error
    [RPC Fault faultString="No destination 'testClass' exists in service flex.messaging.services.RemotingService" faultCode="Server.Processing" faultDetail="null"]
    services-config file is as follows
    <?xml version="1.0" encoding="UTF-8"?>
    <services-config>
        <services>
            <service-include file-path="remoting-config.xml" />
            <!--<service-include file-path="proxy-config.xml" />
            <service-include file-path="messaging-config.xml" />-->
        </services>
        <security>
            <login-command class="flex.messaging.security.JRunLoginCommand" server="JRun"/>
            <!-- Uncomment the correct app server
            <login-command class="flex.messaging.security.TomcatLoginCommand" server="Tomcat"/>
            <login-command class="flex.messaging.security.WeblogicLoginCommand" server="Weblogic"/>
            <login-command class="flex.messaging.security.WebSphereLoginCommand" server="WebSphere"/>
            -->
            <!--
            <security-constraint id="basic-read-access">
                <auth-method>Basic</auth-method>
                <roles>
                    <role>guests</role>
                    <role>accountants</role>
                    <role>employees</role>
                    <role>managers</role>
                </roles>
            </security-constraint>
            -->
        </security>
        <channels>
            <!--  CF Based Endpoints -->
            <channel-definition id="my-cfamf" class="mx.messaging.channels.AMFChannel">
                <endpoint uri="http://localhost:7002/flex2gateway/" class="flex.messaging.endpoints.AMFEndpoint"/>
                <properties>
                    <polling-enabled>false</polling-enabled>
                    <serialization>
                        <instantiate-types>false</instantiate-types>
                    </serialization>
                </properties>
            </channel-definition>
            <channel-definition id="cf-polling-amf" class="mx.messaging.channels.AMFChannel">
                <endpoint uri="http://{server.name}:{server.port}{context.root}/flex2gateway/cfamfpolling" class="flex.messaging.endpoints.AMFEndpoint"/>
                <properties>
                    <polling-enabled>true</polling-enabled>
                    <polling-interval-seconds>8</polling-interval-seconds>
                    <serialization>
                        <instantiate-types>false</instantiate-types>
                    </serialization>
                </properties>
            </channel-definition>
            <channel-definition id="my-cfamf-secure" class="mx.messaging.channels.SecureAMFChannel">
                <endpoint uri="https://{server.name}:{server.port}{context.root}/flex2gateway/cfamfsecure" class="flex.messaging.endpoints.SecureAMFEndpoint"/>
                <properties>
                    <polling-enabled>false</polling-enabled>
                    <serialization>
                        <instantiate-types>false</instantiate-types>
                    </serialization>
                </properties>
            </channel-definition>
            <!--  Java Based Endpoints -->
            <channel-definition id="java-amf" class="mx.messaging.channels.AMFChannel">
                <endpoint uri="http://localhost:7002/flex2gateway/amf" class="flex.messaging.endpoints.AMFEndpoint"/>
            </channel-definition>
            <channel-definition id="java-secure-amf" class="mx.messaging.channels.SecureAMFChannel">
                <endpoint uri="https://{server.name}:{server.port}{context.root}/flex2gateway/amfsecure" class="flex.messaging.endpoints.SecureAMFEndpoint"/>
            </channel-definition>
            <channel-definition id="java-polling-amf" class="mx.messaging.channels.AMFChannel">
                <endpoint uri="http://{server.name}:{server.port}{context.root}/flex2gateway/amfpolling" class="flex.messaging.endpoints.AMFEndpoint"/>
                <properties>
                    <polling-enabled>true</polling-enabled>
                    <polling-interval-seconds>8</polling-interval-seconds>
                </properties>
            </channel-definition>
            <!--
            <channel-definition id="java-http" class="mx.messaging.channels.HTTPChannel">
                <endpoint uri="http://{server.name}:{server.port}{context.root}/flex2gateway/http" class="flex.messaging.endpoints.HTTPEndpoint"/>
            </channel-definition>
            <channel-definition id="java-secure-http" class="mx.messaging.channels.SecureHTTPChannel">
                <endpoint uri="https://{server.name}:{server.port}{context.root}/flex2gateway/httpsecure" class="flex.messaging.endpoints.SecureHTTPEndpoint"/>
            </channel-definition>
            -->
        </channels>
        <logging>
            <target class="flex.messaging.log.ConsoleTarget" level="Error">
                <properties>
                    <prefix>[BlazeDS] </prefix>
                    <includeDate>false</includeDate>
                    <includeTime>false</includeTime>
                    <includeLevel>false</includeLevel>
                    <includeCategory>false</includeCategory>
                </properties>
                <filters>
                    <pattern>Endpoint.*</pattern>
                    <pattern>Service.*</pattern>
                    <pattern>Configuration</pattern>
                    <pattern>Message.*</pattern>
                </filters>
            </target>
        </logging>
        <system>
           <!-- <manageable>false</manageable>-->
            <!--
            <redeploy>
                <enabled>true</enabled>
                <watch-interval>20</watch-interval>
                <watch-file>{context.root}/WEB-INF/flex/services-config.xml</watch-file>
                <watch-file>{context.root}/WEB-INF/flex/proxy-config.xml</watch-file>
                <watch-file>{context.root}/WEB-INF/flex/remoting-config.xml</watch-file>
                <watch-file>{context.root}/WEB-INF/flex/messaging-config.xml</watch-file>
                <watch-file>{context.root}/WEB-INF/flex/data-management-config.xml</watch-file>
                <touch-file>{context.root}/WEB-INF/web.xml</touch-file>
            </redeploy>
             -->
        </system>
    </services-config>
    remote-config.xml
    <?xml version="1.0" encoding="UTF-8"?>
    <service id="remoting-service"
        class="flex.messaging.services.RemotingService"
        messageTypes="flex.messaging.messages.RemotingMessage">
        <adapters>
            <adapter-definition id="cf-object" class="coldfusion.flash.messaging.ColdFusionAdapter" default="true"/>
            <adapter-definition id="java-object" class="flex.messaging.services.remoting.adapters.JavaAdapter"/>
        </adapters>
        <default-channels>
            <channel ref="my-cfamf"/>
        </default-channels>
        <destination id="ColdFusion">
            <channels>
                <channel ref="my-cfamf"/>
            </channels>
            <properties>
                <source>*</source>
                <!-- define the resolution rules and access level of the cfc being invoked -->
                <access>
                    <!-- Use the ColdFusion mappings to find CFCs, by default only CFC files under your webroot can be found. -->
                    <use-mappings>false</use-mappings>
                    <!-- allow "public and remote" or just "remote" methods to be invoked -->
                    <method-access-level>remote</method-access-level>
                </access>
                <property-case>
                    <!-- cfc property names -->
                    <force-cfc-lowercase>false</force-cfc-lowercase>
                    <!-- Query column names -->
                    <force-query-lowercase>false</force-query-lowercase>
                    <!-- struct keys -->
                    <force-struct-lowercase>false</force-struct-lowercase>
                </property-case>
            </properties>
        </destination>
    <destination id="testClass">
            <properties>
                    <source>TestClass</source>
            </properties>
    <adapter ref="java-object" />
            <channels>
                <channel ref="java-amf"/>
            </channels>
        </destination>
        <destination id="testClass2">
            <properties>
                    <source>TestClass2</source>
            </properties>
      <adapter ref="java-object"/>
            <channels>
                <channel ref="java-amf"/>
            </channels>
        </destination>
    </service>
    Can anyone please tell me where i m  going wrong.Is that because i m using flex2gateway for java calls?.I used it since it was how it has been configured in the turnkey project for coldfusion.I have replicated the file as it was there and since it is using flex2gateway even for javaEndpoints i felt we could use the same.
    regards
    Sidd

    Thanks for the reply. Yes, I did compile all the Java and it
    works OK with a simple Java program. It just will not work in a
    Flex application.
    The java classes are:
    RRA:
    package blah.myPackage;
    import java.util.List;
    import java.util.Collection;
    import flex.data.DataSyncException;
    import flex.data.assemblers.AbstractAssembler;
    class RRA extends AbstractAssembler
    public Collection fill( List fillParameters )
    RRS service = new RRS();
    return service.getSome();
    RRS:
    package blah.myPackage;
    import java.util.ArrayList;
    import java.util.List;
    import java.sql.*;
    import flex.EORS.*;
    class RRS
    public List getSome()
    ArrayList list = new ArrayList();
    String str = "bob";
    RR rr = new RR(str);
    list.add(rr);
    return list;
    RR:
    package blah.myPackage;
    class RR
    private String name;
    public RR() { }
    public RR(String name)
    this.name = name;
    public String getName()
    return this.name;
    public void setName(String name)
    this.name = name;
    I started with something that retrieved data from a database
    but watered it down just to try and get some kind of communication
    between Flex and Java.

  • How to store an image into MySQL db using BlazeDS and Hibernate?

    Hi!
    I am using Flash Builder 4.6, BlazeDS, and Hibernate. How to store a webcam snapshot into the MySql Database. I stored Form Items by using RemoteObject into the database. But I failed to store webcam snapshot. I captured that image on Panel component.I converted that image to ByteArray. Now I want to save that image into the database. Please help me in this regard.
    thanks in advance.
    Here the Code:
    VisitorEntryForm.mxml
    <?xml version="1.0" encoding="utf-8"?>
    <mx:TitleWindow
              xmlns:mx="http://www.adobe.com/2006/mxml"
              xmlns:vo="com.visitor.vo.*"
              width="600"
              height="300"
              defaultButton="{submitButton}"
              showCloseButton="true"
              creationComplete="creationCompleteHandler();"
              close="PopUpManager.removePopUp(this);"
              title="Visitor Entry Form" xmlns:text="flash.text.*">
              <mx:RemoteObject id="saveService" destination="visitorService" result="handleSaveResult(event)" fault="handleFault(event)" showBusyCursor="true" />
              <vo:Visitor id="visitor"
                                               vType="{vTypeField.text}"
                                               vPurpose="{vPurposeField.text}"
                                               vName="{vNameField.text}"
                                               vAddress="{vAddressField.text}"
                                               cPerson="{cPersonField.text}"
                                               cAddress="{cAddressField.text}"
                                     />
                        <mx:Script>
                        <![CDATA[
                        import mx.managers.PopUpManager;
                        import flash.media.Camera;
                        import com.visitor.vo.WebCam;
                        import com.visitor.vo.Base64;
                        import mx.core.UIComponent;
                        import mx.graphics.codec.JPEGEncoder;
                        import mx.controls.Alert;
                        import mx.containers.Canvas;
                        import mx.rpc.events.ResultEvent;
                        import mx.rpc.events.FaultEvent;
                        import mx.events.ValidationResultEvent;
                        import mx.validators.Validator;
                                  [Bindable]
                                  private var webCam: com.visitor.vo.WebCam;
                                  [Bindable]
                                  private var message:String;
                                  [Bindable]
                                  private var formIsValid:Boolean = false;
                                  [Bindable]
                                  public var formIsEmpty:Boolean;
                                  private var focussedFormControl:DisplayObject;
                                  private function handleSaveResult(ev:ResultEvent):void {
                                            clearFormHandler();
                                            validateForm(ev);
                                            Alert.show("Visitor successfully created/updated.", "Information", Alert.OK, null, null, null, Alert.OK);
                                            // Reload the list.
                                            parentApplication.listConsultants.loaderService.getConsultants();
                                            PopUpManager.removePopUp(this);
                                  private function handleFault(ev:FaultEvent):void {
                                            message = "Error: " + ev.fault.faultCode + " \n "
                                                      + "Detail: " + ev.fault.faultDetail + " \n "
                                                      + "Message: " + ev.fault.faultString;
                                  public function saveVisitor():void {
                                            saveService.addUpdateVisitor(visitor);
                                  private function creationCompleteHandler():void {
                                            init();
                                            PopUpManager.centerPopUp(this);
                                            resetFocus();
                                  private function resetFocus():void {
                                            focusManager.setFocus(vTypeField);
                                  public function validateForm(event:Event):void  {
                                            focussedFormControl = event.target as DisplayObject;   
                                            formIsValid = true;
                                            // Check if form is empty
                                            formIsEmpty = (vTypeField.text == "" && vPurposeField.text == "" && vNameField.text == "" && vAddressField.text == "" && cPersonField.text == "" && cAddressField.text == "");
                                            validate(vTypeValidator);               
                                            validate(vPurposeValidator);
                                            validate(vNameValidator);
                                            validate(vAddressValidator);
                                            validate(cPersonValidator);
                                            validate(cAddressValidator);
                                  private function validate(validator:Validator):Boolean {
                                            var validatorSource:DisplayObject = validator.source as DisplayObject;
                                            var suppressEvents:Boolean = (validatorSource != focussedFormControl);
                                            var event:ValidationResultEvent = validator.validate(null, suppressEvents);
                                            var currentControlIsValid:Boolean = (event.type == ValidationResultEvent.VALID);
                                            formIsValid = formIsValid && currentControlIsValid;
                                            return currentControlIsValid;
                                  private function clearFormHandler():void {
                                            // Clear all input fields.
                                            vTypeField.text = "";
                                            vPurposeField.text = "";
                                            vNameField.text = "";
                                            vAddressField.text = "";
                                            cPersonField.text = "";
                                            cAddressField.text = "";
                                            message = "";
                                            // Clear validation error messages.
                                            vTypeField.errorString = "";
                                            vPurposeField.errorString = "";
                                            vNameField.errorString = "";
                                            vAddressField.errorString = "";
                                            cPersonField.errorString = "";
                                            cAddressField.errorString = "";
                                            formIsEmpty = true;
                                            formIsValid = false;
                                            resetFocus();
                                  private function init():void {
                                  webCam = new WebCam(97,97);
                                  var ref:UIComponent = new UIComponent();
                                  preview.removeAllChildren();
                                  preview.addChild(ref);
                                  ref.addChild(webCam);
                                  private function takeSnapshot():void {
                                  imageViewer.visible = true;
                                  imageViewer.width = preview.width;
                                  imageViewer.height = preview.height;
                                  var uiComponent : UIComponent = new UIComponent();
                                  uiComponent.width = webCam.width;
                                  uiComponent.height = webCam.height;
                                  var photoData:Bitmap = webCam.getSnapshot();
                                  var photoBitmap:BitmapData = photoData.bitmapData;
                                  uiComponent.addChild(photoData);
                                  imageViewer.removeAllChildren();
                                  imageViewer.addChild(uiComponent);
                                  private function uploadSnapshot():void
                                            if (imageViewer.getChildren().length > 0)
                                                      var uic:UIComponent = imageViewer.getChildAt(0) as UIComponent;
                                                      var bitmap:Bitmap = uic.getChildAt(0) as Bitmap;
                                                      var jpgEncoder:JPEGEncoder = new JPEGEncoder(75);
                                                      var jpgBytes:ByteArray = jpgEncoder.encode(bitmap.bitmapData);
                                  private function deleteSnapshot():void
                                            imageViewer.removeAllChildren();
                        ]]>
                        </mx:Script>
              <mx:StringValidator id="vTypeValidator"          source="{vTypeField}"          property="text" minLength="2" required="true" />
              <mx:StringValidator id="vPurposeValidator" source="{vPurposeField}"          property="text" minLength="2" required="true" />
              <mx:StringValidator id="vNameValidator"          source="{vNameField}"          property="text" minLength="2" required="true" />
              <mx:StringValidator id="vAddressValidator"          source="{vAddressField}"          property="text" minLength="5" required="true" />
              <mx:StringValidator id="cPersonValidator" source="{cPersonField}"          property="text" minLength="2" required="true" />
              <mx:StringValidator id="cAddressValidator"          source="{cAddressField}"          property="text" minLength="5" required="true" />
              <mx:Grid width="575" height="211">
                        <mx:GridRow width="575" height="211">
                                  <mx:GridItem width="301" height="235">
                                            <mx:Form width="301" height="208">
                                                      <mx:FormItem label="Visitor's Type">
                                                                <mx:ComboBox id="vTypeField" text="{visitor.vType}" change="validateForm(event);" editable="true">
                                                                          <mx:Array>
                                                                                    <mx:String></mx:String>
                                                                                    <mx:String>Contractor</mx:String>
                                                                                    <mx:String>Supplier</mx:String>
                                                                                    <mx:String>Transporter</mx:String>
                                                                                    <mx:String>Plant</mx:String>
                                                                                    <mx:String>Non-Plant</mx:String>
                                                                          </mx:Array>
                                                                </mx:ComboBox>
                                                      </mx:FormItem>
                                                      <mx:FormItem label="Visit Purpose">
                                                                <mx:ComboBox id="vPurposeField" text="{visitor.vPurpose}" change="validateForm(event);" editable="true">
                                                                          <mx:Array>
                                                                                    <mx:String></mx:String>
                                                                                    <mx:String>Official</mx:String>
                                                                                    <mx:String>Personal</mx:String>
                                                                          </mx:Array>
                                                                </mx:ComboBox>
                                                      </mx:FormItem>
                                                      <mx:FormItem label="Visitor's Name">
                                                                <mx:TextInput id="vNameField"  text="{visitor.vName}" change="validateForm(event);"/>
                                                      </mx:FormItem>
                                                      <mx:FormItem label="Address">
                                                                <mx:TextInput id="vAddressField"   text="{visitor.vAddress}" change="validateForm(event);"/>
                                                      </mx:FormItem>
                                                      <mx:FormItem label="Contact Person">
                                                                <mx:TextInput id="cPersonField"  text="{visitor.cPerson}" change="validateForm(event);"/>
                                                      </mx:FormItem>
                                                      <mx:FormItem label="Address">
                                                                <mx:TextInput id="cAddressField"  text="{visitor.cAddress}" change="validateForm(event);"/>
                                                      </mx:FormItem>
                                                      </mx:Form>
                                  </mx:GridItem>
                                  <mx:GridItem width="264" height="193">
                                            <mx:Grid width="241" height="206">
                                                      <mx:GridRow width="100%" height="100%">
                                                                <mx:GridItem width="100%" height="100%" horizontalAlign="center" verticalAlign="middle">
                                                                          <mx:Panel width="100" height="132" title="Snap" id="preview" layout="absolute"/>
                                                                </mx:GridItem>
                                                                <mx:GridItem width="100%" height="100%" horizontalAlign="center" verticalAlign="middle">
                                                                          <mx:Panel width="100" height="132" title="Preview" id="imageViewer"  layout="absolute"/>
                                                                </mx:GridItem>
                                                      </mx:GridRow>
                                                      <mx:GridRow width="100%" height="27" >
                                                                <mx:GridItem width="100%" height="100%" horizontalAlign="center">
                                                                          <mx:Button id="snapshot" x="2" width="106" height="27" label="Snap"
                                                                                                  click="takeSnapshot();"/>
                                                                </mx:GridItem>
                                                                <mx:GridItem width="100%" height="100%" horizontalAlign="center">
                                                                          <mx:Button id="deleteButton" x="1" width="106" height="27" label="Delete"
                                                                                                  click="deleteSnapshot();"/>
                                                                </mx:GridItem>
                                                      </mx:GridRow>
                                            </mx:Grid>
                                  </mx:GridItem>
                        </mx:GridRow>
              </mx:Grid>
              <mx:ControlBar height="40" horizontalAlign="center">
                        <mx:Button label="Save Visitor"          id="submitButton" enabled="{formIsValid}" click="saveVisitor();" />
                        <mx:Button label="Clear form" enabled="{!formIsEmpty}"          click="clearFormHandler();" />
                        <mx:Button label="Cancel" click="PopUpManager.removePopUp(this);"/>
                        <mx:Label width="211" id="state"/>
              </mx:ControlBar>
              <mx:Text text="{message}" fontWeight="bold" width="300"/>
    </mx:TitleWindow>
    ListVisitors.mxml
    <?xml version="1.0" encoding="utf-8"?>
    <mx:Panel
              xmlns:mx="http://www.adobe.com/2006/mxml"
              xmlns:view="com.visitor.view.*"
              width="100%"
              height="100%"
              title="Visitor Management System - Found {visitorRecords} visitors."
              creationComplete="loadVisitors();">
              <mx:RemoteObject id="loaderService" destination="visitorService" result="handleLoadResult(event)"          fault="handleFault(event)" showBusyCursor="true" />
              <mx:RemoteObject id="deleteService" destination="visitorService" result="handleDeleteResult(event)"          fault="handleFault(event)" showBusyCursor="true" />
              <mx:Script>
                        <![CDATA[
                                  import com.visitor.vo.Visitor;
                                  import mx.controls.Alert;
                                  import mx.managers.PopUpManager;
                                  import mx.containers.TitleWindow;
                                  import mx.collections.ArrayCollection;
                                  import mx.rpc.events.ResultEvent;
                                  import mx.rpc.events.FaultEvent;
                                  [Bindable]
                                  private var message:String;
                                  [Bindable]
                                  private var visitors:ArrayCollection = new ArrayCollection();
                                  [Bindable]
                                  private var visitorRecords:int = 0;
                                  public function loadVisitors():void {
                                            loaderService.getVisitors();
                                  private function deleteVisitor():void {
                                            if(dataGrid.selectedItem != null) {
                                                      var selectedItem:Visitor = dataGrid.selectedItem as Visitor;
                                                      deleteService.deleteVisitor(selectedItem.visitorId);
                                  private function createVisitor():void {
                                            var titleWindow:VisitorEntryForm = VisitorEntryForm(PopUpManager.createPopUp(this, VisitorEntryForm, true));
                                            titleWindow.setStyle("borderAlpha", 0.9);
                                            titleWindow.formIsEmpty = true;
                                  private function updateVisitor():void {
                                            var titleWindow:VisitorEntryForm = VisitorEntryForm(PopUpManager.createPopUp(this, VisitorEntryForm, true));
                                            titleWindow.setStyle("borderAlpha", 0.9);
                                            titleWindow.visitor = dataGrid.selectedItem as Visitor;
                                            titleWindow.formIsEmpty = false;
                                  private function handleLoadResult(ev:ResultEvent):void {
                                            visitors = ev.result as ArrayCollection;
                                            visitorRecords = visitors.length;
                                  private function handleDeleteResult(ev:ResultEvent):void {
                                            Alert.show("The visitor has been deleted.", "Information", Alert.OK, null, null, null, Alert.OK);
                                            loadVisitors();
                                  private function handleFault(ev:FaultEvent):void {
                                            message = "Error: "
                                                      + ev.fault.faultCode + " - "
                                                      + ev.fault.faultDetail + " - "
                                                      + ev.fault.faultString;
                        ]]>
              </mx:Script>
              <mx:VBox width="100%" height="100%">
                        <mx:Label text="{message}" fontWeight="bold" includeInLayout="false" />
                        <mx:DataGrid
                                  id="dataGrid"
                                  width="100%"
                                  height="100%"
                                  dataProvider="{visitors}"
                                  doubleClickEnabled="true"
                                  doubleClick="updateVisitor()" >
                                  <mx:columns>
                                            <mx:DataGridColumn dataField="visitorId"          headerText="Visitor ID" width="100"/>
                                            <mx:DataGridColumn dataField="vType"                    headerText="Visitor's Type" />
                                            <mx:DataGridColumn dataField="vPurpose"           headerText="Visit Purpose" />
                                            <mx:DataGridColumn dataField="vName"                     headerText="Visitor's Name" />
                                            <mx:DataGridColumn dataField="vAddress"                    headerText="Visitor's Address" />
                                            <mx:DataGridColumn dataField="cPerson"                     headerText="Contact Person" />
                                            <mx:DataGridColumn dataField="cAddress"                    headerText="Contact Address" />
                                            <mx:DataGridColumn dataField="timeIn"                     headerText="Time-In" />
                                            <mx:DataGridColumn dataField="timeOut"                     headerText="Time-Out" />
                                            <mx:DataGridColumn dataField="vPhoto"                     headerText="Visitor's Photo" />
                                  </mx:columns>
                        </mx:DataGrid>
                        <mx:ControlBar horizontalAlign="center">
                                  <mx:Button label="Create Visitor"          click="createVisitor()"          toolTip="Create a new visitor and store it in the database." />
                                  <mx:Button label="Update Visitor"          click="updateVisitor()"           enabled="{dataGrid.selectedItem}" toolTip="Update an existing database visitor." />
                                  <mx:Button label="Delete Visitor"          click="deleteVisitor()"          enabled="{dataGrid.selectedItem}" toolTip="Delete the visitor from the database." />
                                  <mx:Button label="Reload Data"                    click="loadVisitors()"           toolTip="Reload the visitor list from the database." />
                        </mx:ControlBar>
              </mx:VBox>
    </mx:Panel>
    Visitor.as
    package com.visitor.vo
              import mx.controls.Image;
              import spark.primitives.BitmapImage;
              [Bindable]
              [RemoteClass(alias="com.visitor.Visitor")]
              public class Visitor
                        public function Visitor()
                        public var visitorId:Number;
                        public var vType:String;
                        public var vPurpose:String;
                        public var vName:String;
                        public var vAddress:String;
                        public var cPerson:String;
                        public var cAddress:String;
                        public var timeIn:Date;
                        public var timeOut:Date;
                       public var vPhoto: Image;
    Visitor.java
    package com.visitor;
    import java.sql.Blob;
    import java.sql.Timestamp;
    import javax.persistence.Basic;
    import javax.persistence.Column;
    import javax.persistence.Entity;
    import javax.persistence.GeneratedValue;
    import javax.persistence.GenerationType;
    import javax.persistence.Id;
    import javax.persistence.NamedQueries;
    import javax.persistence.NamedQuery;
    import javax.persistence.Table;
    import org.hibernate.annotations.Index;
    @Entity
    @Table(name = "visitors")
    @NamedQueries( {
                        @NamedQuery(name = "visitors.findAll", query = "from Visitor"),
                        @NamedQuery(name = "visitors.byId", query = "select v from Visitor v where v.visitorId= :visitorId") })
    public class Visitor {
              @Id
              @GeneratedValue(strategy = GenerationType.AUTO)
              @Column(name = "visitorId", nullable = false)
              private Long visitorId;
              @Basic
              @Index(name = "vType_idx_1")
              @Column(name = "vType", nullable = true, unique = false)
              private String vType;
              @Basic
              @Column(name = "vPurpose", nullable = true, unique = false)
              private String vPurpose;
              @Basic
              @Column(name = "vName", nullable = true, unique = false)
              private String vName;
              @Basic
              @Column(name = "vAddress", nullable = true, unique = false)
              private String vAddress;
              @Basic
              @Column(name = "cPerson", nullable = true, unique = false)
              private String cPerson;
              @Basic
              @Column(name = "cAddress", nullable = true, unique = false)
              private String cAddress;
              @Basic
              @Column(name = "timeIn", nullable = false, unique = false)
              private Timestamp timeIn;
              @Basic
              @Column(name = "timeOut", nullable = true, unique = false)
              private Timestamp timeOut;
              @Basic
              @Column(name = "vPhoto", nullable = true, unique = false)
              private Blob vPhoto;
              public Visitor() {
                        super();
              public Long getVisitorId() {
                        return visitorId;
              public void setVisitorId(Long visitorId) {
                        this.visitorId = visitorId;
              public String getvType() {
                        return vType;
              public void setvType(String vType) {
                        this.vType = vType;
              public String getvPurpose() {
                        return vPurpose;
              public void setvPurpose(String vPurpose) {
                        this.vPurpose = vPurpose;
              public String getvName() {
                        return vName;
              public void setvName(String vName) {
                        this.vName = vName;
              public String getvAddress() {
                        return vAddress;
              public void setvAddress(String vAddress) {
                        this.vAddress = vAddress;
              public String getcPerson() {
                        return cPerson;
              public void setcPerson(String cPerson) {
                        this.cPerson = cPerson;
              public String getcAddress() {
                        return cAddress;
              public void setcAddress(String cAddress) {
                        this.cAddress = cAddress;
              public Timestamp getTimeIn() {
                        return timeIn;
              public void setTimeIn(Timestamp timeIn) {
                        this.timeIn = timeIn;
              public Timestamp getTimeOut() {
                        return timeOut;
              public void setTimeOut(Timestamp timeOut) {
                        this.timeOut = timeOut;
              public Blob getvPhoto() {
                        return vPhoto;
              public void setvPhoto(Blob vPhoto) {
                        this.vPhoto = vPhoto;
    VisitorService.java
    package com.visitor;
    import java.sql.Timestamp;
    import java.util.Date;
    import java.util.List;
    import javax.persistence.EntityManager;
    import javax.persistence.EntityManagerFactory;
    import javax.persistence.EntityTransaction;
    import javax.persistence.Persistence;
    import javax.persistence.Query;
    import org.apache.log4j.Logger;
    public class VisitorService {
              private static final String PERSISTENCE_UNIT = "visitor_db";
              private static Logger logger = Logger.getLogger(VisitorService.class);
              public VisitorService() {
                        super();
              public List<Visitor> getvisitors() {
                        logger.debug("** getVisitors called...");
                        EntityManagerFactory entityManagerFactory = Persistence
                                            .createEntityManagerFactory(PERSISTENCE_UNIT);
                        EntityManager em = entityManagerFactory.createEntityManager();
                        Query findAllQuery = em.createNamedQuery("visitors.findAll");
                        List<Visitor> visitors = findAllQuery.getResultList();
                        if (visitors != null)
                                  logger.debug("** Found " + visitors.size() + " records:");
                        return visitors;
              public void addUpdateVisitor(Visitor visitor) throws Exception {
                        logger.debug("** addUpdateVisitor called...");
                        EntityManagerFactory emf = Persistence
                                            .createEntityManagerFactory(PERSISTENCE_UNIT);
                        EntityManager em = emf.createEntityManager();
                        // When passing Boolean and Number values from the Flash client to a
                        // Java object, Java interprets null values as the default values for
                        // primitive types; for example, 0 for double, float, long, int, short,
                        // byte.
                        if (visitor.getVisitorId() == null          || visitor.getVisitorId() == 0) {
                                  // New consultant is created
                                  visitor.setVisitorId(null);
                                  visitor.setTimeIn(new Timestamp(new Date().getTime()));
                        } else {
                                  visitor.setTimeOut(new Timestamp(new Date().getTime()));
                                  // Existing consultant is updated - do nothing.
                        EntityTransaction tx = em.getTransaction();
                        tx.begin();
                        try {
                                  em.merge(visitor);
                                  tx.commit();
                        } catch (Exception e) {
                                  logger.error("** Error: " + e.getMessage());
                                  tx.rollback();
                                  throw new Exception(e.getMessage());
                        } finally {
                                  logger.info("** Closing Entity Manager.");
                                  em.close();
              public void deleteVisitor(Long visitorId) {
                        logger.debug("** deleteVisitor called...");
                        EntityManagerFactory emf = Persistence
                                            .createEntityManagerFactory(PERSISTENCE_UNIT);
                        EntityManager em = emf.createEntityManager();
                        Query q = em.createNamedQuery("visitors.byId");
                        q.setParameter("visitorId", visitorId);
                        Visitor visitor = (Visitor) q.getSingleResult();
                        if (visitor != null) {
                                  EntityTransaction tx = em.getTransaction();
                                  tx.begin();
                                  try {
                                            em.remove(visitor);
                                            tx.commit();
                                  } catch (Exception e) {
                                            logger.error("** Error: " + e.getMessage());
                                            tx.rollback();
                                  } finally {
                                            logger.info("** Closing Entity Manager.");
                                            em.close();
    remoting-config.xml
    <?xml version="1.0" encoding="UTF-8"?>
    <service id="remoting-service" class="flex.messaging.services.RemotingService">
              <adapters>
                        <adapter-definition id="java-object"
                                  class="flex.messaging.services.remoting.adapters.JavaAdapter"
                                  default="true" />
              </adapters>
              <default-channels>
                        <channel ref="my-amf" />
              </default-channels>
              <!-- ADC Demo application -->
              <destination id="visitorService">
                        <properties>
                                  <source>com.visitor.VisitorService</source>
                        </properties>
              </destination>
    </service>

    Hi!
    I am using Flash Builder 4.6, BlazeDS, and Hibernate. How to store a webcam snapshot into the MySql Database. I stored Form Items by using RemoteObject into the database. But I failed to store webcam snapshot. I captured that image on Panel component.I converted that image to ByteArray. Now I want to save that image into the database. Please help me in this regard.
    thanks in advance.
    Here the Code:
    VisitorEntryForm.mxml
    <?xml version="1.0" encoding="utf-8"?>
    <mx:TitleWindow
              xmlns:mx="http://www.adobe.com/2006/mxml"
              xmlns:vo="com.visitor.vo.*"
              width="600"
              height="300"
              defaultButton="{submitButton}"
              showCloseButton="true"
              creationComplete="creationCompleteHandler();"
              close="PopUpManager.removePopUp(this);"
              title="Visitor Entry Form" xmlns:text="flash.text.*">
              <mx:RemoteObject id="saveService" destination="visitorService" result="handleSaveResult(event)" fault="handleFault(event)" showBusyCursor="true" />
              <vo:Visitor id="visitor"
                                               vType="{vTypeField.text}"
                                               vPurpose="{vPurposeField.text}"
                                               vName="{vNameField.text}"
                                               vAddress="{vAddressField.text}"
                                               cPerson="{cPersonField.text}"
                                               cAddress="{cAddressField.text}"
                                     />
                        <mx:Script>
                        <![CDATA[
                        import mx.managers.PopUpManager;
                        import flash.media.Camera;
                        import com.visitor.vo.WebCam;
                        import com.visitor.vo.Base64;
                        import mx.core.UIComponent;
                        import mx.graphics.codec.JPEGEncoder;
                        import mx.controls.Alert;
                        import mx.containers.Canvas;
                        import mx.rpc.events.ResultEvent;
                        import mx.rpc.events.FaultEvent;
                        import mx.events.ValidationResultEvent;
                        import mx.validators.Validator;
                                  [Bindable]
                                  private var webCam: com.visitor.vo.WebCam;
                                  [Bindable]
                                  private var message:String;
                                  [Bindable]
                                  private var formIsValid:Boolean = false;
                                  [Bindable]
                                  public var formIsEmpty:Boolean;
                                  private var focussedFormControl:DisplayObject;
                                  private function handleSaveResult(ev:ResultEvent):void {
                                            clearFormHandler();
                                            validateForm(ev);
                                            Alert.show("Visitor successfully created/updated.", "Information", Alert.OK, null, null, null, Alert.OK);
                                            // Reload the list.
                                            parentApplication.listConsultants.loaderService.getConsultants();
                                            PopUpManager.removePopUp(this);
                                  private function handleFault(ev:FaultEvent):void {
                                            message = "Error: " + ev.fault.faultCode + " \n "
                                                      + "Detail: " + ev.fault.faultDetail + " \n "
                                                      + "Message: " + ev.fault.faultString;
                                  public function saveVisitor():void {
                                            saveService.addUpdateVisitor(visitor);
                                  private function creationCompleteHandler():void {
                                            init();
                                            PopUpManager.centerPopUp(this);
                                            resetFocus();
                                  private function resetFocus():void {
                                            focusManager.setFocus(vTypeField);
                                  public function validateForm(event:Event):void  {
                                            focussedFormControl = event.target as DisplayObject;   
                                            formIsValid = true;
                                            // Check if form is empty
                                            formIsEmpty = (vTypeField.text == "" && vPurposeField.text == "" && vNameField.text == "" && vAddressField.text == "" && cPersonField.text == "" && cAddressField.text == "");
                                            validate(vTypeValidator);               
                                            validate(vPurposeValidator);
                                            validate(vNameValidator);
                                            validate(vAddressValidator);
                                            validate(cPersonValidator);
                                            validate(cAddressValidator);
                                  private function validate(validator:Validator):Boolean {
                                            var validatorSource:DisplayObject = validator.source as DisplayObject;
                                            var suppressEvents:Boolean = (validatorSource != focussedFormControl);
                                            var event:ValidationResultEvent = validator.validate(null, suppressEvents);
                                            var currentControlIsValid:Boolean = (event.type == ValidationResultEvent.VALID);
                                            formIsValid = formIsValid && currentControlIsValid;
                                            return currentControlIsValid;
                                  private function clearFormHandler():void {
                                            // Clear all input fields.
                                            vTypeField.text = "";
                                            vPurposeField.text = "";
                                            vNameField.text = "";
                                            vAddressField.text = "";
                                            cPersonField.text = "";
                                            cAddressField.text = "";
                                            message = "";
                                            // Clear validation error messages.
                                            vTypeField.errorString = "";
                                            vPurposeField.errorString = "";
                                            vNameField.errorString = "";
                                            vAddressField.errorString = "";
                                            cPersonField.errorString = "";
                                            cAddressField.errorString = "";
                                            formIsEmpty = true;
                                            formIsValid = false;
                                            resetFocus();
                                  private function init():void {
                                  webCam = new WebCam(97,97);
                                  var ref:UIComponent = new UIComponent();
                                  preview.removeAllChildren();
                                  preview.addChild(ref);
                                  ref.addChild(webCam);
                                  private function takeSnapshot():void {
                                  imageViewer.visible = true;
                                  imageViewer.width = preview.width;
                                  imageViewer.height = preview.height;
                                  var uiComponent : UIComponent = new UIComponent();
                                  uiComponent.width = webCam.width;
                                  uiComponent.height = webCam.height;
                                  var photoData:Bitmap = webCam.getSnapshot();
                                  var photoBitmap:BitmapData = photoData.bitmapData;
                                  uiComponent.addChild(photoData);
                                  imageViewer.removeAllChildren();
                                  imageViewer.addChild(uiComponent);
                                  private function uploadSnapshot():void
                                            if (imageViewer.getChildren().length > 0)
                                                      var uic:UIComponent = imageViewer.getChildAt(0) as UIComponent;
                                                      var bitmap:Bitmap = uic.getChildAt(0) as Bitmap;
                                                      var jpgEncoder:JPEGEncoder = new JPEGEncoder(75);
                                                      var jpgBytes:ByteArray = jpgEncoder.encode(bitmap.bitmapData);
                                  private function deleteSnapshot():void
                                            imageViewer.removeAllChildren();
                        ]]>
                        </mx:Script>
              <mx:StringValidator id="vTypeValidator"          source="{vTypeField}"          property="text" minLength="2" required="true" />
              <mx:StringValidator id="vPurposeValidator" source="{vPurposeField}"          property="text" minLength="2" required="true" />
              <mx:StringValidator id="vNameValidator"          source="{vNameField}"          property="text" minLength="2" required="true" />
              <mx:StringValidator id="vAddressValidator"          source="{vAddressField}"          property="text" minLength="5" required="true" />
              <mx:StringValidator id="cPersonValidator" source="{cPersonField}"          property="text" minLength="2" required="true" />
              <mx:StringValidator id="cAddressValidator"          source="{cAddressField}"          property="text" minLength="5" required="true" />
              <mx:Grid width="575" height="211">
                        <mx:GridRow width="575" height="211">
                                  <mx:GridItem width="301" height="235">
                                            <mx:Form width="301" height="208">
                                                      <mx:FormItem label="Visitor's Type">
                                                                <mx:ComboBox id="vTypeField" text="{visitor.vType}" change="validateForm(event);" editable="true">
                                                                          <mx:Array>
                                                                                    <mx:String></mx:String>
                                                                                    <mx:String>Contractor</mx:String>
                                                                                    <mx:String>Supplier</mx:String>
                                                                                    <mx:String>Transporter</mx:String>
                                                                                    <mx:String>Plant</mx:String>
                                                                                    <mx:String>Non-Plant</mx:String>
                                                                          </mx:Array>
                                                                </mx:ComboBox>
                                                      </mx:FormItem>
                                                      <mx:FormItem label="Visit Purpose">
                                                                <mx:ComboBox id="vPurposeField" text="{visitor.vPurpose}" change="validateForm(event);" editable="true">
                                                                          <mx:Array>
                                                                                    <mx:String></mx:String>
                                                                                    <mx:String>Official</mx:String>
                                                                                    <mx:String>Personal</mx:String>
                                                                          </mx:Array>
                                                                </mx:ComboBox>
                                                      </mx:FormItem>
                                                      <mx:FormItem label="Visitor's Name">
                                                                <mx:TextInput id="vNameField"  text="{visitor.vName}" change="validateForm(event);"/>
                                                      </mx:FormItem>
                                                      <mx:FormItem label="Address">
                                                                <mx:TextInput id="vAddressField"   text="{visitor.vAddress}" change="validateForm(event);"/>
                                                      </mx:FormItem>
                                                      <mx:FormItem label="Contact Person">
                                                                <mx:TextInput id="cPersonField"  text="{visitor.cPerson}" change="validateForm(event);"/>
                                                      </mx:FormItem>
                                                      <mx:FormItem label="Address">
                                                                <mx:TextInput id="cAddressField"  text="{visitor.cAddress}" change="validateForm(event);"/>
                                                      </mx:FormItem>
                                                      </mx:Form>
                                  </mx:GridItem>
                                  <mx:GridItem width="264" height="193">
                                            <mx:Grid width="241" height="206">
                                                      <mx:GridRow width="100%" height="100%">
                                                                <mx:GridItem width="100%" height="100%" horizontalAlign="center" verticalAlign="middle">
                                                                          <mx:Panel width="100" height="132" title="Snap" id="preview" layout="absolute"/>
                                                                </mx:GridItem>
                                                                <mx:GridItem width="100%" height="100%" horizontalAlign="center" verticalAlign="middle">
                                                                          <mx:Panel width="100" height="132" title="Preview" id="imageViewer"  layout="absolute"/>
                                                                </mx:GridItem>
                                                      </mx:GridRow>
                                                      <mx:GridRow width="100%" height="27" >
                                                                <mx:GridItem width="100%" height="100%" horizontalAlign="center">
                                                                          <mx:Button id="snapshot" x="2" width="106" height="27" label="Snap"
                                                                                                  click="takeSnapshot();"/>
                                                                </mx:GridItem>
                                                                <mx:GridItem width="100%" height="100%" horizontalAlign="center">
                                                                          <mx:Button id="deleteButton" x="1" width="106" height="27" label="Delete"
                                                                                                  click="deleteSnapshot();"/>
                                                                </mx:GridItem>
                                                      </mx:GridRow>
                                            </mx:Grid>
                                  </mx:GridItem>
                        </mx:GridRow>
              </mx:Grid>
              <mx:ControlBar height="40" horizontalAlign="center">
                        <mx:Button label="Save Visitor"          id="submitButton" enabled="{formIsValid}" click="saveVisitor();" />
                        <mx:Button label="Clear form" enabled="{!formIsEmpty}"          click="clearFormHandler();" />
                        <mx:Button label="Cancel" click="PopUpManager.removePopUp(this);"/>
                        <mx:Label width="211" id="state"/>
              </mx:ControlBar>
              <mx:Text text="{message}" fontWeight="bold" width="300"/>
    </mx:TitleWindow>
    ListVisitors.mxml
    <?xml version="1.0" encoding="utf-8"?>
    <mx:Panel
              xmlns:mx="http://www.adobe.com/2006/mxml"
              xmlns:view="com.visitor.view.*"
              width="100%"
              height="100%"
              title="Visitor Management System - Found {visitorRecords} visitors."
              creationComplete="loadVisitors();">
              <mx:RemoteObject id="loaderService" destination="visitorService" result="handleLoadResult(event)"          fault="handleFault(event)" showBusyCursor="true" />
              <mx:RemoteObject id="deleteService" destination="visitorService" result="handleDeleteResult(event)"          fault="handleFault(event)" showBusyCursor="true" />
              <mx:Script>
                        <![CDATA[
                                  import com.visitor.vo.Visitor;
                                  import mx.controls.Alert;
                                  import mx.managers.PopUpManager;
                                  import mx.containers.TitleWindow;
                                  import mx.collections.ArrayCollection;
                                  import mx.rpc.events.ResultEvent;
                                  import mx.rpc.events.FaultEvent;
                                  [Bindable]
                                  private var message:String;
                                  [Bindable]
                                  private var visitors:ArrayCollection = new ArrayCollection();
                                  [Bindable]
                                  private var visitorRecords:int = 0;
                                  public function loadVisitors():void {
                                            loaderService.getVisitors();
                                  private function deleteVisitor():void {
                                            if(dataGrid.selectedItem != null) {
                                                      var selectedItem:Visitor = dataGrid.selectedItem as Visitor;
                                                      deleteService.deleteVisitor(selectedItem.visitorId);
                                  private function createVisitor():void {
                                            var titleWindow:VisitorEntryForm = VisitorEntryForm(PopUpManager.createPopUp(this, VisitorEntryForm, true));
                                            titleWindow.setStyle("borderAlpha", 0.9);
                                            titleWindow.formIsEmpty = true;
                                  private function updateVisitor():void {
                                            var titleWindow:VisitorEntryForm = VisitorEntryForm(PopUpManager.createPopUp(this, VisitorEntryForm, true));
                                            titleWindow.setStyle("borderAlpha", 0.9);
                                            titleWindow.visitor = dataGrid.selectedItem as Visitor;
                                            titleWindow.formIsEmpty = false;
                                  private function handleLoadResult(ev:ResultEvent):void {
                                            visitors = ev.result as ArrayCollection;
                                            visitorRecords = visitors.length;
                                  private function handleDeleteResult(ev:ResultEvent):void {
                                            Alert.show("The visitor has been deleted.", "Information", Alert.OK, null, null, null, Alert.OK);
                                            loadVisitors();
                                  private function handleFault(ev:FaultEvent):void {
                                            message = "Error: "
                                                      + ev.fault.faultCode + " - "
                                                      + ev.fault.faultDetail + " - "
                                                      + ev.fault.faultString;
                        ]]>
              </mx:Script>
              <mx:VBox width="100%" height="100%">
                        <mx:Label text="{message}" fontWeight="bold" includeInLayout="false" />
                        <mx:DataGrid
                                  id="dataGrid"
                                  width="100%"
                                  height="100%"
                                  dataProvider="{visitors}"
                                  doubleClickEnabled="true"
                                  doubleClick="updateVisitor()" >
                                  <mx:columns>
                                            <mx:DataGridColumn dataField="visitorId"          headerText="Visitor ID" width="100"/>
                                            <mx:DataGridColumn dataField="vType"                    headerText="Visitor's Type" />
                                            <mx:DataGridColumn dataField="vPurpose"           headerText="Visit Purpose" />
                                            <mx:DataGridColumn dataField="vName"                     headerText="Visitor's Name" />
                                            <mx:DataGridColumn dataField="vAddress"                    headerText="Visitor's Address" />
                                            <mx:DataGridColumn dataField="cPerson"                     headerText="Contact Person" />
                                            <mx:DataGridColumn dataField="cAddress"                    headerText="Contact Address" />
                                            <mx:DataGridColumn dataField="timeIn"                     headerText="Time-In" />
                                            <mx:DataGridColumn dataField="timeOut"                     headerText="Time-Out" />
                                            <mx:DataGridColumn dataField="vPhoto"                     headerText="Visitor's Photo" />
                                  </mx:columns>
                        </mx:DataGrid>
                        <mx:ControlBar horizontalAlign="center">
                                  <mx:Button label="Create Visitor"          click="createVisitor()"          toolTip="Create a new visitor and store it in the database." />
                                  <mx:Button label="Update Visitor"          click="updateVisitor()"           enabled="{dataGrid.selectedItem}" toolTip="Update an existing database visitor." />
                                  <mx:Button label="Delete Visitor"          click="deleteVisitor()"          enabled="{dataGrid.selectedItem}" toolTip="Delete the visitor from the database." />
                                  <mx:Button label="Reload Data"                    click="loadVisitors()"           toolTip="Reload the visitor list from the database." />
                        </mx:ControlBar>
              </mx:VBox>
    </mx:Panel>
    Visitor.as
    package com.visitor.vo
              import mx.controls.Image;
              import spark.primitives.BitmapImage;
              [Bindable]
              [RemoteClass(alias="com.visitor.Visitor")]
              public class Visitor
                        public function Visitor()
                        public var visitorId:Number;
                        public var vType:String;
                        public var vPurpose:String;
                        public var vName:String;
                        public var vAddress:String;
                        public var cPerson:String;
                        public var cAddress:String;
                        public var timeIn:Date;
                        public var timeOut:Date;
                       public var vPhoto: Image;
    Visitor.java
    package com.visitor;
    import java.sql.Blob;
    import java.sql.Timestamp;
    import javax.persistence.Basic;
    import javax.persistence.Column;
    import javax.persistence.Entity;
    import javax.persistence.GeneratedValue;
    import javax.persistence.GenerationType;
    import javax.persistence.Id;
    import javax.persistence.NamedQueries;
    import javax.persistence.NamedQuery;
    import javax.persistence.Table;
    import org.hibernate.annotations.Index;
    @Entity
    @Table(name = "visitors")
    @NamedQueries( {
                        @NamedQuery(name = "visitors.findAll", query = "from Visitor"),
                        @NamedQuery(name = "visitors.byId", query = "select v from Visitor v where v.visitorId= :visitorId") })
    public class Visitor {
              @Id
              @GeneratedValue(strategy = GenerationType.AUTO)
              @Column(name = "visitorId", nullable = false)
              private Long visitorId;
              @Basic
              @Index(name = "vType_idx_1")
              @Column(name = "vType", nullable = true, unique = false)
              private String vType;
              @Basic
              @Column(name = "vPurpose", nullable = true, unique = false)
              private String vPurpose;
              @Basic
              @Column(name = "vName", nullable = true, unique = false)
              private String vName;
              @Basic
              @Column(name = "vAddress", nullable = true, unique = false)
              private String vAddress;
              @Basic
              @Column(name = "cPerson", nullable = true, unique = false)
              private String cPerson;
              @Basic
              @Column(name = "cAddress", nullable = true, unique = false)
              private String cAddress;
              @Basic
              @Column(name = "timeIn", nullable = false, unique = false)
              private Timestamp timeIn;
              @Basic
              @Column(name = "timeOut", nullable = true, unique = false)
              private Timestamp timeOut;
              @Basic
              @Column(name = "vPhoto", nullable = true, unique = false)
              private Blob vPhoto;
              public Visitor() {
                        super();
              public Long getVisitorId() {
                        return visitorId;
              public void setVisitorId(Long visitorId) {
                        this.visitorId = visitorId;
              public String getvType() {
                        return vType;
              public void setvType(String vType) {
                        this.vType = vType;
              public String getvPurpose() {
                        return vPurpose;
              public void setvPurpose(String vPurpose) {
                        this.vPurpose = vPurpose;
              public String getvName() {
                        return vName;
              public void setvName(String vName) {
                        this.vName = vName;
              public String getvAddress() {
                        return vAddress;
              public void setvAddress(String vAddress) {
                        this.vAddress = vAddress;
              public String getcPerson() {
                        return cPerson;
              public void setcPerson(String cPerson) {
                        this.cPerson = cPerson;
              public String getcAddress() {
                        return cAddress;
              public void setcAddress(String cAddress) {
                        this.cAddress = cAddress;
              public Timestamp getTimeIn() {
                        return timeIn;
              public void setTimeIn(Timestamp timeIn) {
                        this.timeIn = timeIn;
              public Timestamp getTimeOut() {
                        return timeOut;
              public void setTimeOut(Timestamp timeOut) {
                        this.timeOut = timeOut;
              public Blob getvPhoto() {
                        return vPhoto;
              public void setvPhoto(Blob vPhoto) {
                        this.vPhoto = vPhoto;
    VisitorService.java
    package com.visitor;
    import java.sql.Timestamp;
    import java.util.Date;
    import java.util.List;
    import javax.persistence.EntityManager;
    import javax.persistence.EntityManagerFactory;
    import javax.persistence.EntityTransaction;
    import javax.persistence.Persistence;
    import javax.persistence.Query;
    import org.apache.log4j.Logger;
    public class VisitorService {
              private static final String PERSISTENCE_UNIT = "visitor_db";
              private static Logger logger = Logger.getLogger(VisitorService.class);
              public VisitorService() {
                        super();
              public List<Visitor> getvisitors() {
                        logger.debug("** getVisitors called...");
                        EntityManagerFactory entityManagerFactory = Persistence
                                            .createEntityManagerFactory(PERSISTENCE_UNIT);
                        EntityManager em = entityManagerFactory.createEntityManager();
                        Query findAllQuery = em.createNamedQuery("visitors.findAll");
                        List<Visitor> visitors = findAllQuery.getResultList();
                        if (visitors != null)
                                  logger.debug("** Found " + visitors.size() + " records:");
                        return visitors;
              public void addUpdateVisitor(Visitor visitor) throws Exception {
                        logger.debug("** addUpdateVisitor called...");
                        EntityManagerFactory emf = Persistence
                                            .createEntityManagerFactory(PERSISTENCE_UNIT);
                        EntityManager em = emf.createEntityManager();
                        // When passing Boolean and Number values from the Flash client to a
                        // Java object, Java interprets null values as the default values for
                        // primitive types; for example, 0 for double, float, long, int, short,
                        // byte.
                        if (visitor.getVisitorId() == null          || visitor.getVisitorId() == 0) {
                                  // New consultant is created
                                  visitor.setVisitorId(null);
                                  visitor.setTimeIn(new Timestamp(new Date().getTime()));
                        } else {
                                  visitor.setTimeOut(new Timestamp(new Date().getTime()));
                                  // Existing consultant is updated - do nothing.
                        EntityTransaction tx = em.getTransaction();
                        tx.begin();
                        try {
                                  em.merge(visitor);
                                  tx.commit();
                        } catch (Exception e) {
                                  logger.error("** Error: " + e.getMessage());
                                  tx.rollback();
                                  throw new Exception(e.getMessage());
                        } finally {
                                  logger.info("** Closing Entity Manager.");
                                  em.close();
              public void deleteVisitor(Long visitorId) {
                        logger.debug("** deleteVisitor called...");
                        EntityManagerFactory emf = Persistence
                                            .createEntityManagerFactory(PERSISTENCE_UNIT);
                        EntityManager em = emf.createEntityManager();
                        Query q = em.createNamedQuery("visitors.byId");
                        q.setParameter("visitorId", visitorId);
                        Visitor visitor = (Visitor) q.getSingleResult();
                        if (visitor != null) {
                                  EntityTransaction tx = em.getTransaction();
                                  tx.begin();
                                  try {
                                            em.remove(visitor);
                                            tx.commit();
                                  } catch (Exception e) {
                                            logger.error("** Error: " + e.getMessage());
                                            tx.rollback();
                                  } finally {
                                            logger.info("** Closing Entity Manager.");
                                            em.close();
    remoting-config.xml
    <?xml version="1.0" encoding="UTF-8"?>
    <service id="remoting-service" class="flex.messaging.services.RemotingService">
              <adapters>
                        <adapter-definition id="java-object"
                                  class="flex.messaging.services.remoting.adapters.JavaAdapter"
                                  default="true" />
              </adapters>
              <default-channels>
                        <channel ref="my-amf" />
              </default-channels>
              <!-- ADC Demo application -->
              <destination id="visitorService">
                        <properties>
                                  <source>com.visitor.VisitorService</source>
                        </properties>
              </destination>
    </service>

  • Blazeds 4.0.0.7548 is not working on Websphere over HTTPS protocol

    Hi All
    Our application is on Blazeds 4.0.0.7548 deployed on websphere 7.0.  While this application works fine on HTTP but it doesn't work consistently on HTTPS.  It throws following exception
    FaultEvent fault=[RPC Fault faultString="error" faultCode="Channel.Call.Failed" faultDetail="NetConnection.Call.Failed: HTTP: Failed"] messageId="C6ABB836-C505-CAFC-F114-0006E0E0305F" type="fault" bubbles=false cancelable=true eventPhase=2.
    Following is the screeshot
    I don't see any exception in the logs as well.
    HTTP works fine, i only see this exception on HTTPS.
    Regards
    Ravi

    As I mentioned earlier, we are using MGCP for that particular fax port and the gateway we use as H323.
    Even I'm not pretty sure about using mixed protocol, I believe this gateway gonna used to support call center calls. SInce MGCP is easy for configs they might have confiugred only the port as MGCP endpoint.
    Now its not working with both the cases, not in mgcp as well as fallback mode. Can you reveiw the debugs and see why I have to remove "modem passthrough" command from voice service voip section which of our standard config and works well with all other gateway of ours. Please help here.

  • SOAP Fault:javax.xml.rpc.soap.SOAPFaultException: Exception during processi

    Hi: We are using weblogic81 sp3. Other developers in my office ran the same porgram and got no errors.
    My startWebLogic.cmd are configured exactly same as theirs.
    My startWebLogic classpath:
    set CLASSPATH=%WL_HOME%\server\lib\ojdbc14.jar;%WL_HOME%\server\lib\CR122067_81sp3.jar;%WEBLOGIC_CLASSPATH%;%POINTBASE_CLASSPATH%;%JAVA_HOME%\jre\lib\rt.jar;%WL_HOME%\server\lib\webservices.jar;%CLASSPATH%
    I keep getting this webservice error.
    SOAP Fault:javax.xml.rpc.soap.SOAPFaultException: Exception during processing: w
    eblogic.xml.schema.binding.DeserializationException: mapping lookup failure. typ
    e=['java:language_builtins.util']:ArrayList schema context=TypedSchemaContext{ja
    vaType=[Ljava.lang.Object;} (see Fault Detail for stacktrace)
    Detail:
    <detail>
    <bea_fault:stacktrace xmlns:bea_fault="http://www.bea.com/servers/wls70/webse
    rvice/fault/1.0.0">weblogic.xml.schema.binding.DeserializationException: mapping
    lookup failure. type=['java:language_builtins.util']:ArrayList schema context=T
    ypedSchemaContext{javaType=[Ljava.lang.Object;}
    at weblogic.xml.schema.binding.RuntimeUtils.lookup_deserializer(RuntimeU
    tils.java:461)
    thank you for your help

    we used castor to do xml mapping

  • Error javax.xml.rpc.handler.HandlerRegistry in a Standlone Proxy

    Hello
    I want to communicate with a web service with attachment file. I develop following the sap guide a Standlone proxy with the WSDL service. I need to change the soap header and manage the request and response. Sap Portal Netweaver 7.0 sp 15 uses JAX RPC 1.0 and manage all related to the Web services with this technology. Following the JAX RPC guide it is said that you can install a handler to manage the SOAP message. The code is bellow:
    ENT_ARQ_FileRoutingImpl service =new ENT_ARQ_FileRoutingImpl();
    IENT_ARQ_FileRoutingByStream port= service.getBasicSreamEndpoint();
    HandlerRegistry registry=service.getHandlerRegistry();
    QName qnamePort = new QName("http://tempuri.org/", "basicSreamEndpoint");
    List handlerList=new ArrayList();
    handlerList.add(new MyHandler());
    registry.setHandlerChain(qnamePort,handlerList);
    port.sendFileByStream(file);
    The main problem is that service.getHandlerRegistry(); return a null and it is impossible to register a new handler.
    Please if someone has idea how to solve this problem or how to modify the content type of soap message I will appreciate.
    Thanks in advance.

    Hi,
    the class com.sap.engine.services.webservices.jaxrpc.wsdl2java.ServiceBase, the base class for your service interface implementation, implements the getHandlerRegistry-Method and returns null. In a standalone proxy project you only create interfaces, the concrete classes seem to be created on the server (cglib?). Therefore I don't see a way to provide a HandlerRegistry implementation. Even if you could find a way I guess that the engine doesn't support invoking it when sending/receiving SOAP messages. I read somewhere in the Portal(?) developer's guide that this (2004s SP15) should be a JAX-RPC 1.0 implementation.
    To quote the JAX-RPC 1.1 specification (don't have 1.0, http://jcp.org/en/jsr/detail?id=101), chapter 12.3.1 Handler Configuration APIs:
    A JAX-RPC runtime system is required to provide implementation class for the
    HandlerRegistry interface.
    Therefore you could say that the SAP implementation for this AS version is incomplete, I would suggest using an open source implementation.
    Best regards,
    Fabian

  • JAX-RPC: Exception

    Hello there
    I am using currently SUN's Webservice Development Kit 1.4 and try to realise a JAX-RPC "rpc/encoded" webservice.
    My applicatio is currently running if I am using a static client (stubs geenerated by wscompile). If am going forward to use a dynamic proxy client, I am getting a strange exception during the deserialization of the xml data on the client: "trailing block elements must have an id attribute". See also stack trace at the end of the messsage.
    As far as I understand is that it must somewthing be with the "ArrayList" or arrays which I am using in my JavaBean which I sent from the server to the client. Here my extract from my JavaBean:
    public class Article
         long id;
         Date date;
         String category;
         String title="";
         String lead="";
         List texts;
    }If I am taking out the member "List texts" then it will work correctly. The list contains only Strings. I tried also to use String[] array, but this didn't help either.
    So here, my questions perhaps someone has some ideas what I did wrong.
    - Why does it work with the stastic client but not with the dynamic proxy?
    - Does anybody know an example on the net where in JavaBeans Lists or Arrays has been used?
    - Anybody an idea why this error appears? Did I something wrong?
    Thank you in advance
    Mark Egloff
    trailing block elements must have an id attribute
         at com.sun.xml.rpc.encoding.SOAPDeserializationContext.deserializeMultiRefObjects(SOAPDeserializationContext.java:81)
         at com.sun.xml.rpc.client.StreamingSender._send(StreamingSender.java:226)
         at com.sun.xml.rpc.client.dii.CallInvokerImpl.doInvoke(CallInvokerImpl.java:80)
         at com.sun.xml.rpc.client.dii.BasicCall.invoke(BasicCall.java:489)
         at com.sun.xml.rpc.client.dii.CallInvocationHandler.doCall(CallInvocationHandler.java:122)
         at com.sun.xml.rpc.client.dii.CallInvocationHandler.invoke(CallInvocationHandler.java:86)
         at $Proxy0.getArticle(Unknown Source)
         at tagesanzeiger.client.ManagerDynamicClient.main(ManagerDynamicClient.java:43)

    Thanks for your answer... regarding the support of "List" Types, you can get a list of supportet types from here http://java.sun.com/webservices/docs/1.3/tutorial/doc/JAXRPC2.html#wp79865 As you see "list" is supported. The problem for me is that I not use directly the list as parameter from the interface, rather than this it is used "internally" in my JavaBean. I found how to declare additional types here:https://jax-rpc.dev.java.net/whitepaper/1.1/index-part1.html#3.5.1 i.e. in your config-interface.xml for the wscompile server:
    <typeMappingRegistry>
         <additionalTypes>
              <class name="tagesanzeiger.data.Media"/>
         </additionalTypes>
    </typeMappingRegistry>This works for the serialization later on the serverside, but the client then claims that it has no serializer. I have read somewehere that the client also supports declarative serialization of custom types, bt I did not find any example. I tried also prorgrammatically, here a hint:
    http://users.skynet.be/pascalbotte/rcx-ws-doc/seiadvanced.htm
    But there is no full example of custom serializer, so I tried to use the sun serializer:
    com.sun.xml.rpc.encoding.ValueTypeSerializer
    com.sun.xml.rpc.encoding.ObjectArraySerializerbut this ended in a NullPointerException.....
    - so has anybody out there a working example with complex types in a JavaBean?
    - has anyone an example of customserializer.?
    Regarding books, I have one from the Sun " Java Web Services Architecture" and one from Wiley "Developing Java Web Services", but both do not show how to use the cutom serializers nor declarive options at the client side....So I hope somenone has somewhere a working example...please...
    Thanks
    Mark

  • Flex RPC mapping Java nested classes to ActionScript classes

    We are calling a Java method in our project using
    RemoteObject the value returned by the java method is a ArrayList
    containing instances of a class say ParentClass with some nested
    classes.
    The structure of ParentClass(Java) is something like this
    class ParentClass {
    //some primitives
    private ChildClassA childAInstance;
    private ChildClassB childBInstance;
    //getters setters
    We have created similar class structure on the ActionScript
    side, the ActionScript classes(ParentClass,ChildClassA
    ,ChildClassB) have been properly annotated with the [RemoteClass]
    metadata tag,
    The problem is that though i'm getting the primitive data
    members of the ParentClass through RPC in my corresponding AS
    ParentClass class i'm getting an runtime exception trying to access
    ChildClassA,ChildClassB members.
    Am i missing something, exactly the same scenario is
    mentioned in this article
    http://www.adobe.com/devnet/flex/articles/complex_data.html
    But the Object.registerClass method mentioned in the tutorial
    is giving me compilation error, the sample code attached with the
    article is corrupt zip too.
    Please help me out on this

    JAXB will create classes from an XML schema, SAX is a parser library and JAXP is a library of XML a bunch of XML tools.
    I don't care for JAXB too much. I would skip it and go right to the JAX-RPC spec (WebServices).

  • JAX-RPC And Non-Java Web Service

    Hi,
    This is a total shot in the dark. I'm attempting to consume an RPC web service developed in Delphi. I've created a JAX-RPC client in NetBeans from the published WSDL, attached below. I've created calls to several of the procedures available. What's bizarre, at least to me, is that half of them work fine and half of them don't. In all cases where they don't I'm getting a returns SOAP envelope indicated an access violation, attached below. There are no errors in any of the server logs and the developer assures me that the procedures do, in fact, work from his client (also developed conveniently enough in Delphi).
    I'm willing to take him at face value for the moment and assume that the problem is in my client implementation, although I have no idea where it would lie. The only difference I've been able to gather between the features which work and those that don't is the size of the return package...it would most likely be much larger than the ones that don't work.
    The service is an ISAPI dll running under IIS on Windows Server 2003. Any clues or guidance anyone would be willing to provide would be most welcome. On to the files:
    There wasn't enough room to post the entire thing so I've included one working (CheckStock) and non-working (GetLibTrace) function.
    WSDL:
    <?xml version="1.0" encoding="UTF-8"?>
    <definitions xmlns="http://schemas.xmlsoap.org/wsdl/" xmlns:xs="http://www.w3.org/2001/XMLSchema" name="IInnovaServiceservice" targetNamespace="http://tempuri.org/" xmlns:tns="http://tempuri.org/" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" xmlns:mime="http://schemas.xmlsoap.org/wsdl/mime/">
      <message name="CheckStock2Request">
        <part name="OPC" type="xs:string"/>
      </message>
      <message name="CheckStock2Response">
        <part name="QTY" type="xs:int"/>
        <part name="messages" type="xs:string"/>
        <part name="return" type="xs:int"/>
      </message>
      <message name="GetLibTrace5Request">
        <part name="LibName" type="xs:string"/>
      </message>
      <message name="GetLibTrace5Response">
        <part name="dimensions" type="xs:string"/>
        <part name="messages" type="xs:string"/>
        <part name="return" type="xs:int"/>
      </message>
      <portType name="IInnovaService">
        <operation name="CheckStock">
          <input message="tns:CheckStock2Request"/>
          <output message="tns:CheckStock2Response"/>
        </operation>
        <operation name="GetLibTrace">
          <input message="tns:GetLibTrace5Request"/>
          <output message="tns:GetLibTrace5Response"/>
        </operation>
      </portType>
      <binding name="IInnovaServicebinding" type="tns:IInnovaService">
        <soap:binding style="rpc" transport="http://schemas.xmlsoap.org/soap/http"/>
        <operation name="CheckStock">
          <soap:operation soapAction="urn:InnovaServiceIntf-IInnovaService#CheckStock" style="rpc"/>
          <input>
            <soap:body use="encoded" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" namespace="urn:InnovaServiceIntf-IInnovaService"/>
          </input>
          <output>
            <soap:body use="encoded" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" namespace="urn:InnovaServiceIntf-IInnovaService"/>
          </output>
        </operation>
        <operation name="GetLibTrace">
          <soap:operation soapAction="urn:InnovaServiceIntf-IInnovaService#GetLibTrace" style="rpc"/>
          <input>
            <soap:body use="encoded" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" namespace="urn:InnovaServiceIntf-IInnovaService"/>
          </input>
          <output>
            <soap:body use="encoded" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" namespace="urn:InnovaServiceIntf-IInnovaService"/>
          </output>
        </operation>
      </binding>
      <service name="IInnovaServiceservice">
        <port name="IInnovaServicePort" binding="tns:IInnovaServicebinding">
          <soap:address location="http://172.20.10.145:8080/innovaservice.dll/soap/IInnovaService"/>
        </port>
      </service>
    </definitions>My client:
    package com.signet.innova.client;
    import com.signet.innova.client.interfaces.IInnovaService;
    import com.signet.innova.client.interfaces.IInnovaServiceservice_Impl;
    import java.net.URL;
    import java.rmi.RemoteException;
    import java.util.ArrayList;
    import javax.xml.namespace.QName;
    import javax.xml.rpc.Stub;
    import javax.xml.rpc.holders.Holder;
    import javax.xml.rpc.holders.IntHolder;
    import javax.xml.rpc.holders.StringHolder;
    import javax.xml.soap.MessageFactory;
    import javax.xml.soap.SOAPMessage;
    import javax.xml.ws.Dispatch;
    import javax.xml.ws.Service;
    public class InnovaClient {
        private void testConnection() {
            Stub stub = createProxy();
            IInnovaService service = (IInnovaService) stub;
            StringHolder sh1 = new StringHolder();
            StringHolder sh2 = new StringHolder();
            StringHolder sh3 = new StringHolder();
            IntHolder ih1 = new IntHolder();
            IntHolder ih2 = new IntHolder();
            IntHolder ih3 = new IntHolder();
            try {
                System.out.println("Calling checkStock()");
                service.checkStock("0103877866", ih1, sh1, ih2);
                System.out.println(" service returned => " + ih1.value + ":" + sh1.value + ":" + ih2.value);
            } catch (RemoteException re) {
                System.out.println(" service returned => " + re.toString());
            try {
                System.out.println("Calling getLibTrace()");
                service.getLibTrace("REGULAR", sh1, sh2, ih3);
                System.out.println(" service returned => " + sh1.value + ":" + sh2.value + ":" + ih1.value);
            } catch (RemoteException re) {
                System.out.println(" service returned => " + re.toString());
        private Stub createProxy() {
            return (Stub) (new IInnovaServiceservice_Impl().getIInnovaServicePort());
        public static void main(String[] args) {
            InnovaClient client = new InnovaClient();
            System.out.print("Running testConnection()...");
            client.testConnection();
    }The request and response packets are in my reply below. Ran out of characters. :o)
    Edited by: Pablo_Vadear on Dec 22, 2009 11:19 PM

    Correction from above...".it would most likely be much larger than the ones that don't work" should have been "it would most likely be much larger IN THE ONES THAT DON'T WORK". Sorry.
    The request:
    POST /innovaservice.dll/soap/IInnovaService HTTP/1.1
    Content-Type: text/xml; charset=utf-8
    Accept: text/xml, text/html, image/gif, image/jpeg, *; q=.2, */*; q=.2
    Content-Length: 484
    SOAPAction: "urn:InnovaServiceIntf-IInnovaService#CheckStock"
    User-Agent: Java/1.6.0_17
    Host: 172.20.10.145:8080
    Connection: keep-alive
    <?xml version="1.0" encoding="UTF-8"?>
    <env:Envelope xmlns:env="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:enc="http://schemas.xmlsoap.org/soap/encoding/" xmlns:ns0="urn:InnovaServiceIntf-IInnovaService" env:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"><env:Body><ns0:CheckStock><OPC xsi:type="xsd:string">0103877866</OPC></ns0:CheckStock></env:Body></env:Envelope>POST /innovaservice.dll/soap/IInnovaService HTTP/1.1
    Content-Type: text/xml; charset=utf-8
    Accept: text/xml, text/html, image/gif, image/jpeg, *; q=.2, */*; q=.2
    Content-Length: 491
    SOAPAction: "urn:InnovaServiceIntf-IInnovaService#GetLibTrace"
    User-Agent: Java/1.6.0_17
    Host: localhost:8080
    Connection: keep-alive
    <?xml version="1.0" encoding="UTF-8"?>
    <env:Envelope xmlns:env="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:enc="http://schemas.xmlsoap.org/soap/encoding/" xmlns:ns0="urn:InnovaServiceIntf-IInnovaService" env:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"><env:Body><ns0:GetLibTrace><LibName xsi:type="xsd:string">REGULAR</LibName></ns0:GetLibTrace></env:Body></env:Envelope>And the response:
    <?xml version="1.0"?>
    <SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/"><SOAP-ENV:Body SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"><NS1:CheckStockResponse xmlns:NS1="urn:InnovaServiceIntf-IInnovaService"><return xsi:type="xsd:int">0</return><QTY xsi:type="xsd:int">0</QTY><messages xsi:type="xsd:string">Item 0103877866 retrieved OK.
    Right side OPC.
    </messages></NS1:CheckStockResponse></SOAP-ENV:Body></SOAP-ENV:Envelope>
    HTTP/1.1 200 OK
    Date: Tue, 22 Dec 2009 23:18:40 GMT
    Server: Microsoft-IIS/6.0
    Content-Type: text/xml
    Content-Length: 486
    <?xml version="1.0"?>
    <SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/"><SOAP-ENV:Body><SOAP-ENV:Fault><faultactor/><faultcode>SOAP-ENV:Server</faultcode><faultstring>Access violation at address 00000000. Write of address 00000000</faultstring></SOAP-ENV:Fault></SOAP-ENV:Body></SOAP-ENV:Envelope>Any help appreciated.
    Edited by: Pablo_Vadear on Dec 22, 2009 11:23 PM

  • Explicity mapping between ActionScript and Java objects for the BlazeDS Messaging Service

    The BlazeDS documentation shows how to explicitly map between ActionScript and Java objects. For example, this works fine for RPC services, e.g.
    import flash.utils.IExternalizable;
    import flash.utils.IDataInput;
    import flash.utils.IDataOutput;
    [Bindable]
    [RemoteClass(alias="javaclass.User")]
    public class User implements IExternalizable {
            public var id : String;
            public var secret : String;
            public function User() {
            public function readExternal(input : IDataInput) : void {
                    id = input.readObject() as String;
            public function writeExternal(output : IDataOutput) : void {
                    output.writeObject(id);
    and
    import java.io.Externalizable;
    import java.io.IOException;
    import java.io.ObjectInput;
    import java.io.ObjectOutput;
    import java.util.HashSet;
    import java.util.Iterator;
    import java.util.Set;
    public class User implements Externalizable {
        protected String id;
        protected String secret;
        public String getId() {
            return id;
        public void setId(String id) {
            this.id = id;
        public String getSecret() {
            return secret;
        public void setSecret(String secret) {
            this.secret = secret;
        public void readExternal(ObjectInput in) throws IOException,
                    ClassNotFoundException {
            id = (String) in.readObject();
        public void writeExternal(ObjectOutput out) throws IOException {
            out.writeObject(id);
    If I called an RPC service that returns a User, the secret is not sent over the wire.  Is it also possible to do this for the messaging service? That is, if I create a custom messaging adapter and use the function below, can I also prevent secret from being sent?
    MessageBroker messageBroker = MessageBroker.getMessageBroker(null);
    AsyncMessage message = new AsyncMessage();
    message.setDestination("MyMessagingService");
    message.setClientId(UUIDUtils.createUUID());
    message.setMessageId(UUIDUtils.createUUID());
    User user = new User();
    user.setId("id");
    user.setSecret("secret");
    message.setBody(user);
    messageBroker.routeMessageToService(message, null);

    Hi Martin. The way that AMF serialization/deserialization works for BlazeDS is the same regardless of which service is being used, so yes that code will work for messaging as well. On the server, the serialization/deserialization of messages happens at the endpoint. For an incoming message for example, the endpoint deserializes the message and then hands it off to the MessageBroker which decides which service/destination to deliver the message to.
    That was a good question. Thanks for asking it. Lots of people are used to doing custom serialization/deserialization with the RPC services (RemoteObject/RemotingService) but I'm not sure everyone realizes they can do this for messaging as well.
    -Alex

  • [RPC Fault faultString="HTTP/1.1 415 Unsupported Media Type" faultCode="Server.Proxy.Request.Failed"

    Hi,
    Posting in the 'General' forums as well. Did not yet get any response for the topic posted in the 'Configuration and Getting Started Discussion' forum.
    I am having nightmares to call the POST method of a REST service thru Flex. Initially tried with the HTTPService without any proxy server. Wasn't able to call POST, though the GET method was successfully called. Please see the post here (http://www.flexdeveloper.eu/forums/actionscript-3-0/how-to-acces-post-method-of-rest-web -service-thru-flex/)
    b THEN I tried with BlazeDS
    , but with the same results!
    I have set up BlazeDS with the integrated Tomcat option. I have also set up the Flex project as mentioned in the instructions. It is working fine when I run the sample projects.
    But the problem is that
    i when I try to access a
    b POST for a REST service,
    i I get the "HTTP/1.1 415 Unsupported Media Type" fault.
    b The complete fault I'm getting is: [RPC Fault faultString="HTTP/1.1 415 Unsupported Media Type" faultCode="Server.Proxy.Request.Failed" faultDetail="HTTP/1.1 415 Unsupported Media Type"]
    at mx.rpc::AbstractInvoker/http://www.adobe.com/2006/flex/mx/internal::faultHandler()[E:\dev \3.1.0\frameworks\projects\rpc\src\mx\rpc\AbstractInvoker.as:218]
    at mx.rpc::Responder/fault()[E:\dev\3.1.0\frameworks\projects\rpc\src\mx\rpc\Responder.as:53 ]
    at mx.rpc::AsyncRequest/fault()[E:\dev\3.1.0\frameworks\projects\rpc\src\mx\rpc\AsyncRequest .as:103]
    at HTTPMessageResponder/resultHandler()[E:\dev\3.1.0\frameworks\projects\rpc\src\mx\messagin g\channels\HTTPChannel.as:871]
    at HTTPMessageResponder/completeHandler()[E:\dev\3.1.0\frameworks\projects\rpc\src\mx\messag ing\channels\HTTPChannel.as:940]
    at ChannelRequestLoader/callEventCallback()[E:\dev\3.1.0\frameworks\projects\rpc\src\mx\mess aging\channels\HTTPChannel.as:1155]
    at ChannelRequestLoader/completeHandler()[E:\dev\3.1.0\frameworks\projects\rpc\src\mx\messag ing\channels\HTTPChannel.as:1191]
    at flash.events::EventDispatcher/dispatchEventFunction()
    at flash.events::EventDispatcher/dispatchEvent()
    at flash.net::URLLoader/onComplete()
    I have added correct entry to the policy-config.xml (I know this because the GET for the same REST service is working).
    b Only the POST thing is giving me the fault!
    Appreciate any inputs. (am in need of 'em badly)
    thanks
    BJG

    My guess is that the Server/Rest service doesn't like the content type of the request. HTTPService uses a content type of application/x-www-form-urlencoded by default. Maybe the Rest service is expecting the request to be XML? If that's the case, you need to set the contentType property of the HTTPService to application/xml.
    Sometimes an HTTP sniffer/proxy such as Charles can be useful for debugging these kinds of issues. If my suggestion doesn't help, capture the HTTP request and response using a HTTP sniffer like Charles and post back to this thread with it and someone will take a look at it for you. Thanks.
    -Alex

Maybe you are looking for