tree 8b495e0cb7f9c40f840224d3973d61fe5bf75a7d
parent 2c859074c0dcda7eed78463367a5ace3e1113d98
author Stian Soiland-Reyes <soiland-reyes@cs.manchester.ac.uk> 1420549529 +0000
committer Stian Soiland-Reyes <soiland-reyes@cs.manchester.ac.uk> 1420549529 +0000

Trying to sort broken OSGi config

.. but not quite getting there. More work needed:

Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'interactionActivityFactory' defined in URL [bundleentry://84.fwk450287720/META-INF/spring/interaction-activity-context.xml]: Cannot resolve reference to bean 'interactionVelocity' while setting bean property 'interactionVelocity'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'interactionVelocity' defined in URL [bundleentry://84.fwk450287720/META-INF/spring/interaction-activity-context.xml]: Invocation of init method failed; nested exception is org.apache.velocity.exception.ResourceNotFoundException: Unable to find resource 'ask'
  at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveReference(BeanDefinitionValueResolver.java:328)
  at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveValueIfNecessary(BeanDefinitionValueResolver.java:106)
  at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyPropertyValues(AbstractAutowireCapableBeanFactory.java:1325)
  at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1086)
  at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:517)
  at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:456)
  at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:291)
  at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:222)
  at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:288)
  at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:190)
  at org.springframework.osgi.service.exporter.support.OsgiServiceFactoryBean.afterPropertiesSet(OsgiServiceFactoryBean.java:200)
  at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1477)
  at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1417)
  ... 14 more
Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'interactionVelocity' defined in URL [bundleentry://84.fwk450287720/META-INF/spring/interaction-activity-context.xml]: Invocation of init method failed; nested exception is org.apache.velocity.exception.ResourceNotFoundException: Unable to find resource 'ask'
  at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1420)
  at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:519)
  at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:456)
  at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:291)
  at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:222)
  at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:288)
  at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:190)
  at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveReference(BeanDefinitionValueResolver.java:322)
  ... 26 more
Caused by: org.apache.velocity.exception.ResourceNotFoundException: Unable to find resource 'ask'
  at org.apache.velocity.runtime.resource.ResourceManagerImpl.loadResource(ResourceManagerImpl.java:474)
  at org.apache.velocity.runtime.resource.ResourceManagerImpl.getResource(ResourceManagerImpl.java:352)
  at org.apache.velocity.runtime.RuntimeInstance.getTemplate(RuntimeInstance.java:1533)
  at org.apache.velocity.runtime.RuntimeInstance.getTemplate(RuntimeInstance.java:1514)
  at org.apache.velocity.runtime.RuntimeSingleton.getTemplate(RuntimeSingleton.java:299)
  at org.apache.velocity.app.Velocity.getTemplate(Velocity.java:358)
  at net.sf.taverna.t2.activities.interaction.velocity.InteractionVelocity.loadTemplates(InteractionVelocity.java:99)
  at net.sf.taverna.t2.activities.interaction.velocity.InteractionVelocity.checkVelocity(InteractionVelocity.java:61)
  at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
  at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
  at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
  at java.lang.reflect.Method.invoke(Method.java:606)
  at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeCustomInitMethod(AbstractAutowireCapableBeanFactory.java:1544)
  at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1485)
  at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1417)
  ... 33 more
