Hi Joerg,

Joerg Heinicke schrieb:
On 22.11.2007 6:04 Uhr, Andreas Hartmann wrote:

I used an action to pass the current source resolver to the SourceProtocolHandler, but this resulted in an NPE because the URI of the TranscoderInput object was null. After I applied a little patch to the SourceProtocolHandler which enabled the fallback to the default handler if the URL to resolve is null, it worked.

I tried shortly to get into it. I found some SourceProtocolHandler code disabled (in comments) in SVGSerializer.

it looks like you disabled this code:

27277      joerg         //SourceProtocolHandler.setup(this.resolver);

r27277 | joerg | 2004-02-07 14:18:16 +0100 (Sat, 07 Feb 2004) | 2 lines

revert the setting of the Cocoon source resolver for batik as this breaks internal URIs and so our batik and ascii art samples


Can you tell me how the mentioned objects interact with eachother?

The SourceProtocolHandler registers itself at the ParsedURL class in a static block. Apparently the SVGSerializer passed the SourceResolver of the current thread to the SourceProtocolHandler to enable it to resolve the custom protocols of the Cocoon application. Maybe you disabled it because you experienced the same problem that I reported?


Your solution sounds more like a workaround.

IMO that depends on the question if ParsedURLProtocolHandler.parseURL(String) is supposed to expect null parameters. I asked on the Batik users list.

The SVGSerializer doesn't set the URI of the TranscoderInput object:

<snip src="SVGSerializer:203">
  TranscoderInput transInput = new TranscoderInput(doc);

  // Buffering is done by the pipeline (See shouldSetContentLength)
  TranscoderOutput transOutput = new TranscoderOutput(this.output);
  transcoder.transcode(transInput, transOutput);
</snip>

Maybe the problem can be prevented if transInput.setURI(String) is called before, but I have no idea which URI string to pass.


Is the SourceProtocolHandler supposed to work out of the box?
Is it possible that I did something wrong which lead to the NPE?
Is there a recommended way to setup the SourceProtocolHandler?

I can not answer these questions :) I only know that Batik once suffered from the same problems as FOP, it was not possible to resolve URLs with Cocoon's source resolver. For FOP it had architectural reasons which are fixed in 0.9.x branch. I wonder if anybody has ever investigated it so deeply for Batik or if it was just fixed in the meantime.

I had some trouble making the Batik block work with Batik 1.7 Beta 1 (one exception fix lead to the next until I gave up). Maybe I'll get a helpful reply from the Batik community.

Thanks a lot for your comments!

-- Andreas



--
Andreas Hartmann, CTO
BeCompany GmbH
http://www.becompany.ch
Tel.: +41 (0) 43 818 57 01

Reply via email to