[jboss-dev-forums] [Design of JBossXB] - Re: Ignoring non-ignorable white space?

wolfc do-not-reply at jboss.com
Fri Jun 8 05:51:04 EDT 2007


Wicked, when I try the following:
import java.io.IOException;
  | import java.io.StringReader;
  | import javax.xml.parsers.ParserConfigurationException;
  | import javax.xml.parsers.SAXParserFactory;
  | import javax.xml.transform.stream.StreamSource;
  | import javax.xml.validation.Schema;
  | import javax.xml.validation.SchemaFactory;
  | import javax.xml.validation.ValidatorHandler;
  | import org.xml.sax.InputSource;
  | import org.xml.sax.SAXException;
  | import org.xml.sax.XMLReader;
  | import org.xml.sax.helpers.DefaultHandler;
  | 
  | 
  | public class test {
  | 
  |      public static final String XSD = "<?xml version='1.0'?>\n"
  |              + "<schema xmlns='http://www.w3.org/2001/XMLSchema'\n"
  |              + "        xmlns:test='jaxp13_test'\n"
  |              + "        targetNamespace='jaxp13_test'\n"
  |              + "        elementFormDefault='qualified'>\n"
  |              + "    <element name='test'>\n"
  |              + "        <complexType>\n"
  |              + "            <sequence>\n"
  |              + "                <element name='child' type='string' maxOccurs='unbounded'/>\n"
  |              + "            </sequence>\n"
  |              + "        </complexType>\n"
  |              + "    </element>\n"
  |              + "</schema>\n";
  | 
  |      public static final String XML = "<?xml version='1.0'?>\n"
  |              + "<ns:test xmlns:ns='jaxp13_test'>\n"
  |              + "  <ns:child> </ns:child>\n"
  |              + "  <ns:child> 123 </ns:child>\n"
  |              + "</ns:test>\n";
  | 
  | 
  |      private ValidatorHandler createValidatorHandler(String xsd)
  |              throws SAXException {
  |          SchemaFactory schemaFactory =
  |               SchemaFactory.newInstance("http://www.w3.org/2001/XMLSchema");
  | 
  |          StringReader reader = new StringReader(xsd);
  |          StreamSource xsdSource = new StreamSource(reader);
  | 
  |          Schema schema = schemaFactory.newSchema(xsdSource);
  |          return schema.newValidatorHandler();
  |      }
  | 
  |      private XMLReader createXMLReader() throws ParserConfigurationException,
  |              SAXException {
  |          SAXParserFactory parserFactory = SAXParserFactory.newInstance();
  |          if (!parserFactory.isNamespaceAware()) {
  |              parserFactory.setNamespaceAware(true);
  |          }
  | 
  |          return parserFactory.newSAXParser().getXMLReader();
  |      }
  | 
  |      private void parse(XMLReader xmlReader, String xml) throws SAXException,
  |              IOException {
  |          StringReader reader = new StringReader(xml);
  |          InputSource inSource = new InputSource(reader);
  | 
  |          xmlReader.parse(inSource);
  |      }
  | 
  |      public static void main(String argv[]) {
  |          try {
  |              new test().run();
  |          } catch (Exception e) {
  |              e.printStackTrace();
  |              System.exit(1);
  |          }
  |      }
  | 
  |      public void run() throws SAXException, ParserConfigurationException,
  |              IOException {
  |          XMLReader xmlReader = createXMLReader();
  |          ValidatorHandler validatorHandler = createValidatorHandler(XSD);
  |          xmlReader.setContentHandler(validatorHandler);
  | 
  |          final boolean[] invoked  = {false};
  |          DefaultHandler contentHandler = new DefaultHandler() {
  |             @Override
  |             public void characters(char[] ch, int start, int length) throws SAXException
  |             {
  |                StringBuffer sb = new StringBuffer();
  |                sb.append(ch, start, length);
  |                System.err.println("characters: '" + sb.toString() + "'");
  |             }
  |             
  |              public void ignorableWhitespace(char[] ch,
  |                               int start,
  |                               int length)
  |                        throws SAXException {
  |                 StringBuffer sb = new StringBuffer();
  |                 sb.append(ch, start, length);
  |                 System.err.println("whitespace: '" + sb.toString() + "'");
  |                  invoked[0] = true;
  |              }
  |          };
  |          validatorHandler.setContentHandler(contentHandler);
  | 
  |          parse(xmlReader, XML);
  | 
  |          if (!invoked[0]) {
  |              System.out.println("Method ignorableWhitespace() was not invoked.");
  |          } else {
  |              System.out.println("OK");
  |          }
  |      }
  | }
I get:
whitespace: '
  |   '
  | characters: ' '
  | whitespace: '
  |   '
  | characters: ' 123 '
  | whitespace: '
  | '
  | OK

java version "1.5.0_11"
Java(TM) 2 Runtime Environment, Standard Edition (build 1.5.0_11-b03)
Java HotSpot(TM) Client VM (build 1.5.0_11-b03, mixed mode, sharing)

View the original post : http://www.jboss.com/index.html?module=bb&op=viewtopic&p=4052479#4052479

Reply to the post : http://www.jboss.com/index.html?module=bb&op=posting&mode=reply&p=4052479



More information about the jboss-dev-forums mailing list