Uploaded image for project: 'XWiki Platform'
  1. XWiki Platform
  2. XWIKI-13194

Repository REST API search in the whole farm

    Details

    • Type: Bug
    • Status: Closed
    • Priority: Major
    • Resolution: Fixed
    • Affects Version/s: 7.4.2
    • Fix Version/s: 8.1-milestone-1, 7.4.3
    • Component/s: Repository
    • Labels:
    • Environment:
      Default Jetty/HSQLDB on Linux (Ubuntu 15.10 / RHEL 6)
    • Difficulty:
      Unknown
    • Documentation:
      N/A
    • Documentation in Release Notes:
      N/A
    • Similar issues:

      Description

      When using Extension Repository Application (ERA) on Subwiki, obtaining details (/extensions/* REST call) fails silently (No ExceptionMapper was found, but must be found in REST calls). If there is no ERA installed on main wiki and TRACE logging is enabled, following exception can be observed.

      2016-03-11 09:22:00,492 http://localhost:8080/xwiki/rest/repository/extensions/ TRACE c.x.x.XWikiException - Error number 0 in 3: Exception while hibernate execute
      org.hibernate.QueryException: could not resolve property: validExtension of: com.xpn.xwiki.objects.BaseObject [ select count ( extension.id ) from com.xpn.xwiki.doc.XWikiDocument as doc , com.xpn.xwiki.objects.BaseObject as extension where ( extension.validExtension = 1 ) and doc.fullName=extension.name and extension.className='ExtensionCode.ExtensionClass' ]
      at org.hibernate.persister.entity.AbstractPropertyMapping.propertyException(AbstractPropertyMapping.java:81)
      at org.hibernate.persister.entity.AbstractPropertyMapping.toType(AbstractPropertyMapping.java:75)
      at org.hibernate.persister.entity.AbstractEntityPersister.toType(AbstractEntityPersister.java:1465)
      at org.hibernate.hql.ast.tree.FromElementType.getPropertyType(FromElementType.java:315)
      at org.hibernate.hql.ast.tree.FromElement.getPropertyType(FromElement.java:487)
      at org.hibernate.hql.ast.tree.DotNode.getDataType(DotNode.java:611)
      at org.hibernate.hql.ast.tree.DotNode.prepareLhs(DotNode.java:263)
      at org.hibernate.hql.ast.tree.DotNode.resolve(DotNode.java:210)
      at org.hibernate.hql.ast.tree.FromReferenceNode.resolve(FromReferenceNode.java:117)
      at org.hibernate.hql.ast.tree.FromReferenceNode.resolve(FromReferenceNode.java:113)
      at org.hibernate.hql.ast.HqlSqlWalker.resolve(HqlSqlWalker.java:880)
      at org.hibernate.hql.antlr.HqlSqlBaseWalker.expr(HqlSqlBaseWalker.java:1330)
      at org.hibernate.hql.antlr.HqlSqlBaseWalker.exprOrSubquery(HqlSqlBaseWalker.java:4471)
      at org.hibernate.hql.antlr.HqlSqlBaseWalker.comparisonExpr(HqlSqlBaseWalker.java:3944)
      at org.hibernate.hql.antlr.HqlSqlBaseWalker.logicalExpr(HqlSqlBaseWalker.java:2047)
      at org.hibernate.hql.antlr.HqlSqlBaseWalker.logicalExpr(HqlSqlBaseWalker.java:1972)
      at org.hibernate.hql.antlr.HqlSqlBaseWalker.logicalExpr(HqlSqlBaseWalker.java:1972)
      at org.hibernate.hql.antlr.HqlSqlBaseWalker.whereClause(HqlSqlBaseWalker.java:831)
      at org.hibernate.hql.antlr.HqlSqlBaseWalker.query(HqlSqlBaseWalker.java:617)
      at org.hibernate.hql.antlr.HqlSqlBaseWalker.selectStatement(HqlSqlBaseWalker.java:301)
      at org.hibernate.hql.antlr.HqlSqlBaseWalker.statement(HqlSqlBaseWalker.java:244)
      at org.hibernate.hql.ast.QueryTranslatorImpl.analyze(QueryTranslatorImpl.java:256)
      at org.hibernate.hql.ast.QueryTranslatorImpl.doCompile(QueryTranslatorImpl.java:187)
      at org.hibernate.hql.ast.QueryTranslatorImpl.compile(QueryTranslatorImpl.java:138)
      at org.hibernate.engine.query.HQLQueryPlan.<init>(HQLQueryPlan.java:101)
      at org.hibernate.engine.query.HQLQueryPlan.<init>(HQLQueryPlan.java:80)
      at org.hibernate.engine.query.QueryPlanCache.getHQLQueryPlan(QueryPlanCache.java:124)
      at org.hibernate.impl.AbstractSessionImpl.getHQLQueryPlan(AbstractSessionImpl.java:156)
      at org.hibernate.impl.AbstractSessionImpl.createQuery(AbstractSessionImpl.java:135)
      at org.hibernate.impl.SessionImpl.createQuery(SessionImpl.java:1770)
      at com.xpn.xwiki.store.hibernate.query.HqlQueryExecutor.createHibernateQuery(HqlQueryExecutor.java:208)
      at com.xpn.xwiki.store.hibernate.query.HqlQueryExecutor$1.doInHibernate(HqlQueryExecutor.java:147)
      at com.xpn.xwiki.store.hibernate.query.HqlQueryExecutor$1.doInHibernate(HqlQueryExecutor.java:142)
      at com.xpn.xwiki.store.XWikiHibernateBaseStore.execute(XWikiHibernateBaseStore.java:1299)
      at com.xpn.xwiki.store.XWikiHibernateBaseStore.executeRead(XWikiHibernateBaseStore.java:1366)
      at com.xpn.xwiki.store.hibernate.query.HqlQueryExecutor.execute(HqlQueryExecutor.java:141)
      at org.xwiki.query.internal.DefaultQueryExecutorManager.execute(DefaultQueryExecutorManager.java:71)
      at org.xwiki.query.internal.DefaultQuery.execute(DefaultQuery.java:287)
      at org.xwiki.query.xwql.internal.XWQLQueryExecutor.execute(XWQLQueryExecutor.java:118)
      at org.xwiki.query.internal.DefaultQueryExecutorManager.execute(DefaultQueryExecutorManager.java:71)
      at org.xwiki.query.internal.DefaultQuery.execute(DefaultQuery.java:287)
      at org.xwiki.repository.internal.resources.AbstractExtensionRESTResource.getExtensionsCountResult(AbstractExtensionRESTResource.java:198)
      at org.xwiki.repository.internal.resources.ExtensionsRESTResource.getExtensions(ExtensionsRESTResource.java:57)
      at sun.reflect.GeneratedMethodAccessor581.invoke(Unknown Source)
      at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
      at java.lang.reflect.Method.invoke(Method.java:497)
      at org.restlet.ext.jaxrs.internal.wrappers.AbstractMethodWrapper.internalInvoke(AbstractMethodWrapper.java:171)
      at org.restlet.ext.jaxrs.internal.wrappers.ResourceMethod.invoke(ResourceMethod.java:291)
      at org.restlet.ext.jaxrs.JaxRsRestlet.invokeMethod(JaxRsRestlet.java:1043)
      at org.restlet.ext.jaxrs.JaxRsRestlet.handle(JaxRsRestlet.java:792)
      at org.restlet.routing.Filter.doHandle(Filter.java:159)
      at org.restlet.routing.Filter.handle(Filter.java:206)
      at org.restlet.routing.Router.doHandle(Router.java:500)
      at org.restlet.routing.Router.handle(Router.java:740)
      at org.restlet.routing.Filter.doHandle(Filter.java:159)
      at org.restlet.routing.Filter.handle(Filter.java:206)
      at org.restlet.routing.Filter.doHandle(Filter.java:159)
      at org.restlet.routing.Filter.handle(Filter.java:206)
      at org.restlet.routing.Filter.doHandle(Filter.java:159)
      at org.restlet.routing.Filter.handle(Filter.java:206)
      at org.restlet.routing.Filter.doHandle(Filter.java:159)
      at org.restlet.routing.Filter.handle(Filter.java:206)
      at org.restlet.routing.Filter.doHandle(Filter.java:159)
      at org.restlet.engine.application.StatusFilter.doHandle(StatusFilter.java:154)
      at org.restlet.routing.Filter.handle(Filter.java:206)
      at org.restlet.routing.Filter.doHandle(Filter.java:159)
      at org.restlet.routing.Filter.handle(Filter.java:206)
      at org.restlet.engine.ChainHelper.handle(ChainHelper.java:114)
      at org.restlet.engine.application.ApplicationHelper.handle(ApplicationHelper.java:75)
      at org.restlet.Application.handle(Application.java:391)
      at org.restlet.routing.Filter.doHandle(Filter.java:159)
      at org.restlet.routing.Filter.handle(Filter.java:206)
      at org.restlet.routing.Router.doHandle(Router.java:500)
      at org.restlet.routing.Router.handle(Router.java:740)
      at org.restlet.routing.Filter.doHandle(Filter.java:159)
      at org.restlet.routing.Filter.handle(Filter.java:206)
      at org.restlet.routing.Router.doHandle(Router.java:500)
      at org.restlet.routing.Router.handle(Router.java:740)
      at org.restlet.routing.Filter.doHandle(Filter.java:159)
      at org.restlet.routing.Filter.handle(Filter.java:206)
      at org.restlet.engine.ChainHelper.handle(ChainHelper.java:114)
      at org.restlet.Component.handle(Component.java:391)
      at org.restlet.Server.handle(Server.java:491)
      at org.restlet.engine.ServerHelper.handle(ServerHelper.java:74)
      at org.restlet.engine.http.HttpServerHelper.handle(HttpServerHelper.java:153)
      at org.restlet.ext.servlet.ServerServlet.service(ServerServlet.java:1031)
      at javax.servlet.http.HttpServlet.service(HttpServlet.java:790)
      at org.eclipse.jetty.servlet.ServletHolder.handle(ServletHolder.java:808)
      at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1669)
      at org.xwiki.wysiwyg.server.filter.XWikiContextInitializationFilter.doFilter(XWikiContextInitializationFilter.java:85)
      at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1652)
      at org.xwiki.container.servlet.filters.internal.SetHTTPHeaderFilter.doFilter(SetHTTPHeaderFilter.java:63)
      at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1652)
      at org.xwiki.container.servlet.filters.internal.SavedRequestRestorerFilter.doFilter(SavedRequestRestorerFilter.java:208)
      at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1652)
      at org.xwiki.container.servlet.filters.internal.SetCharacterEncodingFilter.doFilter(SetCharacterEncodingFilter.java:111)
      at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1652)
      at org.xwiki.resource.servlet.RoutingFilter.doFilter(RoutingFilter.java:137)
      at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1652)
      at org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:585)
      at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:143)
      at org.eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.java:577)
      at org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:223)
      at org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1127)
      at org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:515)
      at org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:185)
      at org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:1061)
      at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:141)
      at org.eclipse.jetty.server.handler.ContextHandlerCollection.handle(ContextHandlerCollection.java:215)
      at org.eclipse.jetty.server.handler.HandlerCollection.handle(HandlerCollection.java:110)
      at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:97)
      at org.eclipse.jetty.server.Server.handle(Server.java:499)
      at org.eclipse.jetty.server.HttpChannel.handle(HttpChannel.java:310)
      at org.eclipse.jetty.server.HttpConnection.onFillable(HttpConnection.java:257)
      at org.eclipse.jetty.io.AbstractConnection$2.run(AbstractConnection.java:540)
      at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:635)
      at org.eclipse.jetty.util.thread.QueuedThreadPool$3.run(QueuedThreadPool.java:555)
      at java.lang.Thread.run(Thread.java:745)

      This happens even though there is existing extension on subwiki and it's searchable. If ERA is installed on main wiki, /extensions/ endpoint returns empty result (no exception whatsoever).

      Steps to reproduce:

      1. Install clean XWiki 8 and start it
      2. Install Extension Repository Application on newly created extensions subwiki
      3. Install Repository API on main wiki
      4. Modify xwiki.properties and append following lines

        extension.repositories=maven-xwiki:maven:http://nexus.xwiki.org/nexus/content/groups/public
        extension.repositories=extensions.xwiki.org:xwiki:http://extensions.xwiki.org/xwiki/rest/
        extension.repositories=localxr:xwiki:http://localhost:8080/xwiki/rest/

      5. Start XWiki, verify http://localhost:8080/xwiki/rest/repository/ is accessible
      6. Create new extension package on extensions subwiki, verify it's indexed by Solr (http://localhost:8080/xwiki/rest/repository/search)
      7. Open Extension Manager on Main Wiki

      Expected behaviour: Created extension is searchable and installable via EM
      Actual behaviour: Created extension is searchable, but installing or showing details/versions fails with We couldn't find any extension with id ...

      Thanks

        Attachments

          Activity

            People

            • Assignee:
              tmortagne Thomas Mortagne
              Reporter:
              DarkKnightCZ Lukas Raska
            • Votes:
              0 Vote for this issue
              Watchers:
              2 Start watching this issue

              Dates

              • Created:
                Updated:
                Resolved:
                Date of First Response: