Can I ask you one favour ? Can you please create a new issue at

http://jira.codehaus.org/browse/CASTOR

and attach all relevant files to it ? And please don't forget to include
all your comments/instructions/questions.

Thanks in advance
Werner

Josh Foure wrote:
> Thanks for looking into this Werner.  Let me give you a little more
> information on the schemas I have tried and what I have discovered. 
> Hopefully this is in an undertstandable format: 
>  
> Attempt 1:
>  
> This is how I originally wanted to have my schemas.  I have a common
> schema that defines my "name" type and my order schema uses that type
> using the "type" attribute:
>  
> The common.xsd:
>  
> <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema";
> xmlns="http://www.w3.org/2001/XMLSchema"; xmlns:common="http://common";
> targetNamespace="http://common"; elementFormDefault="qualified">
>  <xsd:complexType name="name">
>   <xsd:sequence>
>    <xsd:element name="first-name" type="string"/>
>    <xsd:element name="last-name" type="string"/>
>   </xsd:sequence>
>  </xsd:complexType>
> </xsd:schema>
>  
> The order.xsd:
>  
> <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema";
> xmlns="http://www.w3.org/2001/XMLSchema"; targetNamespace="http://order";
> xmlns:order="http://order"; xmlns:common="http://common"; 
> elementFormDefault="qualified">
>  <xsd:import namespace="http://common"; schemaLocation="common.xsd"/>
>  <xsd:element name="order">
>   <xsd:complexType>
>    <xsd:sequence>
>     <xsd:element name="order-number" type="xsd:integer"/>
>     <xsd:element name="buyer-name" type="common:name"/>
>     <xsd:element name="seller-name" type="common:name"/>
>    </xsd:sequence>
>   </xsd:complexType>
>  </xsd:element>
> </xsd:schema>
>  
> The problem with these schemas is that namespace expected for the
> "seller-name" and "buyer-name" is "order" and not "common".  So either I
> need to be able to configure Castor to return the different namespace
> (remember, Castor is returning the "common" namespace for the name
> elements) or I can't use these schemas.  Here is an XML that is
> validated by these schemas:
>  
> <?xml version="1.0" encoding="UTF-8"?>
> <order:order xmlns:order="http://order"; xmlns:common="http://common";>
>     <order:order-number>1234</order:order-number>
>     <order:seller-name>
>         <common:first-name>Bob</common:first-name>
>         <common:last-name>Smith</common:last-name>
>     </order:seller-name>
>     <order:buyer-name>
>         <common:first-name>Fred</common:first-name>
>         <common:last-name>Peterson</common:last-name>
>     </order:buyer-name>
> </order:order>
> 
> Attempt 2:
>  
> In order to get the correct namespace for the name elements in the
> schema, I could define an element in my common schema and refer to this
> element in the order schema using the "ref" attribute as follows:
>  
> The common.xsd (note: I am defining an element instead of a type now):
>  
> <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema";
> xmlns="http://www.w3.org/2001/XMLSchema"; xmlns:common="http://common";
> targetNamespace="http://common"; elementFormDefault="qualified">
>  <xsd:element name="name">
>  <xsd:complexType>
>   <xsd:sequence>
>    <xsd:element name="first-name" type="string"/>
>    <xsd:element name="last-name" type="string"/>
>   </xsd:sequence>
>  </xsd:complexType>
>  </xsd:element>
> </xsd:schema>
>  
> The order.xsd (note: I am using the "ref" attribute in the element
> instead of specifying a name):
>  
> <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema";
> xmlns="http://www.w3.org/2001/XMLSchema"; targetNamespace="http://order";
> xmlns:order="http://order"; xmlns:common="http://common"; 
> elementFormDefault="qualified">
> <xsd:import namespace="http://common"; schemaLocation="common.xsd"/>
>  <xsd:element name="order">
>   <xsd:complexType>
>    <xsd:sequence>
>     <xsd:element name="order-number" type="xsd:integer"/>
>     <xsd:element ref="common:name"/>
>     <xsd:element ref="common:name"/>
>    </xsd:sequence>
>   </xsd:complexType>
>  </xsd:element>
> </xsd:schema>
>  
> With these schemas the namespace for the "name" elements are "common"
> but now both of the "name" elements need to be called "name".  I cannot
> use the "seller-name" or "buyer-name" names.  Here is an XML that is
> validated by these schemas:
>  
> <order:order xmlns:order="http://order"; xmlns:common="http://common";>
>     <order:order-number>1234</order:order-number>
>     <common:name>
>         <common:first-name>Bob</common:first-name>
>         <common:last-name>Smith</common:last-name>
>     </common:name>
>     <common:name>
>         <common:first-name>Fred</common:first-name>
>         <common:last-name>Peterson</common:last-name>
>     </common:name>
> </order:order>
> 
> Attempt 3:
>  
> The only way I was able to create a schema that would validate the
> output generated by Castor was to nest my common elements inside a dummy
> element using the "location" attribute in the Castor mapping file as
> follows.  I replaced my "buyerName" and "sellerName" mapping as follows:
>  
>  <field name="sellerName" type="common.Name">
>   <bind-xml name="name" node="element" location="seller-name"/>
>  </field>
>  <field name="buyerName" type="common.Name">
>   <bind-xml name="name" node="element" location="buyer-name"/>
>  </field>
>  
> This generates the following XML where I have the "seller-name" and
> "buyer-name" in the "order" schema that has a nested "name" element in
> the "common" schema:
>  
> <?xml version="1.0" encoding="UTF-8"?>
> <order:order xmlns:order="http://order";>
>     <order:order-number>1234</order:order-number>
>     <order:seller-name>
>         <common:name xmlns:common="http://common";>
>             <common:first-name>Bob</common:first-name>
>             <common:last-name>Smith</common:last-name>
>         </common:name>
>     </order:seller-name>
>     <order:buyer-name>
>         <common:name xmlns:common="http://common";>
>             <common:first-name>Fred</common:first-name>
>             <common:last-name>Peterson</common:last-name>
>         </common:name>
>     </order:buyer-name>
> </order:order>
>  
> Here is the common.xsd:
>  
> <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema";
> xmlns="http://www.w3.org/2001/XMLSchema"; xmlns:common="http://common";
> targetNamespace="http://common"; elementFormDefault="qualified">
>  <xsd:element name="name">
>  <xsd:complexType>
>   <xsd:sequence>
>    <xsd:element name="first-name" type="string"/>
>    <xsd:element name="last-name" type="string"/>
>   </xsd:sequence>
>  </xsd:complexType>
>  </xsd:element>
> </xsd:schema>
>  
> And this is the order.xsd:
>  
> <?xml version="1.0" encoding="UTF-8"?>
> <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema";
> xmlns="http://www.w3.org/2001/XMLSchema"; targetNamespace="http://order";
> xmlns:order="http://order"; xmlns:common="http://common"; 
> elementFormDefault="qualified">
> <xsd:import namespace="http://common"; schemaLocation="common.xsd"/>
>  <xsd:element name="order">
>   <xsd:complexType>
>    <xsd:sequence>
>     <xsd:element name="order-number" type="xsd:integer"/>
>     <xsd:element name="seller-name">
>      <complexType >
>       <xsd:sequence>
>        <xsd:element ref="common:name"/>
>       </xsd:sequence>
>      </complexType>
>     </xsd:element>
>     <xsd:element name="buyer-name">
>      <complexType >
>       <xsd:sequence>
>        <xsd:element ref="common:name"/>
>       </xsd:sequence>
>      </complexType>
>     </xsd:element>
>    </xsd:sequence>
>   </xsd:complexType>
>  </xsd:element>
> </xsd:schema>
> 
> As you can see this makes the schema a lot more complicated and I don't
> like the fact that I need to have both a "seller-name" and a "name"
> element nested.  But that's the only way I found it to work.
>  
> Thanks for your help,
> Josh
> 
> 
> 
>  
> ----- Original Message ----
> From: Werner Guttmann <[EMAIL PROTECTED]>
> To: [email protected]
> Sent: Friday, June 8, 2007 6:23:54 AM
> Subject: Re: [castor-user] Castor namespace help when using multiple schemas
> 
> Thanks, Josh. And yes, it looks like you've got some 600 reasons there
> .... ;-). Let me have a look at your issue in more detail, and I'll be
> back soon.
> 
> Werner
> 
> PS Let me address your JAXB question in a separate email.
> 
> Josh Foure wrote:
>> Hi Werner,
>>  
>> We have about 600 classes that we currently expose via EJBs and we want
>> to expose some of these services to non-Java clients.  We don't want to
>> have to regenerate another 600 classes and populate these or change the
>> existing EJB clients to use the new set of classes (especially since we
>> don't control the clients).  Is that a decent reason?  As an aside, if
>> we did go with the schema first approach, do you have an FAQ or
>> something that explains why one would use Castor for this scenario
>> instead of JAXB?
>>  
>> Thanks,
>> Josh
>> ----- Original Message ----
>> From: Werner Guttmann <[EMAIL PROTECTED]>
>> To: [email protected]
>> Sent: Thursday, June 7, 2007 3:58:36 PM
>> Subject: Re: [castor-user] Castor namespace help when using multiple
> schemas
>>
>> Before I reply to this, let me just ask why you don't generate Java
>> classes from an (existing?) XML schema, and switch away from a mapping
>> file based approach ?
>>
>> Werner
>>
>> Josh Foure wrote:
>>> Hi all,
>>> I am trying to use Castor 1.0M4 as my binding framework inside of XFire
>>> 1.2.6 but I am running into a namespace problem.  I can reproduce the
>>> problem using Castor 1.1 which is what I will describe now.  I have a
>>> Castor mapping file that defines the mapping for a class "order.Order"
>>> in the "http://order <http://order/> <http://order/> <http://order/>"
> <http://order/>">;
>> <http://order/>" <http://order/>">;>; namespace.  This order has an
>>> orderNumber and 2 names.  The names are of type "common.Name" which is
>>> in the "http://common <http://common/> <http://common/>
> <http://common/>" <http://common/>">;
>> <http://common/>" <http://common/>">;>; namespace.  The mapping file
>>> looks as follows:
>>>  
>>> <?xml version="1.0" encoding="UTF-8"?>
>>> <mapping>
>>>  <class name="order.Order">
>>>   <map-to xml="order" ns-uri="http://order <http://order/>
> <http://order/>
>> <http://order/>" <http://order/>">; <http://order/>" <http://order/>">;>;
>>> ns-prefix="order"/>
>>>   <field name="orderNumber" type="integer">
>>>    <bind-xml name="order-number" node="element"/>
>>>   </field>
>>>   <field name="sellerName" type="common.Name">
>>>    <bind-xml name="seller-name" node="element"/>
>>>   </field>
>>>   <field name="buyerName" type="common.Name">
>>>    <bind-xml name="buyer-name" node="element"/>
>>>   </field>
>>>  </class>
>>>  <class name="common.Name">
>>>   <map-to xml="name" ns-uri="http://common <http://common/>
> <http://common/>
>> <http://common/>" <http://common/>">; <http://common/>"
> <http://common/>">;>;
>>> ns-prefix="common"/>
>>>   <field name="firstName" type="java.lang.String">
>>>    <bind-xml name="first-name" node="element"/>
>>>   </field>
>>>   <field name="lastName" type="java.lang.String">
>>>    <bind-xml name="last-name" node="element"/>
>>>   </field>
>>>  </class>
>>> </mapping>
>>>  
>>> When I create an instance of Order and pass in an orderNumber and 2
>>> names, Castor generates the following XML:
>>>  
>>> <?xml version="1.0" encoding="UTF-8"?>
>>> <order:order xmlns:order="http://order <http://order/> <http://order/>
>> <http://order/>" <http://order/>">; <http://order/>" <http://order/>">;>;>
>>>     <order:order-number>1234</order:order-number>
>>>     <common:seller-name xmlns:common="http://common <http://common/>
> <http://common/>
>> <http://common/>" <http://common/>">; <http://common/>"
> <http://common/>">;>;>
>>>         <common:first-name>Bob</common:first-name>
>>>         <common:last-name>Smith</common:last-name>
>>>     </common:seller-name>
>>>     <common:buyer-name xmlns:common="http://common <http://common/>
> <http://common/>
>> <http://common/>" <http://common/>">; <http://common/>"
> <http://common/>">;>;>
>>>         <common:first-name>Fred</common:first-name>
>>>         <common:last-name>Peterson</common:last-name>
>>>     </common:buyer-name>
>>> </order:order>
>>>  
>>> The problem is that I cannot generate an XML schema for this (I want a
>>> schema for my common types and another for the order).  If my
>>> seller-name and buyer-name complex types use the "type" attribute to
>>> specify my common Name type, then the namespace of seller-name and
>>> buyer-name should be "order" and not "common".  If my complex types use
>>> the "ref" attribute to point to a Name element in my common schema, then
>>> I cannot change the name of the element from "name" to "buyer-name" and
>>> "seller-name".  Please let me know if I am missing something and there
>>> is a way to have Castor generate XML in such a way that I can break out
>>> the schemas.
>>>  
>>> I am happy to reply back with the schema I would like to use but I did
>>> not want to clutter up this initial email.
>>> Thank you,
>>> Josh
>>>
>>> ------------------------------------------------------------------------
>>> Park yourself in front of a world of choices in alternative vehicles.
>>> Visit the Yahoo! Auto Green Center.
>>>
>>
> <http://us.rd.yahoo.com/evt=48246/*http://autos.yahoo.com/green_center/;_ylc=X3oDMTE5cDF2bXZzBF9TAzk3MTA3MDc2BHNlYwNtYWlsdGFncwRzbGsDZ3JlZW4tY2VudGVy>
>>
>>
>> ---------------------------------------------------------------------
>> To unsubscribe from this list please visit:
>>
>>     http://xircles.codehaus.org/manage_email
>>
>>
>> ------------------------------------------------------------------------
>> Shape Yahoo! in your own image. Join our Network Research Panel today!
>>
> <http://us.rd.yahoo.com/evt=48517/*http://surveylink.yahoo.com/gmrs/yahoo_panel_invite.asp?a=7>
>>
> 
> 
> ---------------------------------------------------------------------
> To unsubscribe from this list please visit:
> 
>     http://xircles.codehaus.org/manage_email
> 
> 
> ------------------------------------------------------------------------
> Take the Internet to Go: Yahoo!Go puts the Internet in your pocket:
> <http://us.rd.yahoo.com/evt=48253/*http://mobile.yahoo.com/go?refer=1GNXIC>
> mail, news, photos & more.


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

    http://xircles.codehaus.org/manage_email

Reply via email to