Closed ppodgorsek closed 10 months ago
When trying to import an application defined in a JDL file, the project generation fails with the following error:
create .editorconfig create sonar-project.properties create package.json force .yo-rc.json create .husky/pre-commit create npmw create npmw.cmd create src/main/resources/banner.txt create .lintstagedrc.cjs create src/main/docker/jib/entrypoint.sh create checkstyle.xml create .devcontainer/Dockerfile create pom.xml create src/main/resources/logback-spring.xml create .devcontainer/devcontainer.json create src/main/resources/i18n/messages.properties ERROR! ERROR! Error parsing file src/test/java/com/myorg/frontend/public/security/SecurityUtilsUnitTest.java: Error: Sad sad panda, parsing errors detected in line: 1, column: 1! Expecting token of type --> EOF <-- but found --> 'package' <--! ->compilationUnit at package com.myorg.frontend.public.security; import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import org.springframework.security.authentication.UsernamePasswordAuthenticationToken; import org.springframework.security.core.GrantedAuthority; import org.springframework.security.core.authority.SimpleGrantedAuthority; import org.springframework.security.core.context.SecurityContext; import org.springframework.security.core.context.SecurityContextHolder; import java.util.ArrayList; import java.util.Collection; import java.util.Optional; import static org.assertj.core.api.Assertions.assertThat; /** * Test class for the {@link SecurityUtils} utility class. */ class SecurityUtilsUnitTest { @BeforeEach @AfterEach void cleanup() { SecurityContextHolder.clearContext(); } @Test void testGetCurrentUserLogin() { SecurityContext securityContext = SecurityContextHolder.createEmptyContext(); securityContext.setAuthentication(new UsernamePasswordAuthenticationToken("admin", "admin")); SecurityContextHolder.setContext(securityContext); Optional<String> login = SecurityUtils.getCurrentUserLogin(); assertThat(login).contains("admin"); } @Test void testGetCurrentUserJWT() { SecurityContext securityContext = SecurityContextHolder.createEmptyContext(); securityContext.setAuthentication(new UsernamePasswordAuthenticationToken("admin", "token")); SecurityContextHolder.setContext(securityContext); Optional<String> jwt = SecurityUtils.getCurrentUserJWT(); assertThat(jwt).contains("token"); } @Test void testIsAuthenticated() { SecurityContext securityContext = SecurityContextHolder.createEmptyContext(); securityContext.setAuthentication(new UsernamePasswordAuthenticationToken("admin", "admin")); SecurityContextHolder.setContext(securityContext); boolean isAuthenticated = SecurityUtils.isAuthenticated(); assertThat(isAuthenticated).isTrue(); } @Test void testAnonymousIsNotAuthenticated() { SecurityContext securityContext = SecurityContextHolder.createEmptyContext(); Collection<GrantedAuthority> authorities = new ArrayList<>(); authorities.add(new SimpleGrantedAuthority(AuthoritiesConstants.ANONYMOUS)); securityContext.setAuthentication(new UsernamePasswordAuthenticationToken("anonymous", "anonymous", authorities)); SecurityContextHolder.setContext(securityContext); boolean isAuthenticated = SecurityUtils.isAuthenticated(); assertThat(isAuthenticated).isFalse(); } @Test void testHasCurrentUserThisAuthority() { SecurityContext securityContext = SecurityContextHolder.createEmptyContext(); Collection<GrantedAuthority> authorities = new ArrayList<>(); authorities.add(new SimpleGrantedAuthority(AuthoritiesConstants.USER)); securityContext.setAuthentication(new UsernamePasswordAuthenticationToken("user", "user", authorities)); SecurityContextHolder.setContext(securityContext); assertThat(SecurityUtils.hasCurrentUserThisAuthority(AuthoritiesConstants.USER)).isTrue(); assertThat(SecurityUtils.hasCurrentUserThisAuthority(AuthoritiesConstants.ADMIN)).isFalse(); } @Test void testHasCurrentUserAnyOfAuthorities() { SecurityContext securityContext = SecurityContextHolder.createEmptyContext(); Collection<GrantedAuthority> authorities = new ArrayList<>(); authorities.add(new SimpleGrantedAuthority(AuthoritiesConstants.USER)); securityContext.setAuthentication(new UsernamePasswordAuthenticationToken("user", "user", authorities)); SecurityContextHolder.setContext(securityContext); assertThat(SecurityUtils.hasCurrentUserAnyOfAuthorities(AuthoritiesConstants.USER, AuthoritiesConstants.ADMIN)).isTrue(); assertThat(SecurityUtils.hasCurrentUserAnyOfAuthorities(AuthoritiesConstants.ANONYMOUS, AuthoritiesConstants.ADMIN)).isFalse(); } @Test void testHasCurrentUserNoneOfAuthorities() { SecurityContext securityContext = SecurityContextHolder.createEmptyContext(); Collection<GrantedAuthority> authorities = new ArrayList<>(); authorities.add(new SimpleGrantedAuthority(AuthoritiesConstants.USER)); securityContext.setAuthentication(new UsernamePasswordAuthenticationToken("user", "user", authorities)); SecurityContextHolder.setContext(securityContext); assertThat(SecurityUtils.hasCurrentUserNoneOfAuthorities(AuthoritiesConstants.USER, AuthoritiesConstants.ADMIN)).isFalse(); assertThat(SecurityUtils.hasCurrentUserNoneOfAuthorities(AuthoritiesConstants.ANONYMOUS, AuthoritiesConstants.ADMIN)).isTrue(); } } Error: Error parsing file src/test/java/com/myorg/frontend/public/security/SecurityUtilsUnitTest.java: Error: Sad sad panda, parsing errors detected in line: 1, column: 1! Expecting token of type --> EOF <-- but found --> 'package' <--! ->compilationUnit at package com.myorg.frontend.public.security; import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import org.springframework.security.authentication.UsernamePasswordAuthenticationToken; import org.springframework.security.core.GrantedAuthority; import org.springframework.security.core.authority.SimpleGrantedAuthority; import org.springframework.security.core.context.SecurityContext; import org.springframework.security.core.context.SecurityContextHolder; import java.util.ArrayList; import java.util.Collection; import java.util.Optional; import static org.assertj.core.api.Assertions.assertThat; /** * Test class for the {@link SecurityUtils} utility class. */ class SecurityUtilsUnitTest { @BeforeEach @AfterEach void cleanup() { SecurityContextHolder.clearContext(); } @Test void testGetCurrentUserLogin() { SecurityContext securityContext = SecurityContextHolder.createEmptyContext(); securityContext.setAuthentication(new UsernamePasswordAuthenticationToken("admin", "admin")); SecurityContextHolder.setContext(securityContext); Optional<String> login = SecurityUtils.getCurrentUserLogin(); assertThat(login).contains("admin"); } @Test void testGetCurrentUserJWT() { SecurityContext securityContext = SecurityContextHolder.createEmptyContext(); securityContext.setAuthentication(new UsernamePasswordAuthenticationToken("admin", "token")); SecurityContextHolder.setContext(securityContext); Optional<String> jwt = SecurityUtils.getCurrentUserJWT(); assertThat(jwt).contains("token"); } @Test void testIsAuthenticated() { SecurityContext securityContext = SecurityContextHolder.createEmptyContext(); securityContext.setAuthentication(new UsernamePasswordAuthenticationToken("admin", "admin")); SecurityContextHolder.setContext(securityContext); boolean isAuthenticated = SecurityUtils.isAuthenticated(); assertThat(isAuthenticated).isTrue(); } @Test void testAnonymousIsNotAuthenticated() { SecurityContext securityContext = SecurityContextHolder.createEmptyContext(); Collection<GrantedAuthority> authorities = new ArrayList<>(); authorities.add(new SimpleGrantedAuthority(AuthoritiesConstants.ANONYMOUS)); securityContext.setAuthentication(new UsernamePasswordAuthenticationToken("anonymous", "anonymous", authorities)); SecurityContextHolder.setContext(securityContext); boolean isAuthenticated = SecurityUtils.isAuthenticated(); assertThat(isAuthenticated).isFalse(); } @Test void testHasCurrentUserThisAuthority() { SecurityContext securityContext = SecurityContextHolder.createEmptyContext(); Collection<GrantedAuthority> authorities = new ArrayList<>(); authorities.add(new SimpleGrantedAuthority(AuthoritiesConstants.USER)); securityContext.setAuthentication(new UsernamePasswordAuthenticationToken("user", "user", authorities)); SecurityContextHolder.setContext(securityContext); assertThat(SecurityUtils.hasCurrentUserThisAuthority(AuthoritiesConstants.USER)).isTrue(); assertThat(SecurityUtils.hasCurrentUserThisAuthority(AuthoritiesConstants.ADMIN)).isFalse(); } @Test void testHasCurrentUserAnyOfAuthorities() { SecurityContext securityContext = SecurityContextHolder.createEmptyContext(); Collection<GrantedAuthority> authorities = new ArrayList<>(); authorities.add(new SimpleGrantedAuthority(AuthoritiesConstants.USER)); securityContext.setAuthentication(new UsernamePasswordAuthenticationToken("user", "user", authorities)); SecurityContextHolder.setContext(securityContext); assertThat(SecurityUtils.hasCurrentUserAnyOfAuthorities(AuthoritiesConstants.USER, AuthoritiesConstants.ADMIN)).isTrue(); assertThat(SecurityUtils.hasCurrentUserAnyOfAuthorities(AuthoritiesConstants.ANONYMOUS, AuthoritiesConstants.ADMIN)).isFalse(); } @Test void testHasCurrentUserNoneOfAuthorities() { SecurityContext securityContext = SecurityContextHolder.createEmptyContext(); Collection<GrantedAuthority> authorities = new ArrayList<>(); authorities.add(new SimpleGrantedAuthority(AuthoritiesConstants.USER)); securityContext.setAuthentication(new UsernamePasswordAuthenticationToken("user", "user", authorities)); SecurityContextHolder.setContext(securityContext); assertThat(SecurityUtils.hasCurrentUserNoneOfAuthorities(AuthoritiesConstants.USER, AuthoritiesConstants.ADMIN)).isFalse(); assertThat(SecurityUtils.hasCurrentUserNoneOfAuthorities(AuthoritiesConstants.ANONYMOUS, AuthoritiesConstants.ADMIN)).isTrue(); } } at file:///usr/lib/node_modules/generator-jhipster/dist/generators/bootstrap/support/java-unused-imports-transform.mjs:20:27 at Transform.<anonymous> (file:///usr/lib/node_modules/generator-jhipster/node_modules/@yeoman/transform/dist/transform.js:42:19) at process.processTicksAndRejections (node:internal/process/task_queues:95:5) at async Transform.transform [as _transform] (file:///usr/lib/node_modules/generator-jhipster/node_modules/@yeoman/transform/dist/transform.js:16:37)
The application cannot be imported from the JDL.
Here is a simplified JDL to reproduce the issue:
application { config { applicationType monolith baseName MyOrgFrontend packageName com.myorg.frontend.public } entities * }
When renaming the public subpackage, everything works fine:
public
application { config { applicationType monolith baseName MyOrgFrontend packageName com.myorg.frontend.other } entities * }
I didn't find any related issues.
This has a low impact, a workaround is to simply rename the application package.
8.1.0
JHipster info:
Welcome to JHipster v8.1.0 Welcome to the JHipster Information Sub-Generator my-org-frontend@0.0.1-SNAPSHOT $PROJECT_PATH/myorg-frontend └── (empty) JHipster configuration, a .yo-rc.json file generated in the root folder .yo-rc.json file { "generator-jhipster": { "applicationIndex": 0, "applicationType": "monolith", "baseName": "MyOrgFrontend", "devServerPort": 4200, "entities": [], "jhipsterVersion": "8.1.0", "languages": [ "en" ], "nativeLanguage": "en", "packageFolder": "com/myorg/frontend/public", "packageName": "com.myorg.frontend.public" } } Environment and Tools openjdk version "17.0.9" 2023-10-17 OpenJDK Runtime Environment (Red_Hat-17.0.9.0.9-2) (build 17.0.9+9) OpenJDK 64-Bit Server VM (Red_Hat-17.0.9.0.9-2) (build 17.0.9+9, mixed mode, sharing) git version 2.43.0 node: v18.19.0 npm: 9.6.2 Docker version 24.0.5, build %{shortcommit_cli} JDL for the Entity configuration(s) entityName.json files generated in the .jhipster directory JDL entity definitions Congratulations, JHipster execution is complete! If you find JHipster useful consider sponsoring the project https://www.jhipster.tech/sponsors/ Thanks for using JHipster!
Welcome to JHipster v8.1.0
Welcome to the JHipster Information Sub-Generator
my-org-frontend@0.0.1-SNAPSHOT $PROJECT_PATH/myorg-frontend └── (empty)
.yo-rc.json
{ "generator-jhipster": { "applicationIndex": 0, "applicationType": "monolith", "baseName": "MyOrgFrontend", "devServerPort": 4200, "entities": [], "jhipsterVersion": "8.1.0", "languages": [ "en" ], "nativeLanguage": "en", "packageFolder": "com/myorg/frontend/public", "packageName": "com.myorg.frontend.public" } }
openjdk version "17.0.9" 2023-10-17 OpenJDK Runtime Environment (Red_Hat-17.0.9.0.9-2) (build 17.0.9+9) OpenJDK 64-Bit Server VM (Red_Hat-17.0.9.0.9-2) (build 17.0.9+9, mixed mode, sharing)
git version 2.43.0
node: v18.19.0 npm: 9.6.2
Docker version 24.0.5, build %{shortcommit_cli}
entityName.json
.jhipster
Congratulations, JHipster execution is complete! If you find JHipster useful consider sponsoring the project https://www.jhipster.tech/sponsors/
Thanks for using JHipster!
public is a keyword in java, so you can create a package containing such a keyword. We have checks for keywords (e.g. java, typescript) in place, maybe not for packagename (but I was pretty sure we have).
Overview of the issue
When trying to import an application defined in a JDL file, the project generation fails with the following error:
Motivation for or Use Case
The application cannot be imported from the JDL.
Reproduce the error
Here is a simplified JDL to reproduce the issue:
When renaming the
public
subpackage, everything works fine:Related issues
I didn't find any related issues.
Suggest a Fix
This has a low impact, a workaround is to simply rename the application package.
JHipster Version(s)
8.1.0
JHipster configuration
JHipster info:
Entity configuration(s)
entityName.json
files generated in the.jhipster
directoryBrowsers and Operating System