getContextClassLoader (). getResource ("") возвращает ноль в Weblogic, а значение пути возврата в JBoss - PullRequest
0 голосов
/ 12 января 2012

Наша команда осуществляет миграцию приложения с JBoss 4.2 на Weblogic 10.3.4.

Существует некоторая логика в приложении, которая требует знать имя файла уха. Для этого используется код ниже:

URL url = Thread.currentThread().getContextClassLoader().getResource("");

Этот код выполняется на этапе развертывания во время инициализации Spring.

И на JBoss это работает нормально, но на Weblogic getResource("") возвращает null в этом случае.

Итак, мой вопрос, почему это не работает в Weblogic?


Дополнительно я создал небольшие страницы test.jsp с несколькими строками кода, которые возвращают значение Thread.currentThread().getContextClassLoader().getResource(""), и это работает в Weblogic. Поэтому я сделал небольшой стол, чтобы показать эту ситуацию более наглядно:

+----------+-------------+------------------------------+
|          | on JSP page | during spring initialization |
+----------+-------------+------------------------------+
| JBoss    | works       | works                        |
| Weblogic | works       | returns null                 |
+----------+-------------+------------------------------+

Структура заявки следующая. getResource("") код находится внутри my.jar:

my.ear
|
+-my.war
  |
  +-WEB-INF
  | |
  | +-lib
  |   |
  |   +-my.jar
  |   +-org.springframework.aop-3.0.5.RELEASE.jar
  |   +-org.springframework.beans-3.0.5.RELEASE.jar
  |   +-org.springframework.context.support-3.0.5.RELEASE.jar
  |   +-org.springframework.context-3.0.5.RELEASE.jar
  |   +-org.springframework.core-3.0.5.RELEASE.jar
  |   +-other jars
  |
  +-test.jsp
  +-jsp pages    

Ответы [ 2 ]

1 голос
/ 12 января 2012

на JBoss это работает нормально, но на Weblogic getResource("") возвращает null в этом случае.

Это не удивительно, поскольку getResource("") не имеет никакого смысла. Пустая строка не является путем к ресурсу.

Полагаю, JBoss просто добавляет аргумент в конец базового каталога, а затем разрешает его в виде файла, не проверяя значение в здравом уме. Weblogic может делать что-то более строгое.

Как бы то ни было, вам нужно найти более надежный метод для определения базового каталога EAR, который использует формальные API в соответствии с намерениями проектировщиков.

Редактировать : Насколько мне известно, API-интерфейсы JavaEE не обеспечивают способ делать то, что вы хотите. Вам придется полагаться на логику, специфичную для сервера приложений, либо используя выдумку getResource, либо запрашивая, например, JMX MBeans встроен в сервер. Вам нужно было бы автоматически определить тип сервера во время выполнения, если вы хотите, чтобы ваше приложение работало на обоих - или изменить приложение, чтобы оно вообще не нуждалось в информации.

0 голосов
/ 26 августа 2012

С той же проблемой, с которой я столкнулся при вызове службы из приложения ear на WLS 10.3.5.Если вы дадите имя ресурса с путем Thread.currentThread().getContextClassLoader().getResource("META-INF/wsdls/test.wsdl");, это даст правильный путь URL-адреса, например my.jar!META-INF/wsdls/test.wsdl.Но не может загрузить WSDL.

...