Expand my Community achievements bar.

Component failed activation with missing bind method

Avatar

Level 1

I have a component in failed activation state and the error in logs say:

 

28.12.2021 12:04:04.168 *WARN* [FelixStartLevel] wda.wda-bundle bundle wda.wda-bundle:1.0.0.SNAPSHOT (474)[com.mycom.wda.cms.impl.ConfigUtilServiceImpl(2761)] : bindRepository cannot be found (java.lang.VerifyError: Expecting a stackmap frame at branch target 13
Exception Details:
  Location:
    com/mycom/wda/cms/impl/ConfigUtilServiceImpl.unbindResolverFactory(Lorg/apache/sling/api/resource/ResourceResolverFactory;)V @5: if_acmpne
  Reason:
    Expected stackmap frame at this location.
  Bytecode:
    0x0000000: 2ab4 003d 2ba6 0008 2a01 b500 3db1     
)
java.lang.VerifyError: Expecting a stackmap frame at branch target 13
Exception Details:
  Location:
    com/mycom/wda/cms/impl/ConfigUtilServiceImpl.unbindResolverFactory(Lorg/apache/sling/api/resource/ResourceResolverFactory;)V @5: if_acmpne
  Reason:
    Expected stackmap frame at this location.
  Bytecode:
    0x0000000: 2ab4 003d 2ba6 0008 2a01 b500 3db1     

	at java.lang.Class.getDeclaredMethods0(Native Method)
	at java.lang.Class.privateGetDeclaredMethods(Unknown Source)
	at java.lang.Class.getDeclaredMethod(Unknown Source)
	at org.apache.felix.scr.impl.inject.methods.BaseMethod.getMethod(BaseMethod.java:326) [org.apache.felix.scr:2.1.16]
	at org.apache.felix.scr.impl.inject.methods.BindMethod.getServiceReferenceMethod(BindMethod.java:407) [org.apache.felix.scr:2.1.16]
	at org.apache.felix.scr.impl.inject.methods.BindMethod.doFindMethod(BindMethod.java:109) [org.apache.felix.scr:2.1.16]
	at org.apache.felix.scr.impl.inject.methods.BaseMethod.findMethod(BaseMethod.java:173) [org.apache.felix.scr:2.1.16]
	at org.apache.felix.scr.impl.inject.methods.BaseMethod.access$400(BaseMethod.java:41) [org.apache.felix.scr:2.1.16]
	at org.apache.felix.scr.impl.inject.methods.BaseMethod$NotResolved.resolve(BaseMethod.java:602) [org.apache.felix.scr:2.1.16]
	at org.apache.felix.scr.impl.inject.methods.BaseMethod$NotResolved.methodExists(BaseMethod.java:626) [org.apache.felix.scr:2.1.16]
	at org.apache.felix.scr.impl.inject.methods.BaseMethod.methodExists(BaseMethod.java:528) [org.apache.felix.scr:2.1.16]
	at org.apache.felix.scr.impl.inject.methods.BindMethod.getServiceObject(BindMethod.java:659) [org.apache.felix.scr:2.1.16]
	at org.apache.felix.scr.impl.manager.DependencyManager.getServiceObject(DependencyManager.java:2308) [org.apache.felix.scr:2.1.16]
	at org.apache.felix.scr.impl.manager.DependencyManager$SingleStaticCustomizer.prebind(DependencyManager.java:1154) [org.apache.felix.scr:2.1.16]
	at org.apache.felix.scr.impl.manager.DependencyManager.prebind(DependencyManager.java:1568) [org.apache.felix.scr:2.1.16]
	at org.apache.felix.scr.impl.manager.AbstractComponentManager.collectDependencies(AbstractComponentManager.java:1029) [org.apache.felix.scr:2.1.16]
	at org.apache.felix.scr.impl.manager.SingleComponentManager.getServiceInternal(SingleComponentManager.java:935) [org.apache.felix.scr:2.1.16]
	at org.apache.felix.scr.impl.manager.SingleComponentManager.getService(SingleComponentManager.java:900) [org.apache.felix.scr:2.1.16]
	at org.apache.felix.framework.ServiceRegistrationImpl.getFactoryUnchecked(ServiceRegistrationImpl.java:348)
	at org.apache.felix.framework.ServiceRegistrationImpl.getService(ServiceRegistrationImpl.java:248)
	at org.apache.felix.framework.ServiceRegistry.getService(ServiceRegistry.java:350)
	at org.apache.felix.framework.Felix.getService(Felix.java:3954)
	at org.apache.felix.framework.BundleContextImpl.getService(BundleContextImpl.java:450)
	at org.osgi.util.tracker.ServiceTracker.addingService(ServiceTracker.java:416)
	at com.eclipsesource.jaxrs.publisher.internal.ResourceTracker.delegateAddService(ResourceTracker.java:51) [com.eclipsesource.jaxrs.publisher:3.2.0.201312310810]
	at com.eclipsesource.jaxrs.publisher.internal.ResourceTracker.addingService(ResourceTracker.java:43) [com.eclipsesource.jaxrs.publisher:3.2.0.201312310810]
	at org.osgi.util.tracker.ServiceTracker$Tracked.customizerAdding(ServiceTracker.java:943)
	at org.osgi.util.tracker.ServiceTracker$Tracked.customizerAdding(ServiceTracker.java:871)
	at org.osgi.util.tracker.AbstractTracked.trackAdding(AbstractTracked.java:256)
	at org.osgi.util.tracker.AbstractTracked.track(AbstractTracked.java:229)
	at org.osgi.util.tracker.ServiceTracker$Tracked.serviceChanged(ServiceTracker.java:903)
	at org.apache.felix.framework.EventDispatcher.invokeServiceListenerCallback(EventDispatcher.java:990)
	at org.apache.felix.framework.EventDispatcher.fireEventImmediately(EventDispatcher.java:838)
	at org.apache.felix.framework.EventDispatcher.fireServiceEvent(EventDispatcher.java:545)
	at org.apache.felix.framework.Felix.fireServiceEvent(Felix.java:4833)
	at org.apache.felix.framework.Felix.registerService(Felix.java:3804)
	at org.apache.felix.framework.BundleContextImpl.registerService(BundleContextImpl.java:328)
	at org.apache.felix.scr.impl.manager.AbstractComponentManager$3.register(AbstractComponentManager.java:906) [org.apache.felix.scr:2.1.16]
	at org.apache.felix.scr.impl.manager.AbstractComponentManager$3.register(AbstractComponentManager.java:892) [org.apache.felix.scr:2.1.16]
	at org.apache.felix.scr.impl.manager.RegistrationManager.changeRegistration(RegistrationManager.java:128) [org.apache.felix.scr:2.1.16]
	at org.apache.felix.scr.impl.manager.AbstractComponentManager.registerService(AbstractComponentManager.java:959) [org.apache.felix.scr:2.1.16]
	at org.apache.felix.scr.impl.manager.AbstractComponentManager.activateInternal(AbstractComponentManager.java:732) [org.apache.felix.scr:2.1.16]
	at org.apache.felix.scr.impl.manager.AbstractComponentManager.enableInternal(AbstractComponentManager.java:666) [org.apache.felix.scr:2.1.16]
	at org.apache.felix.scr.impl.manager.AbstractComponentManager.enable(AbstractComponentManager.java:432) [org.apache.felix.scr:2.1.16]
	at org.apache.felix.scr.impl.manager.ConfigurableComponentHolder.enableComponents(ConfigurableComponentHolder.java:665) [org.apache.felix.scr:2.1.16]
	at org.apache.felix.scr.impl.BundleComponentActivator.initialEnable(BundleComponentActivator.java:338) [org.apache.felix.scr:2.1.16]
	at org.apache.felix.scr.impl.Activator.loadComponents(Activator.java:382) [org.apache.felix.scr:2.1.16]
	at org.apache.felix.scr.impl.Activator.access$200(Activator.java:49) [org.apache.felix.scr:2.1.16]
	at org.apache.felix.scr.impl.Activator$ScrExtension.start(Activator.java:264) [org.apache.felix.scr:2.1.16]
	at org.apache.felix.scr.impl.AbstractExtender.createExtension(AbstractExtender.java:196) [org.apache.felix.scr:2.1.16]
	at org.apache.felix.scr.impl.AbstractExtender.modifiedBundle(AbstractExtender.java:169) [org.apache.felix.scr:2.1.16]
	at org.apache.felix.scr.impl.AbstractExtender.modifiedBundle(AbstractExtender.java:49) [org.apache.felix.scr:2.1.16]
	at org.osgi.util.tracker.BundleTracker$Tracked.customizerModified(BundleTracker.java:488)
	at org.osgi.util.tracker.BundleTracker$Tracked.customizerModified(BundleTracker.java:420)
	at org.osgi.util.tracker.AbstractTracked.track(AbstractTracked.java:232)
	at org.osgi.util.tracker.BundleTracker$Tracked.bundleChanged(BundleTracker.java:450)
	at org.apache.felix.framework.EventDispatcher.invokeBundleListenerCallback(EventDispatcher.java:915)
	at org.apache.felix.framework.EventDispatcher.fireEventImmediately(EventDispatcher.java:834)
	at org.apache.felix.framework.EventDispatcher.fireBundleEvent(EventDispatcher.java:516)
	at org.apache.felix.framework.Felix.fireBundleEvent(Felix.java:4817)
	at org.apache.felix.framework.Felix.startBundle(Felix.java:2336)
	at org.apache.felix.framework.Felix.setActiveStartLevel(Felix.java:1539)
	at org.apache.felix.framework.FrameworkStartLevelImpl.run(FrameworkStartLevelImpl.java:308)
	at java.lang.Thread.run(Unknown Source)
28.12.2021 12:04:04.169 *ERROR* [FelixStartLevel] wda.wda-bundle bundle wda.wda-bundle:1.0.0.SNAPSHOT (474)[com.mycom.wda.cms.impl.ConfigUtilServiceImpl(2761)] : bind method [bindRepository] not found; Component will fail

 

Any idea how to resolve this? Do I need to create/override this method? The same error also happens for bindResolverFactory.

2 Replies

Avatar

Community Advisor

Hi @aemdev_k 

Is it possible for you to share this class - ConfigUtilServiceImpl

Would like to know how you are referencing the Repository and ResourceResolverFactory

Also, could you please let know if you have updated the Java version recently.

 

Avatar

Level 1

Hi @Vijayalakshmi_S ,

 

I am upgrading from 6.2 to 6.5 and this happens at 6.5. 

As for Java, there is no change - 8 only.

Not only this class is having this issue but all classes with @Reference in code (Even HelloService).

 

package com.mycom.wda.cms.impl;

import java.io.File;
import java.io.FileInputStream;
import java.io.InputStream;
import java.util.HashMap;
import java.util.Map;
import java.util.Properties;

import javax.jcr.Session;

import org.apache.commons.lang.StringUtils;
import org.apache.felix.scr.annotations.Component;
import org.apache.felix.scr.annotations.Reference;
import org.apache.felix.scr.annotations.Service;
import org.apache.sling.api.resource.Resource;
import org.apache.sling.api.resource.ResourceResolver;
import org.apache.sling.api.resource.ResourceResolverFactory;
import org.apache.sling.jcr.api.SlingRepository;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

//import www.wda.webService.service.PropertiesUtil;

import com.mycom.wda.cms.ConfigUtilService;
import com.mycom.wda.cms.HelloService;


/**
 * One implementation of the {@link HelloService}. Note that the repository is
 * injected, not retrieved.
 */
@Service(ConfigUtilService.class)
@Component(metatype = false)
public class ConfigUtilServiceImpl implements ConfigUtilService {

	private static final Logger LOG = LoggerFactory
			.getLogger(ConfigUtilServiceImpl.class);

	@Reference
	private SlingRepository repository;

	@Reference
	private ResourceResolverFactory resolverFactory;

	private  static String GLOBAL_Properties_Path = "/etc/designs/properties/global.properties";
	private  static String API_Properties_Path = "/etc/designs/properties/api.properties";
	private  static String OFFSET_Properties_Path = "/etc/designs/properties/offset.properties";
	
	static{
		try{
		Properties prop = new Properties();
		
		prop.load(ConfigUtilServiceImpl.class.getClassLoader().getResourceAsStream("config.properties"));
		File systemFile = new File(prop.getProperty("ENV_Config_File_Path")); 
    	if(systemFile.exists()){
    		try{
	    		InputStream ins = new FileInputStream(systemFile);
	    		prop.load(ins);
	    		String env = prop.getProperty("ENV");
	    		if(StringUtils.isNotEmpty(env)){
	    			GLOBAL_Properties_Path = "/etc/designs/properties/" + env + "/global.properties";
	    			API_Properties_Path = "/etc/designs/properties/" + env + "/api.properties";
	    			OFFSET_Properties_Path = "/etc/designs/properties/" + env + "/offset.properties";
	    		}
    		}catch(Exception ex){
    			LOG.error(ex.getMessage(),ex);
    		}
    	}
		}catch(Exception ex){
			LOG.error(ex.getMessage(),ex);
		}
	}

	public String getGlobalProperty(String propKey) {
		return getProperty(propKey,GLOBAL_Properties_Path);
	}
	
	public String getApiProperty(String propKey) {
		return getProperty(propKey,API_Properties_Path);
	}
	
	public String getOffsetProperty(String propKey) {
		return getProperty(propKey,OFFSET_Properties_Path);
	}
	
	private String getProperty(String propKey,String propertyfile) {
		Session adminSession = null;
		String propValue = null;
		try {
			Map<String, Object> map = new HashMap<String, Object>();
			//adminSession = repository.loginAdministrative(null);
			adminSession = repository.loginService(null, null);
			map.put("user.jcr.session", adminSession);
			ResourceResolver resourceResolver = resolverFactory
					.getResourceResolver(map);
			Resource res = resourceResolver.getResource(propertyfile);
			Properties prop = new Properties();
			InputStream ins = res.adaptTo(InputStream.class);
			prop.load(ins);
			propValue = prop.getProperty(propKey.trim());
			if (propValue != null) {
				propValue = propValue.trim();
			}

		} catch (Exception e) {
			LOG.error(e.getMessage(), e);
		} finally {
			if (adminSession != null && adminSession.isLive()) {
				adminSession.logout();
				adminSession = null;
			}
		}
		return propValue;

	}
}