简体   繁体   English

Spring Integration Bean错误

[英]Spring Integration Bean error

So I have this code, what I'm trying to do is to receive stamp orders from the front end of the web app. 所以我有这个代码,我正在尝试做的是从Web应用程序的前端接收邮票订单。 After I received the stamp orders. 我收到邮票后。 I'll split the orders into single stamp orders then filter them to approved and disapproved stamp orders. 我会将订单拆分为单个邮票订单,然后将其过滤为已批准和不批准的邮票订单。 After filtering them, I'll send an email to the recipient about their stamp orders. 过滤后,我会向收件人发送有关其邮票订单的电子邮件。

Here is my StampOrder.java 这是我的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 + "]";
}

Here is my spring integration schema xml 这是我的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>

The stampAuthGateway.java stampAuthGateway.java

public interface StampAuthGateway {
void receivedStampsAuth(List<StampOrder> order);}

The stampAuthFilter.java 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;
}
}

The acceptCreatedOrders.java transformer 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;
    }}

the rejectOrderCreator.java transformer has the same code has above but with this condition rejectOrderCreator.java变换器具有相同的代码,但具有此条件

if(order.getStampStatus.getStatusId!=3)

the sendMailChannel.java service activator 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");
    }

the stampOrderCreator interface stampOrderCreator接口

public interface StampOrderCreator {
List<StampOrder> createOrder(Message<StampOrder> message);
}

the orderJob.java orderJob.java

@Autowired
StampAuthGateway stampAuthGateway;

@Scheduled(fixedRate = 4000)
public void scheduledStampOrderHandling() {
    StampOrderGenerator sgo = new StampOrderGenerator();
    List<StampOrder> orderList = sgo.generateStampOrder();

    stampAuthGateway.receivedStampsAuth(orderList);

}

and the integration config xml 和集成配置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"/>

and when i'm running it here is the exception message that im getting 当我在这里运行它是我得到的异常消息

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)

Sorry for the poor formatting was In a hurry posting this. 对不起格式不好就是匆匆张贴这个。 Hope someone can help me. 希望可以有人帮帮我。

Thank you, Jet 谢谢你,Jet

You have both a channel and a service called ApprovedOrderCreator ; 您有一个名为ApprovedOrderCreator的渠道和服务; the framework is trying to use the channel as a handler for the transformer. 框架试图将通道用作变换器的处理程序。

You need to give these elements unique names. 您需要为这些元素指定唯一的名称。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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