| Von: Vadim Gritsenko [mailto:[EMAIL PROTECTED]] | | | Using action. Write your action which reads this <file/> fragment into | DOM/SAX, extracts <storepath>, <origname>, <mimetype> and returns these | values in the Map to the sitemap. | | Then, pass these values to the regular reader. | | | Vadim |
Hello Vadim, thanx for your answer. I tried this, but I had some strange trouble. I wrote my own Action and called it in the sitemap like this: <map:act type="docprop" src="xmldb:xindice://localhost:4080/db/gizmo/documents/#//document[@id=&apos ;{1}']"> My action has the method act as follows: public Map act(Redirector redirector, SourceResolver resolver, Map objectModel, String source, Parameters par) throws Exception { Source src = null; HashMap actionMap = new HashMap(); try { src = resolver.resolve(source); String systemID = src.getSystemId(); if (this.getLogger().isDebugEnabled()) { getLogger().debug("docprop source [" + source + "]"); getLogger().debug("docprop resolved to [" + systemID + "]"); } // this all works fine... // but... Parser parser = (Parser)this.manager.lookup(Parser.ROLE); // src.getInputSource() raises an exception! Document sdoc = parser.parseDocument(src.getInputSource()); NodeList nl = sdoc.getElementsByTagName("document"); [...] I got an exception from AbstractSAXSource.getInputStream... org.apache.cocoon.ProcessingException: could not lookup pipeline components: org.apache.avalon.framework.component.ComponentException: UnnamedSelector: ComponentSelector could not find the component for hint: xml at org.apache.cocoon.components.source.AbstractSAXSource.getInputStream(Abstrac tSAXSource.java:133) at org.apache.cocoon.components.source.AbstractSAXSource.getInputSource(Abstrac tSAXSource.java:151) at de.taval.gizmo.acting.DocumentPropertyAction.act(DocumentPropertyAction.java :116) With other sources than the saxbased xmldbsource, it works fine. Then I've copied the code of AbstractSAXSource.getInputStream and AbstractSAXSource.getInputSource into my action and it works properly. But I dont understand why, and this only works for SAX-based sources. Is this a bug in AbstractSAXSource? I think, both methods should work. I dont understand, why the same code works in my action and fails in the AbstractSAXSource?! Do you have any idea how to solve it? I would like to use any source for my action, not only sax-sources, so do i have now to check for the source type and have to implement the getInputStream method for all sourcetypes new? Thanx Tammo PS: my new work-a-round (for sax sources only) act(): <snip> ComponentSelector cs = (ComponentSelector)this.manager.lookup(Serializer.ROLE + "Selector"); Serializer serializer = (Serializer)cs.select("xml"); ByteArrayOutputStream os = new ByteArrayOutputStream(); serializer.setOutputStream(os); src.toSAX(serializer); InputSource is = new InputSource(new ByteArrayInputStream(os.toByteArray())); is.setSystemId(src.getSystemId()); Parser parser = (Parser)this.manager.lookup(Parser.ROLE); Document sdoc = parser.parseDocument(is); NodeList nl = sdoc.getElementsByTagName("document"); </snip> --------------------------------------------------------------------- Please check that your question has not already been answered in the FAQ before posting. <http://xml.apache.org/cocoon/faq/index.html> To unsubscribe, e-mail: <[EMAIL PROTECTED]> For additional commands, e-mail: <[EMAIL PROTECTED]>