Почему я не могу открыть URL JBoss vfs: /? - PullRequest
12 голосов
/ 04 февраля 2011

Мы обновляем наше приложение с JBoss 4 до JBoss 6.

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

В JBoss 4 мы будем искать эти jar-файлы с помощью загрузчика классов и находить URL-адрес jar: //, который будет использоваться для чтениябанку и отправляем ее содержимое клиенту.

В JBoss 6, когда мы выполняем поиск, мы получаем vfs: / URL.Я понимаю, что это из пакета org.jboss.vfs.К сожалению, когда я вызываю openStream () для этого URL и читаю из потока, я сразу получаю EOF (read () возвращает -1).

Что дает?Почему я не могу прочитать ресурс, на который ссылается этот URL-адрес?

Я пытался получить доступ к базовым пакетам VFS, чтобы открыть файл через API-интерфейс JBoss VFS, но большая часть API выглядит закрытой,и я не смог найти подпрограмму для преобразования из URL-адреса vfs: / в объект VFS VirtualFile, поэтому я не смог никуда добраться.

Я могу попытаться найти файл на диске в JBoss, но этоПодход звучит очень ошибочно при обновлении.

Наш старый подход состоял в том, чтобы использовать Java Web Start для раздачи файлов JAR клиенту, а затем искать их в кэше Java Web Start для их извлечения.Но это ломалось при каждом незначительном обновлении Java, потому что структура кэша менялась.

Ответы [ 3 ]

10 голосов
/ 04 февраля 2011

Предыдущий ответ по-прежнему дает поток, из которого невозможно прочитать.

Я обнаружил, что могу получить физический файл, на который ссылается VirtualFile, но возвращаемый результат ссылается на каталог с именем content /, находящийся в каталоге, который содержит нужный мне файл. Итак:

 import org.jboss.vfs.*;

  String filename = ...;
  URLConnection conn = new URL("vfs:/...").openConnection();
  VirtualFile vf = (VirtualFile)conn.getContent();
  File contentsFile = vf.getPhysicalFile();
  File dir = contentsFile.getParentFile();
  File physicalFile = new File(dir, filename);
  InputStream is = new FileInputStream(physicalFile);

Какой беспорядок. Я до сих пор не понимаю свой первоначальный вопрос. Почему JBoss передаст мне URL, с которого невозможно прочитать? Но, по крайней мере, я могу двигаться дальше.

4 голосов
/ 04 февраля 2011

Проблема JBVFS-147 Не удается прочитать из vfs: URL протокола все еще не решена, возможно, вы хотите проголосовать и посмотреть эту проблему.

4 голосов
/ 04 февраля 2011

Я обнаружил, что метод getContent () даст мне VirtualFile, который, возможно, я смогу использовать. Все еще не объясняет, почему я не могу просто сделать openStream () для URL vfs: /.

import org.jboss.vfs.*;

URLConnection conn = new URL("vfs:/...").openConnection();
VirtualFile vf = (VirtualFile)conn.getContent();
InputStream is = vf.openStream();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...