Как я могу загрузить JAR из ресурса, не заканчивающегося *.jar в теге ресурсов JNLP?

Я хотел бы запустить файл JAR с Java Web Start. К сожалению, мне приходится динамически загружать файл JAR (он хранится в Moodle). Следовательно, ссылка на файл JAR не заканчивается на «.jar». На самом деле это вызов PHP-скрипта, который динамически загружает JAR-файл. Если я открою ссылку в своем браузере, файл JAR будет загружен. Во всяком случае, Java Web Start не может загрузить его таким образом. Я получаю следующее исключение:

com.sun.deploy.net.FailedDownloadException: Ресурс konnte nicht geladen werden: http://localhost/moodle22/pluginfile.php/39/mod_assignment/my_file на com.sun.deploy.net.DownloadEngine.actionDownload(неизвестный источник) на com.sun.deploy.net.DownloadEngine.getCacheEntry(неизвестный источник) на com .sun.deploy.net.DownloadEngine.getCacheEntry(неизвестный источник) на com.sun.deploy.net.DownloadEngine.getResourceCacheEntry(неизвестный источник) на com.sun.deploy.net.DownloadEngine.getResourceCacheEntry(неизвестный источник) на com.sun .deploy.net.DownloadEngine.getResource(неизвестный источник) на com.sun.javaws.LaunchDownload$DownloadTask.call(неизвестный источник) на java.util.concurrent.FutureTask$Sync.innerRun(неизвестный источник) на java.util.concurrent .FutureTask.run(неизвестный источник) на java.util.concurrent.ThreadPoolExecutor$Worker.runTask(неизвестный источник) на java.ut il.concurrent.ThreadPoolExecutor$Worker.run(неизвестный источник) на java.lang.Thread.run(неизвестный источник)

И инкапсулированное исключение:

java.io.IOException: Неверный файл jar на com.sun.deploy.net.HttpDownloadHelper.download (неизвестный источник) на com.sun.deploy.cache.Cache.downloadResourceToTempFile (неизвестный источник) на com.sun.deploy.cache. Cache.downloadResourceToCache(неизвестный источник) по адресу com.sun.deploy.net.DownloadEngine.actionDownload(неизвестный источник) по адресу com.sun.deploy.net.DownloadEngine.getCacheEntry(неизвестный источник) по адресу com.sun.deploy.net.DownloadEngine. getCacheEntry(неизвестный источник) на com.sun.deploy.net.DownloadEngine.getResourceCacheEntry(неизвестный источник) на com.sun.deploy.net.DownloadEngine.getResourceCacheEntry(неизвестный источник) на com.sun.deploy.net.DownloadEngine.getResource( Неизвестный источник) на com.sun.javaws.LaunchDownload$DownloadTask.call(Неизвестный источник) на java.util.concurrent.FutureTask$Sync.innerRun(Неизвестный источник) на java.util.concurrent.FutureTask.run(Неизвестный источник) на java.util.concurrent.ThreadPoolExecutor$Worker.runTask(неизвестный источник e) в java.util.concurrent.ThreadPoolExecutor$Worker.run(неизвестный источник) в java.lang.Thread.run(неизвестный источник)

Мой файл JNLP:

<?xml version="1.0" encoding="utf-8"?>
<jnlp codebase="http://localhost">
  <information>
    <title>Test</title>
    <vendor>Me</vendor>
    <homepage href="http://www.google.com"/>
    <description>Test</description>
    <offline-allowed/>
  </information>
  <security>
    <all-permissions/>
  </security>
  <resources>
    <java version="1.5+"/>
    <jar href="moodle22/pluginfile.php/39/mod_assignment/my_file"/>
  </resources>
  <application-desc>
    <argument>--argument</argument>
  </application-desc>
</jnlp>

Если я сошлюсь на JAR с такой прямой ссылкой, все будет работать так, как ожидалось:

<resources>
    <java version="1.5+"/>
    <jar href="moodle22/mod/assignment/type/something/tmp/test.jar"/>
</resources>

person Simon    schedule 03.01.2012    source источник
comment
Мало что может помочь, если мы не знаем, что делает pluginfile.php и чему именно он служит. Что за Content-Type? Вы пишете это в режиме ASCII? Я действительно не знаю Moodle, но почему у него не может быть расширения?   -  person Amadan    schedule 03.01.2012


Ответы (1)


Спасибо @Амадан!

Java Web Start на самом деле может загружать JAR-файлы из ресурсов, которые не заканчиваются на «.jar». Нужно только установить соответствующий тип контента:

Content-type: application/java-archive

Тогда все работает отлично :-)

person Simon    schedule 03.01.2012