I've also updated the CVS with the change to mapping.dtd.
I changed it from NMTOKEN to CDATA. --Keith Keith Visco wrote: > > Hi James, > > As a work-around, in the mapping file, just remove the DOCTYPE > declaration, this will prevent the XML parser from validating the > NMTOKEN. > > --Keith > > James Elson wrote: > > > > 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 > > ----------------------------------------------------------- > If you wish to unsubscribe from this mailing, send mail to > [EMAIL PROTECTED] with a subject of: > unsubscribe castor-user ----------------------------------------------------------- If you wish to unsubscribe from this mailing, send mail to [EMAIL PROTECTED] with a subject of: unsubscribe castor-user
