Subjects
Home
VOTE Move XML Commons to Xerces
Commented: (XERCESJ 589) Bug with pattern restriction on long strings
: Xerces J 2 8 1 Release on Wednesday, September 13th
: Xerces J 2 9 0 Release on Wednesday, November 22nd
Commented: (XERCESJ 1066) Restriction+choice+substitutionGroup error
Commented: (XERCESJ 1178) Error getting prefix for an attribute with no n
Updated: (XERCESJ 1244) XMLSchemaValidator does not contribute element 's
Some consideration about the xerces DOM implementation
Updated: (XERCESJ 1066) Restriction+choice+substitutionGroup error
Commented: (XERCESJ 1227) Poor performance / OutOfMemoryError for sequenc
retain exception stack traces
Updated: (XERCESJ 1193) NPE or hang when parsing using the "continue afte
Future of NekoHTML
Commented: (XERCESJ 1203) NPE in XMLDTDProcessor
DOM Level 3 APIs for Xalan J and a new Xalan release (2 7 1)
: xml commons external 1 3 04 Release on Wednesday, November 22nd
Commented: (XERCESJ 1247) Incorrect location information on SAX when usin
XInclude exceptions how to mirror Xerces J functionality into Xerces C++?
First proposal on SoC project "Add support for the StAX (JSR 173) cursor API
: xml commons resolver 1 2 Release on Wednesday, November 22nd
Typo in RangeToken java Please check
Validator features
java lang ClassCastException when adopting Node
using the org apache xerces impl xs identity package
Updated: (XERCESJ 1257) buffer overflow in UTF8Reader for characters out
Problem with ref attributes and schema validation
Updated: (XERCESJ 122) XMLSchemaValidator does not contribute element 's d
Performance problem under load Xerces with Weblogic 9 x
remove ignored memory allocation
Commented: (XERCESJ 1177) SAXXMLStreamReader doesn 't always report namesp
Commented: (XERCESJ 977) Null pointer exception during DOM parsing
Commented: (XERCESJ 1197) Code cleanup for org apache xml serialize
Commented: (XERCESJ 1201) Initial contribution for StAX Event API
Updated: (XERCESJ 1061) Regex "$ " and "^ " characters treated as special c
Commented: (XERCESJ 1199) SAXXMLStreamReader should attempt to register a
Commented: (XERCESJ 1061) Regex "$ " and "^ " characters treated as special
Updated: (XERCESJ 589) Bug with pattern restriction on long strings
StackOverflow
xerces Range unnecessarily not garbage collectable if not detached
Updated: (XERCESJ 1178) Error getting prefix for an attribute with no nam
Bug in xs:redefine
Commented: (XERCESJ 1204) Can not set XMLEntityResolver for LSParser
Updated: (XERCESJ 1253) Prototype for SoC2007 project "Add support for th
Updated: (XERCESJ 1259) Add SteamFilter Function to SoC2007 project "Add
Assigned: (XERCESJ 444) SAXException thrown by EntityResolver is reported
Google Summer of Code 2007
Xerces J and XInclude relative path issue
Assigned: (XERCESJ 206) Stack overflow when using a schema validation
Commented: (XERCESJ 1215) Restrictions involving two levels of substituti
Closed: (XERCESJ 1203) NPE in XMLDTDProcessor
non overriding equals methoda
Resolved: (XERCESJ 1079) invalid value returned for TOTALDIGITS facet in
Xerces AS3 port
Updated: (XERCESJ 325) Regular Expression; Pattern "| " clause order de
Updated: (XERCESJ 1196) Javadoc generation fails on Java SE 5 0
Closed: (XERCESJ 1202) DTD validation on XIncluded documents when the sch
Created: (XERCESJ 1124) Nonspecific schema error message
a bug in xerces
Updated: (XERCESJ 1201) Initial contribution for StAX Event API
Closed: (XERCESJ 1254) Empty uris in targetNamespace attribute not report
Links
Home
Oracle database error code
 
Search:  
Power your search with and, or, +, -, or "some phrase" operators.
Validating with an XML Schema in a JSP

Validating with an XML Schema in a JSP

2003-10-11       - By Babos Andras

Hi Everyone!

I really hope someone on this list has some answers for me, because this JSP
issue is driving me mad...

Environment: Tomcat 4.0.4 - fixed, cannot upgrade it.
      JDK 1.3.1_02 - fixed, cannot upgrade it.
            Xerces 2.5.0 - the latest official release.

I'm trying to develop a JSP to upload an XML file, validate it against a given
XML Schema and create a DOM from it. The upload is started from a simple HTML
form, which calls my JSP. The uploaded XML file is the simplest possible - XML
1.0, no namespaces, no DTD or Schema included. I have 'xercesImpl.jar' and
'xml-apis.jar' in my WEB-INF/lib directory, and any other classes I need in my
WEB-INF/classes directory. I also put the XSD file into the WEB-INF/classes
directory and use my own EntityResolver class to load it as a resource.

The JSP source code is the following:

-----------------------------------JSP source --------------------------------
<%@ page language="java"
   import="com.jspsmart.upload.*,
           org.w3c.dom.Document,
           org.apache.xerces.parsers.DOMParser,
           dca.store.BranchDetailsErrorHandler,
           dca.store.XSDResolver,
           java.io.StringReader,
           org.xml.sax.InputSource,
           org.xml.sax.SAXNotRecognizedException,
           org.xml.sax.SAXNotSupportedException,
           org.xml.sax.SAXException,
           java.io.IOException,
           java.io.InputStream"
%><jsp:useBean id="smartUploader" scope="page" class="com.jspsmart.upload
.SmartUpload"
/><html>
 <head>
   <title>Uploading branch details XML</title>
 </head>
 <body onload="parent.steps.highlight (2)">
<%
final String EXTERNAL_NONAMESPACE_SCHEMA_LOCATION =
            "http://apache.org/xml/properties/schema/external
-noNamespaceSchemaLocation";
final String BRANCH_SCHEMA =
            "branch.xsd";
final String XML_NAMESPACES =
      "http://xml.org/sax/features/namespaces";
final String XML_VALIDATION =
            "http://xml.org/sax/features/validation";
final String XML_SCHEMA_VALIDATION =
            "http://apache.org/xml/features/validation/schema";

String        xmlContent = "";
Document      xmlDocument;
String        error = null;


try {
 smartUploader.initialize (pageContext);
 smartUploader.setTotalMaxFileSize (102400);
 smartUploader.upload ();

 // Printing the uploaded XML file into an HTML comment for debugging purposes
 out.println ("<!--");
 xmlContent = smartUploader.getFiles ().getFile (0).getContentString ();
 out.println (xmlContent);
 out.println ("-->");

} catch (IllegalArgumentException iax) {
 error = "No file was uploaded.";
}

if (error == null) {
 try {
   DOMParser parser = new DOMParser ();
   BranchDetailsErrorHandler errorHandler = new BranchDetailsErrorHandler ();
   XSDResolver xsdResolver = new XSDResolver ();

   // Printing the contents of branch.xsd into an HTML comment for debugging
purposes
   InputStream is = xsdResolver.resolveEntity ("", "branch.xsd").getByteStream
();
   StringBuffer str = new StringBuffer ();
   byte b[] = new byte[1];
   while (is.read (b) != -1) {
     str.append (new String (b));
   }
   is.close ();
   out.println ("<!--");
   out.println (str);
   out.println ("-->");

   parser.setProperty (EXTERNAL_NONAMESPACE_SCHEMA_LOCATION, BRANCH_SCHEMA);
   parser.setFeature (XML_NAMESPACES, false);
   parser.setFeature (XML_VALIDATION, true);
   parser.setFeature (XML_SCHEMA_VALIDATION, true);
   parser.setErrorHandler (errorHandler);
   parser.setEntityResolver (xsdResolver);

   InputSource xmlSource = new InputSource (new StringReader (xmlContent));
   parser.parse (xmlSource);
   out.println (xsdResolver.getSystemIds () + "<br/>");
   if (errorHandler.isValidDocument ()) {
     xmlDocument = parser.getDocument ();
     out.println ("Document root element: " + xmlDocument.getDocumentElement (
).getTagName ());
   }
   else {
     error = "Invalid XML document: " + errorHandler.getMessage ();
   }
 } catch (SAXNotRecognizedException nre) {
   error = "Cannot parse document.";
 } catch (SAXNotSupportedException nse) {
   error = "Cannot parse document.";
 } catch (SAXException se) {
   error = "Invalid XML document: " + se.getMessage ();
 } catch (IOException ioe) {
   error = "Cannot parse document.";
 }
}

if (error != null) {
 out.println (error);
}
else {
 out.println ("No errors.");
}
%>
 </body>
</html>
----------------------------------------- End JSP source ---------------------

Details:
- The jspsmart.upload classes are free classes from www.jspsmart.com, which
simplify the process of extracting the uploaded files from the HTTP header.
- BranchDetailsErrorHandler is my own parser error handling class. It ignores
warnings, stores the information from errors and fatal errors, and on error or
fatal error flips a boolean 'valid' value to false. The isValidDocument ()
method returns this value, and the getMessage () method returns the saved error
details.
- XSDResolver is my own EntityResolver class. On each resolveEntity call it
stores the parameters, and if the systemId parameter is 'branch.xsd' then loads
the 'branch.xsd' file as a resource and returns it. The getSystemIds () method
returns all the call parameters as a String.
- As you can see I print the contents of both the uploaded XML file and the
resource XSD file into the page in HTML comments - both work fine.

The problem:
- If I use the same code in a simple Java application then everything works
flawlessly. The files are loaded, the XML is validated against the XSD and the
Document object is created without any problems. (The validation works as it
should - I've checked.)
- The same code in JSP however insists that the XML is not valid. The
errorHandler object is called with an error, and what's even more strange, the
error comes from the same place in the XML file. For example if I add one more
empty line to the XML file, the error message changes accordingly. (And yes,
I've checked, the XML is valid...)
- The JSP code doesn't even call the EntityResolver - something breaks at the
basic validation. Also if I comment out the SCHEMA_VALIDATION feature, the
setEntityResolver call and the EXTERNAL_NONAMESPACE_SCHEMA_LOCATION property
nothing changes. As far as I can tell, the code doesn't even get as far as
schema validation.

If you've read this far, I thank you, but if you also have any idea what might
be causing this behaviour in this JSP page, I'd be really grateful if you could
share it with me...

Thanks in advance:

  Andras Babos.

---------------------------------------------------------------------
To unsubscribe, e-mail: xerces-j-user-unsubscribe@(protected)
For additional commands, e-mail: xerces-j-user-help@(protected)