To continue this conversation question once again:
Is there a way to have xsd and POJO like I have (or yours modified xsd) and get 
the ouput I expect by using castors mapping file?
1. children with namespace prefix
2. empty children are not marhaled?

Thank you a lot for your requests
Antoni

-----Original Message-----
From: Alatalo, Antoni [mailto:[EMAIL PROTECTED]
Sent: 10. huhtikuuta 2008 13:49
To: [email protected]
Subject: RE: [castor-user] How to use hierarchical objects with wrapper

Hi,
I've did generate code and it's not right way for me.
Enstead of one domain class I get six classes. From simple 20 line class I get 
something too complex.

As I mentioned before I want to use same domain structure independent from the 
technologies. In the other words no hibernate, castor or axis should be present 
in the model.

Of course here can be three different domain models, one is my own, second 
generated by castor, third database layer model. But it requers mappings 
between models and is not what we are looking.

The ideal is something like castors mapping file. It's a glue between java 
class and xsd schema. Only thing is to get it work in every situation.


Regards.
Antoni

-----Original Message-----
From: Werner Guttmann [mailto:[EMAIL PROTECTED]
Sent: 10. huhtikuuta 2008 13:23
To: [email protected]
Subject: Re: [castor-user] How to use hierarchical objects with wrapper

Hi,

there you are:

**** XML 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="foo">
                 <sequence>
                         <element name="children" minOccurs="0">
                                 <complexType>
                                         <sequence>
                                                 <element name="foo"
type="tns:foo"

maxOccurs="unbounded">
                                                 </element>
                                         </sequence>
                                 </complexType>
                         </element>
                 </sequence>
                 <attribute name="name"></attribute>
         </complexType>
         <!--
         <element name="foo" type="tns:fooType"></element>
          -->
</schema>

*** builder properties:

# Selects the Java class mapping for <xsd:element>'s and <xsd:complexType>'s.
# Legal values are 'element' and 'type'.  For 'element' mapping, the source # 
generator creates a Java class hierarchy based on elements in the XML Schema.
# For 'type' mapping, the class hierarchy is based on types in the XML Schema.
# Default is 'element'.
#
org.exolab.castor.builder.javaclassmapping=type

Everything else is standard, so please generate the classes yourself.
Please note that I changed the XML schema to meet the expected XML defined in 
the test case.

Regards
Werner Guttmannb



Alatalo, Antoni wrote:
> Please, send me schema you modified and class you are generated
>
> Seems that I send you wrong version of xsd. Here is what I'm using.
> Only different is ref <?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" 
> nillable="false">
>                                 <complexType>
>                                         <sequence>
>                                                 <element ref="tns:foo"
>                                                         maxOccurs="unbounded">
>                                                 </element>
>                                         </sequence>
>                                 </complexType>
>                         </element>
>                 </sequence>
>                 <attribute name="name"></attribute>
>         </complexType>
>         <element name="foo" type="tns:fooType"></element> </schema>
>
>
> Terv.
> Antoni
>
> -----Original Message-----
> From: Werner Guttmann [mailto:[EMAIL PROTECTED]
> Sent: 10. huhtikuuta 2008 12:45
> To: [email protected]
> Subject: Re: [castor-user] How to use hierarchical objects with
> wrapper
>
> Just to let you know, after modifying your XML schema slightly, I was able to 
> pruduce the desired output as follows just by generating classes from the XML 
> schema given, without having to write a mapping file.
>
> Regards
> Werner
> Committer, Castor
>
> Alatalo, Antoni wrote:
>> 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
>>
>>
>>
>
>
> ---------------------------------------------------------------------
> 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
>
>
>


---------------------------------------------------------------------
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




---------------------------------------------------------------------
To unsubscribe from this list, please visit:

    http://xircles.codehaus.org/manage_email


Reply via email to