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/>";>; 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/>";>; 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/>";>;
>> 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/>";>;
>> 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/>";>;>
>>     <order:order-number>1234</order:order-number>
>>     <common:seller-name xmlns: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/>";>;>
>>         <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


      
____________________________________________________________________________________
Luggage? GPS? Comic books? 
Check out fitting gifts for grads at Yahoo! Search
http://search.yahoo.com/search?fr=oni_on_mail&p=graduation+gifts&cs=bz

Reply via email to