Bug 146256 Birt cannot process images from a jar-based plugin
BIRT Build: 2.1.0.N20060531-1258 I have an XML document containg references to images with an Eclipse plugin jar file. For example see "severityImage" in the following example: <RESULT name="Avoid returning java.lang.Object , downcast to specific type instead" severity="Recommendation" severityId="0" severityImage="jar:file:D:\rad\eclipse\plugins\org.eclipse.tptp.platform.analysis.core_4.2.0.v200605251528.jar!/icons/rulercmdation_obj.gif"> </RESULT> The URL was generated by Eclipse API's and returns a path to an image stored within a JARred plugin. This plugin is in the same workspace as BIRT so BIRT should be able to find it. However when the BIRT report generator tries to build the report it is unable to find the image. I suspect the image loader in the BIRT report generator does not properly handle Eclipse-based URL's. This is impacting our product deliverables and the only workarounds appears to be for our code to extract the images from the plugin and write them to the filesystem, then reference that image file for BIRT.
model/org.eclipse.birt.report.model/src/org/eclipse/birt/report/model/parser/ModuleReader.java
{
	/**
	 * 
	 */
	private static Logger logger = Logger.getLogger( ModuleReader.class
			.getName( ) );
	/**
	 * Parses an XML design file given an input stream. Creates and returns the
	 * internal representation of the report design
	 * 
	 * @param handler
	 *            the parser handler
	 * @param inputStream
	 *            the input stream that reads the design file
	 * @return the internal representation of the design
	 * 
	 * @throws DesignFileException
	 *             if the input stream is not well-formed xml, there is
	 *             unsupported tags and there is run-time exception.
	 */
	protected Module readModule( ModuleParserHandler handler,
			InputStream inputStream ) throws DesignFileException
	{
		assert handler != null;
		InputStream internalStream = inputStream;
		if ( !inputStream.markSupported( ) )
			internalStream = new BufferedInputStream( inputStream );
		assert internalStream.markSupported( );