我在我的项目中使用spring集成。
我最近为我的服务激活器PQMessageHandler
添加了以下方法:
@SuppressWarnings("unchecked")
public Message<?> getDatabaseProductName(Message<?> inMessage){
Message<?> outMessage = null;
String databaseProductName = null;
try {
//get the database name.
databaseProductName = DataSourceUtils.getConnection(rd).getMetaData().getDatabaseProductName();
} catch (SQLException e) {
throw new RuntimeException(e);
}
Document mainDom = XmlParserUtil.convertString2Document((String)inMessage.getPayload());
//include database name in the response xml
Element databaseName = mainDom.getRootElement().addElement("databaseName");
databaseName.setText(databaseProductName);
MessageHeaders inMsgHdrs = inMessage.getHeaders();
MessageBuilder<?> msgBuilder = MessageBuilder.withPayload(mainDom.asXML()).copyHeaders(inMsgHdrs);
outMessage= msgBuilder.build();
logger.debug("\n ************************** External System Request Message ********************* \n");
logger.debug(outMessage);
logger.debug("\n ******************************************************************************** \n");
return outMessage;
}
我已经配置了调用上述服务激活器的代码如下:
<int:channel id="PQPutUserBAInformation-Add-DatabaseProductName" />
<int:service-activator input-channel="PQPutUserBAInformation-Add-DatabaseProductName"
output-channel="PQPutUserBAInformation-Database-Router"
ref="msgHandler"
method="getDatabaseProductName" />
<int:router input-channel="PQPutUserBAInformation-Database-Router" default-output-channel="PQPutUserBAInformation-Default-InsertUserId-Channel" resolution-required="false" expression="#xpath(payload, '//databaseName').toLowerCase().contains('db2')">
<int:mapping value="true" channel="PQPutUserBAInformation-DB2-Request"/>
</int:router>
上述代码在开发环境中没有任何问题时工作正常。奇怪的是,当我在客户端环境中部署我的应用程序时,我收到以下错误:
2017-04-10 10:41:50,525 INFO [org.springframework.scheduling.concurrent.ThreadPoolTaskScheduler](ServerService线程池 - 65)关闭ExecutorService&#39; taskScheduler&#39;
2017-04-10 10:41:50,526错误[org.springframework.web.context.ContextLoader](ServerService线程池 - 65)上下文初始化失败:org.springframework.beans.factory.BeanCreationException:创建bean时出错名称&#39; org.springframework.integration.config.ConsumerEndpointFactoryBean#345&#39;:无法解析对bean的引用&#39; org.springframework.integration.config.ServiceActivatorFactoryBean#61&#39;设置bean属性&#39; handler&#39 ;;嵌套异常是org.springframework.beans.factory.BeanCreationException:使用名称&#39; org.springframework.integration.config.ServiceActivatorFactoryBean创建bean时出错#61&#39;:FactoryBean在创建对象时抛出异常;嵌套异常是java.lang.IllegalArgumentException:[class com.dsths.cs.awd.jobs.PQMessageHandler]类型的目标对象没有合适的方法来处理消息。 在org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveReference(BeanDefinitionValueResolver.java:329)[spring-beans-3.2.2.RELEASE.jar:3.2.2.RELEASE]
我假设最近的变化导致了这个问题。日志消息并未明确说明哪个服务激活器导致了该问题。
我用Google搜索了错误并确认了这一点
1)没有拼写错误的方法属性
组态
2)该方法是公开的
3)我还没有在配置中定义requires-reply="true"
属性。
有关解决问题的任何想法吗?
答案 0 :(得分:0)
找出问题的根本原因。例外是由于EAR缓存。清理Linux服务器上的EAR文件夹并重新部署war文件已经解决了。