2015-11-03 158 views
0

我有一个更高的层次方面,它在服务器启动时(Tomcat)的获取以下豆:bean初始化失败; ConversionNotSupportedException

<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接口......到目前为止一切好。这初始化确定。

下层次结构,当web应用被部署,在这些引用这个bean在applicationContext.xml中的:

<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包含所有依赖关系他们所属的地方,因此没有包裹从定义或任何东西中匮乏。我无能为力。

这可能是一个类加载器的问题?

以下是我的应用程序结构:

enter image description here

回答

0

好吧......这是一个类加载器的问题。 Web应用程序的类加载器与容器级别冲突,因此不能执行转换。

所有API .jars都被部署到tomcat的shared/lib目录中,以便所有应用程序都能够访问它们。这是通过(的web应用程序)在API模块的POM设定完成:

<properties> 
    <deploy.target>shared</deploy.target> 
</properties> 

现在,基于上述的web应用的层次结构,量规具有用于web应用程序的基座的pom.xml,并且在该,所以有必要定义属性,使其模块中的所有子poms都共享这些依赖关系。通过在Web应用程序的基本的pom.xml markind如下:

<dependencyManagement> 
    <dependencies> 
     <dependency> 
     <groupId>org.sakaiproject.rubrics</groupId> 
      <artifactId>rubrics-api</artifactId> 
      <version>10.4</version> 
      <scope>provided</scope> <!-- from the CONTAINER --> 
     </dependency> 
     <dependency> 
      <groupId>org.sakaiproject.rubrics</groupId> 
      <artifactId>rubrics-impl</artifactId> 
      <version>10.4</version> 
     </dependency> 
    </dependencies> 
</dependencyManagement> 

然后,我们刚刚设置的依赖,如果我们没有为类加载器定义的.jar需要它,而是要由容器以后提供。

这是我解释问题后的解释。请随时纠正/添加/充实。