1

有点急请帮忙!

为什么我在 Spring 中得到 IllegalArgumentException 无法将 String 类型的值转换为所需的 Product 类型?

我已经阅读了这个问题,因为我遇到了类似的异常:

<Feb 13, 2012 11:55:39 AM IST> <Warning> <HTTP> <BEA-101162> <User defined listener org.springframework.web.context.ContextLoaderListener failed: org.springframework.beans.factory.BeanCreationExceptio
n: Error creating bean with name 'jmsTemplate' defined in class path resource [manager-security-audit.xml]: Initialization of bean failed; nested exception is org.springframework.beans.TypeMismatchExc
eption: Failed to convert property value of type [java.lang.String] to required type [javax.jms.ConnectionFactory] for property 'connectionFactory'; nested exception is java.lang.IllegalArgumentExcept
ion: Cannot convert value of type [java.lang.String] to required type [javax.jms.ConnectionFactory] for property 'connectionFactory': no matching editors or conversion strategy found.
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'jmsTemplate' defined in class path resource [manager-security-audit.xml]: Initialization of bean failed; nested
exception is org.springframework.beans.TypeMismatchException: Failed to convert property value of type [java.lang.String] to required type [javax.jms.ConnectionFactory] for property 'connectionFactory
'; nested exception is java.lang.IllegalArgumentException: Cannot convert value of type [java.lang.String] to required type [javax.jms.ConnectionFactory] for property 'connectionFactory': no matching
editors or conversion strategy found
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:480)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory$1.run(AbstractAutowireCapableBeanFactory.java:409)
        at java.security.AccessController.doPrivileged(Native Method)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:380)
        at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:264)
        Truncated. see log file for complete stacktrace

我也看到了这个问题的答案,现在我的问题是:如何确定我是否有定义参数的类似问题(我个人认为这不是问题(只是直觉) )? 或者这是其他问题吗?

请帮忙

这是xml文件:

<?xml version="1.0" encoding="UTF-8"?>

  <beans
    xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:lang="http://www.springframework.org/schema/lang"
xsi:schemaLocation="http://www.springframework.org/schema/beans 
http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
http://www.springframework.org/schema/lang

http://www.springframework.org/schema/lang/spring-lang-2.0.xsd">
<bean id="auditListener" class="com.unica.manager.audit.AuditListener"/>
<bean id="auditEventDestination" class="org.apache.activemq.command.ActiveMQQueue">
    <constructor-arg value="audit.event.queue"/>
</bean>
<bean id="auditEventMessageConverter" class="com.unica.manager.audit.AuditEventMessageConverter"/>

<bean id="purePojoMdp" class="org.springframework.jms.listener.adapter.MessageListenerAdapter">
    <property name="delegate" ref="AuditEventManager"/>
    <property name="defaultListenerMethod" value="addAuditEvent"/>
    <property name="messageConverter" ref="auditEventMessageConverter"/>
</bean>
<bean name="auditListenerContainer"  class="org.springframework.jms.listener.SimpleMessageListenerContainer" lazy-init="true">
    <property name="autoStartup" value="false"/>
    <property name="connectionFactory" value=""/>
    <property name="destination" ref="auditEventDestination"/>
    <property name="messageListener" ref="purePojoMdp"/>
</bean>
<bean id="jmsTemplate" class="org.springframework.jms.core.JmsTemplate" depends-on="ConfigurationManager" >
    <property name="connectionFactory" value=""/>
    <property name="messageConverter" ref="auditEventMessageConverter"/>
</bean>
<bean id="audit" class="com.unica.manager.audit.Audit" >
    <property name="jmsTemplate" ref="jmsTemplate"/>
        <property name="enableQueuing" value="true"/>
        <property name="auditEventManager" ref="AuditEventManager"/>
    <property name="destination" ref="auditEventDestination"/>
</bean>

4

2 回答 2

3

你为什么不向connectionFactory财产注入任何东西:

<property name="connectionFactory" value=""/>

这必须更改为:

<property name="connectionFactory" ref="amqConnectionFactory"/>

connectionFactory属性是类型javax.jms.ConnectionFactory(见:)JmsAccessor.setConnectionFactory()

amqConnectionFactory工厂可以定义如下:

<beans xmlns="http://www.springframework.org/schema/beans"
   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
   xmlns:amq="http://activemq.apache.org/schema/core"
   xsi:schemaLocation="
        http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.1.xsd
        http://activemq.apache.org/schema/core http://activemq.apache.org/schema/core/activemq-core.xsd">

    <amq:connectionFactory id="amqConnectionFactory" brokerURL="vm://localhost" />

</beans>
于 2012-02-13T07:20:19.830 回答
1

请发布您的弹簧配置详细信息(xml 文件)。现在,从日志中唯一可以明显看出的是您正在尝试将该属性 connectionFactory作为字符串注入。请确保您定义了一个带有 id 的 bean,connectionFactory并且它应该是 type javax.jms.ConnectionFactory,然后使用它来注入。

请发布xml配置。这将有助于进一步调试问题。

编辑

根据您的输入,

我没有看到<property name="connectionFactory" ...任何地方定义的bean。您还提到它在其他一些环境中工作。请检查哪个 xml 文件包含此 bean 的定义,并确保该文件与您发布的 xml 一起由 spring 加载。

于 2012-02-13T07:10:58.790 回答