Changeset 3321 in josm for trunk/src/org/openstreetmap/josm/tools/XmlObjectParser.java
- Timestamp:
- 2010-06-08T21:56:38+02:00 (14 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/org/openstreetmap/josm/tools/XmlObjectParser.java
r2676 r3321 16 16 import java.util.concurrent.BlockingQueue; 17 17 18 import javax.xml.parsers.SAXParser; 18 19 import javax.xml.parsers.SAXParserFactory; 20 import javax.xml.transform.Source; 21 import javax.xml.validation.Schema; 22 import javax.xml.validation.SchemaFactory; 23 import javax.xml.validation.ValidatorHandler; 19 24 20 25 import org.xml.sax.Attributes; 26 import org.xml.sax.ContentHandler; 21 27 import org.xml.sax.InputSource; 22 28 import org.xml.sax.Locator; 23 29 import org.xml.sax.SAXException; 24 30 import org.xml.sax.SAXParseException; 31 import org.xml.sax.XMLReader; 25 32 import org.xml.sax.helpers.DefaultHandler; 33 import org.xml.sax.helpers.XMLFilterImpl; 26 34 27 35 /** … … 101 109 } 102 110 111 private class AddNamespaceFilter extends XMLFilterImpl { 112 113 private final String namespace; 114 115 public AddNamespaceFilter(String namespace) { 116 this.namespace = namespace; 117 } 118 119 @Override 120 public void startElement (String uri, String localName, String qName, Attributes atts) throws SAXException { 121 if ("".equals(uri)) { 122 super.startElement(namespace, localName, qName, atts); 123 } else { 124 super.startElement(uri, localName, qName, atts); 125 } 126 127 } 128 129 } 130 103 131 private class Parser extends DefaultHandler { 104 132 Stack<Object> current = new Stack<Object>(); … … 271 299 } 272 300 273 p ublic Iterable<Object> start(final Reader in) {301 private Iterable<Object> start(final Reader in, final ContentHandler contentHandler) { 274 302 new Thread("XML Reader"){ 275 303 @Override public void run() { 276 304 try { 277 SAXParserFactory.newInstance().newSAXParser().parse(new InputSource(in), parser); 305 SAXParserFactory parserFactory = SAXParserFactory.newInstance(); 306 parserFactory.setNamespaceAware(true); 307 SAXParser parser = parserFactory.newSAXParser(); 308 XMLReader reader = parser.getXMLReader(); 309 reader.setContentHandler(contentHandler); 310 reader.parse(new InputSource(in)); 278 311 } catch (Exception e) { 279 312 try { … … 282 315 } 283 316 } 284 parser = null;285 317 try { 286 318 queue.put(EOS); … … 290 322 }.start(); 291 323 return this; 324 } 325 326 public Iterable<Object> start(final Reader in) { 327 return start(in, parser); 328 } 329 330 public Iterable<Object> startWithValidation(final Reader in, String namespace, Source schemaSource) throws SAXException { 331 SchemaFactory factory = SchemaFactory.newInstance("http://www.w3.org/2001/XMLSchema"); 332 Schema schema = factory.newSchema(schemaSource); 333 ValidatorHandler validator = schema.newValidatorHandler(); 334 validator.setContentHandler(parser); 335 validator.setErrorHandler(parser); 336 337 AddNamespaceFilter filter = new AddNamespaceFilter(namespace); 338 filter.setContentHandler(validator); 339 340 return start(in, filter); 292 341 } 293 342
Note:
See TracChangeset
for help on using the changeset viewer.