我有一个更高层次的上下文,在服务器启动时(tomcat)获取以下bean:
<bean id="org.sakaiproject.rubrics.api.rubric.RubricsService" class="org.sakaiproject.rubrics.impl.RubricsServiceImpl"
init-method="init"
singleton="true">
<property name="rubricsLogic" ref="org.sakaiproject.rubrics.logic.RURubricLogic" />
<property name="externalLogic" ref="org.sakaiproject.rubrics.api.rubric.ExternalLogic" />
</bean>
那个bean的类('RubricsServiceImpl')实现了一个名为RubricsService的API接口......到目前为止一直很好。这初始化OK。
在层次结构中,当部署webapps时,在applicationContext.xml中对这些bean进行引用:
<bean id="org.sakaiproject.rubrics.tool.RubricsTool" class="org.sakaiproject.rubrics.tool.RubricsTool">
<property name="rubricsService" ref="org.sakaiproject.rubrics.api.rubric.RubricsService" />
</bean>
在部署应用程序时,会抛出以下异常:
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'org.sakaiproject.rubrics.tool.RubricsTool' defined in ServletContext resource [/WEB-INF/applicationContext.xml]:
Initialization of bean failed; nested exception is org.springframework.beans.ConversionNotSupportedException: Failed to convert property value of type 'org.sakaiproject.rubrics.impl.RubricsServiceImpl' to required type 'org.sakaiproject.rubrics.api.rubric.RubricsService' for property 'rubricsService'; nested exception is java.lang.IllegalStateException:
Cannot convert value of type [org.sakaiproject.rubrics.impl.RubricsServiceImpl] to required type [org.sakaiproject.rubrics.api.rubric.RubricsService] for property 'rubricsService':
no matching editors or conversion strategy found
所有poms都包含它们所属的所有依赖项,因此没有任何包来自定义或任何东西。我很无能。
这可能是类加载器问题吗?
以下是我的申请结构:
答案 0 :(得分:0)
好的......这是一个类加载器问题。 webapp的类加载器与容器级别的一个碰撞,因此无法进行转换。
所有API .jars都部署到tomcat的shared / lib目录,以便所有应用程序能够访问它们。这可以通过设置API模块(webapp)的pom来完成:
var list = new List<SqlParameter>();
list.Add(new SqlParameter ( "@PROC_TYPE", "DISPLAY" ));
var param = list.ToArray();
现在,基于上面webapp的层次结构,rubrics有一个用于webapp的基础pom.xml,在这里,有必要定义属性,以便其模块的所有子poms共享这些依赖项。通过webapp的基本pom.xml中的markind进行以下操作:
<properties>
<deploy.target>shared</deploy.target>
</properties>
然后,我们只需设置依赖项,如果我们需要它,没有为该类加载器定义.jar,但稍后将由容器提供。
这是我解决问题后的解释。请随意纠正/添加/充实。