Hi,

We've recently upgraded from Castor 0.9.4 to 0.9.5.3 and hit a problem regarding
namespaces. Our output documents need a namespace and to keep things tidy, this
was being set as the default namespace so the output documents looked like
this:

<foo xmlns="http://foo.bar.com/ns/something"; 
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"; 
     xsi:schemaLocation="http://foo.bar.com/ns/something something.xsd">

   <myThing att="whatever">
      <and>so on</and>
   </myThing>
</foo>

We achieved this by setting the namespaceMapping for the default namespace as
follows:

marshaller.setNamespaceMapping("", "http://foo.bar.com/ns/something";);
marshaller.setSchemaLocation("http://foo.bar.com/ns/something something.xsd");

This used to work fine but the new version resets the default namespace to "" so
the resulting document looks like this:

<foo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"; 
     xsi:schemaLocation="http://foo.bar.com/ns/something something.xsd"
     xmlns="">

   <myThing att="whatever">
      <and>so on</and>
   </myThing>
</foo>

i.e. the namespace URI is an empty string.

An earlier post from Keith implied this was by design (and I see there was a bit
of code added to Marshaller.java to handle this specific case). The solution it
seems is to add the namespace to the mapping file, so that the elements
generated have the correct namespace and hence would map to the prefix
specified in the setNamespaceMapping() calls.

So, I tried to do this using the ns-uri attribute of the <map-to> element:

<mapping>
    <description>myThing mapping</description>
    <class name="com.bar.myThing">
        <map-to xml="myThing" ns-uri="http://foo.bar.com/ns/something"; />
        ...
    </class>
</mapping>

However, this has hit a problem pretty quickly. The mapping.dtd file specifies
that the attribute ns-uri must be an NMTOKEN. The "http://"; style URI doesn't
conform to the grammar for NMTOKEN (those slashes). So the mapping file doesn't
parse:

SAXException: Parsing Error: Attribute value "http://foo.bar.com/ns/something";
of type NMTOKEN must be a name token.

That makes sense given the DTD. So, how *should* I be using this attribute? The
examples I've seen that specify this attribute also use http:// style URIs so
how do they parse?

I've had a dig around in the mail archives and documentation, but to no avail.
I'm sure I must be missing something obvious, so any help would be most
appreciated.

  James



----------------------------------------------------------- 
If you wish to unsubscribe from this mailing, send mail to
[EMAIL PROTECTED] with a subject of:
        unsubscribe castor-user

Reply via email to