Custom component: org.xwiki.component.manager.ComponentLookupException

Hi,

We are running a couple of custom components without trouble.
But this new component is giving problems. It is installed on farm level and contains new REST endpoints.

Installation by the Extentionmanager runs fine.

After calling my new endpoint I get the following error:

org.xwiki.component.manager.ComponentLookupException: Failed to lookup component [wiki.XXX.farm.restapi.WebApiResource] identified by type [interface org.xwiki.rest.XWikiRestComponent] and hint [wiki.XXX.farm.restapi.WebApiResource]

In components.txt I’ve added all component java files.

Does someone has a hint?

Thanks for helping out,
Maarten

Hi, to help you out you need to provide:

  • The component’s java code (at least the class declaration with the annotations)
  • The content of your components.txt

Also, did you restart XWiki? I think REST components might require a restart to be registered as REST endpoints but I’m not sure.

Thx

Hi,

The class declaration:

@Component
@Named("wiki.cf.farm.restapi.WebApiResource")
@Path("/api/v1")

public class WebApiResource extends XWikiResource
{

The components.txt (the relevant bit)

wiki.cf.farm.restapi.WebApiResource
wiki.cf.farm.restapi.core.db.internal.DefaultDBFunctions
wiki.cf.farm.restapi.core.provider.internal.DefaultBaseObjectProvider
wiki.cf.farm.restapi.core.provider.internal.DefaultCoreKlasseProvider
wiki.cf.farm.restapi.core.provider.internal.DefaultDocumentReferenceProvider
wiki.cf.farm.restapi.core.provider.internal.DefaultXWikiDocumentProvider

Thanks!

Edit: yes, I restarted the wiki :wink:

That looks good so all I could recommend is to check for typos, make sure that components.txt is in META-INF/.

You could also try building your extension with the latest xwiki contrib parent since it has some checks to verify component registration by default (See the spoon checks on https://dev.xwiki.org/xwiki/bin/view/Community/Building/#HAutomaticChecks).

Just before the above error I get:

Aug 19, 2020 10:47:07 AM org.restlet.ext.jaxrs.internal.util.ExceptionHandler instantiateExecption

WARNING: Could not create new instance of root resource class

I guess that message is because of the error you mention (i.e the ComponentManager cannot get the component).

So FTR this is not needed anymore thanks to http://jira.xwiki.org/browse/XWIKI-14687

Yes I did the restart :slight_smile:

My point was that you don’t need to do a restart… :slight_smile:

Can you give us the full stack trace. The root cause is usually at the end. The problem may be with one of the components injected in WebApiResource.

Hi,

This is the full stack trace:

Aug 20, 2020 8:49:35 AM org.restlet.ext.jaxrs.internal.util.ExceptionHandler instantiateExecption
WARNING: Could not create new instance of root resource class
org.xwiki.component.manager.ComponentLookupException: Failed to lookup component [wiki.cf.farm.restapi.WebApiResource] identified by type [interface org.xwiki.rest.XWikiRestComponent] and hint [wiki.cf.farm.restapi.WebApiResource]
	at org.xwiki.component.embed.EmbeddableComponentManager.getInstance(EmbeddableComponentManager.java:204)
	at org.xwiki.component.embed.EmbeddableComponentManager.getInstance(EmbeddableComponentManager.java:210)
	at org.xwiki.component.internal.multi.DelegateComponentManager.getInstance(DelegateComponentManager.java:83)
	at org.xwiki.component.internal.multi.DelegateComponentManager.getInstance(DelegateComponentManager.java:83)
	at org.xwiki.component.internal.multi.DelegateComponentManager.getInstance(DelegateComponentManager.java:83)
	at org.xwiki.component.internal.multi.DelegateComponentManager.getInstance(DelegateComponentManager.java:83)
	at org.xwiki.component.internal.multi.DelegateComponentManager.getInstance(DelegateComponentManager.java:83)
	at org.xwiki.rest.internal.ComponentsObjectFactory.getInstance(ComponentsObjectFactory.java:67)
	at org.restlet.ext.jaxrs.internal.wrappers.PerRequestRootResourceClass.getInstance(PerRequestRootResourceClass.java:97)
	at org.restlet.ext.jaxrs.JaxRsRestlet.instantiateRrc(JaxRsRestlet.java:963)
	at org.restlet.ext.jaxrs.JaxRsRestlet.identifyRootResource(JaxRsRestlet.java:942)
	at org.restlet.ext.jaxrs.JaxRsRestlet.requestMatching(JaxRsRestlet.java:1161)
	at org.restlet.ext.jaxrs.JaxRsRestlet.handle(JaxRsRestlet.java:742)
	at org.restlet.routing.Filter.doHandle(Filter.java:150)
	at org.restlet.routing.Filter.handle(Filter.java:197)
	at org.restlet.routing.Router.doHandle(Router.java:422)
	at org.restlet.routing.Router.handle(Router.java:641)
	at org.restlet.routing.Filter.doHandle(Filter.java:150)
	at org.restlet.routing.Filter.handle(Filter.java:197)
	at org.restlet.routing.Filter.doHandle(Filter.java:150)
	at org.restlet.routing.Filter.handle(Filter.java:197)
	at org.restlet.routing.Filter.doHandle(Filter.java:150)
	at org.restlet.routing.Filter.handle(Filter.java:197)
	at org.restlet.routing.Filter.doHandle(Filter.java:150)
	at org.restlet.routing.Filter.handle(Filter.java:197)
	at org.restlet.routing.Filter.doHandle(Filter.java:150)
	at org.restlet.engine.application.StatusFilter.doHandle(StatusFilter.java:140)
	at org.restlet.routing.Filter.handle(Filter.java:197)
	at org.restlet.routing.Filter.doHandle(Filter.java:150)
	at org.restlet.routing.Filter.handle(Filter.java:197)
	at org.restlet.engine.CompositeHelper.handle(CompositeHelper.java:202)
	at org.restlet.engine.application.ApplicationHelper.handle(ApplicationHelper.java:77)
	at org.restlet.Application.handle(Application.java:385)
	at org.restlet.routing.Filter.doHandle(Filter.java:150)
	at org.restlet.routing.Filter.handle(Filter.java:197)
	at org.restlet.routing.Router.doHandle(Router.java:422)
	at org.restlet.routing.Router.handle(Router.java:641)
	at org.restlet.routing.Filter.doHandle(Filter.java:150)
	at org.restlet.routing.Filter.handle(Filter.java:197)
	at org.restlet.routing.Router.doHandle(Router.java:422)
	at org.restlet.routing.Router.handle(Router.java:641)
	at org.restlet.routing.Filter.doHandle(Filter.java:150)
	at org.restlet.routing.Filter.handle(Filter.java:197)
	at org.restlet.engine.CompositeHelper.handle(CompositeHelper.java:202)
	at org.restlet.Component.handle(Component.java:408)
	at org.restlet.Server.handle(Server.java:507)
	at org.restlet.engine.connector.ServerHelper.handle(ServerHelper.java:63)
	at org.restlet.engine.adapter.HttpServerHelper.handle(HttpServerHelper.java:143)
	at org.restlet.ext.servlet.ServerServlet.service(ServerServlet.java:1117)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:741)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:231)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
	at org.xwiki.wysiwyg.filter.XWikiContextInitializationFilter.doFilter(XWikiContextInitializationFilter.java:85)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
	at org.xwiki.container.servlet.filters.internal.SetHTTPHeaderFilter.doFilter(SetHTTPHeaderFilter.java:63)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
	at org.xwiki.container.servlet.filters.internal.SavedRequestRestorerFilter.doFilter(SavedRequestRestorerFilter.java:208)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
	at org.xwiki.container.servlet.filters.internal.SetCharacterEncodingFilter.doFilter(SetCharacterEncodingFilter.java:111)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
	at org.xwiki.resource.servlet.RoutingFilter.doFilter(RoutingFilter.java:132)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:199)
	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:96)
	at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:543)
	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:139)
	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:81)
	at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:690)
	at org.apache.catalina.valves.RemoteIpValve.invoke(RemoteIpValve.java:747)
	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:87)
	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:343)
	at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:615)
	at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65)
	at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:818)
	at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1627)
	at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)
	at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)
	at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
	at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
	at java.base/java.lang.Thread.run(Thread.java:834)
Caused by: org.xwiki.component.manager.ComponentLookupException: Failed to lookup component [wiki.cf.farm.restapi.core.provider.internal.DefaultXWikiDocumentProvider] identified by type [interface wiki.cf.farm.restapi.core.provider.XWikiDocumentProvider] and hint [default]
	at org.xwiki.component.embed.EmbeddableComponentManager.getInstance(EmbeddableComponentManager.java:204)
	at org.xwiki.component.embed.EmbeddableComponentManager.getDependencyInstance(EmbeddableComponentManager.java:406)
	at org.xwiki.component.embed.EmbeddableComponentManager.createInstance(EmbeddableComponentManager.java:355)
	at org.xwiki.component.embed.EmbeddableComponentManager.getComponentInstance(EmbeddableComponentManager.java:457)
	at org.xwiki.component.embed.EmbeddableComponentManager.getInstance(EmbeddableComponentManager.java:201)
	... 84 more
Caused by: org.xwiki.component.manager.ComponentLookupException: Failed to lookup component [wiki.cf.farm.restapi.core.db.internal.DefaultDBFunctions] identified by type [interface wiki.cf.farm.restapi.core.db.DBFunctions] and hint [default]
	at org.xwiki.component.embed.EmbeddableComponentManager.getInstance(EmbeddableComponentManager.java:204)
	at org.xwiki.component.embed.EmbeddableComponentManager.getDependencyInstance(EmbeddableComponentManager.java:406)
	at org.xwiki.component.embed.EmbeddableComponentManager.createInstance(EmbeddableComponentManager.java:355)
	at org.xwiki.component.embed.EmbeddableComponentManager.getComponentInstance(EmbeddableComponentManager.java:451)
	at org.xwiki.component.embed.EmbeddableComponentManager.getInstance(EmbeddableComponentManager.java:201)
	... 88 more
Caused by: org.xwiki.component.manager.ComponentLookupException: Can't find descriptor for the component with type [class java.lang.String] and hint [default]
	at org.xwiki.component.embed.EmbeddableComponentManager.getInstance(EmbeddableComponentManager.java:212)
	at org.xwiki.component.embed.EmbeddableComponentManager.getDependencyInstance(EmbeddableComponentManager.java:406)
	at org.xwiki.component.embed.EmbeddableComponentManager.createInstance(EmbeddableComponentManager.java:355)
	at org.xwiki.component.embed.EmbeddableComponentManager.getComponentInstance(EmbeddableComponentManager.java:451)
	at org.xwiki.component.embed.EmbeddableComponentManager.getInstance(EmbeddableComponentManager.java:201)
	... 92 more

Here you go… :slight_smile:

Good catch Marius.

Thanks!

Coming from c# and php… Why is this happening?

It’s your code so you should know! :slight_smile:

Check or paste the content of wiki.cf.farm.restapi.core.db.internal.DefaultDBFunctions. You probaby have some wrong @Inject there.

Haha, you’re right :slight_smile: I will check and post the outcome.

Here comes the moment (which every developer has) of shaming. But always educational about how to read the error.

The @Inject was not commented out, but was ment to. So the it was looking for a component named “String”.

@Inject
//private Reporter reporter;

private static String SelectFrom

Thank you for pointing this out :+1:

Glad you found it! :wink: