I've taken a first stab at adding support for nested <xmlcatalog> elements within <ejbjar>, but I'm running into some problems I thought I'd run by the list.
First glance, it appeared pretty easy. Add a few methods and insert the following bit of code in the execute method: if (xmlCatalog != null) { saxParser.getXMLReader().setEntityResolver(xmlCatalog); } Since saxParser gets passed into the various vendor-specific deployment tool classes, I thought that would do the trick. But it's not (why would I be writing this otherwise :-) ?). The problem is that I'm not familiar enough with SAX; previous hacking involved adding XMLCatalog support to tasks that used DOM. Also, I'm not intimately familiar with the inner workings of the org.apache.tools.ant.taskdefs.optional.ejb.* classes. So I thought I'd throw this out there and see if I'm doing something stupid/easily fixed. Diff included below for full disclosure. Thanks, Kyle === --- EjbJar.java.old 2003-05-21 16:54:44.000000000 -0400 +++ EjbJar.java 2003-05-21 16:52:50.000000000 -0400 @@ -74,6 +74,7 @@ import org.apache.tools.ant.types.Path; import org.apache.tools.ant.types.EnumeratedAttribute; import org.apache.tools.ant.types.FileSet; +import org.apache.tools.ant.types.XMLCatalog; /** * Provides automated EJB JAR file creation. @@ -226,6 +227,18 @@ /** The list of deployment tools we are going to run. */ private ArrayList deploymentTools = new ArrayList(); + /** for resolving entities such as dtds */ + private XMLCatalog xmlCatalog = new XMLCatalog(); + + + /** + * Add the catalog to our internal catalog + * + * @param xmlCatalog the XMLCatalog instance to use to look up DTDs + */ + public void addConfiguredXMLCatalog(XMLCatalog xmlCatalog) { + this.xmlCatalog.addConfiguredXMLCatalog(xmlCatalog); + } /** * Add a deployment tool to the list of deployment tools that will be @@ -538,6 +551,14 @@ } /** + * Initialize internal instance of XMLCatalog + */ + public void init() throws BuildException { + super.init(); + xmlCatalog.setProject(getProject()); + } + + /** * Invoked by Ant after the task is prepared, when it is ready to execute * this task. * @@ -574,6 +595,9 @@ SAXParserFactory saxParserFactory = SAXParserFactory.newInstance(); saxParserFactory.setValidating(true); SAXParser saxParser = saxParserFactory.newSAXParser(); + if (xmlCatalog != null) { + saxParser.getXMLReader().setEntityResolver(xmlCatalog); + } DirectoryScanner ds = getDirectoryScanner(config.descriptorDir); ds.scan();