Skip to content

Commit

Permalink
Winduprule-894 (#800)
Browse files Browse the repository at this point in the history
* WINDUPRULE-894: tests added

* added namespace data into rule and test

* eap8-faces rules

* Faces 4 JSP rule not working

* WINDUPRULE-894: identify a jsp file in rule

* WINDUPRULE-894: alter markup in rule message
  • Loading branch information
m-brophy committed Dec 14, 2022
1 parent 88f3544 commit 6488697
Show file tree
Hide file tree
Showing 6 changed files with 363 additions and 0 deletions.
182 changes: 182 additions & 0 deletions rules/rules-reviewed/eap8/eap6/eap8-faces.windup.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,182 @@
<?xml version="1.0"?>
<ruleset xmlns="http://windup.jboss.org/schema/jboss-ruleset" id="eap8-faces"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://windup.jboss.org/schema/jboss-ruleset http://windup.jboss.org/schema/jboss-ruleset/windup-jboss-ruleset.xsd">
<metadata>
<description>
This ruleset provides analysis of JSF for migration to JBoss EAP 8.
</description>
<dependencies>
<addon id="org.jboss.windup.rules,windup-rules-javaee,3.0.0.Final" />
<addon id="org.jboss.windup.rules,windup-rules-java,3.0.0.Final" />
</dependencies>
<sourceTechnology id="eap" versionRange="[6,7)" />
<targetTechnology id="eap" versionRange="[8,)" />
<tag>eap8</tag>
</metadata>
<rules>
<rule id="eap8-faces-00001">
<when>
<or>
<project>
<artifact groupId="org.jboss.spec.javax.faces" artifactId="{*}"/>
</project>
<project>
<artifact groupId="com.sun.faces" artifactId="{*}"/>
</project>
</or>
</when>
<perform>
<hint title="Dependency on JSF artifacts must be updated" effort="1" category-id="mandatory">
<message>Dependency on JSF artifacts must be updated for EAP8 to Jakarta Faces 4.0.
Update dependency to `org.glassfish:jakarta.faces:4.0.0` or greater</message>
<link title="Jakarta Faces 4.0 specification"
href="https://jakarta.ee/specifications/faces/4.0/"/>
<tag>eap8</tag>
</hint>
</perform>
</rule>
<rule id="eap8-faces-00002">
<when>
<javaclass references="javax.faces.bean.ManagedProperty">
<location>IMPORT</location>
<location>ANNOTATION</location>
</javaclass>
</when>
<perform>
<hint title="Source reference to `javax.faces.bean.ManagedProperty` must be updated" effort="1" category-id="mandatory">
<message>Source reference to `javax.faces.bean.ManagedProperty` must be updated.
Use 'jakarta.faces.annotation.ManagedProperty' along with `@Inject`.</message>
<link title="Jakarta Faces ManagedProperty api"
href="https://jakarta.ee/specifications/platform/9/apidocs/jakarta/faces/bean/managedproperty"/>
<tag>eap8</tag>
</hint>
</perform>
</rule>
<rule id="eap8-faces-00003">
<when>
<or>
<javaclass references="javax.faces.bean.ManagedBean">
<location>ANNOTATION</location>
</javaclass>
<xmlfile matches="//*/j:managed-bean" in="faces-config.xml">
<namespace prefix="j" uri="http://java.sun.com/xml/ns/javaee"/>
</xmlfile>
</or>
</when>
<perform>
<hint title="JSF ManagedBean has been removed" effort="1" category-id="mandatory">
<message>JSF ManagedBean has been removed.
Use CDI's `@jakarta.inject.Named(“foo”)` to replace JSF ManagedBeans.</message>
<link title="Jakarta EE9 Faces ManagedBean api (Deprecated)"
href="https://jakarta.ee/specifications/platform/9/apidocs/jakarta/faces/bean/managedbean"/>
<link title="Jakarta CDI 4.0 Specification"
href="https://jakarta.ee/specifications/cdi/4.0/"/>
<tag>eap8</tag>
</hint>
</perform>
</rule>
<rule id="eap8-faces-00004">
<when>
<javaclass references="javax.faces.bean.ViewScoped">
<location>IMPORT</location>
</javaclass>
</when>
<perform>
<hint title="Annotation `javax.faces.bean.ViewScoped` removed" effort="1" category-id="mandatory">
<message>Annotation `javax.faces.bean.ViewScoped` removed.
Use `jakarta.faces.view.ViewScoped` to replace it.</message>
<link title="Jakarta Faces ViewScoped api"
href="https://jakarta.ee/specifications/faces/3.0/apidocs/jakarta/faces/view/viewscoped"/>
<tag>eap8</tag>
</hint>
</perform>
</rule>
<rule id="eap8-faces-00005">
<when>
<javaclass references="javax.faces.bean.{scope}Scoped">
<location>IMPORT</location>
</javaclass>
</when>
<perform>
<hint title="Annotation `javax.faces.bean.{scope}Scoped` removed" effort="1" category-id="mandatory">
<message>Annotation `javax.faces.bean.{scope}Scoped` removed.
Use `jakarta.enterprise.context.{scope}Scoped` to replace it.</message>
<link title="jakarta.enterprise.context package javadoc"
href="https://jakarta.ee/specifications/cdi/4.0/apidocs/jakarta.cdi/jakarta/enterprise/context/package-summary.html"/>
<tag>eap8</tag>
</hint>
</perform>
<where param="scope">
<matches pattern="Application|Request|Session" />
</where>
</rule>
<rule id="eap8-faces-00006">
<when>
<javaclass references="javax.faces.bean.CustomScoped">
<location>IMPORT</location>
</javaclass>
</when>
<perform>
<hint title="Annotation `javax.faces.bean.CustomScoped` removed" effort="1" category-id="mandatory">
<message>Annotation `javax.faces.bean.CustomScoped` removed.
Use `jakarta.enterprise.context.spi.Context` to replace it.</message>
<link title="jakarta.enterprise.context.spi.Context javadoc"
href="https://jakarta.ee/specifications/cdi/4.0/apidocs/jakarta.cdi/jakarta/enterprise/context/spi/context"/>
<tag>eap8</tag>
</hint>
</perform>
</rule>
<rule id="eap8-faces-00007">
<when>
<javaclass references="javax.faces.bean.NoneScoped">
<location>IMPORT</location>
</javaclass>
</when>
<perform>
<hint title="Annotation `javax.faces.bean.NoneScoped` removed" effort="1" category-id="mandatory">
<message>Annotation `javax.faces.bean.NoneScoped` removed.
Use `jakarta.enterprise.context.Dependent` to replace it.</message>
<link title="jakarta.enterprise.context.Dependent javadoc"
href="https://jakarta.ee/specifications/cdi/4.0/apidocs/jakarta.cdi/jakarta/enterprise/context/dependent"/>
<tag>eap8</tag>
</hint>
</perform>
</rule>
<rule id="eap8-faces-00008">
<when>
<or>
<javaclass references="javax.faces.view.facelets.FaceletsResourceResolver"/>
<javaclass references="javax.faces.view.facelets.ResourceResolver"/>
</or>
</when>
<perform>
<hint title="ResourceResolvers have been removed" effort="3" category-id="mandatory">
<message>ResourceResolvers have been removed in eap8.
Instead, implement a `jakarta.faces.application.ResourceHandler` and register the fully qualified class name via faces-config.xml/application/resource-handler element</message>
<link title="Faces 4.0: remove deprecated ResourceResolver"
href="https://github.com/jakartaee/faces/issues/1583"/>
<tag>eap8</tag>
</hint>
</perform>
</rule>
<rule id="eap8-faces-00009">
<when>
<or>
<filecontent filename="{*}.jsp" pattern="&lt;jsp"/>
<filecontent filename="{*}.jsp" pattern="&lt;%"/>
</or>
</when>
<perform>
<hint title="JSP support has been removed in Jakarta EE 10" effort="5" category-id="mandatory">
<message>JSP support has been removed in Jakarta EE 10. Facelets will remain as the only default view language, and views can also now be created solely using java.</message>
<link title="Jakarta EE Faces 4.0 Facelets"
href="https://jakarta.ee/specifications/faces/4.0/jakarta-faces-4.0.html#a5476"/>
<link title="Support for creating views in Java"
href="https://github.com/jakartaee/faces/issues/1581"/>
<tag>eap8</tag>
</hint>
</perform>
</rule>
</rules>
</ruleset>
18 changes: 18 additions & 0 deletions rules/rules-reviewed/eap8/eap6/tests/data/faces/FacesTest.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
package com.jboss.test;

import javax.faces.bean.ManagedProperty;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;
import javax.faces.bean.ApplicationScoped;
import javax.faces.bean.RequestScoped;
import javax.faces.bean.SessionScoped;
import javax.faces.bean.CustomScoped;
import javax.faces.bean.NoneScoped;
import javax.faces.view.facelets.FaceletsResourceResolver;
import javax.faces.view.facelets.ResourceResolver;

@ManagedBean
public class FacesTest
{

}
11 changes: 11 additions & 0 deletions rules/rules-reviewed/eap8/eap6/tests/data/faces/faces-config.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
<?xml version="1.0"?>
<faces-config version="1.2"
xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-facesconfig_1_2.xsd">
<managed-bean>
<managed-bean-name>testController</managed-bean-name>
<managed-bean-class>com.jboss.Controller</managed-bean-class>
<managed-bean-scope>session</managed-bean-scope>
</managed-bean>
</faces-config>
35 changes: 35 additions & 0 deletions rules/rules-reviewed/eap8/eap6/tests/data/faces/faces.jsp
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
<%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1" %>

<%@ taglib prefix="some" uri="some.tld" %>
<%@ taglib prefix="testSubstr" uri="/WEB-INF/Substr.taglib.tld"%>

<%@ attribute name="greeting" required="true" %>
<%@ attribute name="name" required="true" %>

<%!
public boolean errorHandler( String field, String value, Exception ex ) {
return true;
}
%>

<jsp:useBean id="user" class="user.UserData" scope="session"/>

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>Simple JSP</title>
</head>
<%@ page import="java.util.NonExistent" %>
<%@ page import="java.util.Date" %>
<%@ page import="" %>
<body>
<h3>Hello world</h3><br>
<strong>Current Time is</strong>: <%=new Date() %>

<c:out value="${'<tag> , &'}"/>
<testSubstr:substring input="Windup greets you" start="0" end="6"/>
<some:tag> body </some:tag>

<%@ include file="included.jsp" %>
</body>
</html>
33 changes: 33 additions & 0 deletions rules/rules-reviewed/eap8/eap6/tests/data/faces/pom.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
<?xml version="1.0" encoding="UTF-8"?>

<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<artifactId>faces-test</artifactId>
<packaging>war</packaging>
<name>faces-test</name>
<description>This project imports faces dependencies</description>

<licenses>
<license>
<name>Apache License, Version 2.0</name>
<url>http://www.apache.org/licenses/LICENSE-2.0.html</url>
<distribution>repo</distribution>
</license>
</licenses>

<dependencies>
<dependency>
<groupId>org.jboss.spec.javax.faces</groupId>
<artifactId>jboss-jsf-api_2.3_spec</artifactId>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>com.sun.faces</groupId>
<artifactId>jsf-api</artifactId>
<scope>provided</scope>
</dependency>
</dependencies>

</project>
84 changes: 84 additions & 0 deletions rules/rules-reviewed/eap8/eap6/tests/eap8-faces.windup.test.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,84 @@
<?xml version="1.0"?>
<ruletest id="eap8-faces-tests"
xmlns="http://windup.jboss.org/schema/jboss-ruleset"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://windup.jboss.org/schema/jboss-ruleset http://windup.jboss.org/schema/jboss-ruleset/windup-jboss-ruleset.xsd">
<testDataPath>data/faces/</testDataPath>
<rulePath>../eap8-faces.windup.xml</rulePath>
<ruleset>
<rules>
<rule id="eap8-faces-00001-test">
<when>
<not>
<iterable-filter size="2">
<hint-exists message="Dependency on JSF artifacts must be updated"/>
</iterable-filter>
</not>
</when>
<perform>
<fail message="[eap8-faces-00001] The hint was not found!" />
</perform>
</rule>
<rule id="eap8-faces-00002-test">
<when>
<not>
<iterable-filter size="1">
<hint-exists message="Source reference to `javax.faces.bean.ManagedProperty` must be updated"/>
</iterable-filter>
</not>
</when>
<perform>
<fail message="[eap8-faces-00002] The hint was not found!" />
</perform>
</rule>
<rule id="eap8-faces-00003-test">
<when>
<not>
<iterable-filter size="2">
<hint-exists message="JSF ManagedBean has been removed"/>
</iterable-filter>
</not>
</when>
<perform>
<fail message="[eap8-faces-00003] The hint was not found!" />
</perform>
</rule>
<rule id="eap8-faces-00004-test">
<when>
<not>
<iterable-filter size="6">
<hint-exists message="Annotation `javax.faces.bean."/>
</iterable-filter>
</not>
</when>
<perform>
<fail message="[eap8-faces-00004] The hint was not found!" />
</perform>
</rule>
<rule id="eap8-faces-00008-test">
<when>
<not>
<iterable-filter size="2">
<hint-exists message="ResourceResolvers have been removed"/>
</iterable-filter>
</not>
</when>
<perform>
<fail message="[eap8-faces-00008] The hint was not found!" />
</perform>
</rule>
<rule id="eap8-faces-00009-test">
<when>
<not>
<iterable-filter size="1">
<hint-exists message="JSP support has been removed in Jakarta EE 10"/>
</iterable-filter>
</not>
</when>
<perform>
<fail message="[eap8-faces-00009] The hint was not found!" />
</perform>
</rule>
</rules>
</ruleset>
</ruletest>

0 comments on commit 6488697

Please sign in to comment.