ISO-TC211 / iso-geodetic-registry

ISO Geodetic Registry backend
https://registry.isotc211.org
Other
5 stars 4 forks source link

(URGENT) Crash when rendering "Japanese Geodetic Datum 2011" #131

Closed ronaldtse closed 4 years ago

ronaldtse commented 4 years ago

In today's ISO GR Control Body meeting, the following error was observed (triggered by @maccraymer at approval of the datum).

Steps:

  1. Go to https://geodetic.isotc211.org/register/geodetic/GeodeticDatum

  2. Filter for "Japan"

    Screen Shot 2020-09-03 at 9 09 10 PM
  3. Click on "Details" for "Japanese Geodetic Datum 2011" entry

It redirects to: https://geodetic.isotc211.org/item/11842bba-82c2-49bc-83bf-0333aca2cb87

Screen Shot 2020-09-03 at 9 24 34 PM

The full error trace:

HTTP Status 500 – Internal Server Error

Type Exception Report

Message Request processing failed; nested exception is org.thymeleaf.exceptions.TemplateProcessingException: Exception evaluating SpringEL expression: "pmi.fromJson('{"aliases":["JGD2011"],"definition":["Japanese Geodetic Datum 2011"],"anchorDefinition":["Equivalent to ITRF2008 at epoch 2011.395 (2011-05-24, 12:00 UTC) in Northern Honshu area. Fundamental point: Tokyo-Taisho, latitude: 35°39'29.1572\"N, longitude: 139°44'28.8869\"E (of Greenwich). Equivalent to JGD2000 elsewhere."]}')" (registry/item:212)

Description The server encountered an unexpected condition that prevented it from fulfilling the request.

Exception

org.springframework.web.util.NestedServletException: Request processing failed; nested exception is org.thymeleaf.exceptions.TemplateProcessingException: Exception evaluating SpringEL expression: "pmi.fromJson('{"aliases":["JGD2011"],"definition":["Japanese Geodetic Datum 2011"],"anchorDefinition":["Equivalent to ITRF2008 at epoch 2011.395 (2011-05-24, 12:00 UTC) in Northern Honshu area. Fundamental point: Tokyo-Taisho, latitude: 35°39'29.1572\"N, longitude: 139°44'28.8869\"E (of Greenwich). Equivalent to JGD2000 elsewhere."]}')" (registry/item:212)
    org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:982)
    org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:861)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:624)
    org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:846)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:731)
    de.geoinfoffm.registry.client.web.recaptcha.ReCaptchaResponseFilter.doFilter(ReCaptchaResponseFilter.java:37)
    org.springframework.orm.hibernate4.support.OpenSessionInViewFilter.doFilterInternal(OpenSessionInViewFilter.java:151)
    org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
    org.springframework.orm.jpa.support.OpenEntityManagerInViewFilter.doFilterInternal(OpenEntityManagerInViewFilter.java:178)
    org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
    org.springframework.web.filter.HiddenHttpMethodFilter.doFilterInternal(HiddenHttpMethodFilter.java:81)
    org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
    org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:197)
    org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
    org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
    org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:317)
    org.springframework.security.web.access.intercept.FilterSecurityInterceptor.invoke(FilterSecurityInterceptor.java:127)
    org.springframework.security.web.access.intercept.FilterSecurityInterceptor.doFilter(FilterSecurityInterceptor.java:91)
    org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:331)
    org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:115)
    org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:331)
    org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:137)
    org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:331)
    org.springframework.security.web.authentication.AnonymousAuthenticationFilter.doFilter(AnonymousAuthenticationFilter.java:111)
    org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:331)
    org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter.doFilter(SecurityContextHolderAwareRequestFilter.java:169)
    org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:331)
    org.springframework.security.web.savedrequest.RequestCacheAwareFilter.doFilter(RequestCacheAwareFilter.java:63)
    org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:331)
    org.springframework.security.web.authentication.AbstractAuthenticationProcessingFilter.doFilter(AbstractAuthenticationProcessingFilter.java:200)
    org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:331)
    org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:121)
    org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:331)
    org.springframework.security.web.header.HeaderWriterFilter.doFilterInternal(HeaderWriterFilter.java:66)
    org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
    org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:331)
    org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:105)
    org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:331)
    org.springframework.security.web.context.request.async.WebAsyncManagerIntegrationFilter.doFilterInternal(WebAsyncManagerIntegrationFilter.java:56)
    org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
    org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:331)
    org.springframework.security.web.FilterChainProxy.doFilterInternal(FilterChainProxy.java:214)
    org.springframework.security.web.FilterChainProxy.doFilter(FilterChainProxy.java:177)
    org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:347)
    org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:263)
Root Cause

org.thymeleaf.exceptions.TemplateProcessingException: Exception evaluating SpringEL expression: "pmi.fromJson('{"aliases":["JGD2011"],"definition":["Japanese Geodetic Datum 2011"],"anchorDefinition":["Equivalent to ITRF2008 at epoch 2011.395 (2011-05-24, 12:00 UTC) in Northern Honshu area. Fundamental point: Tokyo-Taisho, latitude: 35°39'29.1572\"N, longitude: 139°44'28.8869\"E (of Greenwich). Equivalent to JGD2000 elsewhere."]}')" (registry/item:212)
    org.thymeleaf.spring4.expression.SpelVariableExpressionEvaluator.evaluate(SpelVariableExpressionEvaluator.java:161)
    org.thymeleaf.standard.expression.VariableExpression.executeVariable(VariableExpression.java:149)
    org.thymeleaf.standard.expression.SimpleExpression.executeSimple(SimpleExpression.java:59)
    org.thymeleaf.standard.expression.Expression.execute(Expression.java:103)
    org.thymeleaf.standard.expression.Expression.execute(Expression.java:133)
    org.thymeleaf.standard.expression.Expression.execute(Expression.java:120)
    org.thymeleaf.standard.processor.attr.AbstractStandardIterationAttrProcessor.getIterationSpec(AbstractStandardIterationAttrProcessor.java:86)
    org.thymeleaf.processor.attr.AbstractIterationAttrProcessor.processAttribute(AbstractIterationAttrProcessor.java:101)
    org.thymeleaf.processor.attr.AbstractAttrProcessor.doProcess(AbstractAttrProcessor.java:87)
    org.thymeleaf.processor.AbstractProcessor.process(AbstractProcessor.java:212)
    org.thymeleaf.dom.Node.applyNextProcessor(Node.java:1016)
    org.thymeleaf.dom.Node.processNode(Node.java:971)
    org.thymeleaf.dom.NestableNode.computeNextChild(NestableNode.java:672)
    org.thymeleaf.dom.NestableNode.doAdditionalProcess(NestableNode.java:655)
    org.thymeleaf.dom.Node.processNode(Node.java:990)
    org.thymeleaf.dom.NestableNode.computeNextChild(NestableNode.java:672)
    org.thymeleaf.dom.NestableNode.doAdditionalProcess(NestableNode.java:655)
    org.thymeleaf.dom.Node.processNode(Node.java:990)
    org.thymeleaf.dom.NestableNode.computeNextChild(NestableNode.java:672)
    org.thymeleaf.dom.NestableNode.doAdditionalProcess(NestableNode.java:655)
    org.thymeleaf.dom.Node.processNode(Node.java:990)
    org.thymeleaf.dom.NestableNode.computeNextChild(NestableNode.java:672)
    org.thymeleaf.dom.NestableNode.doAdditionalProcess(NestableNode.java:655)
    org.thymeleaf.dom.Node.processNode(Node.java:990)
    org.thymeleaf.dom.NestableNode.computeNextChild(NestableNode.java:672)
    org.thymeleaf.dom.NestableNode.doAdditionalProcess(NestableNode.java:655)
    org.thymeleaf.dom.Node.processNode(Node.java:990)
    org.thymeleaf.dom.NestableNode.computeNextChild(NestableNode.java:672)
    org.thymeleaf.dom.NestableNode.doAdditionalProcess(NestableNode.java:655)
    org.thymeleaf.dom.Node.processNode(Node.java:990)
    org.thymeleaf.dom.NestableNode.computeNextChild(NestableNode.java:672)
    org.thymeleaf.dom.NestableNode.doAdditionalProcess(NestableNode.java:655)
    org.thymeleaf.dom.Node.processNode(Node.java:990)
    org.thymeleaf.dom.NestableNode.computeNextChild(NestableNode.java:672)
    org.thymeleaf.dom.NestableNode.doAdditionalProcess(NestableNode.java:655)
    org.thymeleaf.dom.Node.processNode(Node.java:990)
    org.thymeleaf.dom.NestableNode.computeNextChild(NestableNode.java:672)
    org.thymeleaf.dom.NestableNode.doAdditionalProcess(NestableNode.java:655)
    org.thymeleaf.dom.Node.processNode(Node.java:990)
    org.thymeleaf.dom.NestableNode.computeNextChild(NestableNode.java:672)
    org.thymeleaf.dom.NestableNode.doAdditionalProcess(NestableNode.java:655)
    org.thymeleaf.dom.Node.processNode(Node.java:990)
    org.thymeleaf.dom.NestableNode.computeNextChild(NestableNode.java:672)
    org.thymeleaf.dom.NestableNode.doAdditionalProcess(NestableNode.java:655)
    org.thymeleaf.dom.Node.processNode(Node.java:990)
    org.thymeleaf.dom.NestableNode.computeNextChild(NestableNode.java:672)
    org.thymeleaf.dom.NestableNode.doAdditionalProcess(NestableNode.java:655)
    org.thymeleaf.dom.Node.processNode(Node.java:990)
    org.thymeleaf.dom.NestableNode.computeNextChild(NestableNode.java:672)
    org.thymeleaf.dom.NestableNode.doAdditionalProcess(NestableNode.java:655)
    org.thymeleaf.dom.Node.processNode(Node.java:990)
    org.thymeleaf.dom.NestableNode.computeNextChild(NestableNode.java:672)
    org.thymeleaf.dom.NestableNode.doAdditionalProcess(NestableNode.java:655)
    org.thymeleaf.dom.Node.processNode(Node.java:990)
    org.thymeleaf.dom.NestableNode.computeNextChild(NestableNode.java:672)
    org.thymeleaf.dom.NestableNode.doAdditionalProcess(NestableNode.java:655)
    org.thymeleaf.dom.Node.processNode(Node.java:990)
    org.thymeleaf.dom.NestableNode.computeNextChild(NestableNode.java:672)
    org.thymeleaf.dom.NestableNode.doAdditionalProcess(NestableNode.java:655)
    org.thymeleaf.dom.Node.processNode(Node.java:990)
    org.thymeleaf.dom.NestableNode.computeNextChild(NestableNode.java:672)
    org.thymeleaf.dom.NestableNode.doAdditionalProcess(NestableNode.java:655)
    org.thymeleaf.dom.Node.processNode(Node.java:990)
    org.thymeleaf.dom.NestableNode.computeNextChild(NestableNode.java:672)
    org.thymeleaf.dom.NestableNode.doAdditionalProcess(NestableNode.java:655)
    org.thymeleaf.dom.Node.processNode(Node.java:990)
    org.thymeleaf.dom.Document.process(Document.java:93)
    org.thymeleaf.TemplateEngine.process(TemplateEngine.java:1155)
    org.thymeleaf.TemplateEngine.process(TemplateEngine.java:1060)
    org.thymeleaf.TemplateEngine.process(TemplateEngine.java:1011)
    org.thymeleaf.spring4.view.ThymeleafView.renderFragment(ThymeleafView.java:335)
    org.thymeleaf.spring4.view.ThymeleafView.render(ThymeleafView.java:190)
    org.springframework.web.servlet.DispatcherServlet.render(DispatcherServlet.java:1286)
    org.springframework.web.servlet.DispatcherServlet.processDispatchResult(DispatcherServlet.java:1041)
    org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:984)
    org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:901)
    org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:970)
    org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:861)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:624)
    org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:846)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:731)
    de.geoinfoffm.registry.client.web.recaptcha.ReCaptchaResponseFilter.doFilter(ReCaptchaResponseFilter.java:37)
    org.springframework.orm.hibernate4.support.OpenSessionInViewFilter.doFilterInternal(OpenSessionInViewFilter.java:151)
    org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
    org.springframework.orm.jpa.support.OpenEntityManagerInViewFilter.doFilterInternal(OpenEntityManagerInViewFilter.java:178)
    org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
    org.springframework.web.filter.HiddenHttpMethodFilter.doFilterInternal(HiddenHttpMethodFilter.java:81)
    org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
    org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:197)
    org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
    org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
    org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:317)
    org.springframework.security.web.access.intercept.FilterSecurityInterceptor.invoke(FilterSecurityInterceptor.java:127)
    org.springframework.security.web.access.intercept.FilterSecurityInterceptor.doFilter(FilterSecurityInterceptor.java:91)
    org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:331)
    org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:115)
    org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:331)
    org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:137)
    org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:331)
    org.springframework.security.web.authentication.AnonymousAuthenticationFilter.doFilter(AnonymousAuthenticationFilter.java:111)
    org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:331)
    org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter.doFilter(SecurityContextHolderAwareRequestFilter.java:169)
    org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:331)
    org.springframework.security.web.savedrequest.RequestCacheAwareFilter.doFilter(RequestCacheAwareFilter.java:63)
    org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:331)
    org.springframework.security.web.authentication.AbstractAuthenticationProcessingFilter.doFilter(AbstractAuthenticationProcessingFilter.java:200)
    org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:331)
    org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:121)
    org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:331)
    org.springframework.security.web.header.HeaderWriterFilter.doFilterInternal(HeaderWriterFilter.java:66)
    org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
    org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:331)
    org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:105)
    org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:331)
    org.springframework.security.web.context.request.async.WebAsyncManagerIntegrationFilter.doFilterInternal(WebAsyncManagerIntegrationFilter.java:56)
    org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
    org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:331)
    org.springframework.security.web.FilterChainProxy.doFilterInternal(FilterChainProxy.java:214)
    org.springframework.security.web.FilterChainProxy.doFilter(FilterChainProxy.java:177)
    org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:347)
    org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:263)
Root Cause

org.springframework.expression.spel.SpelParseException: Expression [pmi.fromJson('{"aliases":["JGD2011"],"definition":["Japanese Geodetic Datum 2011"],"anchorDefinition":["Equivalent to ITRF2008 at epoch 2011.395 (2011-05-24, 12:00 UTC) in Northern Honshu area. Fundamental point: Tokyo-Taisho, latitude: 35°39'29.1572\"N, longitude: 139°44'28.8869\"E (of Greenwich). Equivalent to JGD2000 elsewhere."]}')] @250: EL1065E: Unexpected escape character
    org.springframework.expression.spel.standard.Tokenizer.raiseParseException(Tokenizer.java:590)
    org.springframework.expression.spel.standard.Tokenizer.process(Tokenizer.java:265)
    org.springframework.expression.spel.standard.InternalSpelExpressionParser.doParseExpression(InternalSpelExpressionParser.java:123)
    org.springframework.expression.spel.standard.SpelExpressionParser.doParseExpression(SpelExpressionParser.java:60)
    org.springframework.expression.spel.standard.SpelExpressionParser.doParseExpression(SpelExpressionParser.java:32)
    org.springframework.expression.common.TemplateAwareExpressionParser.parseExpression(TemplateAwareExpressionParser.java:73)
    org.springframework.expression.common.TemplateAwareExpressionParser.parseExpression(TemplateAwareExpressionParser.java:60)
    org.thymeleaf.spring4.expression.SpelVariableExpressionEvaluator.getExpression(SpelVariableExpressionEvaluator.java:182)
    org.thymeleaf.spring4.expression.SpelVariableExpressionEvaluator.evaluate(SpelVariableExpressionEvaluator.java:129)
    org.thymeleaf.standard.expression.VariableExpression.executeVariable(VariableExpression.java:149)
    org.thymeleaf.standard.expression.SimpleExpression.executeSimple(SimpleExpression.java:59)
    org.thymeleaf.standard.expression.Expression.execute(Expression.java:103)
    org.thymeleaf.standard.expression.Expression.execute(Expression.java:133)
    org.thymeleaf.standard.expression.Expression.execute(Expression.java:120)
    org.thymeleaf.standard.processor.attr.AbstractStandardIterationAttrProcessor.getIterationSpec(AbstractStandardIterationAttrProcessor.java:86)
    org.thymeleaf.processor.attr.AbstractIterationAttrProcessor.processAttribute(AbstractIterationAttrProcessor.java:101)
    org.thymeleaf.processor.attr.AbstractAttrProcessor.doProcess(AbstractAttrProcessor.java:87)
    org.thymeleaf.processor.AbstractProcessor.process(AbstractProcessor.java:212)
    org.thymeleaf.dom.Node.applyNextProcessor(Node.java:1016)
    org.thymeleaf.dom.Node.processNode(Node.java:971)
    org.thymeleaf.dom.NestableNode.computeNextChild(NestableNode.java:672)
    org.thymeleaf.dom.NestableNode.doAdditionalProcess(NestableNode.java:655)
    org.thymeleaf.dom.Node.processNode(Node.java:990)
    org.thymeleaf.dom.NestableNode.computeNextChild(NestableNode.java:672)
    org.thymeleaf.dom.NestableNode.doAdditionalProcess(NestableNode.java:655)
    org.thymeleaf.dom.Node.processNode(Node.java:990)
    org.thymeleaf.dom.NestableNode.computeNextChild(NestableNode.java:672)
    org.thymeleaf.dom.NestableNode.doAdditionalProcess(NestableNode.java:655)
    org.thymeleaf.dom.Node.processNode(Node.java:990)
    org.thymeleaf.dom.NestableNode.computeNextChild(NestableNode.java:672)
    org.thymeleaf.dom.NestableNode.doAdditionalProcess(NestableNode.java:655)
    org.thymeleaf.dom.Node.processNode(Node.java:990)
    org.thymeleaf.dom.NestableNode.computeNextChild(NestableNode.java:672)
    org.thymeleaf.dom.NestableNode.doAdditionalProcess(NestableNode.java:655)
    org.thymeleaf.dom.Node.processNode(Node.java:990)
    org.thymeleaf.dom.NestableNode.computeNextChild(NestableNode.java:672)
    org.thymeleaf.dom.NestableNode.doAdditionalProcess(NestableNode.java:655)
    org.thymeleaf.dom.Node.processNode(Node.java:990)
    org.thymeleaf.dom.NestableNode.computeNextChild(NestableNode.java:672)
    org.thymeleaf.dom.NestableNode.doAdditionalProcess(NestableNode.java:655)
    org.thymeleaf.dom.Node.processNode(Node.java:990)
    org.thymeleaf.dom.NestableNode.computeNextChild(NestableNode.java:672)
    org.thymeleaf.dom.NestableNode.doAdditionalProcess(NestableNode.java:655)
    org.thymeleaf.dom.Node.processNode(Node.java:990)
    org.thymeleaf.dom.NestableNode.computeNextChild(NestableNode.java:672)
    org.thymeleaf.dom.NestableNode.doAdditionalProcess(NestableNode.java:655)
    org.thymeleaf.dom.Node.processNode(Node.java:990)
    org.thymeleaf.dom.NestableNode.computeNextChild(NestableNode.java:672)
    org.thymeleaf.dom.NestableNode.doAdditionalProcess(NestableNode.java:655)
    org.thymeleaf.dom.Node.processNode(Node.java:990)
    org.thymeleaf.dom.NestableNode.computeNextChild(NestableNode.java:672)
    org.thymeleaf.dom.NestableNode.doAdditionalProcess(NestableNode.java:655)
    org.thymeleaf.dom.Node.processNode(Node.java:990)
    org.thymeleaf.dom.NestableNode.computeNextChild(NestableNode.java:672)
    org.thymeleaf.dom.NestableNode.doAdditionalProcess(NestableNode.java:655)
    org.thymeleaf.dom.Node.processNode(Node.java:990)
    org.thymeleaf.dom.NestableNode.computeNextChild(NestableNode.java:672)
    org.thymeleaf.dom.NestableNode.doAdditionalProcess(NestableNode.java:655)
    org.thymeleaf.dom.Node.processNode(Node.java:990)
    org.thymeleaf.dom.NestableNode.computeNextChild(NestableNode.java:672)
    org.thymeleaf.dom.NestableNode.doAdditionalProcess(NestableNode.java:655)
    org.thymeleaf.dom.Node.processNode(Node.java:990)
    org.thymeleaf.dom.NestableNode.computeNextChild(NestableNode.java:672)
    org.thymeleaf.dom.NestableNode.doAdditionalProcess(NestableNode.java:655)
    org.thymeleaf.dom.Node.processNode(Node.java:990)
    org.thymeleaf.dom.NestableNode.computeNextChild(NestableNode.java:672)
    org.thymeleaf.dom.NestableNode.doAdditionalProcess(NestableNode.java:655)
    org.thymeleaf.dom.Node.processNode(Node.java:990)
    org.thymeleaf.dom.NestableNode.computeNextChild(NestableNode.java:672)
    org.thymeleaf.dom.NestableNode.doAdditionalProcess(NestableNode.java:655)
    org.thymeleaf.dom.Node.processNode(Node.java:990)
    org.thymeleaf.dom.NestableNode.computeNextChild(NestableNode.java:672)
    org.thymeleaf.dom.NestableNode.doAdditionalProcess(NestableNode.java:655)
    org.thymeleaf.dom.Node.processNode(Node.java:990)
    org.thymeleaf.dom.Document.process(Document.java:93)
    org.thymeleaf.TemplateEngine.process(TemplateEngine.java:1155)
    org.thymeleaf.TemplateEngine.process(TemplateEngine.java:1060)
    org.thymeleaf.TemplateEngine.process(TemplateEngine.java:1011)
    org.thymeleaf.spring4.view.ThymeleafView.renderFragment(ThymeleafView.java:335)
    org.thymeleaf.spring4.view.ThymeleafView.render(ThymeleafView.java:190)
    org.springframework.web.servlet.DispatcherServlet.render(DispatcherServlet.java:1286)
    org.springframework.web.servlet.DispatcherServlet.processDispatchResult(DispatcherServlet.java:1041)
    org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:984)
    org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:901)
    org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:970)
    org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:861)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:624)
    org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:846)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:731)
    de.geoinfoffm.registry.client.web.recaptcha.ReCaptchaResponseFilter.doFilter(ReCaptchaResponseFilter.java:37)
    org.springframework.orm.hibernate4.support.OpenSessionInViewFilter.doFilterInternal(OpenSessionInViewFilter.java:151)
    org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
    org.springframework.orm.jpa.support.OpenEntityManagerInViewFilter.doFilterInternal(OpenEntityManagerInViewFilter.java:178)
    org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
    org.springframework.web.filter.HiddenHttpMethodFilter.doFilterInternal(HiddenHttpMethodFilter.java:81)
    org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
    org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:197)
    org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
    org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
    org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:317)
    org.springframework.security.web.access.intercept.FilterSecurityInterceptor.invoke(FilterSecurityInterceptor.java:127)
    org.springframework.security.web.access.intercept.FilterSecurityInterceptor.doFilter(FilterSecurityInterceptor.java:91)
    org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:331)
    org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:115)
    org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:331)
    org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:137)
    org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:331)
    org.springframework.security.web.authentication.AnonymousAuthenticationFilter.doFilter(AnonymousAuthenticationFilter.java:111)
    org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:331)
    org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter.doFilter(SecurityContextHolderAwareRequestFilter.java:169)
    org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:331)
    org.springframework.security.web.savedrequest.RequestCacheAwareFilter.doFilter(RequestCacheAwareFilter.java:63)
    org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:331)
    org.springframework.security.web.authentication.AbstractAuthenticationProcessingFilter.doFilter(AbstractAuthenticationProcessingFilter.java:200)
    org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:331)
    org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:121)
    org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:331)
    org.springframework.security.web.header.HeaderWriterFilter.doFilterInternal(HeaderWriterFilter.java:66)
    org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
    org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:331)
    org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:105)
    org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:331)
    org.springframework.security.web.context.request.async.WebAsyncManagerIntegrationFilter.doFilterInternal(WebAsyncManagerIntegrationFilter.java:56)
    org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
    org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:331)
    org.springframework.security.web.FilterChainProxy.doFilterInternal(FilterChainProxy.java:214)
    org.springframework.security.web.FilterChainProxy.doFilter(FilterChainProxy.java:177)
    org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:347)
    org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:263)
ronaldtse commented 4 years ago

Looks like the exact error is:

Exception evaluating SpringEL expression: "pmi.fromJson('{"aliases":["JGD2011"],"definition":["Japanese Geodetic Datum 2011"],"anchorDefinition":["Equivalent to ITRF2008 at epoch 2011.395 (2011-05-24, 12:00 UTC) in Northern Honshu area. Fundamental point: Tokyo-Taisho, latitude: 35°39'29.1572\"N, longitude: 139°44'28.8869\"E (of Greenwich). Equivalent to JGD2000 elsewhere."]}')" (registry/item:212)

i.e. This message is not valid JSON:

{
  "aliases": [
    "JGD2011"
  ],
  "definition": [
    "Japanese Geodetic Datum 2011"
  ],
  "anchorDefinition": [
    "Equivalent to ITRF2008 at epoch 2011.395 (2011-05-24, 12:00 UTC) in Northern Honshu area. Fundamental point: Tokyo-Taisho, latitude: 35°39'29.1572\"N, longitude: 139°44'28.8869\"E (of Greenwich). Equivalent to JGD2000 elsewhere."
  ]
}

Maybe it's the \"N and \"E causing the crash.

ronaldtse commented 4 years ago

@phuonghuynh The immediate way to fix this is to fix the data.

However we want to fix the mechanism so that this doesn't occur again. This piece of JSON looks like to be generated and then re-parsed as JSON, and there's something wrong with the escaping mechanism here.

maccraymer commented 4 years ago

Are the the \"N and \"E present in the anchorDefinition for the JGD2000 entry (item #111). That entry doesn't crash. Both of these entries were imported via the spreadsheet.

Some further testing...

1) The staging registry gives the same error for JGD2011 (item 138 in both registries). I noticed that when the item is submitted to the Control Body, the Details button displays the entry properly (the entry is displayed as it would be for a general user).

2) Also in the staging registry, I replaced the deg-min-sec symbols with hyphens in the anchor definition but the item still gives the display error.

3) In the staging registry, I removed the lat & lon from the anchor definition and the item still gives the display error.

4) In the staging registry, I removed the anchor definition entirely and the item still gives the display error.

5) In the staging registry, I invalidated the original item 138 and re-entered/replaced it with a new identical item 742. The new item 742 displays properly. Interestingly, when the invalidation proposal was submitted to the Registry Manager, the Details button in the Registry Manager's folder gives a display error (it didn't for Clarification action). The same occurred when submitted to the Control Body when selecting the Details button in that folder.

So it appears the anchor definition is not the problem and that there might be something else wrong with the original database entry? In any case, this can be resolved by invalidating the old item and replacing it with a new identical one.

phuonghuynh commented 4 years ago

Interesting issue ^

ronaldtse commented 4 years ago

From @phuonghuynh:

still investigating it, look like the issue related to importing data. It is not json parser related

phuonghuynh commented 4 years ago

@ronaldtse the fix has been deployed to prod server

ronaldtse commented 4 years ago

Thanks @phuonghuynh ! I can see the page now loads properly.

@maccraymer can you help verify? Thanks!

maccraymer commented 4 years ago

@ronaldtse & @phuonghuynh thanks for fixing this right away!! The page loads proper now on my iPhone, iPad, Mac mini and MacBook all using Safari & Chrome, and on my office Windoze desktop using Internet Exploder & Chrome.

@phuonghuynh just out of curiousity, what was causing the problem and how did you fix it?

phuonghuynh commented 4 years ago

@maccraymer Spring EL evaluator failed to parse the data return in this case, special characters not supported in the framework. To fix it, I moved the function into java code to remove Spring EL processing for this case.