Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Ensure JDK 6 compatibility of regular expression used in QueryUtils [DATAJPA-970] #1320

Closed
spring-projects-issues opened this issue Sep 22, 2016 · 4 comments

Comments

@spring-projects-issues
Copy link

@spring-projects-issues spring-projects-issues commented Sep 22, 2016

zyro opened DATAJPA-970 and commented

continued from https://jira.spring.io/browse/DATAJPA-965

somehow it seems the fix of this issue (or rather one of the added regex expressions) broke java 6 compatibility (using oracle jdk1.6.0_45)?

Caused By: java.util.regex.PatternSyntaxException: Look-behind group does not have an obvious maximum length near index 58
\s+\w+\([0-9a-zA-z\._,\s']+\)\s+[as|AS]+\s+(?<alias>[\w\.]+)
                                                          ^
        at java.util.regex.Pattern.error(Pattern.java:1713)
        at java.util.regex.Pattern.group0(Pattern.java:2488)
        at java.util.regex.Pattern.sequence(Pattern.java:1806)
        at java.util.regex.Pattern.expr(Pattern.java:1752)
        at java.util.regex.Pattern.compile(Pattern.java:1460)
        at java.util.regex.Pattern.<init>(Pattern.java:1133)
        at java.util.regex.Pattern.compile(Pattern.java:823)
        at org.springframework.data.jpa.repository.query.QueryUtils.<clinit>(QueryUtils.java:164)
        at org.springframework.data.jpa.repository.query.JpaQueryMethod.assertParameterNamesInAnnotatedQuery(JpaQueryMethod.java:102)
        at org.springframework.data.jpa.repository.query.JpaQueryMethod.<init>(JpaQueryMethod.java:95)
        at org.springframework.data.jpa.repository.query.JpaQueryLookupStrategy$AbstractQueryLookupStrategy.resolveQuery(JpaQueryLookupStrategy.java:77)
        at org.springframework.data.repository.core.support.RepositoryFactorySupport$QueryExecutorMethodInterceptor.<init>(RepositoryFactorySupport.java:435)
        at org.springframework.data.repository.core.support.RepositoryFactorySupport.getRepository(RepositoryFactorySupport.java:220)
        at org.springframework.data.repository.core.support.RepositoryFactoryBeanSupport.initAndReturn(RepositoryFactoryBeanSupport.java:266)
        at org.springframework.data.repository.core.support.RepositoryFactoryBeanSupport.afterPropertiesSet(RepositoryFactoryBeanSupport.java:252)
        at org.springframework.data.jpa.repository.support.JpaRepositoryFactoryBean.afterPropertiesSet(JpaRepositoryFactoryBean.java:92)

ref. https://github.com/spring-projects/spring-data-jpa/blame/1.10.3.RELEASE/src/main/java/org/springframework/data/jpa/repository/query/QueryUtils.java#L162


Affects: 1.9.5 (Gosling SR5), 1.10.3 (Hopper SR3)

Reference URL: https://jira.spring.io/browse/DATAJPA-965

Issue Links:

  • DATAJPA-965 Mapping Sort instances to ORDER BY expressions should be restricted to fields for manually defined queries

Referenced from: pull request #181

Backported to: 1.10.4 (Hopper SR4), 1.9.6 (Gosling SR6)

@spring-projects-issues
Copy link
Author

@spring-projects-issues spring-projects-issues commented Sep 22, 2016

zyro commented

i am able to reproduce with this simple junit test:

public class RegexTest {
	@Test
	public void test() {
		Pattern.compile("\\s+\\w+\\([0-9a-zA-z\\._,\\s']+\\)\\s+[as|AS]+\\s+(?<alias>[\\w\\.]+)");
	}
}

fails with jdk 6u45, works with jdk 8u45... unfortunately i have no jdk 6u65 available right now.
but as 6u45 seems to be the latest public release (for windows at least.. sigh..), it would be great if that is still supported.

i do not like asking for jdk6 support. not at all. but we have to deploy a few apps to a jee 6 container...

thanks for your help! much appreciated

@spring-projects-issues
Copy link
Author

@spring-projects-issues spring-projects-issues commented Sep 23, 2016

Christoph Strobl commented

thanks zyro!
I changed the pattern a bit which now runs on 1.6.0_65-b14-462-11M4609 for mac.
Would you mind running the following on your windows machine - just to double check.

@Test
public void test() {

	Pattern pattern = Pattern.compile("\\s+\\w+\\([0-9a-zA-z\\._,\\s']+\\)\\s+[as|AS]+\\s+(([\\w\\.])+)");

	Matcher matcher = pattern.matcher(" AVG(m.price) AS m.avg ");
	String alias = "";
	while (matcher.find()) {
		alias = matcher.group(1);
	}

	assertThat(alias, is(equalTo("m.avg")));
}

@spring-projects-issues
Copy link
Author

@spring-projects-issues spring-projects-issues commented Sep 23, 2016

Oliver Drotbohm commented

Applied Christoph's pull request to master and all bug fix branches that have been upgraded to fix DATAJPA-965.

zyro — Which release train version are you using currently?

@spring-projects-issues
Copy link
Author

@spring-projects-issues spring-projects-issues commented Sep 24, 2016

zyro commented

Christoph Strobl: test runs fine on win x64 oracle jdk6u45. thanks!
Oliver Drotbohm: running 1.10.3 (Hopper SR3)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Linked pull requests

Successfully merging a pull request may close this issue.

None yet
2 participants