cocoon-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Ard Schrijvers" <a.schrijv...@hippo.nl>
Subject RE: Hel in writing my own transformer.
Date Fri, 28 Oct 2005 08:11:03 GMT
You mis one argument in new AttributesImpl();

it should be new AttributesImpl(attr), see comments in text

AS

> Hi all. I need to implement a my own transform that does a 
> link rewriter. the scope is to change the href value of <a 
> tag in a html file (a well formed html file checked by jtidy 
> as you can check in the file jtidy.xml). I have realize for 
> now the code:
> 
> package it.transformers;
> 
> import org.apache.cocoon.transformation.AbstractSAXTransformer;
> import org.xml.sax.Attributes;
> import java.io.IOException;
> import java.util.Map;
> import org.apache.cocoon.ProcessingException;
> import org.apache.cocoon.portal.transformation.CopletTransformer;
> import org.apache.avalon.framework.parameters.Parameters;
> import org.xml.sax.SAXException;
> import org.apache.cocoon.environment.SourceResolver;
> import org.apache.cocoon.xml.AttributesImpl;
> import java.util.Stack;
> 
> public class HTMLLinkTransformer extends AbstractSAXTransformer {
> 
>     protected Stack elementStack = new Stack();
> 
>     public void recycle() {
>         super.recycle();
>         this.elementStack.clear();
>     }
> 
>     public void setup(SourceResolver resolver,
>                       Map objectModel,
>                       String src,
>                       Parameters par)
>     throws ProcessingException, SAXException, IOException {
>         super.setup(resolver, objectModel, src, par);
> 
>     }
> 
>     public void startElement(String uri, String name, String 
> raw, Attributes attr)
>     throws SAXException {
>         if ("a".equalsIgnoreCase(name) || 
> "xhtml:a".equalsIgnoreCase( name ) ) {
> 
>             AttributesImpl newAttr = new AttributesImpl();
>             newAttr.setValue(attr.getIndex("href"),"ciao");

Here is the mistake. newAttr is empty! So, attr.getIndex("href") returns an index that newAttr
does not have. 

AttributesImpl newAttr = new AttributesImpl(); -> AttributesImpl newAttr = new AttributesImpl(attr);
does the job

>             attr = newAttr;
>         }
>         super.startElement( uri, name, raw,attr );
>     }
> 
>     public void endElement(String uri, String name, String 
> raw) throws SAXException {
>         super.endElement(uri, name, raw);
>     }
> }
> 
> By using it i have this error:
> ERROR   (2005-10-26) 23:35.13:739   [sitemap.handled-errors] 
> (/pmm/portal/coplets/S062/execute.service) 
> http-8080-Processor8/ErrorHandlerHelper: Error executing pipeline.
> org.apache.cocoon.ProcessingException: Error executing 
> pipeline.: org.w3c.dom.DOMException: HIERARCHY_REQUEST_ERR: 
> An attempt was made to insert a node where it is not permitted. 
> 	at 
> org.apache.cocoon.components.pipeline.AbstractProcessingPipeli
> ne.handleException(AbstractProcessingPipeline.java:940)
> 	at 
> org.apache.cocoon.components.pipeline.impl.AbstractCachingProc
> essingPipeline.processXMLPipeline(AbstractCachingProcessingPip
> eline.java:281)
> 	at 
> org.apache.cocoon.components.pipeline.AbstractProcessingPipeli
> ne.process(AbstractProcessingPipeline.java:783)
> 	at 
> org.apache.cocoon.components.source.impl.SitemapSource.toSAX(S
> itemapSource.java:413)
> 	at 
> org.apache.cocoon.components.source.SourceUtil.toSAX(SourceUti
> l.java:142)
> 	at 
> org.apache.cocoon.components.source.SourceUtil.toSAX(SourceUti
> l.java:100)
> 	at 
> org.apache.cocoon.components.source.SourceUtil.toDOM(SourceUti
> l.java:332)
> 	at 
> org.apache.cocoon.components.flow.util.PipelineUtil.processToD
> OM(PipelineUtil.java:173)
> 
> 
> Can anybody help me? Thanks to all.
> 

---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscribe@cocoon.apache.org
For additional commands, e-mail: users-help@cocoon.apache.org


Mime
View raw message