[英]Spring Integration Bean error
所以我有这个代码,我正在尝试做的是从Web应用程序的前端接收邮票订单。 我收到邮票后。 我会将订单拆分为单个邮票订单,然后将其过滤为已批准和不批准的邮票订单。 过滤后,我会向收件人发送有关其邮票订单的电子邮件。
这是我的StampOrder.java
private BigInteger refId;
private TaxpayerInfo taxpayerInfo;
private StampPrintingStatus stampStatus;
private Date transDate;
private int transType;
private int paymentRefNo;
private BigDecimal totalPrintingCost;
private BigDecimal totalEtEmt;
private String apoPurchaseOrder;
private Market market;
private Users user;
private List<StampOrderDetails> listOfStampOrder;
public StampOrder(){
}
public StampOrder(BigInteger refId, TaxpayerInfo taxpayerInfo,
StampPrintingStatus stampStatus, Date transDate, int transType,
int paymentRefNo, BigDecimal totalPrintingCost,
BigDecimal totalEtEmt, String apoPurchaseOrder, Market market,
Users user, List<StampOrderDetails> listOfStampOrder) {
this.refId = refId;
this.taxpayerInfo = taxpayerInfo;
this.stampStatus = stampStatus;
this.transDate = transDate;
this.transType = transType;
this.paymentRefNo = paymentRefNo;
this.totalPrintingCost = totalPrintingCost;
this.totalEtEmt = totalEtEmt;
this.apoPurchaseOrder = apoPurchaseOrder;
this.market = market;
this.user = user;
this.listOfStampOrder = listOfStampOrder;
}
public boolean isApproved(){
if(stampStatus.getStatusId()==3){
return true;
}else{
return false;
}
}
public BigInteger getRefId() {
return refId;
}
public void setRefId(BigInteger refId) {
this.refId = refId;
}
public TaxpayerInfo getTaxpayerInfo() {
return taxpayerInfo;
}
public void setTaxpayerInfo(TaxpayerInfo taxpayerInfo) {
this.taxpayerInfo = taxpayerInfo;
}
public StampPrintingStatus getStampStatus() {
return stampStatus;
}
public void setStampStatus(StampPrintingStatus stampStatus) {
this.stampStatus = stampStatus;
}
public Date getTransDate() {
return transDate;
}
public void setTransDate(Date transDate) {
this.transDate = transDate;
}
public int getTransType() {
return transType;
}
public void setTransType(int transType) {
this.transType = transType;
}
public int getPaymentRefNo() {
return paymentRefNo;
}
public void setPaymentRefNo(int paymentRefNo) {
this.paymentRefNo = paymentRefNo;
}
public BigDecimal getTotalPrintingCost() {
return totalPrintingCost;
}
public void setTotalPrintingCost(BigDecimal totalPrintingCost) {
this.totalPrintingCost = totalPrintingCost;
}
public BigDecimal getTotalEtEmt() {
return totalEtEmt;
}
public void setTotalEtEmt(BigDecimal totalEtEmt) {
this.totalEtEmt = totalEtEmt;
}
public String getApoPurchaseOrder() {
return apoPurchaseOrder;
}
public void setApoPurchaseOrder(String apoPurchaseOrder) {
this.apoPurchaseOrder = apoPurchaseOrder;
}
public Market getMarket() {
return market;
}
public void setMarket(Market market) {
this.market = market;
}
public Users getUser() {
return user;
}
public void setUser(Users user) {
this.user = user;
}
public List<StampOrderDetails> getListOfStampOrder() {
return listOfStampOrder;
}
public void setListOfStampOrder(List<StampOrderDetails> listOfStampOrder) {
this.listOfStampOrder = listOfStampOrder;
}
@Override
public String toString() {
return "StampOrder [refId=" + refId + ", taxpayerInfo=" + taxpayerInfo
+ ", stampStatus=" + stampStatus + ", transDate=" + transDate
+ ", transType=" + transType + ", paymentRefNo=" + paymentRefNo
+ ", totalPrintingCost=" + totalPrintingCost + ", totalEtEmt="
+ totalEtEmt + ", apoPurchaseOrder=" + apoPurchaseOrder
+ ", market=" + market + ", user=" + user
+ ", listOfStampOrder=" + listOfStampOrder + "]";
}
这是我的spring集成架构xml
<context:component-scan base-package="com.irsis.integration.mail" />
<!-- logger -->
<int:logging-channel-adapter id="logger"
log-full-message="true" level="INFO" />
<!-- gateway -->
<int:channel id="newStampAuthChannel" />
<!-- Gateway Java -->
<int:gateway id="stampAuthGateway"
service-interface="com.irsis.integration.mail.StampAuthGateway">
<int:method name="receivedStampsAuth" request-channel="newStampAuthChannel" />
</int:gateway>
<!-- Splitter = Multiple Orders To Single Orders // Creates new Channel
for Single Orders -->
<int:splitter input-channel="newStampAuthChannel"
output-channel="singleStampAuthChannel" />
<int:channel id="singleStampAuthChannel" />
<!-- Filter = Filter ORders to approved or disapproved// Creates new Channel
for both -->
<int:filter input-channel="singleStampAuthChannel"
output-channel="filteredStampAuthChannel" ref="stampAuthFilter" />
<int:channel id="filteredStampAuthChannel"/>
<!-- Router -->
<int:recipient-list-router input-channel="filteredStampAuthChannel">
<int:recipient channel="ApprovedOrderCreator"
selector-expression="payload.approved" />
<int:recipient channel="RejectedOrderCreator"
selector-expression="!payload.approved" />
</int:recipient-list-router>
<int:channel id="ApprovedOrderCreator" />
<int:channel id="RejectedOrderCreator" />
<!-- TRANSFORMERS OBJECTS IN DISGUISE -->
<int:transformer input-channel="ApprovedOrderCreator"
output-channel="sendChannel" ref="ApprovedOrderCreator" />
<int:transformer input-channel="RejectedOrderCreator"
output-channel="sendChannel" ref="RejectedOrderCreator" />
<int:channel id="sendChannel">
<int:queue capacity="1000" />
</int:channel>
<!-- Service Activator -->
<int:service-activator input-channel='sendChannel'
ref='sendMailChannel' method="sendOrder">
</int:service-activator>
<import resource="classpath:/spring/application-context.xml"/>
<bean id="orderJob" class="com.irsis.integration.mail.OrderJob" />
</beans>
stampAuthGateway.java
public interface StampAuthGateway {
void receivedStampsAuth(List<StampOrder> order);}
stampAuthFilter.java
@Component
public class StampAuthFilter {
@Filter
public boolean accept(Message<StampOrder> message){
System.out.println("Filter Passed");
StampOrder order = message.getPayload();
boolean isApproved = order.getStampStatus().getStatusId() == 3;
return isApproved;
}
}
acceptCreatedOrders.java转换器
@Component
@Service("ApprovedOrderCreator")
@Transactional
public class ApprovedOrderCreator {
@Transformer
public List<StampOrder> createOrder(Message<StampOrder> message) {
System.out.println("Accept Transformer Pass");
StampOrder order = message.getPayload();
List<StampOrder> saList = new ArrayList<>();
if (order.getStampStatus().getStatusId() == 3) {
saList.add(order);
}
return saList;
}}
rejectOrderCreator.java变换器具有相同的代码,但具有此条件
if(order.getStampStatus.getStatusId!=3)
sendMailChannel.java服务激活器
@Autowired
SendMailService sms;
@ServiceActivator
public void sendOrder(Message<StampOrder> message){
StampOrder order = message.getPayload();
if(order.getStampStatus().getStatusId()==3){
sms.SendNotification(4, order.getTaxpayerInfo().getTinContactEAdd(), "blah");
}else{
sms.SendNotification(5, order.getTaxpayerInfo().getTinContactEAdd(), "blah");
}
stampOrderCreator接口
public interface StampOrderCreator {
List<StampOrder> createOrder(Message<StampOrder> message);
}
orderJob.java
@Autowired
StampAuthGateway stampAuthGateway;
@Scheduled(fixedRate = 4000)
public void scheduledStampOrderHandling() {
StampOrderGenerator sgo = new StampOrderGenerator();
List<StampOrder> orderList = sgo.generateStampOrder();
stampAuthGateway.receivedStampsAuth(orderList);
}
和集成配置xml
<import resource="classpath:/integration/mi-batch-config.xml"/>
<import resource="classpath:/spring/application-context.xml"/>
<context:component-scan base-package="com.irsis.integration.mail" />
<task:executor id="executor" pool-size="10"/>
<task:scheduler id="scheduler" pool-size="10"/>
<task:annotation-driven executor="executor" scheduler="scheduler"/>
当我在这里运行它是我得到的异常消息
Exception in thread "main" org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'org.springframework.integration.config.ConsumerEndpointFactoryBean#3': Cannot resolve reference to bean 'org.springframework.integration.config.TransformerFactoryBean#0' while setting bean property 'handler'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'org.springframework.integration.config.TransformerFactoryBean#0': FactoryBean threw exception on object creation; nested exception is java.lang.IllegalArgumentException: Found ambiguous parameter type [interface org.springframework.integration.core.MessageHandler] for method match: [public void org.springframework.integration.context.IntegrationObjectSupport.setApplicationContext(org.springframework.context.ApplicationContext) throws org.springframework.beans.BeansException, public void org.springframework.integration.channel.AbstractMessageChannel.addInterceptor(org.springframework.integration.channel.ChannelInterceptor), public boolean org.springframework.integration.channel.AbstractSubscribableChannel.unsubscribe(org.springframework.integration.core.MessageHandler), public void org.springframework.integration.channel.AbstractMessageChannel.setConversionService(org.springframework.core.convert.ConversionService), public void org.springframework.integration.channel.AbstractMessageChannel.setInterceptors(java.util.List), public void org.springframework.integration.channel.DirectChannel.setMaxSubscribers(int), public void org.springframework.integration.context.IntegrationObjectSupport.setComponentName(java.lang.String), public java.lang.String org.springframework.integration.context.IntegrationObjectSupport.getApplicationContextId(), public void org.springframework.integration.channel.AbstractMessageChannel.setShouldTrack(boolean), public final void org.springframework.integration.context.IntegrationObjectSupport.setBeanFactory(org.springframework.beans.factory.BeanFactory), public void org.springframework.integration.channel.AbstractMessageChannel.setDatatypes(java.lang.Class[])]
at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveReference(BeanDefinitionValueResolver.java:329)
at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveValueIfNecessary(BeanDefinitionValueResolver.java:107)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyPropertyValues(AbstractAutowireCapableBeanFactory.java:1417)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1158)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:519)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:458)
at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:296)
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:223)
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:293)
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:194)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:610)
at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:932)
at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:479)
at org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:139)
at org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:83)
at com.irsis.integration.test.BatchIntegrationTest.main(BatchIntegrationTest.java:14)
对不起格式不好就是匆匆张贴这个。 希望可以有人帮帮我。
谢谢你,Jet
您有一个名为ApprovedOrderCreator
的渠道和服务; 框架试图将通道用作变换器的处理程序。
您需要为这些元素指定唯一的名称。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.