2014-09-07 4 views
1

У меня проблемы с моим приложением Apache FOP.Apache FOP: Изображение не найдено после упаковки ресурсов в банку

Все работало нормально, пока я не начал упаковывать внешние файлы (xsl, ttf, ...) из внешнего рабочего каталога в файл jar приложения. С тех пор, изображения не загружаются больше, и я получаю следующее сообщение об ошибке:

FOUserAgent - Image not available. URI: data:image/jpeg;base64,.... 
Reason: org.apache.xmlgraphics.image.loader.ImageException: The file format is 
not supported. No ImagePreloader found for data:image/jpeg;base64,...(No context info available) 
org.apache.xmlgraphics.image.loader.ImageException: The file format is not supported. No ImagePreloader found for data:image/jpeg;base64 

В файле XSL, изображения с встроенной:

<fo:external-graphic xsl:use-attribute-sets="helpicon" 
    fox:alt-text="helpicon" 
    src="url('data:image/jpg;base64,...I'm the base64 encoded image data...')"> 
</fo:external-graphic> 

Почему изображения больше не работает, когда я пакет файлы в банку? Изображения встроены в base64 строку в файл XSL, так что данные изображения должны быть доступны ...

Спасибо :)


Редактировать 1 я устанавливаю FopFactory Базовый URL с:

String path = MyClass.class.getProtectionDomain().getCodeSource().getLocation().getPath(); 
    String decodedPath = URLDecoder.decode(path, "UTF-8"); 
    File jar = new File(decodedPath); 

    fopFactory.setBaseURL(jar.getParent()); 

и это мой ClasspathUriResolver:

public class ClasspathUriResolver implements URIResolver { 

@Override 
public Source resolve(String fileName, String base) throws TransformerException { 

    System.out.print(" RESOLVING: " + fileName); 

    URL url = getClass().getClassLoader().getResource(fileName); 
    StreamSource jarFileSS = new StreamSource(); 

    System.out.println(" TO: " + url.toString()); 

    try { 
     InputStream jarfileIS = url.openStream(); 
     jarFileSS.setInputStream(jarfileIS); 
    } catch (IOException ioExp) { 
     throw new TransformerException(ioExp); 
    } 
    return jarFileSS; 
} 

Я проверил журнал из ClasspathUriResolver, включенные файлы (шрифты, таблицы стилей) были правильно решены.

+0

Проверьте правильность написания имени файла; в банке пути к файлам чувствительны к регистру (и с помощью косой черты '/'). –

+0

Я не думаю, что имена файлов неверны, потому что данные изображения кодируются base64 в атрибуте src внешнего графического элемента. – sbo

+0

Я скорее думал о файлах без изображения. Но это действительно похоже на проблему с базой документов/URL ('userAgent.setBaseURL (" file: /// C:/Temp/"); ') - вы можете показать код загрузки; что вы изменили в коде. –

ответ

0

Я обновил версию jdk до 1.7.71, и теперь все сработало. Спасибо :)

Смежные вопросы