将spring从3.1.1升级到4.3.3之后的Spring UnsatisfiedDependencyException

时间:2016-10-12 14:37:19

标签: java spring apache-camel

我试图将我的应用程序升级到最新版本的Spring&骆驼,但我得到了下面列出的例外情况。我还列出了spring遇到问题的配置部分。仅供参考,我的应用程序(包括此配置元素)可以与旧版本的库一起使用。为什么弹簧4.3.3在Spring 3.1.1找到它时没有任何问题?

这些是我正在更新的图书馆:

  • Spring 3.1.1至4.3.3
  • Camel 2.13.4至2.17.3
  • cglib 2.2.2至3.2.4
  • cxf 2.6.1至3.1.7

我真的只改变了pom.xml&由于库更新导致的一些小的更改。任何人都可以指出我如何解决这个问题的正确方向吗?

Spring在这里遇到问题

<bean id="test.format" class="org.apache.camel.dataformat.bindy.fixed.BindyFixedLengthDataFormat">
        <constructor-arg value="com.application.businessobject.test" />
</bean>

异常

org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'test.format' defined in class path resource [trs.application.finance.businessactivities.watchers.externaldata.xml]: Unsatisfied dependency expressed through constructor parameter 0: Could not convert argument value of type [java.lang.String] to required type [java.lang.Class]: Failed to convert value of type [java.lang.String] to required type [java.lang.Class]; nested exception is java.lang.IllegalArgumentException: Cannot find class [com.application.businessobject.test]

2 个答案:

答案 0 :(得分:2)

https://github.com/apache/camel/blob/master/components/camel-bindy/src/main/java/org/apache/camel/dataformat/bindy/fixed/BindyFixedLengthDataFormat.java

显然在早期的CAMEL版本中,有一个这个类的构造函数,它期望包作为String ... vararg参数,但是已经被这个提交删除了

https://github.com/apache/camel/commit/ce6bf6e6feb5f425cd544c4c1edfa2eb34641907

所以你的bean声明不再有效并导致上述异常

Could not convert argument value of type [java.lang.String] to required type [java.lang.Class]:

应该声明

<bean id="test.format" class="org.apache.camel.dataformat.bindy.fixed.BindyFixedLengthDataFormat">
  <constructor-arg>
    <value type="java.lang.Class">com.application.businessobject.Test</value>
  </constructor-arg>
</bean>

答案 1 :(得分:1)

您需要将构造函数arg更改为类。像这样:

<constructor-arg>
<value type="java.lang.Class">com.application.businessobject.Test</value>
</constructor-arg>