[ 
https://issues.apache.org/jira/browse/SLING-7890?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16610625#comment-16610625
 ] 

Jason E Bailey commented on SLING-7890:
---------------------------------------

Additional information

The issue that is occurring is happening in two use cases, in the VersionInfo 
servlet and in the Default JSON Renderer when the selector of "tidy" is used. 
In these cases all values are being returned as Strings. This was introduced in 
release 2.1.26 as part of the change to apache johnzon json implementation. The 
class org.apache.sling.servlets.get.impl.util.JsonRenderer was added and the 
method valueToString(Object value)  incorrectly handled numbers and booleans.

Here is a version request prior to 2.1.26
{code:java}
{
    "versions": {
        "jcr:rootVersion": {
            "created": "Mon Sep 10 2018 08:50:23 GMT-0400",
            "successors": ["1.0"],
            "predecessors": [],
            "labels": [],
            "baseVersion": false
        },
        "1.0": {
            "created": "Tue Sep 11 2018 09:26:52 GMT-0400",
            "successors": [],
            "predecessors": ["jcr:rootVersion"],
            "labels": [],
            "baseVersion": true
        }
    }
}{code}
 

The same request via 2.1.30
{code:java}
{
    "versions": {
        "jcr:rootVersion": {
            "created": "Mon Sep 10 2018 08:50:23 GMT-0400",
            "successors": ["1.0"],
            "predecessors": [],
            "labels": [],
            "baseVersion": "false"
        },
        "1.0": {
            "created": "Tue Sep 11 2018 09:26:52 GMT-0400",
            "successors": [],
            "predecessors": ["jcr:rootVersion"],
            "labels": [],
            "baseVersion": "true"
        }
    }
}{code}
Notice that the booleans are being returned as boolean. I suspect the issue 
came about with how JsonObject.getString is being implemented. In the old 
library it would convert a value to String, where as in Johnzon it's expecting 
a JsonString. So when the change was made to Johnzon and the results were 
changed to return a String rather than a boolean, no errors were detected.

 

Here is the same issue in 2.1.30 appearing with the default JSON Renderer: 
http://localhost:8080/content/apache/sling-apache-org/index.json
{code:java}
{
    "jcr:primaryType": "nt:unstructured",
    "jcr:title": "Apache Sling - Bringing Back the Fun!",
    "sling:template": "/conf/global/site/templates/base-page",
    "sling:taxonomy": "/etc/taxonomy/reference/community",
    "sling:resourceType": "reference/components/pages/base",
    "published": true,
    "hideInSitemap": false
}{code}
 

and with tidy: 
http://localhost:8080/content/apache/sling-apache-org/index.tidy.json
{
  "jcr:primaryType": "nt:unstructured",
  "jcr:title": "Apache Sling - Bringing Back the Fun!",
  "sling:template": "/conf/global/site/templates/base-page",
  "sling:taxonomy": "/etc/taxonomy/reference/community",
  "sling:resourceType": "reference/components/pages/base",
  "published": "true",
  "hideInSitemap": "false"
  }
 

I would say that if this hasn't shown up as a bug yet, that it will, because 
the boolean as a String is a fairly recent development.

 

 

> JSON-related IT failures when upgrading sling.servlets to 2.1.34
> ----------------------------------------------------------------
>
>                 Key: SLING-7890
>                 URL: https://issues.apache.org/jira/browse/SLING-7890
>             Project: Sling
>          Issue Type: Bug
>          Components: Servlets
>    Affects Versions: Servlets Get 2.1.34
>            Reporter: Robert Munteanu
>            Assignee: Jason E Bailey
>            Priority: Major
>             Fix For: Launchpad Integration Tests 1.0.8, Servlets Get 2.1.36
>
>
> With the following change in the sling starter
> {noformat}diff --git a/src/main/provisioning/sling.txt 
> b/src/main/provisioning/sling.txt
> index 0f76c0b..4904fc3 100644
> --- a/src/main/provisioning/sling.txt
> +++ b/src/main/provisioning/sling.txt
> @@ -62,7 +62,7 @@
>      org.apache.sling/org.apache.sling.resourceresolver/1.6.6
>      org.apache.sling/org.apache.sling.serviceusermapper/1.4.0
>      org.apache.sling/org.apache.sling.serviceuser.webconsole/1.0.0
> -    org.apache.sling/org.apache.sling.servlets.get/2.1.30
> +    org.apache.sling/org.apache.sling.servlets.get/2.1.34
>      org.apache.sling/org.apache.sling.servlets.post/2.3.26
>      org.apache.sling/org.apache.sling.servlets.resolver/2.4.22
>      org.apache.sling/org.apache.sling.xss/2.0.12
> {noformat}
> I get multiple IT failures, and the root cause seems top be
> {noformat}java.lang.ClassCastException: 
> org.apache.johnzon.core.JsonObjectImpl cannot be cast to javax.json.JsonArray
>       at 
> org.apache.sling.servlets.get.impl.util.JsonToText.valueToString(JsonToText.java:164)
>       at 
> org.apache.sling.servlets.get.impl.util.JsonToText.prettyPrint(JsonToText.java:209)
>       at 
> org.apache.sling.servlets.get.impl.VersionInfoServlet.doGet(VersionInfoServlet.java:124)
>       at 
> org.apache.sling.api.servlets.SlingSafeMethodsServlet.mayService(SlingSafeMethodsServlet.java:266)
>       at 
> org.apache.sling.api.servlets.SlingSafeMethodsServlet.service(SlingSafeMethodsServlet.java:342)
>       at 
> org.apache.sling.api.servlets.SlingSafeMethodsServlet.service(SlingSafeMethodsServlet.java:374)
>       at 
> org.apache.sling.engine.impl.request.RequestData.service(RequestData.java:552)
>       at 
> org.apache.sling.engine.impl.filter.SlingComponentFilterChain.render(SlingComponentFilterChain.java:44)
>       at 
> org.apache.sling.engine.impl.filter.AbstractSlingFilterChain.doFilter(AbstractSlingFilterChain.java:82)
>       at 
> org.apache.sling.engine.impl.SlingRequestProcessorImpl.processComponent(SlingRequestProcessorImpl.java:282)
>       at 
> org.apache.sling.engine.impl.filter.RequestSlingFilterChain.render(RequestSlingFilterChain.java:49)
>       at 
> org.apache.sling.engine.impl.filter.AbstractSlingFilterChain.doFilter(AbstractSlingFilterChain.java:82)
>       at 
> org.apache.sling.engine.impl.debug.RequestProgressTrackerLogFilter.doFilter(RequestProgressTrackerLogFilter.java:107)
>       at 
> org.apache.sling.engine.impl.filter.AbstractSlingFilterChain.doFilter(AbstractSlingFilterChain.java:72)
>       at 
> org.apache.sling.engine.impl.filter.AbstractSlingFilterChain.doFilter(AbstractSlingFilterChain.java:78)
>       at 
> org.apache.sling.launchpad.testservices.filters.TestFilter.doFilter(TestFilter.java:47)
>       at 
> org.apache.sling.launchpad.testservices.filters.NoPropertyFilter.doFilter(NoPropertyFilter.java:25)
>       at 
> org.apache.sling.engine.impl.filter.AbstractSlingFilterChain.doFilter(AbstractSlingFilterChain.java:72)
>       at 
> org.apache.sling.launchpad.testservices.filters.TestFilter.doFilter(TestFilter.java:47)
>       at 
> org.apache.sling.launchpad.testservices.filters.SlingFilter.doFilter(SlingFilter.java:25)
>       at 
> org.apache.sling.engine.impl.filter.AbstractSlingFilterChain.doFilter(AbstractSlingFilterChain.java:72)
>       at org.apache.sling.i18n.impl.I18NFilter.doFilter(I18NFilter.java:131)
>       at 
> org.apache.sling.engine.impl.filter.AbstractSlingFilterChain.doFilter(AbstractSlingFilterChain.java:72)
>       at 
> org.apache.sling.engine.impl.SlingRequestProcessorImpl.doProcessRequest(SlingRequestProcessorImpl.java:151)
>       at 
> org.apache.sling.engine.impl.SlingMainServlet.service(SlingMainServlet.java:234)
>       at 
> org.apache.felix.http.base.internal.handler.ServletHandler.handle(ServletHandler.java:120)
>       at 
> org.apache.felix.http.base.internal.dispatch.InvocationChain.doFilter(InvocationChain.java:86)
>       at 
> org.apache.sling.junit.impl.servlet.TestLogServlet$TestNameLoggingFilter.doFilter(TestLogServlet.java:257)
>       at 
> org.apache.felix.http.base.internal.handler.FilterHandler.handle(FilterHandler.java:135)
>       at 
> org.apache.felix.http.base.internal.dispatch.InvocationChain.doFilter(InvocationChain.java:81)
>       at 
> org.apache.felix.http.sslfilter.internal.SslFilter.doFilter(SslFilter.java:96)
>       at 
> org.apache.felix.http.base.internal.handler.FilterHandler.handle(FilterHandler.java:135)
>       at 
> org.apache.felix.http.base.internal.dispatch.InvocationChain.doFilter(InvocationChain.java:81)
>       at org.apache.sling.i18n.impl.I18NFilter.doFilter(I18NFilter.java:131)
>       at 
> org.apache.felix.http.base.internal.handler.FilterHandler.handle(FilterHandler.java:135)
>       at 
> org.apache.felix.http.base.internal.dispatch.InvocationChain.doFilter(InvocationChain.java:81)
>       at 
> org.apache.sling.engine.impl.log.RequestLoggerFilter.doFilter(RequestLoggerFilter.java:72)
>       at 
> org.apache.felix.http.base.internal.handler.FilterHandler.handle(FilterHandler.java:135)
>       at 
> org.apache.felix.http.base.internal.dispatch.InvocationChain.doFilter(InvocationChain.java:81)
>       at 
> org.apache.sling.engine.impl.parameters.RequestParameterSupportConfigurer.doFilter(RequestParameterSupportConfigurer.java:63)
>       at 
> org.apache.felix.http.base.internal.handler.FilterHandler.handle(FilterHandler.java:135)
>       at 
> org.apache.felix.http.base.internal.dispatch.InvocationChain.doFilter(InvocationChain.java:81)
>       at 
> org.apache.felix.http.base.internal.dispatch.Dispatcher$1.doFilter(Dispatcher.java:146)
>       at 
> org.apache.felix.http.base.internal.whiteboard.WhiteboardManager.invokePreprocessors(WhiteboardManager.java:1000)
>       at 
> org.apache.felix.http.base.internal.dispatch.Dispatcher.dispatch(Dispatcher.java:91)
>       at 
> org.apache.felix.http.base.internal.dispatch.DispatcherServlet.service(DispatcherServlet.java:49)
>       at javax.servlet.http.HttpServlet.service(HttpServlet.java:725)
>       at 
> org.eclipse.jetty.servlet.ServletHolder.handle(ServletHolder.java:865)
>       at 
> org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:535)
>       at 
> org.eclipse.jetty.server.handler.ScopedHandler.nextHandle(ScopedHandler.java:255)
>       at 
> org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:1595)
>       at 
> org.eclipse.jetty.server.handler.ScopedHandler.nextHandle(ScopedHandler.java:255)
>       at 
> org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1317)
>       at 
> org.eclipse.jetty.server.handler.ScopedHandler.nextScope(ScopedHandler.java:203)
>       at 
> org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:473)
>       at 
> org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:1564)
>       at 
> org.eclipse.jetty.server.handler.ScopedHandler.nextScope(ScopedHandler.java:201)
>       at 
> org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:1219)
>       at 
> org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:144)
>       at 
> org.eclipse.jetty.server.handler.ContextHandlerCollection.handle(ContextHandlerCollection.java:219)
>       at 
> org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:132)
>       at org.eclipse.jetty.server.Server.handle(Server.java:531)
>       at org.eclipse.jetty.server.HttpChannel.handle(HttpChannel.java:352)
>       at 
> org.eclipse.jetty.server.HttpConnection.onFillable(HttpConnection.java:260)
>       at 
> org.eclipse.jetty.io.AbstractConnection$ReadCallback.succeeded(AbstractConnection.java:281)
>       at org.eclipse.jetty.io.FillInterest.fillable(FillInterest.java:102)
>       at org.eclipse.jetty.io.ChannelEndPoint$2.run(ChannelEndPoint.java:118)
>       at 
> org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.runTask(EatWhatYouKill.java:333)
>       at 
> org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.doProduce(EatWhatYouKill.java:310)
>       at 
> org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.tryProduce(EatWhatYouKill.java:168)
>       at 
> org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.run(EatWhatYouKill.java:126)
>       at 
> org.eclipse.jetty.util.thread.ReservedThreadExecutor$ReservedThread.run(ReservedThreadExecutor.java:366)
>       at 
> org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:762)
>       at 
> org.eclipse.jetty.util.thread.QueuedThreadPool$2.run(QueuedThreadPool.java:680)
>       at java.lang.Thread.run(Thread.java:748){noformat}.



--
This message was sent by Atlassian JIRA
(v7.6.3#76005)

Reply via email to