[MGNLREST-180] Handle NPE of nodeTypes Created: 16/Mar/18  Updated: 16/Apr/20  Resolved: 23/Mar/18

Status: Closed
Project: Magnolia REST Framework
Component/s: None
Affects Version/s: 2.1
Fix Version/s: 2.1.1

Type: Task Priority: Neutral
Reporter: Martin Drápela Assignee: Hieu Nguyen Duc
Resolution: Fixed Votes: 0
Labels: None
Remaining Estimate: 0d
Time Spent: 1d 5h
Original Estimate: 2d

Issue Links:
Relates
relates to MAGNOLIA-7283 Type mismatch in Map2BeanTransformer ... Closed
Template:
Acceptance criteria:
Empty
Task DoR:
Empty
Date of First Response:
Epic Link: YAML backwards compatibility
Sprint: Saigon 139
Story Points: 3

 Description   

We should implement some basic validation of endpoint configurations to avoid a situation like in 1) below the first line.

  • The below configs were all done in YAML under /tours/restEndpoints
  • The endpoint is called ep
  • No "PROBLEMS" announced in the Definitions app after registration of the erroneous config.
  • ENVs:
    • Ubuntu MATE 16.04
    • magnolia-enterprise-pro-demo-bundle-5.6.4-20180315.123450-32-tomcat-bundle

1) A non-list definition of nodeTypes for ep:

1a) The erry configuration:

class: info.magnolia.rest.delivery.jcr.v2.JcrDeliveryEndpointDefinition
workspace: website
rootPath: /
nodeTypes: mgnl:page

1b) Console messages (upon saving this):

2018-03-15 16:33:24,041 INFO  info.magnolia.rest.RestDispatcherServlet          : Endpoint ep is registered with base path: [context]/ep

2018-03-15 16:33:24,041 INFO  agnolia.config.source.yaml.YamlConfigurationSource: Registered definition from YAML file [/tours/restEndpoints/ep.yaml]: [restEndpoint] definition [ep] with reference id: [ep] from module [tours] at [ep]

1ca) A request that worked fine with the erry config:

curl -X GET 'http://localhost:8080/magnoliaAuthor/.rest/ep/travel/about' -u superuser:superuser

{"@name":"about","@path":"/travel/about","@id":"808ebe4c-72b2-49f1-b9f7-e7db22bce02f","@nodeType":"mgnl:page","jcr:createdBy":"admin","hideInNav":"false","mgnl:template":"travel-demo:pages/standard","mgnl:lastActivatedBy":"superuser","mgnl:lastActivated":"2018-03-15T15:17:16.842+01:00","jcr:created":"2018-03-15T15:16:42.616+01:00","mgnl:created":"2015-02-02T17:34:28.816+01:00","mgnl:createdBy":"superuser","title":"About","mgnl:lastModified":"2015-10-27T13:50:28.322+01:00","mgnl:activationStatus":"true","mgnl:lastModifiedBy":"superuser","@nodes":[]}

1cb) A request that failed with the config (+stacktrace):

curl -X GET 'http://localhost:8080/magnoliaAuthor/.rest/ep/?mgnl:lastModified\[lte\]=2015-06-03' -u superuser:superuser

{"error":{"code":"unknown","message":null}}
2018-03-15 16:35:55,760 ERROR info.magnolia.rest.RestExceptionMapper            : Exception thrown executing REST endpoint, returning 500
java.lang.NullPointerException: null
	at java.util.ArrayList.addAll(ArrayList.java:581) ~[?:1.8.0_151]
	at info.magnolia.rest.delivery.jcr.QueryBuilder.nodeTypes(QueryBuilder.java:116) ~[magnolia-rest-content-delivery-2.1-SNAPSHOT.jar:?]
	at info.magnolia.rest.delivery.jcr.v2.JcrDeliveryEndpoint$2.exec(JcrDeliveryEndpoint.java:226) ~[magnolia-rest-content-delivery-2.1-SNAPSHOT.jar:?]
	at info.magnolia.rest.delivery.jcr.v2.JcrDeliveryEndpoint$2.exec(JcrDeliveryEndpoint.java:219) ~[magnolia-rest-content-delivery-2.1-SNAPSHOT.jar:?]
	at info.magnolia.cms.security.JCRSessionOp.exec(JCRSessionOp.java:68) ~[magnolia-core-5.6.3-SNAPSHOT.jar:?]
	at info.magnolia.rest.delivery.jcr.v2.JcrDeliveryEndpoint.doSessionOperation(JcrDeliveryEndpoint.java:256) ~[magnolia-rest-content-delivery-2.1-SNAPSHOT.jar:?]
	at info.magnolia.rest.delivery.jcr.v2.JcrDeliveryEndpoint.queryNodes(JcrDeliveryEndpoint.java:219) ~[magnolia-rest-content-delivery-2.1-SNAPSHOT.jar:?]
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:1.8.0_151]
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[?:1.8.0_151]
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[?:1.8.0_151]
	at java.lang.reflect.Method.invoke(Method.java:498) ~[?:1.8.0_151]
	at org.jboss.resteasy.core.MethodInjectorImpl.invoke(MethodInjectorImpl.java:140) ~[resteasy-jaxrs-3.1.3.Final.jar:3.1.3.Final]
	at org.jboss.resteasy.core.ResourceMethodInvoker.invokeOnTarget(ResourceMethodInvoker.java:294) ~[resteasy-jaxrs-3.1.3.Final.jar:3.1.3.Final]
	at org.jboss.resteasy.core.ResourceMethodInvoker.invoke(ResourceMethodInvoker.java:248) ~[resteasy-jaxrs-3.1.3.Final.jar:3.1.3.Final]
	at org.jboss.resteasy.core.ResourceMethodInvoker.invoke(ResourceMethodInvoker.java:235) ~[resteasy-jaxrs-3.1.3.Final.jar:3.1.3.Final]
	at org.jboss.resteasy.core.SynchronousDispatcher.invoke(SynchronousDispatcher.java:402) [resteasy-jaxrs-3.1.3.Final.jar:3.1.3.Final]
	at org.jboss.resteasy.core.SynchronousDispatcher.invoke(SynchronousDispatcher.java:209) [resteasy-jaxrs-3.1.3.Final.jar:3.1.3.Final]
	at org.jboss.resteasy.plugins.server.servlet.ServletContainerDispatcher.service(ServletContainerDispatcher.java:227) [resteasy-jaxrs-3.1.3.Final.jar:3.1.3.Final]
	at org.jboss.resteasy.plugins.server.servlet.HttpServletDispatcher.service(HttpServletDispatcher.java:56) [resteasy-jaxrs-3.1.3.Final.jar:3.1.3.Final]
	at org.jboss.resteasy.plugins.server.servlet.HttpServletDispatcher.service(HttpServletDispatcher.java:51) [resteasy-jaxrs-3.1.3.Final.jar:3.1.3.Final]
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:729) [servlet-api.jar:?]
	at info.magnolia.cms.filters.ServletDispatchingFilter.doFilter(ServletDispatchingFilter.java:148) [magnolia-core-5.6.3-SNAPSHOT.jar:?]
	at info.magnolia.cms.filters.AbstractMgnlFilter.doFilter(AbstractMgnlFilter.java:85) [magnolia-core-5.6.3-SNAPSHOT.jar:?]
	at info.magnolia.cms.filters.MgnlFilterChain.doFilter(MgnlFilterChain.java:79) [magnolia-core-5.6.3-SNAPSHOT.jar:?]
	at info.magnolia.cms.filters.MgnlFilterChain.doFilter(MgnlFilterChain.java:81) [magnolia-core-5.6.3-SNAPSHOT.jar:?]
	at info.magnolia.cms.filters.CompositeFilter.doFilter(CompositeFilter.java:65) [magnolia-core-5.6.3-SNAPSHOT.jar:?]
	at info.magnolia.cms.filters.AbstractMgnlFilter.doFilter(AbstractMgnlFilter.java:85) [magnolia-core-5.6.3-SNAPSHOT.jar:?]
	at info.magnolia.cms.filters.MgnlFilterChain.doFilter(MgnlFilterChain.java:79) [magnolia-core-5.6.3-SNAPSHOT.jar:?]
	at info.magnolia.virtualuri.VirtualUriFilter.doFilter(VirtualUriFilter.java:98) [magnolia-virtual-uri-5.6.3-SNAPSHOT.jar:?]
	at info.magnolia.cms.filters.AbstractMgnlFilter.doFilter(AbstractMgnlFilter.java:85) [magnolia-core-5.6.3-SNAPSHOT.jar:?]
	at info.magnolia.cms.filters.MgnlFilterChain.doFilter(MgnlFilterChain.java:79) [magnolia-core-5.6.3-SNAPSHOT.jar:?]
	at info.magnolia.module.cache.executor.Bypass.processCacheRequest(Bypass.java:58) [magnolia-cache-core-5.6.1.jar:?]
	at info.magnolia.module.cache.executor.CompositeExecutor.processCacheRequest(CompositeExecutor.java:67) [magnolia-cache-core-5.6.1.jar:?]
	at info.magnolia.module.cache.filter.CacheFilter.doFilter(CacheFilter.java:220) [magnolia-cache-core-5.6.1.jar:?]
	at info.magnolia.cms.filters.AbstractMgnlFilter.doFilter(AbstractMgnlFilter.java:85) [magnolia-core-5.6.3-SNAPSHOT.jar:?]
	at info.magnolia.cms.filters.MgnlFilterChain.doFilter(MgnlFilterChain.java:79) [magnolia-core-5.6.3-SNAPSHOT.jar:?]
	at info.magnolia.cms.i18n.I18nContentSupportFilter.doFilter(I18nContentSupportFilter.java:89) [magnolia-core-5.6.3-SNAPSHOT.jar:?]
	at info.magnolia.cms.filters.AbstractMgnlFilter.doFilter(AbstractMgnlFilter.java:85) [magnolia-core-5.6.3-SNAPSHOT.jar:?]
	at info.magnolia.cms.filters.MgnlFilterChain.doFilter(MgnlFilterChain.java:79) [magnolia-core-5.6.3-SNAPSHOT.jar:?]
	at info.magnolia.cms.filters.RangeSupportFilter.doFilter(RangeSupportFilter.java:77) [magnolia-core-5.6.3-SNAPSHOT.jar:?]
	at info.magnolia.cms.filters.AbstractMgnlFilter.doFilter(AbstractMgnlFilter.java:85) [magnolia-core-5.6.3-SNAPSHOT.jar:?]
	at info.magnolia.cms.filters.MgnlFilterChain.doFilter(MgnlFilterChain.java:79) [magnolia-core-5.6.3-SNAPSHOT.jar:?]
	at info.magnolia.cms.security.BaseSecurityFilter.doFilter(BaseSecurityFilter.java:57) [magnolia-core-5.6.3-SNAPSHOT.jar:?]
	at info.magnolia.cms.filters.AbstractMgnlFilter.doFilter(AbstractMgnlFilter.java:85) [magnolia-core-5.6.3-SNAPSHOT.jar:?]
	at info.magnolia.cms.filters.MgnlFilterChain.doFilter(MgnlFilterChain.java:79) [magnolia-core-5.6.3-SNAPSHOT.jar:?]
	at info.magnolia.multisite.filters.CrossSiteSecurityFilter.doFilter(CrossSiteSecurityFilter.java:104) [magnolia-module-multisite-1.3.3-SNAPSHOT.jar:?]
	at info.magnolia.cms.filters.AbstractMgnlFilter.doFilter(AbstractMgnlFilter.java:85) [magnolia-core-5.6.3-SNAPSHOT.jar:?]
	at info.magnolia.cms.filters.MgnlFilterChain.doFilter(MgnlFilterChain.java:79) [magnolia-core-5.6.3-SNAPSHOT.jar:?]
	at info.magnolia.cms.filters.MgnlFilterChain.doFilter(MgnlFilterChain.java:81) [magnolia-core-5.6.3-SNAPSHOT.jar:?]
	at info.magnolia.cms.security.SecurityCallbackFilter.doFilter(SecurityCallbackFilter.java:84) [magnolia-core-5.6.3-SNAPSHOT.jar:?]
	at info.magnolia.cms.filters.OncePerRequestAbstractMgnlFilter.doFilter(OncePerRequestAbstractMgnlFilter.java:59) [magnolia-core-5.6.3-SNAPSHOT.jar:?]
	at info.magnolia.cms.filters.MgnlFilterChain.doFilter(MgnlFilterChain.java:79) [magnolia-core-5.6.3-SNAPSHOT.jar:?]
	at info.magnolia.cms.security.LogoutFilter.doFilter(LogoutFilter.java:94) [magnolia-core-5.6.3-SNAPSHOT.jar:?]
	at info.magnolia.cms.filters.OncePerRequestAbstractMgnlFilter.doFilter(OncePerRequestAbstractMgnlFilter.java:59) [magnolia-core-5.6.3-SNAPSHOT.jar:?]
	at info.magnolia.cms.filters.MgnlFilterChain.doFilter(MgnlFilterChain.java:79) [magnolia-core-5.6.3-SNAPSHOT.jar:?]
	at info.magnolia.module.site.filters.SiteMergeFilter.doFilter(SiteMergeFilter.java:119) [magnolia-site-1.2.1-SNAPSHOT.jar:?]
	at info.magnolia.cms.filters.AbstractMgnlFilter.doFilter(AbstractMgnlFilter.java:85) [magnolia-core-5.6.3-SNAPSHOT.jar:?]
	at info.magnolia.cms.filters.MgnlFilterChain.doFilter(MgnlFilterChain.java:79) [magnolia-core-5.6.3-SNAPSHOT.jar:?]
	at info.magnolia.multisite.filters.MultiSiteFilter.doFilter(MultiSiteFilter.java:120) [magnolia-module-multisite-1.3.3-SNAPSHOT.jar:?]
	at info.magnolia.cms.filters.AbstractMgnlFilter.doFilter(AbstractMgnlFilter.java:85) [magnolia-core-5.6.3-SNAPSHOT.jar:?]
	at info.magnolia.cms.filters.MgnlFilterChain.doFilter(MgnlFilterChain.java:79) [magnolia-core-5.6.3-SNAPSHOT.jar:?]
	at info.magnolia.cms.filters.MultiChannelFilter.doFilter(MultiChannelFilter.java:83) [magnolia-core-5.6.3-SNAPSHOT.jar:?]
	at info.magnolia.cms.filters.AbstractMgnlFilter.doFilter(AbstractMgnlFilter.java:85) [magnolia-core-5.6.3-SNAPSHOT.jar:?]
	at info.magnolia.cms.filters.MgnlFilterChain.doFilter(MgnlFilterChain.java:79) [magnolia-core-5.6.3-SNAPSHOT.jar:?]
	at info.magnolia.cms.filters.MgnlFilterChain.doFilter(MgnlFilterChain.java:81) [magnolia-core-5.6.3-SNAPSHOT.jar:?]
	at info.magnolia.cms.filters.MgnlFilterChain.doFilter(MgnlFilterChain.java:81) [magnolia-core-5.6.3-SNAPSHOT.jar:?]
	at info.magnolia.cms.security.auth.login.LoginFilter.doFilter(LoginFilter.java:127) [magnolia-core-5.6.3-SNAPSHOT.jar:?]
	at info.magnolia.cms.filters.AbstractMgnlFilter.doFilter(AbstractMgnlFilter.java:85) [magnolia-core-5.6.3-SNAPSHOT.jar:?]
	at info.magnolia.cms.filters.MgnlFilterChain.doFilter(MgnlFilterChain.java:79) [magnolia-core-5.6.3-SNAPSHOT.jar:?]
	at info.magnolia.enterprise.registration.RegistrationFilter.doFilter(RegistrationFilter.java:64) [magnolia-module-enterprise-5.6.4-SNAPSHOT.jar:?]
	at info.magnolia.cms.filters.AbstractMgnlFilter.doFilter(AbstractMgnlFilter.java:85) [magnolia-core-5.6.3-SNAPSHOT.jar:?]
	at info.magnolia.cms.filters.MgnlFilterChain.doFilter(MgnlFilterChain.java:79) [magnolia-core-5.6.3-SNAPSHOT.jar:?]
	at info.magnolia.cms.filters.MgnlFilterChain.doFilter(MgnlFilterChain.java:81) [magnolia-core-5.6.3-SNAPSHOT.jar:?]
	at info.magnolia.cms.filters.CosMultipartRequestFilter.doFilter(CosMultipartRequestFilter.java:111) [magnolia-core-5.6.3-SNAPSHOT.jar:?]
	at info.magnolia.cms.filters.OncePerRequestAbstractMgnlFilter.doFilter(OncePerRequestAbstractMgnlFilter.java:59) [magnolia-core-5.6.3-SNAPSHOT.jar:?]
	at info.magnolia.cms.filters.MgnlFilterChain.doFilter(MgnlFilterChain.java:79) [magnolia-core-5.6.3-SNAPSHOT.jar:?]
	at info.magnolia.personalization.preview.filter.PreviewFilter.doFilter(PreviewFilter.java:92) [magnolia-personalization-preview-app-1.5.2.jar:?]
	at info.magnolia.cms.filters.OncePerRequestAbstractMgnlFilter.doFilter(OncePerRequestAbstractMgnlFilter.java:59) [magnolia-core-5.6.3-SNAPSHOT.jar:?]
	at info.magnolia.cms.filters.MgnlFilterChain.doFilter(MgnlFilterChain.java:79) [magnolia-core-5.6.3-SNAPSHOT.jar:?]
	at info.magnolia.personalization.trait.AbstractTraitDetectorFilter.doFilter(AbstractTraitDetectorFilter.java:80) [magnolia-personalization-integration-1.5.2.jar:?]
	at info.magnolia.cms.filters.AbstractMgnlFilter.doFilter(AbstractMgnlFilter.java:85) [magnolia-core-5.6.3-SNAPSHOT.jar:?]
	at info.magnolia.cms.filters.MgnlFilterChain.doFilter(MgnlFilterChain.java:79) [magnolia-core-5.6.3-SNAPSHOT.jar:?]
	at info.magnolia.personalization.trait.AbstractTraitDetectorFilter.doFilter(AbstractTraitDetectorFilter.java:80) [magnolia-personalization-integration-1.5.2.jar:?]
	at info.magnolia.cms.filters.AbstractMgnlFilter.doFilter(AbstractMgnlFilter.java:85) [magnolia-core-5.6.3-SNAPSHOT.jar:?]
	at info.magnolia.cms.filters.MgnlFilterChain.doFilter(MgnlFilterChain.java:79) [magnolia-core-5.6.3-SNAPSHOT.jar:?]
	at info.magnolia.personalization.trait.AbstractTraitDetectorFilter.doFilter(AbstractTraitDetectorFilter.java:80) [magnolia-personalization-integration-1.5.2.jar:?]
	at info.magnolia.cms.filters.AbstractMgnlFilter.doFilter(AbstractMgnlFilter.java:85) [magnolia-core-5.6.3-SNAPSHOT.jar:?]
	at info.magnolia.cms.filters.MgnlFilterChain.doFilter(MgnlFilterChain.java:79) [magnolia-core-5.6.3-SNAPSHOT.jar:?]
	at info.magnolia.personalization.trait.AbstractTraitDetectorFilter.doFilter(AbstractTraitDetectorFilter.java:80) [magnolia-personalization-integration-1.5.2.jar:?]
	at info.magnolia.cms.filters.AbstractMgnlFilter.doFilter(AbstractMgnlFilter.java:85) [magnolia-core-5.6.3-SNAPSHOT.jar:?]
	at info.magnolia.cms.filters.MgnlFilterChain.doFilter(MgnlFilterChain.java:79) [magnolia-core-5.6.3-SNAPSHOT.jar:?]
	at info.magnolia.cms.filters.ContentTypeFilter.doFilter(ContentTypeFilter.java:155) [magnolia-core-5.6.3-SNAPSHOT.jar:?]
	at info.magnolia.cms.filters.AbstractMgnlFilter.doFilter(AbstractMgnlFilter.java:85) [magnolia-core-5.6.3-SNAPSHOT.jar:?]
	at info.magnolia.cms.filters.MgnlFilterChain.doFilter(MgnlFilterChain.java:79) [magnolia-core-5.6.3-SNAPSHOT.jar:?]
	at info.magnolia.cms.filters.ContextFilter.doFilter(ContextFilter.java:128) [magnolia-core-5.6.3-SNAPSHOT.jar:?]
	at info.magnolia.cms.filters.AbstractMgnlFilter.doFilter(AbstractMgnlFilter.java:85) [magnolia-core-5.6.3-SNAPSHOT.jar:?]
	at info.magnolia.cms.filters.MgnlFilterChain.doFilter(MgnlFilterChain.java:79) [magnolia-core-5.6.3-SNAPSHOT.jar:?]
	at info.magnolia.cms.filters.CompositeFilter.doFilter(CompositeFilter.java:65) [magnolia-core-5.6.3-SNAPSHOT.jar:?]
	at info.magnolia.cms.filters.AbstractMgnlFilter.doFilter(AbstractMgnlFilter.java:85) [magnolia-core-5.6.3-SNAPSHOT.jar:?]
	at info.magnolia.cms.filters.SafeDestroyMgnlFilterWrapper.doFilter(SafeDestroyMgnlFilterWrapper.java:107) [magnolia-core-5.6.3-SNAPSHOT.jar:?]
	at info.magnolia.cms.filters.MgnlFilterDispatcher.doDispatch(MgnlFilterDispatcher.java:67) [magnolia-core-5.6.3-SNAPSHOT.jar:?]
	at info.magnolia.cms.filters.MgnlMainFilter.doFilter(MgnlMainFilter.java:110) [magnolia-core-5.6.3-SNAPSHOT.jar:?]
	at info.magnolia.cms.filters.MgnlMainFilter.doFilter(MgnlMainFilter.java:96) [magnolia-core-5.6.3-SNAPSHOT.jar:?]
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:192) [catalina.jar:8.5.5]
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:165) [catalina.jar:8.5.5]
	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:198) [catalina.jar:8.5.5]
	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:108) [catalina.jar:8.5.5]
	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:140) [catalina.jar:8.5.5]
	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:79) [catalina.jar:8.5.5]
	at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:620) [catalina.jar:8.5.5]
	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:87) [catalina.jar:8.5.5]
	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:349) [catalina.jar:8.5.5]
	at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:784) [tomcat-coyote.jar:8.5.5]
	at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:66) [tomcat-coyote.jar:8.5.5]
	at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:802) [tomcat-coyote.jar:8.5.5]
	at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1410) [tomcat-coyote.jar:8.5.5]
	at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49) [tomcat-coyote.jar:8.5.5]
	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) [?:1.8.0_151]
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) [?:1.8.0_151]
	at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) [tomcat-util.jar:8.5.5]
	at java.lang.Thread.run(Thread.java:748) [?:1.8.0_151]

2 ) A correctly functioning configuration (just for comparison)

2a) The configuration:

class: info.magnolia.rest.delivery.jcr.v2.JcrDeliveryEndpointDefinition
 workspace: website
 rootPath: /
 nodeTypes:
 - mgnl:page

2b) Console messages (upon saving this):

2018-03-15 16:25:07,674 INFO  info.magnolia.rest.RestDispatcherServlet          : Endpoint ep is registered with base path: [context]/ep

2018-03-15 16:25:07,674 INFO  agnolia.config.source.yaml.YamlConfigurationSource: Registered definition from YAML file [/tours/restEndpoints/ep.yaml]: [restEndpoint] definition [ep] with reference id: [ep] from module [tours] at [ep]

2ca) A request that worked fine with the config:

curl -X GET 'http://localhost:8080/magnoliaAuthor/.rest/ep/travel/about' -u superuser:superuser

{"@name":"about","@path":"/travel/about","@id":"808ebe4c-72b2-49f1-b9f7-e7db22bce02f","@nodeType":"mgnl:page","jcr:createdBy":"admin","hideInNav":"false","mgnl:template":"travel-demo:pages/standard","mgnl:lastActivatedBy":"superuser","mgnl:lastActivated":"2018-03-15T15:17:16.842+01:00","jcr:created":"2018-03-15T15:16:42.616+01:00","mgnl:created":"2015-02-02T17:34:28.816+01:00","mgnl:createdBy":"superuser","title":"About","mgnl:lastModified":"2015-10-27T13:50:28.322+01:00","mgnl:activationStatus":"true","mgnl:lastModifiedBy":"superuser","@nodes":[]}

2cb) Another request that worked fine with the config:

curl -X GET 'http://localhost:8080/magnoliaAuthor/.rest/ep/?mgnl:lastModified\[lte\]=2015-06-03' -u superuser:superuser

{"results":[{"@name":"meta","@path":"/travel/meta","@id":"7ebd74f1-c6f7-4307-9953-afd549118a56","@nodeType":"mgnl:page","jcr:createdBy":"admin","hideInNav":"true","mgnl:template":"travel-demo:pages/standard","mgnl:lastActivatedBy":"superuser","jcr:created":"2018-03-15T15:16:42.722+01:00","mgnl:lastActivated":"2018-03-15T15:17:16.842+01:00","mgnl:created":"2015-02-02T20:58:23.939+01:00","mgnl:createdBy":"superuser","title":"Container for meta pages","mgnl:lastModified":"2015-06-03T20:37:49.283+02:00","mgnl:activationStatus":"true","mgnl:lastModifiedBy":"superuser","@nodes":[]}]}


 Comments   
Comment by Mikaël Geljić [ 16/Mar/18 ]
  • Only thing to do on the rest side is to guard against the NPEs in case of queries.
  • We may clone ticket this into MAGNOLIA to report definition problems when there is a type mismatch between YAML and the definition target-type.
Comment by Hieu Nguyen Duc [ 19/Mar/18 ]
  • Throwing BadRequestException seems more reasonable than falling back to a list containing mgnl:content because it reminds users that they are doing something wrong and need to fix the request to proceed
  • MAGNOLIA-7283's been filed for type mismatch warning
Comment by Mikaël Geljić [ 20/Mar/18 ]

Hmmm, I generally agree with bad-request when it is indeed the user/consumer's fault (e.g. bad parameter format). Here the consumer is not doing anything wrong, and he cannot necessarily fix it.

When the problem is on the developer/provider's side, he/she is responsible for shipping an endpoint-definition without problems.

Generated at Mon Feb 12 06:57:25 CET 2024 using Jira 9.4.2#940002-sha1:46d1a51de284217efdcb32434eab47a99af2938b.