玻璃鱼中的fop无法提供外部资源

时间:2011-06-07 11:24:02

标签: glassfish apache-fop

我正在通过java库中的fop 1.0生成PDF文件。单元测试运行正常,PDF按预期呈现,包括外部图形:

<fo:external-graphic content-width="20mm" src="url('images/image.png')" />

如果我在glassfish 3.1中的Java EE应用程序中渲染它,我总是会收到以下错误:

Image not found. URI: images/image.png. (No context info available)

我仔细检查了图像是否可用。它在.ear文件的.jar文件中可用,因此可以由ClasspathUriResolver提供。这是我如何设置fop-factory的代码信息:

FopFactory fopFactory = FopFactory.newInstance();
URIResolver uriResolver = new ClasspathUriResolver();
fopFactory.setURIResolver(uriResolver);
Fop fop = fopFactory.newFop(MimeConstants.MIME_PDF, out);
...

我还将URI解析器分配给TransformerFactory和Transformer但没有成功。如果有人可以帮助我,那会很棒。

- Wintermute

Btw:ClasspathUriResolver()看起来像这样

public class ClasspathUriResolver implements URIResolver {

  @Override
  public Source resolve(String href, String base) throws TransformerException {
    Source source = null;
    InputStream inputStream = ClassLoader.getSystemResourceAsStream(href);
    if (inputStream != null) {
      source = new StreamSource(inputStream);
    }
    return source;
  }
}

1 个答案:

答案 0 :(得分:3)

您考虑使用不同的类加载器,然后考虑ClassLoader.getSystemResourceAsStream(href);

尝试使用InputStream inputStream = getClass().getResourceAsStream(href);或其他内容。

那么它有用吗?