First of all, if you have a Something Awful account, you can read a more
formatted version of this here:
http://forums.somethingawful.com/showthread.php?threadid=2902508
I'll go ahead and rewrite this if you don't have an account.
I've been messing with this most of the afternoon, and I just can't figure
it out.
Basically, I've got an XML file I've got to parse. I need to put the data
into a few Java objects, and Castor is a really easy way to do it. Castor's
working, and it's putting the data in the container properly. The problem
is that I have an XSD schema file defined to validate the XML file, but I'm
having issues getting Castor to validate it. The XSD is necessary because I
can type complete garbage into the XML file, and Castor reports success even
though it's totally invalid XML. I want to prevent this from happening.
I'll get to it. Here're the pertinent lines from *castor.xml*, the file
that Castor uses to map the XML elements/attributes to the Java objects:
<?xml version="1.0"?>
<!DOCTYPE mapping PUBLIC "-//EXOLAB/Castor Mapping DTD Version 1.0//EN"
"http://castor.org/mapping.dtd">
<mapping xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://centurylogix.com/dbconfig"
xsi:schemaLocation="http://centurylogix.com/dbconfigdb-config-1.0.xsd">
<class
name="com.centurylogix.graph.hybrid.io.containers.DataSourceInfo">
<map-to xml="dataSource" ns-uri="
http://centurylogix.com/dbconfig" />
If you need more than that, I can post it, but those should be the only
relevant lines.
Here're the first few lines from *db-config-1.0.xsd* which is obviously the
schema file used to verify the XML file:
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
targetNamespace="http://centurylogix.com/dbconfig"
xmlns="http://centurylogix.com/dbconfig"
elementFormDefault="qualified">
And here're the first few lines from *db-config-sample.xml*, a sample XML
file that Castor reads in and puts into the correct Java objects:
<?xml version="1.0" encoding="UTF-8"?>
<dataSource xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://centurylogix.com/dbconfigdb-config-1.0.xsd">
I do have a *castor.properties* file defined with the following contents,
per http://www.castor.org/how-to-enable-xml-validation.html:
org.exolab.castor.indent=true
org.exolab.castor.parser.namespaces=true
org.exolab.castor.sax.features=http://xml.org/sax/features/validation,\
http://apache.org/xml/features/validation/schema,\
http://apache.org/xml/features/validation/schema-full-checking
When I try to unmarshal the data, this is the error I get:
java.lang.RuntimeException: org.exolab.castor.mapping.MappingException:
Nested error: org.exolab.castor.xml.MarshalException: Attribute "xmlns:xsi"
must be declared for element type "mapping".{File: [not available]; line: 7;
column: 74}
I don't quite understand this error. "xmlns:xsi" is clearly defined in the
mapping element in castor.xml. Do any of you know what I'm doing wrong?
Any ideas at all? I think this is one those things that's probably simple
to fix, but I've just been staring at it too long, and I'm not seeing the
solution. Thanks!