Приложение Java WS время от времени игнорирует аргументы

Недавно я собрал приложение JWS, которое получает аргумент из динамически создаваемого файла JNLP (подробности можно найти здесь). Это все хорошо, за исключением того, что приложение игнорирует аргумент (запускается без загрузки указанного числа) в моей системе (linux x86_64). Однако кажется, что приложение JWS точно так же, как и предполагалось на машине win_64 моего коллеги. Это довольно интересно, так как я не смог повторить его успех на другом подобном win_64.

Чтобы сделать все более захватывающим, то же самое приложение JWS работает просто отлично (другими словами, не игнорирует аргумент), когда я загружаю файл JNLP и запускаю его с помощью javaws на терминале.

Я сравнил файлы java.policy и javaws.policy, и нет никаких отличий. Файл JNLP явно дает все разрешения, а файлы JAR подписаны полностью (что не может быть источником проблемы, иначе приложение не запустится, верно?).

Вопрос 1: Так от чего может зависеть эта проблема?

РЕДАКТИРОВАТЬ: Мне только что удалось получить правильный ответ от новой (в этом конкретном смысле) машины win32, без каких-либо явных обновлений Java. Вопрос 2: Есть ли файл журнала для javaws, в котором я могу проверить, что происходит, или, альтернативно, могу ли я подробно описать запуск на консоли, чтобы я мог создавать свои собственные настраиваемые журналы?

Редактировать 2: Кстати, я забыл упомянуть, что я также разместил этот вопрос на форумах Oracle, о которых я, возможно, должен был упомянуть первоначально, как это было вежливо указано там. В любом случае, в потоке есть больше информации о файле JNLP, на случай, если это может быть актуально.

Редактировать 3: я пришел к выводу, что проблема может быть вызвана свойствами <jnlp> тег, при создании файла JNLP. Первоначально jnlp тег выглядел примерно так:

<jnlp spec="1.0+" codebase="http://mydomain/myapp/" 
    href="my.jnlp">

Проблема заключается в том, что в каталоге, объявленном в базе кодов, нет my.jnlp, вместо этого код JNLP создается на лету скриптом Perl в каталоге cgi-bin и возвращается как выходной поток (I считать). Поэтому я отредактировал скрипт для генерации JNLP со следующим тегом:

<jnlp spec="1.0+" codebase="http://mydomain/myapp/" 
    href="http://mydomain/cgi-bin/my.jnlp">

Результат этого эксперимента: на этот раз даже графический интерфейс не запускался... Я нашел соответствующую ветку на форумах Oracle, где было рекомендовано определить href недвижимость следующим образом:

href="script.jsp?<%=request.getQueryString()%>">

что, к сожалению, не решает мою проблему.

Вопрос 3: Может ли эта модификация быть применимой и к моей ситуации? В таком случае как? Если бы не какие-либо идеи о том, что может быть причиной проблемы, были бы серьезно оценены, так как я сейчас нахожусь в тупике в своей работе

2 ответа

Решение

После двух недель борьбы с синтаксисом файла JNLP и моим CGI-сценарием, я, наконец, нашел суть проблемы. Я отмечаю это здесь (рискуя выглядеть достаточно претенциозно, чтобы ответить на мой собственный вопрос) на случай, если кто-то столкнется с той же проблемой.

href собственность <jnlp> tag, в моем случае было явно ненужным, и после удаления приложение начало работать так, как и предполагалось, на системах Linux и Win. Я не уверен на 100%, является ли это точной причиной, но, насколько я понимаю, синтаксис jnlp генерируется из скрипта и напрямую возвращается пользователю вместо файла jnlp где-то в файловой системе. href свойство указывало на неправильное место и, возможно, вызывало какое-то столкновение, которое по-разному обрабатывается в разных ОС.

Убедитесь, что файл JNLP не кэшируется. Т.е. каждый раз, когда вы пробуете что-то новое, вы переименовываете / перемещаете файл JNLP?


Что касается ваших обновлений,
Единственное, что мне приходит в голову, это то, что вам нужно убедиться, что ваш скрипт отвечает правильным типом mime: application/x-java-jnlp-file

То есть из вашего cgi-скрипта вы должны предоставить поле заголовка HTTP

Content-Type: application/x-java-jnlp-file
Другие вопросы по тегам