You are viewing a plain text version of this content. The canonical link for it is here.
Posted to cvs@cocoon.apache.org by di...@apache.org on 2001/08/20 14:36:59 UTC
cvs commit: xml-cocoon2/src/org/apache/cocoon/components/resolver Resolver.java ResolverImpl.java
dims 01/08/20 05:36:59
Modified: src/org/apache/cocoon cocoon.roles
src/org/apache/cocoon/components/parser JaxpParser.java
Added: lib resolver.jar
src/org/apache/cocoon/components/resolver Resolver.java
ResolverImpl.java
Log:
This is the initial commit for support for Catalogs for Entity Resolution.
- Uses the XML Entity and URI Resolvers Java [tm] classes at http://www.sun.com/xml/developers/resolver/
- The spec for catalogs are at http://www.oasis-open.org/committees/entity/spec.html
- Componentized such that others (like the folks at www.indexgeo.com.au/work/cocoon/catalog.html) can use their own catalog components.
Needs more work:
- Add sample CatalogManager.properties file
- Samples to show Entity Resolution at work.
- Updates to the Documentation.
- etc, etc...
Revision Changes Path
1.1 xml-cocoon2/lib/resolver.jar
<<Binary file>>
1.19 +4 -0 xml-cocoon2/src/org/apache/cocoon/cocoon.roles
Index: cocoon.roles
===================================================================
RCS file: /home/cvs/xml-cocoon2/src/org/apache/cocoon/cocoon.roles,v
retrieving revision 1.18
retrieving revision 1.19
diff -u -r1.18 -r1.19
--- cocoon.roles 2001/08/14 11:19:54 1.18
+++ cocoon.roles 2001/08/20 12:36:59 1.19
@@ -49,6 +49,10 @@
shorthand="jsp-engine"
default-class="org.apache.cocoon.components.jsp.JSPEngineImpl"/>
+ <role name="org.apache.cocoon.components.resolver.Resolver"
+ shorthand="resolver"
+ default-class="org.apache.cocoon.components.resolver.ResolverImpl"/>
+
<role name="org.apache.cocoon.components.classloader.ClassLoaderManager"
shorthand="classloader"
default-class="org.apache.cocoon.components.classloader.ClassLoaderManagerImpl"/>
1.5 +29 -2 xml-cocoon2/src/org/apache/cocoon/components/parser/JaxpParser.java
Index: JaxpParser.java
===================================================================
RCS file: /home/cvs/xml-cocoon2/src/org/apache/cocoon/components/parser/JaxpParser.java,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -r1.4 -r1.5
--- JaxpParser.java 2001/07/30 10:50:44 1.4
+++ JaxpParser.java 2001/08/20 12:36:59 1.5
@@ -16,6 +16,7 @@
import org.apache.cocoon.util.ClassUtils;
import org.apache.cocoon.xml.AbstractXMLProducer;
import org.apache.cocoon.xml.dom.DOMFactory;
+import org.apache.cocoon.components.resolver.Resolver;
import org.w3c.dom.DOMImplementation;
import org.w3c.dom.Document;
import org.xml.sax.ErrorHandler;
@@ -24,20 +25,32 @@
import org.xml.sax.SAXParseException;
import org.xml.sax.XMLReader;
import org.apache.avalon.framework.thread.SingleThreaded;
+import org.apache.avalon.framework.component.ComponentManager;
+import org.apache.avalon.framework.component.Composable;
+import org.apache.avalon.framework.component.ComponentException;
/**
* An XMLParser that is only dependant on JAXP 1.1 compliant parsers.
* If only we can get rid of the need for the Document...
*
* @author <a href="mailto:bloritsch@apache.org">Berin Loritsch</a>
- * @version CVS $Revision: 1.4 $ $Date: 2001/07/30 10:50:44 $
+ * @version CVS $Revision: 1.5 $ $Date: 2001/08/20 12:36:59 $
*/
public class JaxpParser extends AbstractXMLProducer
-implements Parser, ErrorHandler, SingleThreaded {
+implements Parser, ErrorHandler, Composable, SingleThreaded {
+ /** the SAX Parser factory */
final SAXParserFactory factory = SAXParserFactory.newInstance();
+
+ /** the Document Builder factory */
final DocumentBuilderFactory docfactory = DocumentBuilderFactory.newInstance();
+ /** the component manager */
+ protected ComponentManager manager;
+
+ /** the Entity Resolver */
+ protected Resolver resolver = null;
+
public JaxpParser ()
throws SAXException, ParserConfigurationException {
this.factory.setNamespaceAware(true);
@@ -46,6 +59,19 @@
this.docfactory.setValidating(false);
}
+ /**
+ * Get the Entity Resolver from the component manager
+ */
+ public void compose(ComponentManager manager) throws ComponentException {
+ try {
+ this.manager = manager;
+ getLogger().debug("Looking up Resolver" + Resolver.ROLE);
+ this.resolver = (Resolver)manager.lookup(Resolver.ROLE);
+ } catch(ComponentException e) {
+ getLogger().error("Error in JaxpParser!",e);
+ }
+ }
+
public void parse(InputSource in)
throws SAXException, IOException {
SAXParser parser = null;
@@ -69,6 +95,7 @@
reader.setErrorHandler(this);
reader.setContentHandler(super.contentHandler);
+ reader.setEntityResolver(this.resolver);
reader.parse(in);
}
1.1 xml-cocoon2/src/org/apache/cocoon/components/resolver/Resolver.java
Index: Resolver.java
===================================================================
/*****************************************************************************
* Copyright (C) The Apache Software Foundation. All rights reserved. *
* ------------------------------------------------------------------------- *
* This software is published under the terms of the Apache Software License *
* version 1.1, a copy of which has been included with this distribution in *
* the LICENSE file. *
*****************************************************************************/
package org.apache.cocoon.components.resolver;
import org.apache.avalon.framework.component.Component;
import org.xml.sax.EntityResolver;
import org.xml.sax.InputSource;
import org.xml.sax.SAXException;
import java.io.IOException;
/**
* A component that uses catalogs for resolving Entities.
*
* @author <a href="mailto:dims@yahoo.com">Davanum Srinivas</a>
* @version CVS $Revision: 1.1 $ $Date: 2001/08/20 12:36:59 $
*/
public interface Resolver extends Component, EntityResolver {
String ROLE = "org.apache.cocoon.components.resolver.Resolver";
/**
* Allow the application to resolve external entities.
*
* <p>The Parser will call this method before opening any external
* entity except the top-level document entity (including the
* external DTD subset, external entities referenced within the
* DTD, and external entities referenced within the document
* element): the application may request that the parser resolve
* the entity itself, that it use an alternative URI, or that it
* use an entirely different input source.</p>
*
* <p>Application writers can use this method to redirect external
* system identifiers to secure and/or local URIs, to look up
* public identifiers in a catalogue, or to read an entity from a
* database or other input source (including, for example, a dialog
* box).</p>
*
* <p>If the system identifier is a URL, the SAX parser must
* resolve it fully before reporting it to the application.</p>
*
* @param publicId The public identifier of the external entity
* being referenced, or null if none was supplied.
* @param systemId The system identifier of the external entity
* being referenced.
* @return An InputSource object describing the new input source,
* or null to request that the parser open a regular
* URI connection to the system identifier.
* @exception org.xml.sax.SAXException Any SAX exception, possibly
* wrapping another exception.
* @exception java.io.IOException A Java-specific IO exception,
* possibly the result of creating a new InputStream
* or Reader for the InputSource.
* @see org.xml.sax.InputSource
*/
public abstract InputSource resolveEntity(String publicId,
String systemId)
throws SAXException, IOException;
}
1.1 xml-cocoon2/src/org/apache/cocoon/components/resolver/ResolverImpl.java
Index: ResolverImpl.java
===================================================================
/*****************************************************************************
* Copyright (C) The Apache Software Foundation. All rights reserved. *
* ------------------------------------------------------------------------- *
* This software is published under the terms of the Apache Software License *
* version 1.1, a copy of which has been included with this distribution in *
* the LICENSE file. *
*****************************************************************************/
package org.apache.cocoon.components.resolver;
import com.sun.resolver.tools.CatalogResolver;
import org.apache.avalon.framework.activity.Disposable;
import org.apache.avalon.framework.component.ComponentException;
import org.apache.avalon.framework.component.ComponentManager;
import org.apache.avalon.framework.component.Composable;
import org.apache.avalon.framework.configuration.Configurable;
import org.apache.avalon.framework.configuration.Configuration;
import org.apache.avalon.framework.configuration.ConfigurationException;
import org.apache.avalon.framework.context.Context;
import org.apache.avalon.framework.context.ContextException;
import org.apache.avalon.framework.context.Contextualizable;
import org.apache.avalon.framework.logger.AbstractLoggable;
import org.apache.avalon.framework.parameters.Parameters;
import org.apache.avalon.framework.thread.ThreadSafe;
import org.xml.sax.InputSource;
import org.xml.sax.SAXException;
import java.io.IOException;
/**
* A component that uses catalogs for resolving Entities. This implementation uses the
* XML Entity and URI Resolvers from http://www.sun.com/xml/developers/resolver/
* published by Sun's Norman Walsh. More information on the catalogs can be found at
* http://www.oasis-open.org/committees/entity/spec.html
*
* @author <a href="mailto:dims@yahoo.com">Davanum Srinivas</a>
* @version CVS $Revision: 1.1 $ $Date: 2001/08/20 12:36:59 $
*/
public class ResolverImpl extends AbstractLoggable
implements Resolver, Contextualizable, Composable, Configurable, ThreadSafe, Disposable {
/** The catalog resolver */
protected CatalogResolver catalogResolver = new CatalogResolver();
/** The component manager */
protected ComponentManager manager = null;
/** Contextualize this class */
public void contextualize(Context context) throws ContextException {
}
/**
* Set the sitemap-provided configuration.
* @param conf The configuration information
* @exception ConfigurationException
*/
public void configure(Configuration conf) throws ConfigurationException {
Parameters params = Parameters.fromConfiguration(conf);
}
/**
* Set the global component manager. This metod also sets the
* <code>ComponentSelector</code> used as language factory for both markup and programming languages.
* @param manager The global component manager
*/
public void compose(ComponentManager manager) throws ComponentException {
if ((this.manager == null) && (manager != null)) {
this.manager = manager;
}
}
/**
* Allow the application to resolve external entities.
*
* <p>The Parser will call this method before opening any external
* entity except the top-level document entity (including the
* external DTD subset, external entities referenced within the
* DTD, and external entities referenced within the document
* element): the application may request that the parser resolve
* the entity itself, that it use an alternative URI, or that it
* use an entirely different input source.</p>
*
* <p>Application writers can use this method to redirect external
* system identifiers to secure and/or local URIs, to look up
* public identifiers in a catalogue, or to read an entity from a
* database or other input source (including, for example, a dialog
* box).</p>
*
* <p>If the system identifier is a URL, the SAX parser must
* resolve it fully before reporting it to the application.</p>
*
* @param publicId The public identifier of the external entity
* being referenced, or null if none was supplied.
* @param systemId The system identifier of the external entity
* being referenced.
* @return An InputSource object describing the new input source,
* or null to request that the parser open a regular
* URI connection to the system identifier.
* @exception org.xml.sax.SAXException Any SAX exception, possibly
* wrapping another exception.
* @exception java.io.IOException A Java-specific IO exception,
* possibly the result of creating a new InputStream
* or Reader for the InputSource.
* @see org.xml.sax.InputSource
*/
public InputSource resolveEntity(String publicId,
String systemId)
throws SAXException, IOException {
return catalogResolver.resolveEntity(publicId, systemId);
}
/**
* dispose
*/
public void dispose() {
}
}
----------------------------------------------------------------------
In case of troubles, e-mail: webmaster@xml.apache.org
To unsubscribe, e-mail: cocoon-cvs-unsubscribe@xml.apache.org
For additional commands, e-mail: cocoon-cvs-help@xml.apache.org