[jboss-svn-commits] JBoss Common SVN: r2364 - in jbossxb/trunk/src: main/java/org/jboss/xb/binding/parser/sax and 2 other directories.
jboss-svn-commits at lists.jboss.org
jboss-svn-commits at lists.jboss.org
Wed Apr 4 19:49:17 EDT 2007
Author: scott.stark at jboss.org
Date: 2007-04-04 19:49:16 -0400 (Wed, 04 Apr 2007)
New Revision: 2364
Modified:
jbossxb/trunk/src/main/java/org/jboss/xb/binding/UnmarshallerImpl.java
jbossxb/trunk/src/main/java/org/jboss/xb/binding/parser/sax/SaxJBossXBParser.java
jbossxb/trunk/src/test/java/org/jboss/test/xml/SimpleTestCase.java
jbossxb/trunk/src/test/resources/xml/book/book-dtd.xml
jbossxb/trunk/src/test/resources/xml/book/book-xs.xml
jbossxb/trunk/src/test/resources/xml/book/books2-dtd.xml
Log:
JBXB-101, need to disable both VALIDATION and DYNAMIC_VALIDATION features to ignore invalid docs with a DOCTYPE
Modified: jbossxb/trunk/src/main/java/org/jboss/xb/binding/UnmarshallerImpl.java
===================================================================
--- jbossxb/trunk/src/main/java/org/jboss/xb/binding/UnmarshallerImpl.java 2007-04-04 20:01:57 UTC (rev 2363)
+++ jbossxb/trunk/src/main/java/org/jboss/xb/binding/UnmarshallerImpl.java 2007-04-04 23:49:16 UTC (rev 2364)
@@ -24,6 +24,7 @@
import java.io.InputStream;
import java.io.Reader;
+import org.jboss.logging.Logger;
import org.jboss.xb.binding.parser.JBossXBParser;
import org.jboss.xb.binding.parser.sax.SaxJBossXBParser;
import org.jboss.xb.binding.sunday.unmarshalling.SchemaBinding;
@@ -58,6 +59,7 @@
public void setValidation(boolean validation) throws JBossXBException
{
parser.setFeature(VALIDATION, validation);
+ parser.setFeature(DYNAMIC_VALIDATION, false);
}
public void setSchemaValidation(boolean validation) throws JBossXBException
Modified: jbossxb/trunk/src/main/java/org/jboss/xb/binding/parser/sax/SaxJBossXBParser.java
===================================================================
--- jbossxb/trunk/src/main/java/org/jboss/xb/binding/parser/sax/SaxJBossXBParser.java 2007-04-04 20:01:57 UTC (rev 2363)
+++ jbossxb/trunk/src/main/java/org/jboss/xb/binding/parser/sax/SaxJBossXBParser.java 2007-04-04 23:49:16 UTC (rev 2364)
@@ -59,6 +59,7 @@
enableXInclude();
}
+ private final SAXParser parser;
private final XMLReader reader;
private JBossXBParser.ContentHandler contentHandler;
private DelegatingContentHandler delegateHandler;
@@ -86,10 +87,14 @@
public SaxJBossXBParser()
throws JBossXBException
{
- SAXParser parser;
try
{
parser = saxFactory.newSAXParser();
+ log.debug("Created parser: "+parser
+ + ", isNamespaceAware: "+parser.isNamespaceAware()
+ + ", isValidating: "+parser.isValidating()
+ + ", isXIncludeAware: "+parser.isXIncludeAware()
+ );
}
catch(Exception e)
{
@@ -153,6 +158,7 @@
try
{
reader.setFeature(name, value);
+ log.debug(name+" set to: "+reader.getFeature(name));
}
catch(SAXException e)
{
@@ -166,6 +172,11 @@
trace = log.isTraceEnabled();
try
{
+ log.debug("Using parser: "+parser
+ + ", isNamespaceAware: "+parser.isValidating()
+ + ", isValidating: "+parser.isValidating()
+ + ", isXIncludeAware: "+parser.isXIncludeAware()
+ );
reader.parse(systemId);
}
catch(Exception e)
@@ -180,6 +191,11 @@
trace = log.isTraceEnabled();
try
{
+ log.debug("Using parser: "+parser
+ + ", isNamespaceAware: "+parser.isValidating()
+ + ", isValidating: "+parser.isValidating()
+ + ", isXIncludeAware: "+parser.isXIncludeAware()
+ );
reader.parse(new InputSource(is));
}
catch(Exception e)
@@ -194,6 +210,11 @@
trace = log.isTraceEnabled();
try
{
+ log.debug("Using parser: "+parser
+ + ", isNamespaceAware: "+parser.isValidating()
+ + ", isValidating: "+parser.isValidating()
+ + ", isXIncludeAware: "+parser.isXIncludeAware()
+ );
this.reader.parse(new InputSource(reader));
}
catch(Exception e)
Modified: jbossxb/trunk/src/test/java/org/jboss/test/xml/SimpleTestCase.java
===================================================================
--- jbossxb/trunk/src/test/java/org/jboss/test/xml/SimpleTestCase.java 2007-04-04 20:01:57 UTC (rev 2363)
+++ jbossxb/trunk/src/test/java/org/jboss/test/xml/SimpleTestCase.java 2007-04-04 23:49:16 UTC (rev 2364)
@@ -30,6 +30,10 @@
import java.net.URL;
import java.util.Calendar;
import java.util.Iterator;
+
+import javax.xml.parsers.SAXParser;
+import javax.xml.parsers.SAXParserFactory;
+
import org.jboss.logging.Logger;
import org.jboss.test.xml.book.Book;
import org.jboss.test.xml.book.BookCharacter;
@@ -52,15 +56,17 @@
import org.xml.sax.EntityResolver;
import org.xml.sax.InputSource;
import org.xml.sax.SAXException;
+import org.xml.sax.SAXParseException;
+import org.xml.sax.XMLReader;
+import org.xml.sax.helpers.DefaultHandler;
-import junit.framework.TestCase;
-
/**
* @author <a href="mailto:alex at jboss.org">Alexey Loubyansky</a>
+ * @author Scott.Stark at jboss.org
* @version <tt>$Revision: 43309 $</tt>
*/
public class SimpleTestCase
- extends TestCase
+ extends AbstractJBossXBTest
{
private static final Logger log = Logger.getLogger(SimpleTestCase.class);
@@ -76,6 +82,54 @@
unmarshalBook("book-dtd.xml", factory);
}
+ /**
+ * Test that parser validation can be disabled to parse a non-conforming doc
+ * @throws Exception
+ */
+ public void testParserValidationFeature()
+ throws Exception
+ {
+ SAXParserFactory saxFactory = SAXParserFactory.newInstance();
+ saxFactory.setValidating(true);
+ saxFactory.setNamespaceAware(true);
+ saxFactory.setXIncludeAware(true);
+ //
+ SAXParser parser = saxFactory.newSAXParser();
+ log.debug("Created parser: "+parser
+ + ", isNamespaceAware: "+parser.isNamespaceAware()
+ + ", isValidating: "+parser.isValidating()
+ + ", isXIncludeAware: "+parser.isXIncludeAware()
+ );
+ XMLReader reader = parser.getXMLReader();
+ // Both these features need to be false
+ reader.setFeature(Unmarshaller.VALIDATION, false);
+ reader.setFeature(Unmarshaller.DYNAMIC_VALIDATION, false);
+ reader.setEntityResolver(new BooksEntityResolver());
+ assertFalse(parser.isValidating());
+ URL xmlUrl = getResource("/xml/book/books2-dtd.xml");
+ log.debug("parsing: "+xmlUrl);
+ parser.parse(xmlUrl.openStream(), new DefaultHandler()
+ {
+ @Override
+ public void error(SAXParseException e) throws SAXException
+ {
+ throw e;
+ }
+
+ @Override
+ public void fatalError(SAXParseException e) throws SAXException
+ {
+ throw e;
+ }
+ }
+ );
+ }
+
+ /**
+ * Test that one can disable validation to parse a doc that does not
+ * conform to its dtd
+ * @throws Exception
+ */
public void testUnmarshalBooks2Dtd() throws Exception
{
// create an object model factory
@@ -84,7 +138,7 @@
log.debug("<test-unmarshal-" + xmlSource + '>');
// get the XML stream
- URL xmlUrl = getResourceUrl("xml/book/" + xmlSource);
+ URL xmlUrl = getResource("/xml/book/" + xmlSource);
// create unmarshaller
Unmarshaller unmarshaller = getBookUnmarshaller();
@@ -123,7 +177,8 @@
StringWriter xmlOutput = new StringWriter();
// get the DTD source
- InputStream is = getResource("xml/book/books.dtd");
+ URL dtdURL = getResource("/xml/book/books.dtd");
+ InputStream is = dtdURL.openStream();
Reader dtdReader = new InputStreamReader(is);
// create an instance of DTD marshaller
@@ -178,7 +233,8 @@
StringWriter xmlOutput = new StringWriter();
// get the DTD source
- InputStream is = getResource("xml/book/books.dtd");
+ URL dtdURL = getResource("/xml/book/books.dtd");
+ InputStream is = dtdURL.openStream();
Reader dtdReader = new InputStreamReader(is);
// create an instance of DTD marshaller
@@ -236,7 +292,7 @@
ObjectModelProvider provider = new BookObjectProvider();
// marshall Book instance passing it as an argument instead of using the one that is returned by the BookObjectProvider
- marshaller.marshal(getResourceUrl("xml/book/books.xsd").toString(), provider, book, xmlOutput);
+ marshaller.marshal(getResource("/xml/book/books.xsd").toString(), provider, book, xmlOutput);
String xml = xmlOutput.getBuffer().toString();
if(log.isTraceEnabled())
@@ -251,7 +307,7 @@
log.debug("<test-unmarshal-" + xmlSource + '>');
// get the XML stream
- URL xmlUrl = getResourceUrl("xml/book/" + xmlSource);
+ URL xmlUrl = getResource("/xml/book/" + xmlSource);
// create unmarshaller
Unmarshaller unmarshaller = getBookUnmarshaller();
@@ -310,23 +366,7 @@
private static Unmarshaller getBookUnmarshaller() throws JBossXBException
{
Unmarshaller unmarshaller = UnmarshallerFactory.newInstance().newUnmarshaller();
- unmarshaller.setEntityResolver(
- new EntityResolver()
- {
- public InputSource resolveEntity(String publicId, String systemId) throws SAXException, IOException
- {
- if(systemId.endsWith("books.dtd"))
- {
- return new InputSource(getResource("xml/book/books.dtd"));
- }
- if(systemId.endsWith("books2.dtd"))
- {
- return new InputSource(getResource("xml/book/books2.dtd"));
- }
- return null;
- }
- }
- );
+ unmarshaller.setEntityResolver(new BooksEntityResolver());
return unmarshaller;
}
@@ -353,23 +393,27 @@
return book;
}
- private static InputStream getResource(String name)
+ private static InputStream getResourceStream(String name)
+ throws IOException
{
- InputStream is = Thread.currentThread().getContextClassLoader().getResourceAsStream(name);
- if(is == null)
- {
- throw new IllegalStateException("Resource not found: " + name);
- }
- return is;
+ URL resURL = findResource(SimpleTestCase.class, name);
+ return resURL.openStream();
}
-
- private static URL getResourceUrl(String name)
+ private static class BooksEntityResolver implements EntityResolver
{
- URL url = Thread.currentThread().getContextClassLoader().getResource(name);
- if(url == null)
+ public InputSource resolveEntity(String publicId, String systemId)
+ throws SAXException, IOException
{
- throw new IllegalStateException("Resource not found: " + name);
- }
- return url;
+ log.debug("resolveEntity, publicId: "+publicId+", systemId: "+systemId);
+ if(systemId.endsWith("books.dtd"))
+ {
+ return new InputSource(getResourceStream("/xml/book/books.dtd"));
+ }
+ if(systemId.endsWith("books2.dtd"))
+ {
+ return new InputSource(getResourceStream("/xml/book/books2.dtd"));
+ }
+ return null;
+ }
}
}
Modified: jbossxb/trunk/src/test/resources/xml/book/book-dtd.xml
===================================================================
--- jbossxb/trunk/src/test/resources/xml/book/book-dtd.xml 2007-04-04 20:01:57 UTC (rev 2363)
+++ jbossxb/trunk/src/test/resources/xml/book/book-dtd.xml 2007-04-04 23:49:16 UTC (rev 2364)
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE book PUBLIC "-//DTD Books//EN" "resources/xml/book/books.dtd">
+<!DOCTYPE book PUBLIC "-//DTD Books//EN" "target/test-classes/xml/book/books.dtd">
<book isbn="0836217462">
<title>Being a Dog Is a Full-Time Job</title>
Modified: jbossxb/trunk/src/test/resources/xml/book/book-xs.xml
===================================================================
--- jbossxb/trunk/src/test/resources/xml/book/book-xs.xml 2007-04-04 20:01:57 UTC (rev 2363)
+++ jbossxb/trunk/src/test/resources/xml/book/book-xs.xml 2007-04-04 23:49:16 UTC (rev 2364)
@@ -4,7 +4,7 @@
isbn="0836217462"
xmlns="http://example.org/ns/books/"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xsi:schemaLocation="http://example.org/ns/books/ resources/xml/book/books.xsd">
+ xsi:schemaLocation="http://example.org/ns/books/ target/test-classes/xml/book/book/books.xsd">
<title>Being a Dog Is a Full-Time Job</title>
<author>Charles M. Schulz</author>
Modified: jbossxb/trunk/src/test/resources/xml/book/books2-dtd.xml
===================================================================
--- jbossxb/trunk/src/test/resources/xml/book/books2-dtd.xml 2007-04-04 20:01:57 UTC (rev 2363)
+++ jbossxb/trunk/src/test/resources/xml/book/books2-dtd.xml 2007-04-04 23:49:16 UTC (rev 2364)
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE book PUBLIC "-//DTD Books//EN" "resources/xml/book/books2.dtd">
+<!DOCTYPE book PUBLIC "-//DTD Books2//EN" "target/test-classes/xml/book/books2.dtd">
<book isbn="0836217462">
<title>Being a Dog Is a Full-Time Job</title>
More information about the jboss-svn-commits
mailing list