9ecd03471f
* external/w3c_dom/Makefile.am: New file. * external/w3c_dom/Makefile.in: New file. * external/sax/Makefile.am: New file. * external/sax/Makefile.in: New file. * external/Makefile.in: New file. * external/Makefile.am: New file. * external/README: New file from Classpath. * configure, aclocal.m4, Makefile.in: Rebuilt. * configure.ac (AC_CONFIG_FILES): Create new Makefiles. * Makefile.am (SUBDIRS): Added external. (toolexeclib_LTLIBRARIES): Removed lib-org-xml-sax.la, lib-org-w3c-dom.la, lib-org-ietf-gss.la. (BOOTCLASSPATH): New variable. (AM_GCJFLAGS): Use it. (gnu_xml_source_files): New variable. (libgcj_la_SOURCES): Use it. (libgcj_la_LDADD): Include new convenience libraries. (lib_org_ietf_jgss_la_SOURCES): Removed. (lib_org_ietf_jgss_la_DEPENDENCIES): Likewise. (lib_org_ietf_jgss_la_LIBADD): Likewise. (lib_org_w3c_dom_la_SOURCES): Removed. (lib_org_w3c_dom_la_DEPENDENCIES): Likewise. (lib_org_w3c_dom_la_LIBADD): Likewise. (lib_org_xml_sax_la_SOURCES): Removed. (lib_org_xml_sax_la_DEPENDENCIES): Likewise. (lib_org_xml_sax_la_LIBADD): Likewise. (all_java_source_files): Updated. (property_files): Likewise. (libgcj-@gcc_version@.jar): Include classes from external/. (javax_source_files): Updated. (ordinary_java_source_files): Updated. * javax/xml/XMLConstants.java, javax/xml/datatype/DatatypeConfigurationException.java, javax/xml/datatype/DatatypeConstants.java, javax/xml/datatype/DatatypeFactory.java, javax/xml/datatype/Duration.java, javax/xml/datatype/XMLGregorianCalendar.java, javax/xml/datatype/package.html, javax/xml/namespace/NamespaceContext.java, javax/xml/namespace/QName.java, javax/xml/namespace/package.html, javax/xml/parsers/DocumentBuilder.java, javax/xml/parsers/DocumentBuilderFactory.java, javax/xml/parsers/FactoryConfigurationError.java, javax/xml/parsers/ParserConfigurationException.java, javax/xml/parsers/SAXParser.java, javax/xml/parsers/SAXParserFactory.java, javax/xml/parsers/package.html, javax/xml/transform/ErrorListener.java, javax/xml/transform/OutputKeys.java, javax/xml/transform/Result.java, javax/xml/transform/Source.java, javax/xml/transform/SourceLocator.java, javax/xml/transform/Templates.java, javax/xml/transform/Transformer.java, javax/xml/transform/TransformerConfigurationException.java, javax/xml/transform/TransformerException.java, javax/xml/transform/TransformerFactory.java, javax/xml/transform/TransformerFactoryConfigurationError.java, javax/xml/transform/URIResolver.java, javax/xml/transform/package.html, javax/xml/transform/dom/DOMLocator.java, javax/xml/transform/dom/DOMResult.java, javax/xml/transform/dom/DOMSource.java, javax/xml/transform/dom/package.html, javax/xml/transform/sax/SAXResult.java, javax/xml/transform/sax/SAXSource.java, javax/xml/transform/sax/SAXTransformerFactory.java, javax/xml/transform/sax/TemplatesHandler.java, javax/xml/transform/sax/TransformerHandler.java, javax/xml/transform/sax/package.html, javax/xml/transform/stream/StreamResult.java, javax/xml/transform/stream/StreamSource.java, javax/xml/transform/stream/package.html, javax/xml/validation/Schema.java, javax/xml/validation/SchemaFactory.java, javax/xml/validation/TypeInfoProvider.java, javax/xml/validation/Validator.java, javax/xml/validation/ValidatorHandler.java, javax/xml/validation/package.html, javax/xml/xpath/XPath.java, javax/xml/xpath/XPathConstants.java, javax/xml/xpath/XPathException.java, javax/xml/xpath/XPathExpression.java, javax/xml/xpath/XPathExpressionException.java, javax/xml/xpath/XPathFactory.java, javax/xml/xpath/XPathFactoryConfigurationException.java, javax/xml/xpath/XPathFunction.java, javax/xml/xpath/XPathFunctionException.java, javax/xml/xpath/XPathFunctionResolver.java, javax/xml/xpath/XPathVariableResolver.java, javax/xml/xpath/package.html: New files, from GNU JAXP. * org/w3c/dom/Attr.java, org/w3c/dom/CDATASection.java, org/w3c/dom/CharacterData.java, org/w3c/dom/Comment.java, org/w3c/dom/DOMException.java, org/w3c/dom/DOMImplementation.java, org/w3c/dom/Document.java, org/w3c/dom/DocumentFragment.java, org/w3c/dom/DocumentType.java, org/w3c/dom/Element.java, org/w3c/dom/Entity.java, org/w3c/dom/EntityReference.java, org/w3c/dom/NamedNodeMap.java, org/w3c/dom/Node.java, org/w3c/dom/NodeList.java, org/w3c/dom/Notation.java, org/w3c/dom/ProcessingInstruction.java, org/w3c/dom/Text.java, org/w3c/dom/ranges/DocumentRange.java, org/w3c/dom/ranges/Range.java, org/w3c/dom/ranges/RangeException.java, org/w3c/dom/traversal/DocumentTraversal.java, org/w3c/dom/traversal/NodeFilter.java, org/w3c/dom/traversal/NodeIterator.java, org/w3c/dom/traversal/TreeWalker.java, org/xml/sax/AttributeList.java, org/xml/sax/Attributes.java, org/xml/sax/ContentHandler.java, org/xml/sax/DTDHandler.java, org/xml/sax/DocumentHandler.java, org/xml/sax/EntityResolver.java, org/xml/sax/ErrorHandler.java, org/xml/sax/HandlerBase.java, org/xml/sax/InputSource.java, org/xml/sax/Locator.java, org/xml/sax/Parser.java, org/xml/sax/SAXException.java, org/xml/sax/SAXNotRecognizedException.java, org/xml/sax/SAXNotSupportedException.java, org/xml/sax/SAXParseException.java, org/xml/sax/XMLFilter.java, org/xml/sax/XMLReader.java, org/xml/sax/package.html, org/xml/sax/ext/DeclHandler.java, org/xml/sax/ext/LexicalHandler.java, org/xml/sax/ext/package.html, org/xml/sax/helpers/AttributeListImpl.java, org/xml/sax/helpers/AttributesImpl.java, org/xml/sax/helpers/DefaultHandler.java, org/xml/sax/helpers/LocatorImpl.java, org/xml/sax/helpers/NamespaceSupport.java, org/xml/sax/helpers/NewInstance.java, org/xml/sax/helpers/ParserAdapter.java, org/xml/sax/helpers/ParserFactory.java, org/xml/sax/helpers/XMLFilterImpl.java, org/xml/sax/helpers/XMLReaderAdapter.java, org/xml/sax/helpers/XMLReaderFactory.java, org/xml/sax/helpers/package.html: Moved to external/. * external/sax/README, external/sax/org/xml/sax/AttributeList.java, external/sax/org/xml/sax/Attributes.java, external/sax/org/xml/sax/ContentHandler.java, external/sax/org/xml/sax/DTDHandler.java, external/sax/org/xml/sax/DocumentHandler.java, external/sax/org/xml/sax/EntityResolver.java, external/sax/org/xml/sax/ErrorHandler.java, external/sax/org/xml/sax/HandlerBase.java, external/sax/org/xml/sax/InputSource.java, external/sax/org/xml/sax/Locator.java, external/sax/org/xml/sax/Parser.java, external/sax/org/xml/sax/SAXException.java, external/sax/org/xml/sax/SAXNotRecognizedException.java, external/sax/org/xml/sax/SAXNotSupportedException.java, external/sax/org/xml/sax/SAXParseException.java, external/sax/org/xml/sax/XMLFilter.java, external/sax/org/xml/sax/XMLReader.java, external/sax/org/xml/sax/package.html, external/sax/org/xml/sax/ext/Attributes2.java, external/sax/org/xml/sax/ext/Attributes2Impl.java, external/sax/org/xml/sax/ext/DeclHandler.java, external/sax/org/xml/sax/ext/DefaultHandler2.java, external/sax/org/xml/sax/ext/EntityResolver2.java, external/sax/org/xml/sax/ext/LexicalHandler.java, external/sax/org/xml/sax/ext/Locator2.java, external/sax/org/xml/sax/ext/Locator2Impl.java, external/sax/org/xml/sax/ext/package.html, external/sax/org/xml/sax/helpers/AttributeListImpl.java, external/sax/org/xml/sax/helpers/AttributesImpl.java, external/sax/org/xml/sax/helpers/DefaultHandler.java, external/sax/org/xml/sax/helpers/LocatorImpl.java, external/sax/org/xml/sax/helpers/NamespaceSupport.java, external/sax/org/xml/sax/helpers/NewInstance.java, external/sax/org/xml/sax/helpers/ParserAdapter.java, external/sax/org/xml/sax/helpers/ParserFactory.java, external/sax/org/xml/sax/helpers/XMLFilterImpl.java, external/sax/org/xml/sax/helpers/XMLReaderAdapter.java, external/sax/org/xml/sax/helpers/XMLReaderFactory.java, external/sax/org/xml/sax/helpers/package.html, external/w3c_dom/COPYRIGHT.html, external/w3c_dom/README, external/w3c_dom/org/w3c/dom/Attr.java, external/w3c_dom/org/w3c/dom/CDATASection.java, external/w3c_dom/org/w3c/dom/CharacterData.java, external/w3c_dom/org/w3c/dom/Comment.java, external/w3c_dom/org/w3c/dom/DOMConfiguration.java, external/w3c_dom/org/w3c/dom/DOMError.java, external/w3c_dom/org/w3c/dom/DOMErrorHandler.java, external/w3c_dom/org/w3c/dom/DOMException.java, external/w3c_dom/org/w3c/dom/DOMImplementation.java, external/w3c_dom/org/w3c/dom/DOMImplementationList.java, external/w3c_dom/org/w3c/dom/DOMImplementationSource.java, external/w3c_dom/org/w3c/dom/DOMLocator.java, external/w3c_dom/org/w3c/dom/DOMStringList.java, external/w3c_dom/org/w3c/dom/Document.java, external/w3c_dom/org/w3c/dom/DocumentFragment.java, external/w3c_dom/org/w3c/dom/DocumentType.java, external/w3c_dom/org/w3c/dom/Element.java, external/w3c_dom/org/w3c/dom/Entity.java, external/w3c_dom/org/w3c/dom/EntityReference.java, external/w3c_dom/org/w3c/dom/NameList.java, external/w3c_dom/org/w3c/dom/NamedNodeMap.java, external/w3c_dom/org/w3c/dom/Node.java, external/w3c_dom/org/w3c/dom/NodeList.java, external/w3c_dom/org/w3c/dom/Notation.java, external/w3c_dom/org/w3c/dom/ProcessingInstruction.java, external/w3c_dom/org/w3c/dom/Text.java, external/w3c_dom/org/w3c/dom/TypeInfo.java, external/w3c_dom/org/w3c/dom/UserDataHandler.java, external/w3c_dom/org/w3c/dom/bootstrap/DOMImplementationRegistry.java, external/w3c_dom/org/w3c/dom/css/CSS2Properties.java, external/w3c_dom/org/w3c/dom/css/CSSCharsetRule.java, external/w3c_dom/org/w3c/dom/css/CSSFontFaceRule.java, external/w3c_dom/org/w3c/dom/css/CSSImportRule.java, external/w3c_dom/org/w3c/dom/css/CSSMediaRule.java, external/w3c_dom/org/w3c/dom/css/CSSPageRule.java, external/w3c_dom/org/w3c/dom/css/CSSPrimitiveValue.java, external/w3c_dom/org/w3c/dom/css/CSSRule.java, external/w3c_dom/org/w3c/dom/css/CSSRuleList.java, external/w3c_dom/org/w3c/dom/css/CSSStyleDeclaration.java, external/w3c_dom/org/w3c/dom/css/CSSStyleRule.java, external/w3c_dom/org/w3c/dom/css/CSSStyleSheet.java, external/w3c_dom/org/w3c/dom/css/CSSUnknownRule.java, external/w3c_dom/org/w3c/dom/css/CSSValue.java, external/w3c_dom/org/w3c/dom/css/CSSValueList.java, external/w3c_dom/org/w3c/dom/css/Counter.java, external/w3c_dom/org/w3c/dom/css/DOMImplementationCSS.java, external/w3c_dom/org/w3c/dom/css/DocumentCSS.java, external/w3c_dom/org/w3c/dom/css/ElementCSSInlineStyle.java, external/w3c_dom/org/w3c/dom/css/RGBColor.java, external/w3c_dom/org/w3c/dom/css/Rect.java, external/w3c_dom/org/w3c/dom/css/ViewCSS.java, external/w3c_dom/org/w3c/dom/events/DocumentEvent.java, external/w3c_dom/org/w3c/dom/events/Event.java, external/w3c_dom/org/w3c/dom/events/EventException.java, external/w3c_dom/org/w3c/dom/events/EventListener.java, external/w3c_dom/org/w3c/dom/events/EventTarget.java, external/w3c_dom/org/w3c/dom/events/MouseEvent.java, external/w3c_dom/org/w3c/dom/events/MutationEvent.java, external/w3c_dom/org/w3c/dom/events/UIEvent.java, external/w3c_dom/org/w3c/dom/html2/HTMLAnchorElement.java, external/w3c_dom/org/w3c/dom/html2/HTMLAppletElement.java, external/w3c_dom/org/w3c/dom/html2/HTMLAreaElement.java, external/w3c_dom/org/w3c/dom/html2/HTMLBRElement.java, external/w3c_dom/org/w3c/dom/html2/HTMLBaseElement.java, external/w3c_dom/org/w3c/dom/html2/HTMLBaseFontElement.java, external/w3c_dom/org/w3c/dom/html2/HTMLBodyElement.java, external/w3c_dom/org/w3c/dom/html2/HTMLButtonElement.java, external/w3c_dom/org/w3c/dom/html2/HTMLCollection.java, external/w3c_dom/org/w3c/dom/html2/HTMLDListElement.java, external/w3c_dom/org/w3c/dom/html2/HTMLDirectoryElement.java, external/w3c_dom/org/w3c/dom/html2/HTMLDivElement.java, external/w3c_dom/org/w3c/dom/html2/HTMLDocument.java, external/w3c_dom/org/w3c/dom/html2/HTMLElement.java, external/w3c_dom/org/w3c/dom/html2/HTMLFieldSetElement.java, external/w3c_dom/org/w3c/dom/html2/HTMLFontElement.java, external/w3c_dom/org/w3c/dom/html2/HTMLFormElement.java, external/w3c_dom/org/w3c/dom/html2/HTMLFrameElement.java, external/w3c_dom/org/w3c/dom/html2/HTMLFrameSetElement.java, external/w3c_dom/org/w3c/dom/html2/HTMLHRElement.java, external/w3c_dom/org/w3c/dom/html2/HTMLHeadElement.java, external/w3c_dom/org/w3c/dom/html2/HTMLHeadingElement.java, external/w3c_dom/org/w3c/dom/html2/HTMLHtmlElement.java, external/w3c_dom/org/w3c/dom/html2/HTMLIFrameElement.java, external/w3c_dom/org/w3c/dom/html2/HTMLImageElement.java, external/w3c_dom/org/w3c/dom/html2/HTMLInputElement.java, external/w3c_dom/org/w3c/dom/html2/HTMLIsIndexElement.java, external/w3c_dom/org/w3c/dom/html2/HTMLLIElement.java, external/w3c_dom/org/w3c/dom/html2/HTMLLabelElement.java, external/w3c_dom/org/w3c/dom/html2/HTMLLegendElement.java, external/w3c_dom/org/w3c/dom/html2/HTMLLinkElement.java, external/w3c_dom/org/w3c/dom/html2/HTMLMapElement.java, external/w3c_dom/org/w3c/dom/html2/HTMLMenuElement.java, external/w3c_dom/org/w3c/dom/html2/HTMLMetaElement.java, external/w3c_dom/org/w3c/dom/html2/HTMLModElement.java, external/w3c_dom/org/w3c/dom/html2/HTMLOListElement.java, external/w3c_dom/org/w3c/dom/html2/HTMLObjectElement.java, external/w3c_dom/org/w3c/dom/html2/HTMLOptGroupElement.java, external/w3c_dom/org/w3c/dom/html2/HTMLOptionElement.java, external/w3c_dom/org/w3c/dom/html2/HTMLOptionsCollection.java, external/w3c_dom/org/w3c/dom/html2/HTMLParagraphElement.java, external/w3c_dom/org/w3c/dom/html2/HTMLParamElement.java, external/w3c_dom/org/w3c/dom/html2/HTMLPreElement.java, external/w3c_dom/org/w3c/dom/html2/HTMLQuoteElement.java, external/w3c_dom/org/w3c/dom/html2/HTMLScriptElement.java, external/w3c_dom/org/w3c/dom/html2/HTMLSelectElement.java, external/w3c_dom/org/w3c/dom/html2/HTMLStyleElement.java, external/w3c_dom/org/w3c/dom/html2/HTMLTableCaptionElement.java, external/w3c_dom/org/w3c/dom/html2/HTMLTableCellElement.java, external/w3c_dom/org/w3c/dom/html2/HTMLTableColElement.java, external/w3c_dom/org/w3c/dom/html2/HTMLTableElement.java, external/w3c_dom/org/w3c/dom/html2/HTMLTableRowElement.java, external/w3c_dom/org/w3c/dom/html2/HTMLTableSectionElement.java, external/w3c_dom/org/w3c/dom/html2/HTMLTextAreaElement.java, external/w3c_dom/org/w3c/dom/html2/HTMLTitleElement.java, external/w3c_dom/org/w3c/dom/html2/HTMLUListElement.java, external/w3c_dom/org/w3c/dom/ls/DOMImplementationLS.java, external/w3c_dom/org/w3c/dom/ls/LSException.java, external/w3c_dom/org/w3c/dom/ls/LSInput.java, external/w3c_dom/org/w3c/dom/ls/LSLoadEvent.java, external/w3c_dom/org/w3c/dom/ls/LSOutput.java, external/w3c_dom/org/w3c/dom/ls/LSParser.java, external/w3c_dom/org/w3c/dom/ls/LSParserFilter.java, external/w3c_dom/org/w3c/dom/ls/LSProgressEvent.java, external/w3c_dom/org/w3c/dom/ls/LSResourceResolver.java, external/w3c_dom/org/w3c/dom/ls/LSSerializer.java, external/w3c_dom/org/w3c/dom/ls/LSSerializerFilter.java, external/w3c_dom/org/w3c/dom/ranges/DocumentRange.java, external/w3c_dom/org/w3c/dom/ranges/Range.java, external/w3c_dom/org/w3c/dom/ranges/RangeException.java, external/w3c_dom/org/w3c/dom/stylesheets/DocumentStyle.java, external/w3c_dom/org/w3c/dom/stylesheets/LinkStyle.java, external/w3c_dom/org/w3c/dom/stylesheets/MediaList.java, external/w3c_dom/org/w3c/dom/stylesheets/StyleSheet.java, external/w3c_dom/org/w3c/dom/stylesheets/StyleSheetList.java, external/w3c_dom/org/w3c/dom/traversal/DocumentTraversal.java, external/w3c_dom/org/w3c/dom/traversal/NodeFilter.java, external/w3c_dom/org/w3c/dom/traversal/NodeIterator.java, external/w3c_dom/org/w3c/dom/traversal/TreeWalker.java, external/w3c_dom/org/w3c/dom/views/AbstractView.java, external/w3c_dom/org/w3c/dom/views/DocumentView.java, external/w3c_dom/org/w3c/dom/xpath/XPathEvaluator.java, external/w3c_dom/org/w3c/dom/xpath/XPathException.java, external/w3c_dom/org/w3c/dom/xpath/XPathExpression.java, external/w3c_dom/org/w3c/dom/xpath/XPathNSResolver.java, external/w3c_dom/org/w3c/dom/xpath/XPathNamespace.java, external/w3c_dom/org/w3c/dom/xpath/XPathResult.java: New files from Classpath. From-SVN: r94577
256 lines
11 KiB
HTML
256 lines
11 KiB
HTML
<html><head><title>
|
|
blah
|
|
<!--
|
|
/*
|
|
* Copyright (C) 1999-2001 The Free Software Foundation, Inc.
|
|
*/
|
|
-->
|
|
</title></head><body>
|
|
|
|
<p>This package exposes a kind of XML processing pipeline, based on sending
|
|
SAX events, which can be used as components of application architectures.
|
|
Pipelines are used to convey streams of processing events from a producer
|
|
to one or more consumers, and to let each consumer control the data seen by
|
|
later consumers.
|
|
|
|
<p> There is a <a href="PipelineFactory.html">PipelineFactory</a> class which
|
|
accepts a syntax describing how to construct some simple pipelines. Strings
|
|
describing such pipelines can be used in command line tools (see the
|
|
<a href="../util/DoParse.html">DoParse</a> class)
|
|
and in other places that it is
|
|
useful to let processing be easily reconfigured. Pipelines can of course
|
|
be constructed programmatically, providing access to options that the
|
|
factory won't.
|
|
|
|
<p> Web applications are supported by making it easy for servlets (or
|
|
non-Java web application components) to be part of a pipeline. They can
|
|
originate XML (or XHTML) data through an <em>InputSource</em> or in
|
|
response to XML messages sent from clients using <em>CallFilter</em>
|
|
pipeline stages. Such facilities are available using the simple syntax
|
|
for pipeline construction.
|
|
|
|
|
|
<h2> Programming Models </h2>
|
|
|
|
<p> Pipelines should be simple to understand.
|
|
|
|
<ul>
|
|
<li> XML content, typically entire documents,
|
|
is pushed through consumers by producers.
|
|
|
|
<li> Pipelines are basically about consuming SAX2 callback events,
|
|
where the events encapsulate XML infoset-level data.<ul>
|
|
|
|
<li> Pipelines are constructed by taking one or more consumer
|
|
stages and combining them to produce a composite consumer.
|
|
|
|
<li> A pipeline is presumed to have pending tasks and state from
|
|
the beginning of its ContentHandler.startDocument() callback until
|
|
it's returned from its ContentHandler.doneDocument() callback.
|
|
|
|
<li> Pipelines may have multiple output stages ("fan-out")
|
|
or multiple input stages ("fan-in") when appropriate.
|
|
|
|
<li> Pipelines may be long-lived, but need not be.
|
|
|
|
</ul>
|
|
|
|
<li> There is flexibility about event production. <ul>
|
|
|
|
<li> SAX2 XMLReader objects are producers, which
|
|
provide a high level "pull" model: documents (text or DOM) are parsed,
|
|
and the parser pushes individual events through the pipeline.
|
|
|
|
<li> Events can be pushed directly to event consumer components
|
|
by application modules, if they invoke SAX2 callbacks directly.
|
|
That is, application modules use the XML Infoset as exposed
|
|
through SAX2 event callbacks.
|
|
|
|
</ul>
|
|
|
|
<li> Multiple producer threads may concurrently access a pipeline,
|
|
if they coordinate appropriately.
|
|
|
|
<li> Pipeline processing is not the only framework applications
|
|
will use.
|
|
|
|
</ul>
|
|
|
|
|
|
<h3> Producers: XMLReader or Custom </h3>
|
|
|
|
<p> Many producers will be SAX2 XMLReader objects, and
|
|
will read (pull) data which is then written (pushed) as events.
|
|
Typically these will parse XML text (acquired from
|
|
<code>org.xml.sax.helpers.XMLReaderFactory</code>) or a DOM tree
|
|
(using a <code><a href="../util/DomParser.html">DomParser</a></code>)
|
|
These may be bound to event consumer using a convenience routine,
|
|
<em><a href="EventFilter.html">EventFilter</a>.bind()</em>.
|
|
Once bound, these producers may be given additional documents to
|
|
sent through its pipeline.
|
|
|
|
<p> In other cases, you will write producers yourself. For example, some
|
|
data structures might know how to write themselves out using one or
|
|
more XML models, expressed as sequences of SAX2 event callbacks.
|
|
An application module might
|
|
itself be a producer, issuing startDocument and endDocument events
|
|
and then asking those data structures to write themselves out to a
|
|
given EventConsumer, or walking data structures (such as JDBC query
|
|
results) and applying its own conversion rules. WAP format XML
|
|
(WBMXL) can be directly converted to producer output.
|
|
|
|
<p> SAX2 introduced an "XMLFilter" interface, which is a kind of XMLReader.
|
|
It is most useful in conjunction with its XMLFilterImpl helper class;
|
|
see the <em><a href="EventFilter.html">EventFilter</a></em> javadoc
|
|
for information contrasting that XMLFilterImpl approach with the
|
|
relevant parts of this pipeline framework. Briefly, such XMLFilterImpl
|
|
children can be either producers or consumers, and are more limited in
|
|
configuration flexibility. In this framework, the focus of filters is
|
|
on the EventConsumer side; see the section on
|
|
<a href="#fitting">pipe fitting</a> below.
|
|
|
|
|
|
<h3> Consume to Standard or Custom Data Representations </h3>
|
|
|
|
<p> Many consumers will be used to create standard representations of XML
|
|
data. The <a href="TextConsumer.html">TextConsumer</a> takes its events
|
|
and writes them as text for a single XML document,
|
|
using an internal <a href="../util/XMLWriter.html">XMLWriter</a>.
|
|
The <a href="DomConsumer.html">DomConsumer</a> takes its events and uses
|
|
them to create and populate a DOM Document.
|
|
|
|
<p> In other cases, you will write consumers yourself. For example,
|
|
you might use a particular unmarshaling filter to produce objects
|
|
that fit your application's requirements, instead of using DOM.
|
|
Such consumers work at the level of XML data models, rather than with
|
|
specific representations such as XML text or a DOM tree. You could
|
|
convert your output directly to WAP format data (WBXML).
|
|
|
|
|
|
<h3><a name="fitting">Pipe Fitting</a></h3>
|
|
|
|
<p> Pipelines are composite event consumers, with each stage having
|
|
the opportunity to transform the data before delivering it to any
|
|
subsequent stages.
|
|
|
|
<p> The <a href="PipelineFactory.html">PipelineFactory</a> class
|
|
provides access to much of this functionality through a simple syntax.
|
|
See the table in that class's javadoc describing a number of standard
|
|
components. Direct API calls are still needed for many of the most
|
|
interesting pipeline configurations, including ones leveraging actual
|
|
or logical concurrency.
|
|
|
|
<p> Four basic types of pipe fitting are directly supported. These may
|
|
be used to construct complex pipeline networks. <ul>
|
|
|
|
<li> <a href="TeeConsumer.html">TeeConsumer</a> objects split event
|
|
flow so it goes to two two different consumers, one before the other.
|
|
This is a basic form of event fan-out; you can use this class to
|
|
copy events to any number of output pipelines.
|
|
|
|
<li> Clients can call remote components through HTTP or HTTPS using
|
|
the <a href="CallFilter.html">CallFilter</a> component, and Servlets
|
|
can implement such components by extending the
|
|
<a href="XmlServlet.html">XmlServlet</a> component. Java is not
|
|
required on either end, and transport protocols other than HTTP may
|
|
also be used.
|
|
|
|
<li> <a href="EventFilter.html">EventFilter</a> objects selectively
|
|
provide handling for callbacks, and can pass unhandled ones to a
|
|
subsequent stage. They are often subclassed, since much of the
|
|
basic filtering machinery is already in place in the base class.
|
|
|
|
<li> Applications can merge two event flows by just using the same
|
|
consumer in each one. If multiple threads are in use, synchronization
|
|
needs to be addressed by the appropriate application level policy.
|
|
|
|
</ul>
|
|
|
|
<p> Note that filters can be as complex as
|
|
<a href="XsltFilter.html">XSLT transforms</a>
|
|
available) on input data, or as simple as removing simple syntax data
|
|
such as ignorable whitespace, comments, and CDATA delimiters.
|
|
Some simple "built-in" filters are part of this package.
|
|
|
|
|
|
<h3> Coding Conventions: Filter and Terminus Stages</h3>
|
|
|
|
<p> If you follow these coding conventions, your classes may be used
|
|
directly (give the full class name) in pipeline descriptions as understood
|
|
by the PipelineFactory. There are four constructors the factory may
|
|
try to use; in order of decreasing numbers of parameters, these are: <ul>
|
|
|
|
<li> Filters that need a single String setup parameter should have
|
|
a public constructor with two parameters: that string, then the
|
|
EventConsumer holding the "next" consumer to get events.
|
|
|
|
<li> Filters that don't need setup parameters should have a public
|
|
constructor that accepts a single EventConsumer holding the "next"
|
|
consumer to get events when they are done.
|
|
|
|
<li> Terminus stages may have a public constructor taking a single
|
|
paramter: the string value of that parameter.
|
|
|
|
<li> Terminus stages may have a public no-parameters constructor.
|
|
|
|
</ul>
|
|
|
|
<p> Of course, classes may support more than one such usage convention;
|
|
if they do, they can automatically be used in multiple modes. If you
|
|
try to use a terminus class as a filter, and that terminus has a constructor
|
|
with the appropriate number of arguments, it is automatically wrapped in
|
|
a "tee" filter.
|
|
|
|
|
|
<h2> Debugging Tip: "Tee" Joints can Snapshot Data</h2>
|
|
|
|
<p> It can sometimes be hard to see what's happening, when something
|
|
goes wrong. Easily fixed: just snapshot the data. Then you can find
|
|
out where things start to go wrong.
|
|
|
|
<p> If you're using pipeline descriptors so that they're easily
|
|
administered, just stick a <em>write ( filename )</em>
|
|
filter into the pipeline at an appropriate point.
|
|
|
|
<p> Inside your programs, you can do the same thing directly: perhaps
|
|
by saving a Writer (perhaps a StringWriter) in a variable, using that
|
|
to create a TextConsumer, and making that the first part of a tee --
|
|
splicing that into your pipeline at a convenient location.
|
|
|
|
<p> You can also use a DomConsumer to buffer the data, but remember
|
|
that DOM doesn't save all the information that XML provides, so that DOM
|
|
snapshots are relatively low fidelity. They also are substantially more
|
|
expensive in terms of memory than a StringWriter holding similar data.
|
|
|
|
<h2> Debugging Tip: Non-XML Producers</h2>
|
|
|
|
<p> Producers in pipelines don't need to start from XML
|
|
data structures, such as text in XML syntax (likely coming
|
|
from some <em>XMLReader</em> that parses XML) or a
|
|
DOM representation (perhaps with a
|
|
<a href="../util/DomParser.html">DomParser</a>).
|
|
|
|
<p> One common type of event producer will instead make
|
|
direct calls to SAX event handlers returned from an
|
|
<a href="EventConsumer.html">EventConsumer</a>.
|
|
For example, making <em>ContentHandler.startElement</em>
|
|
calls and matching <em>ContentHandler.endElement</em> calls.
|
|
|
|
<p> Applications making such calls can catch certain
|
|
common "syntax errors" by using a
|
|
<a href="WellFormednessFilter.html">WellFormednessFilter</a>.
|
|
That filter will detect (and report) erroneous input data
|
|
such as mismatched document, element, or CDATA start/end calls.
|
|
Use such a filter near the head of the pipeline that your
|
|
producer feeds, at least while debugging, to help ensure that
|
|
you're providing legal XML Infoset data.
|
|
|
|
<p> You can also arrange to validate data on the fly.
|
|
For DTD validation, you can configure a
|
|
<a href="ValidationConsumer.html">ValidationConsumer</a>
|
|
to work as a filter, using any DTD you choose.
|
|
Other validation schemes can be handled with other
|
|
validation filters.
|
|
|
|
</body></html>
|