2015-10-09 4 views
1

Я создал несколько пользовательских сервлеты, и вызвать его люблю:Пользовательские Servlet в Liferay

https://[domain]/delegate/getpefrentry?param1=blabla&param2=sdsada

Он отлично работает, но если я перезагрузить сервер, я получаю эту ошибку:

Сервер обнаружил внутреннюю ошибку(), которая помешала ему выполнить этот запрос.

исключение

javax.servlet.ServletException: No servlet registred for context getpefrentry 
     com.liferay.portal.kernel.servlet.PortalDelegatorServlet.service(PortalDelegatorServlet.java:79) 
     javax.servlet.http.HttpServlet.service(HttpServlet.java:722) 
     com.liferay.portal.kernel.servlet.filters.invoker.InvokerFilterChain.doFilter(InvokerFilterChain.java:72) 
     com.liferay.portal.kernel.servlet.BaseFilter.processFilter(BaseFilter.java:121) 
     com.liferay.portal.servlet.filters.virtualhost.VirtualHostFilter.processFilter(VirtualHostFilter.java:208)

I need to hot deploy the war file of the servlet to make it work again.

My Liferay-hook.xml:

<hook> 
<portal-properties>portal.properties</portal-properties> 
<language-properties>content/Tips.properties</language-properties> 
<servlet-filter> 
    <servlet-filter-name>MyFilter</servlet-filter-name> 
    <servlet-filter-impl>com.ncs.phm.ws.PhmWebServiceFilter</servlet-filter-impl> 
</servlet-filter> 
<servlet-filter-mapping> 
    <servlet-filter-name>MyFilter</servlet-filter-name> 
    <url-pattern>/delegate/*</url-pattern> 
    <dispatcher>REQUEST</dispatcher> 
    <dispatcher>FORWARD</dispatcher> 
</servlet-filter-mapping> 

мой web.xml:

<servlet> <display-name>WSPEFR</display-name> <servlet-name>WSPEFR</servlet-name> <servlet-class>com.liferay.portal.kernel.servlet.PortalDelegateServlet</servlet-class> <init-param> <param-name>servlet-class</param-name> <param-value>com.ncs.phm.ws.PhmWebServicePefr</param-value> </init-param> <init-param> <param-name>sub-context</param-name> <param-value>getpefrentry</param-value> </init-param> <init-param> <param-name>method</param-name> <param-value>get-latest-pefr-entry</param-value> </init-param> <load-on-startup>0</load-on-startup>

Я также добавил в portal.properties это: auth.public.paths =/делегат/*

ответ

0

Это связано с приведенным ниже кодом в com. liferay.portal.kernel.servlet.PortalDelegatorServlet's service().

String[] paths = uri.split(StringPool.SLASH); 
HttpServlet delegate = _delegates.get(paths[1]); 
if (delegate == null) { 
    throw new ServletException("No servlet registred for context " + paths[1]); 
} 

Ожидается, что вторая строка в uri должна присутствовать в списке делегатов. ex:/delegate/servlet-name

Вы зарегистрировали свой делектор портала в файле init() PortalDelegateServlet ?. Если не попытайтесь с этим. Он гарантирует, что делегат добавляется после загрузки сервлета контейнером сервлета.

servlet.init(config); 
PortalServletDelegationManager.addDelegate(subContext, servlet); 

Сообщите мне об этом.

+0

Спасибо за ваш ответ, я попробовал, но он все тот же. Я поставил журнал на PortalDelegateServlet, он появляется только в том случае, если я горячо развертываю. Если я перезагружаюсь, кажется, что он не загружается, и, тем самым, остается той же ошибкой. –

0

Довольно уверен, что проблема эта строка в вашем liferay-hook.xml:

<load-on-startup>0</load-on-startup> 

(0 означает false)

Изменить его 1, чтобы загрузить ваш сервлет при запуске.

Смежные вопросы