This is an automated email from the ASF dual-hosted git repository.

yasserzamani pushed a commit to branch struts-2-5-x
in repository https://gitbox.apache.org/repos/asf/struts.git


The following commit(s) were added to refs/heads/struts-2-5-x by this push:
     new 32c8f6f  [WW-4981] Adds support for JDK11 (#270)
32c8f6f is described below

commit 32c8f6f8118fd7dea97b1d0a0d76535c29a44809
Author: Yasser Zamani <yasserzam...@apache.org>
AuthorDate: Mon Nov 19 14:27:21 2018 +0330

    [WW-4981] Adds support for JDK11 (#270)
---
 .gitignore                                         |  1 +
 .travis.yml                                        |  7 +++-
 .../com/opensymphony/xwork2/ognl/OgnlUtilTest.java | 44 +++++++++++-----------
 .../xwork2/util/ClassPathFinderTest.java           | 14 ++++---
 .../xwork2/util/fs/JarEntryRevisionTest.java       | 22 ++++++-----
 .../test/java/org/apache/struts2/TestUtils.java    | 16 --------
 plugins/bean-validation/pom.xml                    | 31 +++++++++++++++
 .../org/apache/struts2/EmbeddedJSPResultTest.java  | 12 +++---
 pom.xml                                            |  9 +++--
 9 files changed, 93 insertions(+), 63 deletions(-)

diff --git a/.gitignore b/.gitignore
index 4750576..e087566 100644
--- a/.gitignore
+++ b/.gitignore
@@ -62,3 +62,4 @@ bundles/target
 plugins/target
 target
 plugins/testng/test-output
+test-output
diff --git a/.travis.yml b/.travis.yml
index 8d98574..e12ba2f 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -5,12 +5,17 @@ jdk:
   - openjdk7
   - oraclejdk8
   - oraclejdk9
+  - oraclejdk11
 
 install: true
 script: mvn test -DskipAssembly
 
 after_success:
-  - mvn clean cobertura:cobertura 
org.eluder.coveralls:coveralls-maven-plugin:report 
com.updateimpact:updateimpact-maven-plugin:submit 
-Ptravis-coveralls,update-impact -DskipAssembly
+  # TODO delete following if statement after fix of 
https://github.com/cobertura/cobertura/issues/271
+  - if [ "$TRAVIS_JDK_VERSION" == "openjdk8" ] || [ "$TRAVIS_JDK_VERSION" == 
"oraclejdk8" ];
+      then mvn clean cobertura:cobertura 
org.eluder.coveralls:coveralls-maven-plugin:report 
com.updateimpact:updateimpact-maven-plugin:submit 
-Ptravis-coveralls,update-impact -DskipAssembly;
+      else echo "Not reporting coverage for $TRAVIS_JDK_VERSION due to 
incomatibility or to save performance";
+    fi;
 
 env:
   global:
diff --git a/core/src/test/java/com/opensymphony/xwork2/ognl/OgnlUtilTest.java 
b/core/src/test/java/com/opensymphony/xwork2/ognl/OgnlUtilTest.java
index d6372fd..28d0d59 100644
--- a/core/src/test/java/com/opensymphony/xwork2/ognl/OgnlUtilTest.java
+++ b/core/src/test/java/com/opensymphony/xwork2/ognl/OgnlUtilTest.java
@@ -27,9 +27,9 @@ import com.opensymphony.xwork2.test.User;
 import com.opensymphony.xwork2.util.*;
 import com.opensymphony.xwork2.util.reflection.ReflectionContextState;
 import ognl.*;
-import org.apache.struts2.TestUtils;
 
 import java.lang.reflect.Method;
+import java.text.DateFormat;
 import java.util.*;
 
 public class OgnlUtilTest extends XWorkTestCase {
@@ -373,24 +373,8 @@ public class OgnlUtilTest extends XWorkTestCase {
         cal.set(Calendar.YEAR, 1982);
 
         assertEquals(cal.getTime(), foo.getBirthday());
-        
-        //UK style test
-        if (TestUtils.isJdk9OrLater()) {
-            /* In JDK 9 and later, the default locale data uses data derived 
from the
-            Unicode Consortium's Common Locale Data Repository (CLDR). The 
short date-time format is ‹{1}, {0}› in the
-            CLDR locale, as opposed to {1} {0} in the JRE locale data.
-            Please refer : 
http://www.oracle.com/technetwork/java/javase/9-relnote-issues-3704069.html#JDK-8008577
 */
-            props.put("event", "18/10/2006, 14:23:45");
-            props.put("meeting", "09/09/2006, 14:30");
-        }
-        else {
-            props.put("event", "18/10/2006 14:23:45");
-            props.put("meeting", "09/09/2006 14:30");
-        }
-        context.put(ActionContext.LOCALE, Locale.UK);
 
-        ognlUtil.setProperties(props, foo, context);
-        
+        //UK style test
         cal = Calendar.getInstance();
         cal.clear();
         cal.set(Calendar.MONTH, Calendar.OCTOBER);
@@ -399,9 +383,12 @@ public class OgnlUtilTest extends XWorkTestCase {
         cal.set(Calendar.HOUR_OF_DAY, 14);
         cal.set(Calendar.MINUTE, 23);
         cal.set(Calendar.SECOND, 45);
-        
-        assertEquals(cal.getTime(), foo.getEvent());
-        
+
+        Date eventTime = cal.getTime();
+        String formatted = DateFormat.getDateTimeInstance(DateFormat.SHORT, 
DateFormat.MEDIUM, Locale.UK)
+                .format(eventTime);
+        props.put("event", formatted);
+
         cal = Calendar.getInstance();
         cal.clear();
         cal.set(Calendar.MONTH, Calendar.SEPTEMBER);
@@ -409,8 +396,19 @@ public class OgnlUtilTest extends XWorkTestCase {
         cal.set(Calendar.YEAR, 2006);
         cal.set(Calendar.HOUR_OF_DAY, 14);
         cal.set(Calendar.MINUTE, 30);
-        
-        assertEquals(cal.getTime(), foo.getMeeting());
+
+        Date meetingTime = cal.getTime();
+        formatted = DateFormat.getDateTimeInstance(DateFormat.SHORT, 
DateFormat.MEDIUM, Locale.UK)
+                .format(meetingTime);
+        props.put("meeting", formatted);
+
+        context.put(ActionContext.LOCALE, Locale.UK);
+
+        ognlUtil.setProperties(props, foo, context);
+
+        assertEquals(eventTime, foo.getEvent());
+
+        assertEquals(meetingTime, foo.getMeeting());
         
         //test RFC 3339 date format for JSON
         props.put("event", "1996-12-19T16:39:57Z");
diff --git 
a/core/src/test/java/com/opensymphony/xwork2/util/ClassPathFinderTest.java 
b/core/src/test/java/com/opensymphony/xwork2/util/ClassPathFinderTest.java
index 34c0bbe..dd395ee 100644
--- a/core/src/test/java/com/opensymphony/xwork2/util/ClassPathFinderTest.java
+++ b/core/src/test/java/com/opensymphony/xwork2/util/ClassPathFinderTest.java
@@ -62,12 +62,14 @@ public class ClassPathFinderTest extends XWorkTestCase {
         NotURLClassLoader loader = new 
NotURLClassLoader(Thread.currentThread().getContextClassLoader());
         Thread.currentThread().setContextClassLoader(loader);
 
-        Class<?> clazz = loader.loadClass(ClassPathFinderTest.class.getName());
-        Object test = clazz.getConstructor().newInstance();
+        try {
+            Class<?> clazz = 
loader.loadClass(ClassPathFinderTest.class.getName());
+            Object test = clazz.getConstructor().newInstance();
 
-        clazz.getMethod("testFinder").invoke(test);
-
-        Thread.currentThread().setContextClassLoader(loader.parentClassLoader);
+            clazz.getMethod("testFinder").invoke(test);
+        } finally {
+            
Thread.currentThread().setContextClassLoader(loader.parentClassLoader);
+        }
     }
 
 
@@ -89,6 +91,8 @@ public class ClassPathFinderTest extends XWorkTestCase {
                     loadedClasses.put(name, defineClass(name, classBits, 0, 
classBits.length));
                 } catch (IOException e) {
                     throw new ClassNotFoundException("class " + name + " is 
not findable", e);
+                } catch (Exception e) {
+                    loadedClasses.put(name, parentClassLoader.loadClass(name));
                 }
             }
 
diff --git 
a/core/src/test/java/com/opensymphony/xwork2/util/fs/JarEntryRevisionTest.java 
b/core/src/test/java/com/opensymphony/xwork2/util/fs/JarEntryRevisionTest.java
index 6969ccd..20a21ce 100644
--- 
a/core/src/test/java/com/opensymphony/xwork2/util/fs/JarEntryRevisionTest.java
+++ 
b/core/src/test/java/com/opensymphony/xwork2/util/fs/JarEntryRevisionTest.java
@@ -34,6 +34,7 @@ import java.net.URLConnection;
 import java.net.URLStreamHandler;
 import java.nio.file.Files;
 import java.nio.file.Path;
+import java.nio.file.Paths;
 import java.util.jar.Attributes;
 import java.util.jar.JarOutputStream;
 import java.util.jar.Manifest;
@@ -49,10 +50,13 @@ public class JarEntryRevisionTest extends XWorkTestCase {
         fileManager = 
container.getInstance(FileManagerFactory.class).getFileManager();
     }
 
-    private void createJarFile(long time) throws Exception {
+    private String createJarFile(long time) throws Exception {
         Manifest manifest = new Manifest();
         manifest.getMainAttributes().put(Attributes.Name.MANIFEST_VERSION, 
"1.0");
-        FileOutputStream fos = new 
FileOutputStream("target/JarEntryRevisionTest_testNeedsReloading.jar", false);
+        Path jarPath = Paths.get(Thread.currentThread().getContextClassLoader()
+                .getResource("xwork-jar.jar").toURI()).getParent();
+        File jarFile = 
jarPath.resolve("JarEntryRevisionTest_testNeedsReloading.jar").toFile();
+        FileOutputStream fos = new FileOutputStream(jarFile, false);
         JarOutputStream target = new JarOutputStream(fos, manifest);
         target.putNextEntry(new ZipEntry("com/opensymphony/xwork2/util/fs/"));
         ZipEntry entry = new 
ZipEntry("com/opensymphony/xwork2/util/fs/JarEntryRevisionTest.class");
@@ -64,13 +68,14 @@ public class JarEntryRevisionTest extends XWorkTestCase {
         target.closeEntry();
         target.close();
         fos.close();
+
+        return jarFile.toURI().toURL().toExternalForm();
     }
 
     public void testNeedsReloading() throws Exception {
         long now = System.currentTimeMillis();
 
-        createJarFile(now);
-        URL url = new 
URL("jar:file:target/JarEntryRevisionTest_testNeedsReloading.jar!/com/opensymphony/xwork2/util/fs/JarEntryRevisionTest.class");
+        URL url = new URL("jar:" + createJarFile(now) + 
"!/com/opensymphony/xwork2/util/fs/JarEntryRevisionTest.class");
         Revision entry = JarEntryRevision.build(url, fileManager);
         assert entry != null;
         assertFalse(entry.needsReloading());
@@ -82,9 +87,8 @@ public class JarEntryRevisionTest extends XWorkTestCase {
     public void testNeedsReloadingWithContainerProvidedURLConnection() throws 
Exception {
         long now = System.currentTimeMillis();
 
-        createJarFile(now);
         URL url = new URL(null,
-                
"jar:file:target/JarEntryRevisionTest_testNeedsReloading.jar!/com/opensymphony/xwork2/util/fs/JarEntryRevisionTest.class",
+                "jar:" + createJarFile(now) + 
"!/com/opensymphony/xwork2/util/fs/JarEntryRevisionTest.class",
                 new ContainerProvidedURLStreamHandler());
         Revision entry = JarEntryRevision.build(url, fileManager);
         assert entry != null;
@@ -97,9 +101,7 @@ public class JarEntryRevisionTest extends XWorkTestCase {
     public void 
testNeedsReloadingWithContainerProvidedURLConnectionEmptyProtocol() throws 
Exception {
         long now = System.currentTimeMillis();
 
-        createJarFile(now);
-        File targetDir = new File("target");
-        String targetUrlStr = targetDir.toURI().toURL().toString();
+        String targetUrlStr = createJarFile(now);
         if (targetUrlStr.startsWith("file:")) {
             targetUrlStr = targetUrlStr.substring(5);//emptying protocol; we 
expect framework will fix it
         }
@@ -107,7 +109,7 @@ public class JarEntryRevisionTest extends XWorkTestCase {
             targetUrlStr = targetUrlStr.substring(1);//we expect framework 
will fix it also
         }
         URL url = new URL(null,
-                "zip:" + targetUrlStr + 
"JarEntryRevisionTest_testNeedsReloading.jar!/com/opensymphony/xwork2/util/fs/JarEntryRevisionTest.class",
+                "zip:" + targetUrlStr + 
"!/com/opensymphony/xwork2/util/fs/JarEntryRevisionTest.class",
                 new ContainerProvidedURLStreamHandler());
         Revision entry = JarEntryRevision.build(url, fileManager);
         assert entry != null;
diff --git a/core/src/test/java/org/apache/struts2/TestUtils.java 
b/core/src/test/java/org/apache/struts2/TestUtils.java
index 111cd89..32f5630 100644
--- a/core/src/test/java/org/apache/struts2/TestUtils.java
+++ b/core/src/test/java/org/apache/struts2/TestUtils.java
@@ -91,20 +91,4 @@ public class TestUtils {
 
         return buffer.toString();
     }
-
-    public static boolean isJdk9OrLater() {
-        ClassLoader loader = Thread.currentThread().getContextClassLoader();
-
-        if(loader instanceof URLClassLoader) {
-            return false;
-        }
-
-        loader = TestUtils.class.getClassLoader();
-
-        if(loader instanceof URLClassLoader) {
-            return false;
-        }
-
-        return true;
-    }
 }
diff --git a/plugins/bean-validation/pom.xml b/plugins/bean-validation/pom.xml
index 71aaffc..bb6d826 100644
--- a/plugins/bean-validation/pom.xml
+++ b/plugins/bean-validation/pom.xml
@@ -61,6 +61,37 @@
             <scope>test</scope>
         </dependency>
 
+        <!--
+         The Java EE API modules listed below are all marked 
@Deprecated(forRemoval=true), because they are scheduled
+         for removal in Java 11. So the -add-module approach will no longer 
work in Java 11 out of the box.
+         What we will need to do in Java 11 and forward is include our own 
copy of the Java EE APIs on the class path
+         or module path. For example, we can add the JAX-B APIs as a maven 
dependency like this:
+        -->
+        <dependency>
+            <groupId>javax.xml.bind</groupId>
+            <artifactId>jaxb-api</artifactId>
+            <version>2.3.1</version>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>com.sun.xml.bind</groupId>
+            <artifactId>jaxb-core</artifactId>
+            <version>2.3.0.1</version>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>com.sun.xml.bind</groupId>
+            <artifactId>jaxb-impl</artifactId>
+            <version>2.3.1</version>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>javax.activation</groupId>
+            <artifactId>activation</artifactId>
+            <version>1.1.1</version>
+            <scope>test</scope>
+        </dependency>
+
     </dependencies>
 
 </project>
\ No newline at end of file
diff --git 
a/plugins/embeddedjsp/src/test/java/org/apache/struts2/EmbeddedJSPResultTest.java
 
b/plugins/embeddedjsp/src/test/java/org/apache/struts2/EmbeddedJSPResultTest.java
index 952cd84..dbc8070 100644
--- 
a/plugins/embeddedjsp/src/test/java/org/apache/struts2/EmbeddedJSPResultTest.java
+++ 
b/plugins/embeddedjsp/src/test/java/org/apache/struts2/EmbeddedJSPResultTest.java
@@ -231,12 +231,14 @@ public class EmbeddedJSPResultTest extends TestCase {
         NotURLClassLoader loader = new NotURLClassLoader(parentClassLoader);
         Thread.currentThread().setContextClassLoader(loader);
 
-        result.setLocation("org/apache/struts2/tag0.jsp");
-        result.execute(null);
-
-        assertEquals("Thissessionisnotsecure.OtherText", 
StringUtils.deleteWhitespace(response.getContentAsString()));
+        try {
+            result.setLocation("org/apache/struts2/tag0.jsp");
+            result.execute(null);
 
-        Thread.currentThread().setContextClassLoader(parentClassLoader);
+            assertEquals("Thissessionisnotsecure.OtherText", 
StringUtils.deleteWhitespace(response.getContentAsString()));
+        } finally {
+            Thread.currentThread().setContextClassLoader(parentClassLoader);
+        }
     }
 
     @Override
diff --git a/pom.xml b/pom.xml
index f7b12bd..0b1ef52 100644
--- a/pom.xml
+++ b/pom.xml
@@ -110,6 +110,7 @@
 
         <!-- Sonar -->
         <sonar.host.url>https://builds.apache.org/analysis/</sonar.host.url>
+        <maven-surefire-plugin.version>2.22.1</maven-surefire-plugin.version>
     </properties>
 
     <profiles>
@@ -169,6 +170,7 @@
             </activation>
             <properties>
                 <!-- coverall version 4.3.0 does not work with java 9, see 
https://github.com/trautonen/coveralls-maven-plugin/issues/112 -->
+                <!-- TODO delete coveralls.skip property after fix of 
https://github.com/cobertura/cobertura/issues/271 -->
                 <coveralls.skip>true</coveralls.skip>
             </properties>
             <build>
@@ -178,7 +180,8 @@
                             <groupId>org.apache.maven.plugins</groupId>
                             <artifactId>maven-surefire-plugin</artifactId>
                             <configuration>
-                                <argLine>--add-modules java.activation 
--add-modules java.xml.bind</argLine>
+                                <!-- TODO delete forkCount=0 after fix of 
https://issues.apache.org/jira/browse/SUREFIRE-1588 -->
+                                <forkCount>0</forkCount>
                             </configuration>
                         </plugin>
                     </plugins>
@@ -233,12 +236,12 @@
                 <plugin>
                     <groupId>org.apache.maven.plugins</groupId>
                     <artifactId>maven-surefire-plugin</artifactId>
-                    <version>2.20.1</version>
+                    <version>${maven-surefire-plugin.version}</version>
                     <dependencies>
                         <dependency>
                             <groupId>org.apache.maven.surefire</groupId>
                             <artifactId>surefire-junit47</artifactId>
-                            <version>2.20.1</version>
+                            <version>${maven-surefire-plugin.version}</version>
                         </dependency>
                     </dependencies>
                     <configuration>

Reply via email to