-
Type:
Bug
-
Status: Closed
-
Resolution: Fixed
-
Affects Version/s: Master
-
Fix Version/s: 7.0.0 DXP FP35, 7.0.0 DXP SP7, 7.0.5 CE GA6, 7.0.X, 7.1.0 M1, 7.1.X, Master
-
Component/s: Core Infrastructure > Wab Generator
-
Branch Version/s:7.0.x
-
Backported to Branch:Committed
-
Story Points:1
-
Fix Priority:2
-
Git Pull Request:
Description
When deploying a war-styled plugin with listener-classes declared in web.xml, the deployed plugin does not work as expected.
Details
WAR-styled plugins are processed by Liferay's WAB Generator during deployment.
Based on the documentation, the listener-classes declared should have their packages added under the Import-Package header in the WAB's META-INF/MANIFEST.MF file.
The WAB Generator detects packages a plugin's JSPs and descriptor files reference. The descriptor files include web.xml, liferay-web.xml, portlet.xml, liferay-portlet.xml, and liferay-hook.xml. The WAB Generator verifies whether the detected packages are in the plugin's WEB-INF/classes folder or in a JAR file in the plugin's WEB-INF/lib folder. Packages that aren't found in either location are added to an Import-Package header in the WAB's META-INF/MANIFEST.MF file.
Reference: https://dev.liferay.com/develop/tutorials/-/knowledge_base/7-0/using-the-wab-generator
Since the packages of the declared listener-classes are not added to the Import-Package header, a ClassNotFoundException is being thrown.
Steps to Reproduce
- Startup Liferay
- Deploy the attached wab-import-poc.war
- Observe log
- Expected Result: The bundle will boot successfully
- Actual Result: ClassNotFoundException is thrown
- Shutdown Liferay
- Include the following portal property:
module.framework.web.generator.headers.Import-Package[wab-import-poc]=com.liferay.portal.kernel.spring.context
- Restart Liferay and wait till it starts up completely
- Re-deploy the attached wab-import-poc.jar
- Notice: ClassNotFoundException is no longer thrown.
Additional Details
Attached is a POC war-styled plugin that was generated using Liferay Blade's: WAR MVC Portlet template.
Reference: https://dev.liferay.com/develop/reference/-/knowledge_base/7-0/war-mvc-portlet-template
The only change was modifying web.xml to include the following listener-class tag:
<listener> <listener-class>com.liferay.portal.kernel.spring.context.PortletContextLoaderListener</listener-class> </listener>
Attached is also the source: wab-import-poc-src.zip