cocoon-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Leszek Gawron <lgaw...@apache.org>
Subject Re: Using business objects instead of XML
Date Sat, 02 Apr 2005 20:19:51 GMT
Andre Juffer wrote:
> Leszek, and Others,
> 
> I have tried the following as well (flow script):
> 
> function DomainObject()
> {
> }
> DomainObject.prototype.id;
> DomainObject.prototype.name;
> 
> function something()
> {
>     ....
> 
>     // Get the request parameters.
>     var domainObject = new DomainObject();
>     domainObject.name = cocoon.request.getParameter("name");
>     domainObject.id = 1000;
>     cocoon.sendPage("page", { "DomainObject" : domainObject } );
> }
> 
> The result of this is
> 
> org.apache.cocoon.ProcessingException: Exception during source 
> resolving.: org.apache.excalibur.source.SourceException: The object 
> type: class org.mozilla.javascript.NativeObject could not be serialized 
> as a InputStream [object Object]
> 
> If I use one of my own domainObjects, that is, I have now
> 
> var domainObject = com.foo.SomeClass.doSomething()
> 
> the result is very similar:
> 
> org.apache.cocoon.ProcessingException: Exception during source 
> resolving.: org.apache.excalibur.source.SourceException: The object 
> type: class com.foo.DomainObject could not be serialized as a 
> InputStream DomainObject - name: jfifiikss, id: 1000
> 
> (The last line is produced by the toString() method of the 
> com.foo.DomainObject class.)
> 
> So, the key problem is that objects cannot be serialized as an 
> InputStream for the pipeline, which occurs at
> 
> <map:generate src="module:flow-attr:DomainObject" />
> 
> in the sitemap.
> 
> Anybody any ideas about this? The basic question here is how exactly one 
> can process objects instantiated in a flowscrip by the sitemap?
> 
> (Cocoon version 2.1.7)
> 
> Thanks,
> Andre.
> 
> Leszek Gawron wrote:
> 
>> Andre Juffer wrote:
>>
>>> Dear List,
>>>
>>> I am trying to insert a domain object into the pipiline with control 
>>> flow following a suggestion given earlier on this list:
>>>
>>> http://www.mail-archive.com/users@cocoon.apache.org/msg23293.html
>>>
>>> Suppose, I return some object from a domain class instance, like
>>>
>>> var domainObject = com.foo.myClass.doSomething();
>>>
>>> The domainObject has all the getters available, e.g. getName(), etc, 
>>> so it acts like a regular bean.
>>>
>>> Now, I would like insert this object in the pipeline with
>>>
>>> cocoon.sendPage ("page", domainObject);
>>
>>
>> try:
>> cocoon.sendPage( "page", { "domainObject" : domainObject } );
>> If you pass it as you previously did your domain object is the main 
>> context. flow-attr:domainObject looks for an object "domainObject" in 
>> main context so in fact in your case it queries for 
>> /domainObject/domainObject which is incorrect
>>
>>>
>>> In the sitemap, I have
>>>
>>> <map:match pattern="page">
>>>   <map:generate src="module:flow-attr:domainObject" />
>>>   <map:serialize type="xml" />
>>> </map:match>
>>
>>
>>
>>>
>>> (This is just to see how it looks like.)
>>>
>>> The result of all this is an error of the form:
>>>
>>> org.apache.cocoon.ProcessingException: Exception during source 
>>> resolving.: org.apache.excalibur.source.SourceException: The 
>>> attribute: domainObject is empty
>>>
>>> This looks obvious to me, since it is probably not clear that the 
>>> domainObject in facts represents some class, defined in 
>>> com.foo.myClass. So, I tried to define the DomainObject class in 
>>> JavaScripy, like
>>>
>>> function DomainObject()
>>> {
>>> }
>>> DomainObject.prototype.name;
>>>
>>> and populate the object manually before calling cocoon.sendPage. The 
>>> result is however the same.
>>>
>>> I am using cocoon 2.1.7.
The easiest thing I can advice you now is to define the domain entity as 
java class and implement Xmlizable. Then you have to define your entity 
"xml behaviour" in toSax method.

then do:
<map:match pattern="page">
<!-- note the xmodule!! -->
    <map:generate src="xmodule:flow-attr:domainObject" />
    <map:serialize type="xml" />
</map:match>

-- 
Leszek Gawron                                      lgawron@mobilebox.pl
IT Manager                                         MobileBox sp. z o.o.
+48 (61) 855 06 67                              http://www.mobilebox.pl
mobile: +48 (501) 720 812                       fax: +48 (61) 853 29 65
-- 
Leszek Gawron                                                 MobileBox
lgawron@apache.org                              http://www.mobilebox.pl

---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscribe@cocoon.apache.org
For additional commands, e-mail: users-help@cocoon.apache.org


Mime
View raw message