FOP в Glassfish не в состоянии сделать внешние ресурсы - PullRequest
2 голосов
/ 07 июня 2011

Я генерирую файл PDF через fop 1.0 из библиотеки Java. Модульные тесты работают нормально, и PDF отображается должным образом, включая внешний рисунок:

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

Если я отображаю это в приложении Java EE в glassfish 3.1, я всегда получаю следующую ошибку:

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

Я дважды проверил, доступно ли изображение. Он доступен в файле .jar в файле .ear и поэтому должен быть доступен ClasspathUriResolver. Вот фрагмент кода того, как я настраиваю фабрику fop:

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

Я также назначил преобразователь URI для TransformerFactory и Transformer, но безуспешно. Было бы здорово, если бы кто-нибудь смог мне помочь.

- Wintermute

Кстати: 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 Ответ

3 голосов
/ 07 июня 2011

Вы рассматриваете другой загрузчик классов , затем ClassLoader.getSystemResourceAsStream(href);

Попробуйте InputStream inputStream = getClass().getResourceAsStream(href); или что-то еще, может быть.

Это работает, тогда?

...