繁体   English   中英

Spring Integration Bean错误

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM