Этот вопрос, вероятно, был answred на SO уже но я не смог заставить его работать сам ...Liferay портлета и относительный путь
У меня есть Liferay портлета, и я пытаюсь прочитать некоторые config.xml файл, когда это инициализировать портлет (повторно развернут). Тем не менее, я не могу найти относительный (или абсолютный) путь к портлету из Java ... This question был близок к проблеме, которую я решаю, но URL-адрес больше не работает ...
Когда я звоню
String path = getPortletContext().getRealPath("someDirectoryExample");
в методе ПОСЛЕ проблемы была инициализации, она работает, но я хотел бы сделать это внутри конструктора портлетов (= во время инициализации фазы). Это, однако, конец этой чрезвычайно длинной полосой исключение:
09:43:43,905 INFO [STDOUT] Caused by: java.lang.IllegalStateException: Config is null, please ensure that your init(config) method calls super.init(config)
09:43:43,905 INFO [STDOUT] at javax.portlet.GenericPortlet.getPortletContext(GenericPortlet.java:463)
09:43:43,905 INFO [STDOUT] at com.logic.PortletVisual.<init>(PortletVisual.java:23)
09:43:43,905 INFO [STDOUT] at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
...
Было бы совершенно нормально, если бы я мог просто поместить файл XML где-то в DOCROOT или любой другой каталог и использовать относительный путь, но класс Java сделал не найти файл, даже если я скопировал его везде ... (путь по умолчанию - это каталог bin на сервере - JBossAS, но я хотел бы сохранить этот файл в моих каталогах portelt).
Спасибо за любые советы!
EDIT: Не путайте исключения. Все работает нормально, когда я не пытаюсь вызвать функцию getRealPath() в конструкторе!
Достаточно справедливо, спасибо за то, что это яснее для меня. Однако существует ли способ доступа к ресурсам (например, XML-файлам) в конструкторе портлета? Если да, то как это сделать? Если нет, есть ли альтернатива? Это то, что беспокоит меня больше всего, и я не нашел никаких учебных пособий по этому поводу ... Кроме того, это исключение возникает только при попытке получить путь в конструкторе, все остальное работает нормально! – Smajl
Почему это обязательное пройти через все виды обручей, чтобы сделать это в конструкторе? В документации жизненного цикла четко указано, что init() будет вызываться перед любым другим значимым действием. Вы используете фреймворк - используйте этот режим работы по умолчанию. Это сделает вашу жизнь намного проще, но что более важно: она сделает жизнь каждого будущего помощника намного проще, если они смогут просто сформулировать стандартные предположения для рамки и предположить, что они соблюдаются. –
Вы правы, я совершенно новый для всего этого «портлета» :-) Я постараюсь сделать это в функции init(). Вы знаете, есть ли какой-то эквивалент getRealPath(), который будет лучше работать для моей проблемы? – Smajl