Hi, Here is all in nutshell: SCHEMA: <?xml version="1.0"
encoding="UTF-8"?> <schema xmlns="http://www.w3.org/2001/XMLSchema"
targetNamespace="http://example.com/foo"
xmlns:tns="http://example.com/foo" elementFormDefault="qualified">
<complexType name="fooType"> <sequence> <element name="children"
minOccurs="0"> <complexType> <sequence> <element name="child"
type="tns:fooType" maxOccurs="unbounded"> </element> </sequence>
</complexType> </element> </sequence> <attribute
name="name"></attribute> </complexType> <element name="foo"
type="tns:fooType"></element> </schema>
CASTOR <?xml version="1.0"?> <!DOCTYPE mapping PUBLIC
"-//EXOLAB/Castor Mapping DTD Version 1.0//EN"
"http://castor.org/mapping.dtd"> <mapping> <class
name="com.example.Foo" auto-complete="false"> <map-to xml="foo"
ns-uri="http://example.com/foo" ns-prefix="foo" /> <field
name="name" type="java.lang.String"> <bind-xml name="name"
node="attribute" /> </field> <field name="children"
collection="collection" type="com.example.Foo" container="false">
</field> </class> </mapping>
BEAN package com.example; import java.util.Collection;
public class Foo { private String name; private Collection<Foo>
children;
public Foo(){} public Foo(String name){ setName(name); } public
Collection<Foo> getChildren() { return children; } public void
setChildren(Collection<Foo> children) { this.children = children; }
public String getName() { return name; } public void
setName(String name) { this.name = name; } }
TESTCASE: package com.example;
import java.io.IOException; import java.io.StringReader; import
java.io.StringWriter; import java.util.Collection; import
java.util.HashSet;
import junit.framework.TestCase; import
org.exolab.castor.xml.XMLContext; import
org.exolab.castor.mapping.Mapping; import
org.exolab.castor.mapping.MappingException; import
org.exolab.castor.xml.MarshalException; import
org.exolab.castor.xml.Unmarshaller; import
org.exolab.castor.xml.Marshaller; import
org.exolab.castor.xml.ValidationException;
import com.example.Foo;
public class CastorFooTest extends TestCase { Mapping mapping =
null; XMLContext context = null; public void setUp() throws
IOException, MappingException{ mapping = new Mapping();
mapping.loadMapping("src/META-INF/castor/foo-castor.xml"); context
= new XMLContext(); context.addMapping(mapping); } public void
testMarhallFoo() throws IOException, MappingException,
MarshalException, ValidationException{ Marshaller marshaller =
context.createMarshaller(); StringWriter writer = new
StringWriter(); marshaller.setWriter(writer);
marshaller.setMarshalAsDocument(false);
marshaller.setMapping(mapping);
marshaller.setSuppressNamespaces(false);
marshaller.marshal(getFoo()); assertEquals(expected,
writer.getBuffer().toString()); } public void testUnMarhallFoo()
throws IOException, MappingException, MarshalException,
ValidationException{ Unmarshaller unmarshaller =
context.createUnmarshaller(); StringReader reader = new
StringReader(expected); Foo result =
(Foo)unmarshaller.unmarshal(reader); Foo exp = getFoo();
assertEquals(exp.getName(), result.getName()); } private Foo
getFoo(){ Foo foo = getFoo(""); Collection<Foo> children = new
HashSet<Foo>(); children.add(getFoo("2"));
children.add(getFoo("1")); foo.setChildren(children); return foo; }
private Foo getFoo(String s){ Foo foo = new Foo("foo".concat(s));
return foo; } private String expected = "<foo:foo
xmlns:foo=\"http://example.com/foo\"
name=\"foo\"><foo:children><foo:foo
name=\"foo1\"></foo:foo><foo:foo
name=\"foo2\"></foo:foo></foo:children></foo:foo>"; }
Expected output <?xml version="1.0" encoding="UTF-8"?> <foo:foo
name="foo" xmlns:foo="http://example.com/foo"> <foo:children>
<foo:foo name="foo1"/> <foo:foo name="foo2"/> </foo:children>
</foo:foo>
OUTPUT I GET: <?xml version="1.0" encoding="UTF-8"?> <foo:foo
name="foo" xmlns:foo="http://example.com/foo"> <children> - ERROR
NUMBER 1 <foo:foo name="foo1"> <children /> - ERROR NUMBER 2
</foo:foo> <foo:foo name="foo2"> <children /> - ERROR NUMBER 2
</foo:foo> </children> - ERROR NUMBER 1 </foo:foo>
Output I get isn't valid: 1. <children> element must have foo
prefix as all others: <foo:children> 2. there must not be empty
<children/> element at all
Regards. Antoni
-----Original Message----- From: Werner Guttmann
[mailto:[EMAIL PROTECTED] Sent: 9. huhtikuuta 2008 15:13 To:
[email protected] Subject: Re: [castor-user] How to use
hierarchical objects with wrapper
Alatalo, Antoni wrote:
Hi, I have Object A that has Collection of Objects A. Normal
hierarchy structure. I got to work it almost well except two
details. The collection is wrapped. It should look like this Lets
name namespace like bar <bar:foo name="1"> <bar:children>
<bar:foo name="2*"*/> <bar:foo name="3"/> </bar:children>
</bar:foo>
The problem is that chioldren while marhalling doen't get bar
prefix. This is output after marshalling <bar:foo name="1">
<children> <bar:foo name="2*"*> <children/> </bar:foo> <bar:foo
name="3"> <children/> </bar:foo> </children> </bar:foo>
How can i configure mapper to use prefix with "children" wrapper?
Without this xml is not valid!
What version of Castor are you using ? And what does your mapping
for the relevant classes look like ? It looks like you are using
the locations attribute on the field mapping for the 'bar' children
?
Teh next thing is empty collection. How can i configure mapper to
exclude empty or null not required values?
Can you show us some sample XML that highlights your problem ? It
just isn't fully clear to me what the problem is.
Thank you *Antoni Alatalo *Ohjelmistoasiantuntija Kuntatoimiala,
sosiaalitoimi _________________________________________
*Logica **- Releasing your potential
*Karvaamokuja 2 PL 38 00381 Helsinki Vaihde: 010 302 010 Suora:
040 583 1097 [EMAIL PROTECTED] _www.logica.fi_
<http://www.logicacmg.fi> WM-datan nimi on nyt *Logica.*
---------------------------------------------------------------------
To unsubscribe from this list, please visit:
http://xircles.codehaus.org/manage_email
---------------------------------------------------------------------
To unsubscribe from this list, please visit:
http://xircles.codehaus.org/manage_email