65 * Runs events through a {@link javax.xml.validation.ValidatorHandler}
66 * and performs validation/infoset-augmentation by an external validator.
67 *
68 * <p>
69 * This component sets up the pipeline as follows:
70 *
71 * <!-- this picture may look teribble on your IDE but it is correct. -->
72 * <pre>
73 * __ __
74 * / |==> XNI2SAX --> Validator --> SAX2XNI ==>|
75 * / | |
76 * ==>| Tee| | next
77 * \ | | component
78 * \ |============other XNI events============>|
79 * ~~ ~~
80 * </pre>
81 * <p>
82 * only those events that need to go through Validator will go the 1st route,
83 * and other events go the 2nd direct route.
84 *
85 * @author Kohsuke Kawaguchi (kohsuke.kawaguchi@sun.com)
86 */
87 final class JAXPValidatorComponent
88 extends TeeXMLDocumentFilterImpl implements XMLComponent {
89
90 /** Property identifier: entity manager. */
91 private static final String ENTITY_MANAGER =
92 Constants.XERCES_PROPERTY_PREFIX + Constants.ENTITY_MANAGER_PROPERTY;
93
94 /** Property identifier: error reporter. */
95 private static final String ERROR_REPORTER =
96 Constants.XERCES_PROPERTY_PREFIX + Constants.ERROR_REPORTER_PROPERTY;
97
98 /** Property identifier: symbol table. */
99 private static final String SYMBOL_TABLE =
100 Constants.XERCES_PROPERTY_PREFIX + Constants.SYMBOL_TABLE_PROPERTY;
101
102 // pipeline parts
103 private final ValidatorHandler validator;
104 private final XNI2SAX xni2sax = new XNI2SAX();
105 private final SAX2XNI sax2xni = new SAX2XNI();
327 prefix = symbolize(qname.substring(0,idx));
328
329 localName = symbolize(localName);
330 qname = symbolize(qname);
331 uri = symbolize(uri);
332
333 // notify handlers
334 fQName.setValues(prefix, localName, qname, uri);
335 return fQName;
336 }
337 }
338
339 /**
340 * Converts {@link XNI} events to {@link ContentHandler} events.
341 *
342 * <p>
343 * Deriving from {@link DefaultXMLDocumentHandler}
344 * to reuse its default {@link com.sun.org.apache.xerces.internal.xni.XMLDocumentHandler}
345 * implementation.
346 *
347 * @author Kohsuke Kawaguchi (kohsuke.kawaguchi@sun.com)
348 */
349 private final class XNI2SAX extends DefaultXMLDocumentHandler {
350
351 private ContentHandler fContentHandler;
352
353 private String fVersion;
354
355 /** Namespace context */
356 protected NamespaceContext fNamespaceContext;
357
358 /**
359 * For efficiency, we reuse one instance.
360 */
361 private final AttributesProxy fAttributesProxy = new AttributesProxy(null);
362
363 public void setContentHandler( ContentHandler handler ) {
364 this.fContentHandler = handler;
365 }
366
367 public ContentHandler getContentHandler() {
|
65 * Runs events through a {@link javax.xml.validation.ValidatorHandler}
66 * and performs validation/infoset-augmentation by an external validator.
67 *
68 * <p>
69 * This component sets up the pipeline as follows:
70 *
71 * <!-- this picture may look teribble on your IDE but it is correct. -->
72 * <pre>
73 * __ __
74 * / |==> XNI2SAX --> Validator --> SAX2XNI ==>|
75 * / | |
76 * ==>| Tee| | next
77 * \ | | component
78 * \ |============other XNI events============>|
79 * ~~ ~~
80 * </pre>
81 * <p>
82 * only those events that need to go through Validator will go the 1st route,
83 * and other events go the 2nd direct route.
84 *
85 * @author Kohsuke Kawaguchi
86 */
87 final class JAXPValidatorComponent
88 extends TeeXMLDocumentFilterImpl implements XMLComponent {
89
90 /** Property identifier: entity manager. */
91 private static final String ENTITY_MANAGER =
92 Constants.XERCES_PROPERTY_PREFIX + Constants.ENTITY_MANAGER_PROPERTY;
93
94 /** Property identifier: error reporter. */
95 private static final String ERROR_REPORTER =
96 Constants.XERCES_PROPERTY_PREFIX + Constants.ERROR_REPORTER_PROPERTY;
97
98 /** Property identifier: symbol table. */
99 private static final String SYMBOL_TABLE =
100 Constants.XERCES_PROPERTY_PREFIX + Constants.SYMBOL_TABLE_PROPERTY;
101
102 // pipeline parts
103 private final ValidatorHandler validator;
104 private final XNI2SAX xni2sax = new XNI2SAX();
105 private final SAX2XNI sax2xni = new SAX2XNI();
327 prefix = symbolize(qname.substring(0,idx));
328
329 localName = symbolize(localName);
330 qname = symbolize(qname);
331 uri = symbolize(uri);
332
333 // notify handlers
334 fQName.setValues(prefix, localName, qname, uri);
335 return fQName;
336 }
337 }
338
339 /**
340 * Converts {@link XNI} events to {@link ContentHandler} events.
341 *
342 * <p>
343 * Deriving from {@link DefaultXMLDocumentHandler}
344 * to reuse its default {@link com.sun.org.apache.xerces.internal.xni.XMLDocumentHandler}
345 * implementation.
346 *
347 * @author Kohsuke Kawaguchi
348 */
349 private final class XNI2SAX extends DefaultXMLDocumentHandler {
350
351 private ContentHandler fContentHandler;
352
353 private String fVersion;
354
355 /** Namespace context */
356 protected NamespaceContext fNamespaceContext;
357
358 /**
359 * For efficiency, we reuse one instance.
360 */
361 private final AttributesProxy fAttributesProxy = new AttributesProxy(null);
362
363 public void setContentHandler( ContentHandler handler ) {
364 this.fContentHandler = handler;
365 }
366
367 public ContentHandler getContentHandler() {
|