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/[email protected]/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 [EMAIL PROTECTED]
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
[EMAIL PROTECTED] http://www.mobilebox.pl
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]