diff --git a/.gitignore b/.gitignore index 95da09e28b..c71b4410aa 100644 --- a/.gitignore +++ b/.gitignore @@ -105,6 +105,7 @@ samples-and-tests/test-scala/logs samples-and-tests/i-am-a-developer/i-am-working-here samples-and-tests/i-am-a-developer/i-am-creating-jobs-here samples-and-tests/i-am-a-developer/i-am-testing-log-levels-here +samples-and-tests/i-am-a-developer/i-am-testing-ssl-config-here samples-and-tests/just-test-cases/attachments samples-and-tests/booking/logs samples-and-tests/booking/tmp diff --git a/framework/build.xml b/framework/build.xml index b768d24d68..5b02f0c075 100644 --- a/framework/build.xml +++ b/framework/build.xml @@ -97,10 +97,9 @@ - - + - + @@ -234,7 +233,7 @@ - + diff --git a/framework/dependencies.yml b/framework/dependencies.yml index 1bac8ed0af..4b2186d16f 100644 --- a/framework/dependencies.yml +++ b/framework/dependencies.yml @@ -9,10 +9,10 @@ transitiveDependencies: false require: &allDependencies - antlr 2.7.7 - com.mchange -> c3p0 0.9.5.2 - - com.zaxxer -> HikariCP 2.7.9 - - org.ow2.asm -> asm-all 5.2 - - cglib -> cglib 3.2.4 - - com.google.code.gson -> gson 2.8.0 + - com.zaxxer -> HikariCP 3.2.0 + - org.ow2.asm -> asm 6.2 + - cglib -> cglib 3.2.7 + - com.google.code.gson -> gson 2.8.5 - com.jamonapi -> jamon 2.81 - com.ning -> async-http-client 1.9.40 - commons-beanutils 1.9.2 @@ -45,15 +45,15 @@ require: &allDependencies - org.apache.ivy -> ivy 2.4.0 - org.bouncycastle -> bcprov-jdk15on 1.60 - org.bouncycastle -> bcpkix-jdk15on 1.60 - - org.codehaus.groovy -> groovy-all 2.4.15 - - org.eclipse.jdt.core 3.12.3 + - org.codehaus.groovy -> groovy 2.5.1 + - org.codehaus.groovy -> groovy-xml 2.5.1 + - org.eclipse.jdt -> org.eclipse.jdt.core 3.14.0 - org.hibernate -> hibernate-core 5.2.10.patched - org.hibernate.common -> hibernate-commons-annotations 5.0.1.Final - - org.hibernate -> hibernate-entitymanager 5.2.10.Final - org.hibernate -> hibernate-validator 5.4.1.Final - org.jboss.logging -> jboss-logging 3.3.0.Final - org.jboss.spec.javax.transaction -> jboss-transaction-api_1.2_spec 1.0.1.Final - - org.hibernate.javax.persistence -> hibernate-jpa-2.1-api 1.0.0.Final + - org.hibernate.javax.persistence -> hibernate-jpa-2.1-api 1.0.0.Final - com.fasterxml -> classmate 1.3.3 - org.hibernate -> hibernate-c3p0 5.2.10.Final - org.hibernate -> hibernate-ehcache 5.2.10.Final diff --git a/framework/lib-test/byte-buddy-1.8.15.jar b/framework/lib-test/byte-buddy-1.8.15.jar new file mode 100644 index 0000000000..b8c8379f44 Binary files /dev/null and b/framework/lib-test/byte-buddy-1.8.15.jar differ diff --git a/framework/lib-test/mockito-all-1.10.19.jar b/framework/lib-test/mockito-all-1.10.19.jar deleted file mode 100644 index c831489cd9..0000000000 Binary files a/framework/lib-test/mockito-all-1.10.19.jar and /dev/null differ diff --git a/framework/lib-test/mockito-core-2.21.0.jar b/framework/lib-test/mockito-core-2.21.0.jar new file mode 100644 index 0000000000..73de643e08 Binary files /dev/null and b/framework/lib-test/mockito-core-2.21.0.jar differ diff --git a/framework/lib-test/objenesis-2.6.jar b/framework/lib-test/objenesis-2.6.jar new file mode 100644 index 0000000000..b4b29d563b Binary files /dev/null and b/framework/lib-test/objenesis-2.6.jar differ diff --git a/framework/lib/HikariCP-2.7.9.jar b/framework/lib/HikariCP-2.7.9.jar deleted file mode 100644 index a5ab8f31e5..0000000000 Binary files a/framework/lib/HikariCP-2.7.9.jar and /dev/null differ diff --git a/framework/lib/HikariCP-3.2.0.jar b/framework/lib/HikariCP-3.2.0.jar new file mode 100644 index 0000000000..a030a7f8dc Binary files /dev/null and b/framework/lib/HikariCP-3.2.0.jar differ diff --git a/framework/lib/asm-6.2.jar b/framework/lib/asm-6.2.jar new file mode 100644 index 0000000000..792142a59a Binary files /dev/null and b/framework/lib/asm-6.2.jar differ diff --git a/framework/lib/cglib-3.2.4.jar b/framework/lib/cglib-3.2.7.jar similarity index 69% rename from framework/lib/cglib-3.2.4.jar rename to framework/lib/cglib-3.2.7.jar index 8ef8ae60ce..8347c5f25e 100644 Binary files a/framework/lib/cglib-3.2.4.jar and b/framework/lib/cglib-3.2.7.jar differ diff --git a/framework/lib/groovy-2.5.1.jar b/framework/lib/groovy-2.5.1.jar new file mode 100644 index 0000000000..75fc3f3e52 Binary files /dev/null and b/framework/lib/groovy-2.5.1.jar differ diff --git a/framework/lib/groovy-all-2.4.15.jar b/framework/lib/groovy-all-2.4.15.jar deleted file mode 100644 index 3c4f8f357d..0000000000 Binary files a/framework/lib/groovy-all-2.4.15.jar and /dev/null differ diff --git a/framework/lib/groovy-xml-2.5.1.jar b/framework/lib/groovy-xml-2.5.1.jar new file mode 100644 index 0000000000..c9a2098c12 Binary files /dev/null and b/framework/lib/groovy-xml-2.5.1.jar differ diff --git a/framework/lib/gson-2.8.0.jar b/framework/lib/gson-2.8.0.jar deleted file mode 100644 index 1235f63816..0000000000 Binary files a/framework/lib/gson-2.8.0.jar and /dev/null differ diff --git a/framework/lib/gson-2.8.5.jar b/framework/lib/gson-2.8.5.jar new file mode 100644 index 0000000000..0d5baf3fa7 Binary files /dev/null and b/framework/lib/gson-2.8.5.jar differ diff --git a/framework/lib/org.eclipse.jdt.core-3.12.3.jar b/framework/lib/org.eclipse.jdt.core-3.12.3.jar deleted file mode 100644 index 501a10289e..0000000000 Binary files a/framework/lib/org.eclipse.jdt.core-3.12.3.jar and /dev/null differ diff --git a/framework/lib/org.eclipse.jdt.core-3.14.0.jar b/framework/lib/org.eclipse.jdt.core-3.14.0.jar new file mode 100644 index 0000000000..674a040b94 Binary files /dev/null and b/framework/lib/org.eclipse.jdt.core-3.14.0.jar differ diff --git a/framework/src/play/classloading/ApplicationCompiler.java b/framework/src/play/classloading/ApplicationCompiler.java index 5b0e608f30..e2c754e303 100644 --- a/framework/src/play/classloading/ApplicationCompiler.java +++ b/framework/src/play/classloading/ApplicationCompiler.java @@ -36,6 +36,14 @@ public class ApplicationCompiler { Map packagesCache = new HashMap<>(); ApplicationClasses applicationClasses; Map settings; + private static final String JAVA_SOURCE_DEFAULT_VERSION = "1.8"; + static final Map compatibleJavaVersions = new HashMap<>(); + + static { + compatibleJavaVersions.put("1.8", CompilerOptions.VERSION_1_8); + compatibleJavaVersions.put("9", CompilerOptions.VERSION_9); + compatibleJavaVersions.put("10", CompilerOptions.VERSION_10); + } /** * Try to guess the magic configuration options @@ -53,21 +61,22 @@ public ApplicationCompiler(ApplicationClasses applicationClasses) { this.settings.put(CompilerOptions.OPTION_ReportUnusedImport, CompilerOptions.IGNORE); this.settings.put(CompilerOptions.OPTION_Encoding, "UTF-8"); this.settings.put(CompilerOptions.OPTION_LocalVariableAttribute, CompilerOptions.GENERATE); - String javaVersion = CompilerOptions.VERSION_1_8; - if (System.getProperty("java.version").startsWith("1.5") || System.getProperty("java.version").startsWith("1.6") - || System.getProperty("java.version").startsWith("1.7")) { - throw new CompilationException("Java version prior to 1.8 are not supported"); + + final String runningJavaVersion = System.getProperty("java.version"); + if (runningJavaVersion.startsWith("1.5") || runningJavaVersion.startsWith("1.6") || runningJavaVersion.startsWith("1.7")) { + throw new CompilationException("JDK version prior to 1.8 are not supported to run the application"); } - - if ("1.5".equals(Play.configuration.get("java.source")) || "1.6".equals(Play.configuration.get("java.source")) - || "1.7".equals(Play.configuration.get("java.source"))) { - throw new CompilationException("Java version prior to 1.8 are not supported"); + final String configSourceVersion = Play.configuration.getProperty("java.source", JAVA_SOURCE_DEFAULT_VERSION); + final String jdtVersion = compatibleJavaVersions.get(configSourceVersion); + if (jdtVersion == null) { + throw new CompilationException(String.format("Incompatible Java version specified (%s). Compatible versions are: %s", + configSourceVersion, compatibleJavaVersions.keySet())); } - this.settings.put(CompilerOptions.OPTION_Source, javaVersion); - this.settings.put(CompilerOptions.OPTION_TargetPlatform, javaVersion); + this.settings.put(CompilerOptions.OPTION_Source, jdtVersion); + this.settings.put(CompilerOptions.OPTION_TargetPlatform, jdtVersion); this.settings.put(CompilerOptions.OPTION_PreserveUnusedLocal, CompilerOptions.PRESERVE); - this.settings.put(CompilerOptions.OPTION_Compliance, javaVersion); + this.settings.put(CompilerOptions.OPTION_Compliance, jdtVersion); this.settings.put(CompilerOptions.OPTION_MethodParametersAttribute, CompilerOptions.GENERATE); } @@ -161,8 +170,8 @@ public NameEnvironmentAnswer findType(char[][] compoundTypeName) { @Override public NameEnvironmentAnswer findType(char[] typeName, char[][] packageName) { StringBuilder result = new StringBuilder(packageName.length * 7 + 1 + typeName.length); - for (int i = 0; i < packageName.length; i++) { - result.append(packageName[i]); + for (final char[] element : packageName) { + result.append(element); result.append('.'); } result.append(typeName); @@ -271,8 +280,7 @@ public void acceptResult(CompilationResult result) { } // Something has been compiled ClassFile[] clazzFiles = result.getClassFiles(); - for (int i = 0; i < clazzFiles.length; i++) { - ClassFile clazzFile = clazzFiles[i]; + for (final ClassFile clazzFile : clazzFiles) { char[][] compoundName = clazzFile.getCompoundName(); StringBuilder clazzName = new StringBuilder(); for (int j = 0; j < compoundName.length; j++) { diff --git a/framework/src/play/data/parsing/MultipartStream.java b/framework/src/play/data/parsing/MultipartStream.java index 783bd60513..6dae8b6453 100644 --- a/framework/src/play/data/parsing/MultipartStream.java +++ b/framework/src/play/data/parsing/MultipartStream.java @@ -235,6 +235,7 @@ private void notifyListener() { * @deprecated Use {@link #MultipartStream(InputStream, byte[], ProgressNotifier)}, * or {@link #MultipartStream(InputStream, byte[], int, ProgressNotifier)} */ + @Deprecated public MultipartStream() { this(null, null, null); } @@ -256,6 +257,7 @@ public MultipartStream() { * @see #MultipartStream(InputStream, byte[], ProgressNotifier) * @deprecated Use {@link #MultipartStream(InputStream, byte[], int, ProgressNotifier)}. */ + @Deprecated public MultipartStream(InputStream input, byte[] boundary, int bufSize) { this(input, boundary, bufSize, null); } @@ -328,6 +330,7 @@ public MultipartStream(InputStream input, byte[] boundary, int bufSize) { * ProgressNotifier)}. * @see #MultipartStream(InputStream, byte[], int, ProgressNotifier) */ + @Deprecated public MultipartStream(InputStream input, byte[] boundary) { this(input, boundary, DEFAULT_BUFSIZE, null); diff --git a/framework/src/play/db/DB.java b/framework/src/play/db/DB.java index b538b8a242..c8bd3c05f1 100644 --- a/framework/src/play/db/DB.java +++ b/framework/src/play/db/DB.java @@ -14,12 +14,10 @@ import javax.sql.DataSource; import javax.sql.RowSet; import javax.sql.rowset.CachedRowSet; +import javax.sql.rowset.RowSetProvider; -import org.hibernate.jpa.HibernateEntityManager; import org.hibernate.internal.SessionImpl; -import com.sun.rowset.CachedRowSetImpl; - import play.Logger; import play.db.jpa.JPA; import play.exceptions.DatabaseException; @@ -178,7 +176,7 @@ public static void close(String name) { public static Connection getConnection(String name) { try { if (JPA.isEnabled()) { - return ((SessionImpl) ((HibernateEntityManager) JPA.em(name)).getSession()).connection(); + return ((SessionImpl) ((org.hibernate.Session) JPA.em(name)).getSession()).connection(); } Connection localConnection = getLocalConnection(name); @@ -274,7 +272,7 @@ public static RowSet executeQuery(String name, String SQL) { // Need to use a CachedRowSet that caches its rows in memory, which // makes it possible to operate without always being connected to // its data source - CachedRowSet rowset = new CachedRowSetImpl(); + CachedRowSet rowset = RowSetProvider.newFactory().createCachedRowSet(); rowset.populate(rs); return rowset; } catch (SQLException ex) { diff --git a/framework/src/play/db/evolutions/EvolutionQuery.java b/framework/src/play/db/evolutions/EvolutionQuery.java index 20e89b263f..ea096adc42 100644 --- a/framework/src/play/db/evolutions/EvolutionQuery.java +++ b/framework/src/play/db/evolutions/EvolutionQuery.java @@ -1,13 +1,5 @@ package play.db.evolutions; -import play.Logger; -import play.Play; -import play.db.Configuration; -import play.db.DB; -import play.db.SQLSplitter; -import play.db.jpa.JPAPlugin; -import play.exceptions.UnexpectedException; - import java.sql.Connection; import java.sql.Date; import java.sql.PreparedStatement; @@ -17,10 +9,17 @@ import javax.sql.RowSet; import javax.sql.rowset.CachedRowSet; +import javax.sql.rowset.RowSetProvider; import org.apache.commons.lang.StringUtils; -import com.sun.rowset.CachedRowSetImpl; +import play.Logger; +import play.Play; +import play.db.Configuration; +import play.db.DB; +import play.db.SQLSplitter; +import play.db.jpa.JPAPlugin; +import play.exceptions.UnexpectedException; public class EvolutionQuery{ @@ -158,7 +157,7 @@ public static RowSet getEvolutionsToApply(Connection connection, String moduleKe // Need to use a CachedRowSet that caches its rows in memory, which // makes it possible to operate without always being connected to // its data source - CachedRowSet rowset = new CachedRowSetImpl(); + CachedRowSet rowset = RowSetProvider.newFactory().createCachedRowSet(); rowset.populate(resultSet); return rowset; } catch (SQLException e) { @@ -180,7 +179,7 @@ public static RowSet getEvolutions(Connection connection, String moduleKey) thro // Need to use a CachedRowSet that caches its rows in memory, which // makes it possible to operate without always being connected to // its data source - CachedRowSet rowset = new CachedRowSetImpl(); + CachedRowSet rowset = RowSetProvider.newFactory().createCachedRowSet(); rowset.populate(resultSet); return rowset; } catch (SQLException e) { diff --git a/framework/src/play/templates/GroovyTemplate.java b/framework/src/play/templates/GroovyTemplate.java index 012d812263..e07358a487 100644 --- a/framework/src/play/templates/GroovyTemplate.java +++ b/framework/src/play/templates/GroovyTemplate.java @@ -100,20 +100,20 @@ public Class defineTemplate(String name, byte[] byteCode) { } } - @SuppressWarnings("unchecked") @Override void directLoad(byte[] code) throws Exception { - TClassLoader tClassLoader = new TClassLoader(); - String[] lines = new String(code, "utf-8").split("\n"); - this.linesMatrix = (HashMap) Java.deserialize(Codec.decodeBASE64(lines[1])); - this.doBodyLines = (HashSet) Java.deserialize(Codec.decodeBASE64(lines[3])); - for (int i = 4; i < lines.length; i = i + 2) { - String className = lines[i]; - byte[] byteCode = Codec.decodeBASE64(lines[i + 1]); - Class c = tClassLoader.defineTemplate(className, byteCode); - if (compiledTemplate == null) { - compiledTemplate = c; - } + try (TClassLoader tClassLoader = new TClassLoader()) { + String[] lines = new String(code, "utf-8").split("\n"); + this.linesMatrix = (HashMap) Java.deserialize(Codec.decodeBASE64(lines[1])); + this.doBodyLines = (HashSet) Java.deserialize(Codec.decodeBASE64(lines[3])); + for (int i = 4; i < lines.length; i = i + 2) { + String className = lines[i]; + byte[] byteCode = Codec.decodeBASE64(lines[i + 1]); + Class c = tClassLoader.defineTemplate(className, byteCode); + if (compiledTemplate == null) { + compiledTemplate = c; + } + } } } @@ -446,20 +446,7 @@ public void invokeTag(Integer fromLine, String tag, Map attrs, C TagContext.exitTag(); } - /** - * @param className - * The class name - * @return The given class - * @throws Exception - * if problem occured when loading the class - * @deprecated '_' should not be used as an identifier, since it is a reserved keyword from source level 1.8 on - * use {@link #__loadClass} instead - */ - @Deprecated - public Class _(String className) throws Exception { - return __loadClass(className); - } - + /** * Load the class from Pay Class loader * diff --git a/framework/src/play/templates/GroovyTemplateCompiler.java b/framework/src/play/templates/GroovyTemplateCompiler.java index 15513e01a9..85571609cf 100644 --- a/framework/src/play/templates/GroovyTemplateCompiler.java +++ b/framework/src/play/templates/GroovyTemplateCompiler.java @@ -101,14 +101,14 @@ public int compare(String o1, String o2) { if (names.size() <= 1 || source.contains("new ")) { for (String cName : names) { // dynamic class binding source = source.replaceAll("new " + Pattern.quote(cName) + "(\\([^)]*\\))", - "_('" + originalNames.get(cName).replace("$", "\\$") + "').newInstance$1"); + "__loadClass('" + originalNames.get(cName).replace("$", "\\$") + "').newInstance$1"); } } if (names.size() <= 1 || source.contains("instanceof")) { for (String cName : names) { // dynamic class binding source = source.replaceAll("([a-zA-Z0-9.-_$]+)\\s+instanceof\\s+" + Pattern.quote(cName), - "_('" + originalNames.get(cName).replace("$", "\\$") + "').isAssignableFrom($1.class)"); + "__loadClass('" + originalNames.get(cName).replace("$", "\\$") + "').isAssignableFrom($1.class)"); } } @@ -149,7 +149,7 @@ protected void head() { println(" extends play.templates.GroovyTemplate.ExecutableTemplate {"); println("public Object run() { use(play.templates.JavaExtensions) {"); for (String n : extensionsClassnames) { - println("use(_('" + n + "')) {"); + println("use(__loadClass('" + n + "')) {"); } } @@ -390,7 +390,7 @@ protected void endTag() { } if (m != null) { print("play.templates.TagContext.enterTag('" + tag.name + "');"); - print("_('" + m.getDeclaringClass().getName() + "')._" + tName + "(attrs" + tagIndex + ",body" + tagIndex + print("__loadClass('" + m.getDeclaringClass().getName() + "')._" + tName + "(attrs" + tagIndex + ",body" + tagIndex + ", out, this, " + tag.startLine + ");"); print("play.templates.TagContext.exitTag();"); } else { diff --git a/framework/test-src/play/templates/JavaExtensionsTest.java b/framework/test-src/play/templates/JavaExtensionsTest.java index 7543362c02..8be18bb474 100755 --- a/framework/test-src/play/templates/JavaExtensionsTest.java +++ b/framework/test-src/play/templates/JavaExtensionsTest.java @@ -45,8 +45,8 @@ public void testContains() { @Test public void testAdd() { - String[] testArray = {"a", "b", "c"}; - assertThat(JavaExtensions.add(new String[]{"a", "b"}, "c")).hasSize(3).contains(testArray); + final String[] items = JavaExtensions.add(new String[]{"a", "b"}, "c"); + assertThat(items).hasSize(3).contains((Object[]) new String[] {"a", "b", "c"}); } diff --git a/modules/crud/app/views/tags/crud/form.html b/modules/crud/app/views/tags/crud/form.html index efb7c71e82..249b1d50af 100644 --- a/modules/crud/app/views/tags/crud/form.html +++ b/modules/crud/app/views/tags/crud/form.html @@ -1,10 +1,10 @@ %{ if(_object) { currentObject = _object - currentType = _('controllers.CRUD$ObjectType').forClass(_object.getClass().getName()) + currentType = __loadClass('controllers.CRUD$ObjectType').forClass(_object.getClass().getName()) } else if(_class) { currentObject = null; - currentType = _('controllers.CRUD$ObjectType').forClass(_class) + currentType = __loadClass('controllers.CRUD$ObjectType').forClass(_class) } else { currentObject = _caller.object currentType = _caller.type diff --git a/modules/crud/app/views/tags/crud/types.tag b/modules/crud/app/views/tags/crud/types.tag index 3986b897df..e458b94e05 100644 --- a/modules/crud/app/views/tags/crud/types.tag +++ b/modules/crud/app/views/tags/crud/types.tag @@ -1,13 +1,13 @@ %{ models = []; - for(controllerClass in play.Play.classloader.getAssignableClasses(_('controllers.CRUD'))) { - resourceModel = _('controllers.CRUD$ObjectType').get(controllerClass) + for(controllerClass in play.Play.classloader.getAssignableClasses(__loadClass('controllers.CRUD'))) { + resourceModel = __loadClass('controllers.CRUD$ObjectType').get(controllerClass) if(resourceModel != null) { models.add(resourceModel) } } - for(controllerClass in play.Play.classloader.getAssignableClasses(_('play.scalasupport.crud.CRUDWrapper'))) { - resourceModel = _('controllers.CRUD$ObjectType').get(controllerClass) + for(controllerClass in play.Play.classloader.getAssignableClasses(__loadClass('play.scalasupport.crud.CRUDWrapper'))) { + resourceModel = __loadClass('controllers.CRUD$ObjectType').get(controllerClass) if(resourceModel != null) { models.add(resourceModel) } diff --git a/modules/docviewer/build.xml b/modules/docviewer/build.xml index d489d5f4e1..e120dcc18f 100644 --- a/modules/docviewer/build.xml +++ b/modules/docviewer/build.xml @@ -31,7 +31,7 @@ - + diff --git a/modules/grizzly/build.xml b/modules/grizzly/build.xml index 3948a09e5d..0ca4ebdd77 100644 --- a/modules/grizzly/build.xml +++ b/modules/grizzly/build.xml @@ -34,7 +34,7 @@ - + diff --git a/modules/testrunner/build.xml b/modules/testrunner/build.xml index 790feb8ed3..52ebfcf51d 100644 --- a/modules/testrunner/build.xml +++ b/modules/testrunner/build.xml @@ -15,7 +15,7 @@ - + diff --git a/samples-and-tests/just-test-cases/test/invocationContext.test.html b/samples-and-tests/just-test-cases/test/invocationContext.test.html index 113be11e53..63d02ce0ec 100644 --- a/samples-and-tests/just-test-cases/test/invocationContext.test.html +++ b/samples-and-tests/just-test-cases/test/invocationContext.test.html @@ -3,10 +3,13 @@ open('@{Application.some1()}') assertTextPresent('@play.db.jpa.Transactional') + // annotation parameters are in quotes in JDK9+ but not in JDK1.8, so we skip the check of Youhou.value open('@{Application.some2()}') - assertTextPresent('@utils.Youhou(value=),@play.db.jpa.Transactional') + assertTextPresent('@utils.Youhou(value=') + assertTextPresent('),@play.db.jpa.Transactional') open('@{Application.some3()}') - assertTextPresent('@utils.Youhou(value=fromJob),') + assertTextPresent('@utils.Youhou(value=') + assertTextPresent('fromJob') #{/selenium} diff --git a/samples-and-tests/just-test-cases/test/templateTricks.test.html b/samples-and-tests/just-test-cases/test/templateTricks.test.html index 6e9e77811e..ca17646453 100644 --- a/samples-and-tests/just-test-cases/test/templateTricks.test.html +++ b/samples-and-tests/just-test-cases/test/templateTricks.test.html @@ -7,7 +7,7 @@ assertTextPresent('Template execution error') assertTextPresent('In /app/views/Application/dynamicClassBinding.html (around line 4)') assertTextPresent('Could not find matching constructor for: models.Bottle') - assertTextPresent('(java.lang.Integer, java.lang.String)') + assertTextPresent('(Integer, String)') open('/')