Hello group !
I would like to create my own custom assembler to retrieve some data
from database in xml format. I don't know if it's the better way to do
that, but I have some hibernate assemblers called in my application,
and don't want to complexify with other http or rpc services... Tell
me if I'm on the wrong way :)p
So I create an assembler like this, just for tests :
/**
*
*/
package com.neolinkup.app.vo;
import flex.data.assemblers.AbstractAssembler;
import flex.messaging.io.ArrayCollection;
import java.io.ByteArrayInputStream;
import java.io.IOException;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.ParserConfigurationException;
import org.xml.sax.InputSource;
import org.xml.sax.SAXException;
/**
* @author titouille
*
*/
public class RoomAssembler extends AbstractAssembler
{
public ArrayCollection fill()
{
String s = "<rooms>" +
"<cinema id='1' label='cinema
1'>" +
"<room roomid='1'
label='room 1' />" +
"<room roomid='2'
label='room 2' />" +
"</cinema>" +
"</rooms>";
try
{
DocumentBuilderFactory docBuilderFactory =
DocumentBuilderFactory.newInstance();
DocumentBuilder docBuilder =
docBuilderFactory.newDocumentBuilder();
ArrayCollection a = new ArrayCollection();
a.add( docBuilder.parse( new InputSource( new
ByteArrayInputStream(
s.getBytes() ) ) ) );
return a;
}
catch( ParserConfigurationException pce )
{
System.out.println( "ERROR -
ParserConfigurationException:
getXmlDocument - " + pce.getMessage() );
return null;
}
catch( SAXException saxe )
{
System.out.println( "ERROR - SAXException:
getXmlDocument - " +
saxe.getMessage() );
return null;
}
catch( IOException ioe )
{
System.out.println( "ERROR - IOException:
getXmlDocument - " +
ioe.getMessage() );
return null;
}
}
}
and my destination :
<destination id="roomvo.hibernate">
<adapter ref="java-dao" />
<properties>
<source>com.neolinkup.app.vo.RoomAssembler</source>
<scope>application</scope>
<metadata>
<identity property="roomid"/>
</metadata>
<network>
<session-timeout>20</session-timeout>
<paging enabled="false" pageSize="10" />
<throttle-inbound policy="ERROR"
max-frequency="500"/>
<throttle-outbound policy="REPLACE"
max-frequency="500"/>
</network>
<server>
<fill-method>
<name>fill</name>
</fill-method>
</server>
</properties>
</destination>
And I try with a simple mxml application with :
ds = new DataService( "roomvo.hibernate" );
list = new ArrayCollection();
s.addEventListener( DataServiceFaultEvent.FAULT, this._handleFault );
s.addEventListener( DataConflictEvent.CONFLICT, this._handleConflict );
s.addEventListener(ResultEvent.RESULT, this._handleResult );
s.fill( list );
But Flex return to me an error like this :
ArgumentError: Items must support IManaged. See [Managed] for more
information: object: <rooms>
<cinema id="1" label="cinema 1">
<room roomid="1" label="room 1"/>
<room roomid="2" label="room 2"/>
</cinema>
</rooms> with referencedIds []
at
mx.data::ConcreteDataService/http://www.adobe.com/2006/flex/mx/internal::normalize()[C:\depot\flex\branches\enterprise_bridgeman\frameworks\mx\data\ConcreteDataService.as:2595]
at
mx.data::DataList/http://www.adobe.com/2006/flex/mx/internal::processSequence()[C:\depot\flex\branches\enterprise_bridgeman\frameworks\mx\data\DataList.as:1597]
at
mx.data::DataList/http://www.adobe.com/2006/flex/mx/internal::processSequenceResult()[C:\depot\flex\branches\enterprise_bridgeman\frameworks\mx\data\DataList.as:1788]
at
DataListRequestResponder/result()[C:\depot\flex\branches\enterprise_bridgeman\frameworks\mx\data\ConcreteDataService.as:5857]
at
mx.rpc::AsyncRequest/acknowledge()[E:\dev\3.0.x\frameworks\projects\rpc\src\mx\rpc\AsyncRequest.as:74]
at
NetConnectionMessageResponder/resultHandler()[E:\dev\3.0.x\frameworks\projects\rpc\src\mx\messaging\channels\NetConnectionChannel.as:469]
at
mx.messaging::MessageResponder/result()[E:\dev\3.0.x\frameworks\projects\rpc\src\mx\messaging\MessageResponder.as:199]
If I try to return a dom document instead of an arrayCollection, lcds
return to me a casting error...
Any suggestion about how to get some "read-only" XML data to fill a
tree with complex hierarchical data... I need java to get data from DB
and format it as XML, but don't know the better way to do it... If
anyone has a way or some informations, tutorials, etc... I'm very
interested.
Thanks in advance.
Thierry aka titouille