Re: Query regarding Catalog resolver 'cvc-elt.1: Cannot find the
declaration of element'
Amit Jain wrote:
I don't want to provide xsd name in java code.
/****
builder.setProperty(JAXP_SCHEMA_SOURCE, "C:/note.xsd");
****/
=>For this purpose I configured the Catalog Resolver.
******* corecatalog.xml Starts *******
<catalog
xmlns="urn:oasis:names:tc:entity:xmlns:xml:catalog">
<system systemId="http://schemas.xmlsoap.org/soap/
envelope/"
uri="note.xsd"/>
</catalog>
******* corecatalog.xml End *******
I am getting problem while using Catalog resolver. Please have a look
on below mentioned links.
-> http://xml.apache.org/commons/components/resolver/resolver-article.html
-> http://xml.apache.org/commons/components/resolver/
The code can easily be modified to do that.
mport org.jdom.input.SAXBuilder;
import org.jdom.Document;
import com.sun.org.apache.xml.internal.resolver.tools.CatalogResolver;
public class Note2 {
static final String JAXP_SCHEMA_LANGUAGE =
"http://java.sun.com/xml/jaxp/properties/schemaLanguage";
static final String W3C_XML_SCHEMA =
"http://www.w3.org/2001/XMLSchema";
static final String JAXP_SCHEMA_SOURCE =
"http://java.sun.com/xml/jaxp/properties/schemaSource";
public static void main(String[] args) throws Exception{
SAXBuilder builder = new SAXBuilder();
builder.setValidation(true);
builder.setProperty(JAXP_SCHEMA_LANGUAGE, W3C_XML_SCHEMA);
//builder.setProperty(JAXP_SCHEMA_SOURCE, "C:/note.xsd");
System.setProperty("xml.catalog.files", "C:/corecatalog.xml");
builder.setEntityResolver(new CatalogResolver());
try{
Document doc = builder.build("C:/note.xml");
}catch(Exception e){
e.printStackTrace();
}
}
}
But you need to:
1) fix the XML so it refer to the schema
<?xml version="1.0"?>
<note xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://schemas.xml.org/abc/123/"
xsi:schemaLocation="http://schemas.xml.org/abc/123/
http://schemas.xml.org/abc/123/">
<to>Amit</to>
<from>Jain</from>
<heading>Reminder</heading>
<body>Don't forget me this weekend!</body>
</note>
2) fix the catalog so it specify the correct namespace
<catalog xmlns="urn:oasis:names:tc:entity:xmlns:xml:catalog">
<system systemId="http://schemas.xml.org/abc/123/"
uri="file:///C:/note.xsd"/>
</catalog>
3) fix the schema so the XML is valid for the schema
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns="http://schemas.xml.org/abc/123/"
elementFormDefault="qualified"
targetNamespace="http://schemas.xml.org/abc/123/">
<xs:element name="note">
<xs:complexType>
<xs:sequence>
<xs:element name="to" type="xs:string"/>
<xs:element name="from" type="xs:string"/>
<xs:element name="heading" type="xs:string"/>
<xs:element name="body" type="xs:string"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
Arne