Hi Eitan,
On Tue, 2006-06-20 at 09:55 +0200, Eitan Gur wrote: > Hi all > > I just noticed I wasn't clean - my question is related to the Digester > project. The convention on this (shared) list is to put the commons project at the start of the subject line. I've changed this email's subject appropriately. Unfortunately not a lot of people use the xmlrules module so advice is a little difficult to get for it. I don't use it myself, but here's what I can see from looking at the source code. For further details you may need to look at the source code yourself; it isn't too difficult. The main class involved in processing xml rule input files is: org.apache.commons.digester.xmlrules.DigesterRuleParser, which can be seen here: http://svn.apache.org/repos/asf/jakarta/commons/proper/digester/trunk/src/java/org/apache/commons/digester/xmlrules/ The <include> tag is processed by the nested IncludeRule class (xmlrules uses Digester rules to process the rules.xml files :-). The critical bit is this: String fileName = attributes.getValue("path"); includeXMLRules(fileName); which in turn does this: ClassLoader cl = .... URL fileURL = cl.getResource(fileName); ... fileName = fileURL.toExternalForm(); ... Digester digester = new Digester(); digester.addRuleSet(includedSet); digester.push(DigesterRuleParser.this); digester.parse(fileName); Because the cl.getResource(fileName) is just passing the "path" property read from the include tag, it therefore looks to me like this code allows <include> to reference other files in the classpath (including in jars), but that it doesn't support paths *relative* to the file [1] doing the including; you have to do: <include path="foo/bar1/sub1.xml"/> even when the including xml is foo/master.xml. (NOTE: this is just my understanding from looking at the source code). If you really need this functionality, it looks like you'll have to create a customised DigesterRuleParser implementation. If you do implement this, and are willing to contribute that improvement back to the Digester project then I'm sure that would be appreciated. I could probably find time to review it/commit it, but don't have any particular interest in writing this functionality myself. Any particular reas [1] actually, the thing doing the including isn't a "file" in your case, but a "resource" bundled inside a jar. > > > I have a question regarding the <include> element, specifically when I want > to include a file in a jar-packed application. > > I'm using JBoss application server, and I want to use digester in my > application. As it's packed in a jar (which is packed in an ear), I need to > use relative paths for the rules xml files. > > I have a master rules file, and several other included files, residing in > subfolders (of the master file), something like: > > foo/master.xml -> > > bar1/sub1.xml > > bar2/sub2.xml > > (where bar1 and bar2 are subfolders of foo). > > > > The master.xml should look something like this: > > <digester-rules> > > <include path="[What should be the path of sub1.xml???]" /> > > <include path="[What should be the path of sub2.xml???]" /> > > </digester-rules> > > > > I managed to resolve the relative path issue for the master file from the > source code (using getClass().getResource()), but I don't know how to resolve > this issue for the <include> elements in the master file. > > > > Thanks for your help. Regards, Simon --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]
