首页 文章

有人能给我简单的 spring 与骡子融合吗?

提问于
浏览
2

我正在将一个Spring项目与Mule和a集成,在启动时收到以下错误 . 有没有最好的参考我可以用于 spring 骡子整合流量?

骡流配置

<?xml version="1.0" encoding="UTF-8"?>
<mule xmlns:mulexml="http://www.mulesoft.org/schema/mule/xml"
    xmlns:file="http://www.mulesoft.org/schema/mule/file" xmlns="http://www.mulesoft.org/schema/mule/core"
    xmlns:doc="http://www.mulesoft.org/schema/mule/documentation"
    xmlns:spring="http://www.springframework.org/schema/beans" version="EE-3.7.0"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-current.xsd
http://www.mulesoft.org/schema/mule/core http://www.mulesoft.org/schema/mule/core/current/mule.xsd
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.2.xsd
http://www.mulesoft.org/schema/mule/file http://www.mulesoft.org/schema/mule/file/current/mule-file.xsd
http://www.mulesoft.org/schema/mule/xml http://www.mulesoft.org/schema/mule/xml/current/mule-xml.xsd">


<spring:beans>
    <spring:import resource="classpath:app-spring.xml"/>
</spring:beans>

    <file:connector name="File" autoDelete="true" streaming="true" validateConnections="true" doc:name="File" />
    <mulexml:jaxb-context name="JAXB_Context" packageNames="com.dbs.ibgt.scf.eventhandler" doc:name="JAXB Context" />

    <flow name="Push  Transactions to IMEX">
        <file:inbound-endpoint responseTimeout="10000" doc:name="File" path="D:\SCF\eh_in" />
        <mulexml:jaxb-xml-to-object-transformer jaxbContext-ref="JAXB_Context" doc:name="XML to JAXB Object" returnClass="com.eventhandler.EventHandlerMessage" />
        <set-session-variable variableName="jaxbObject" value="#[payload]" doc:name="Set the Jaxb Object" />

    <component>
      <spring-object bean="EventChecker">
            <property-entry-point-resolver property = "checkEvent" />
      </spring-object>
    </component>

        <logger level="INFO" doc:name="Logger" message="message=&quot;#[message.payload]&quot;" />
    </flow>

</mule>

Java文件

@Component
public class EventChecker {

    public String checkEvent()
    {
        System.out.println("Inside Check Event");
        return "SEND_IMEX";
    }
}

错误堆栈.....

INFO:初始化Spring root WebApplicationContext org.mule.api.config.ConfigurationException:来自URL的XML文档中的第35行[file:/ D:/Work/.metadata/.plugins/org.eclipse.wst.server.core/tmp0 /wtpwebapps/...../WEB-INF/classes/EventHandler.xml]无效;嵌套异常是org.xml.sax.SAXParseException; lineNumber:35; columnNumber:66; cvc-complex-type.2.4.a:从元素'property-entry-point-resolver'开始发现无效内容 . 其中一个'{“http://www.mulesoft.org/schema/mule/core":property,,http://www.mulesoft.org/schema/mule/core":properties}'是预料之中的 . (org.mule.config.buil.AbstractConfigurationBuilder.configure(ArlectionConfigurationBuilder.java:49)org.mule.config.builders.AbstractResourceConfigurationBuilder.configure(AbstractResourceConfigurationBuilder.java:69)at org.mule.config.buil.life.InitialisationException org.mule.context.DefaultMuleContextFactory $ 2.configure(DefaultMuleContextFactory.java:103)org.mule.context.DefaultMuleContextFactory.doCreateMuleContext(DefaultMuleContextFactory.java:217)org.mule.context.DefaultMuleContextFactory.createMuleContext(DefaultMuleContextFactory.java:98 )org.apule.context.DefaultMuleContextFactory.createMuleContext(DefaultMuleContextFactory.java:57)at com.dbs.ibgt.scf.startup.MuleStartup.contextInitialized(MuleStartup.java:57)at org.apache.catalina.core.StandardContext . listenerStart(StandardContext.java:4973)位于org.ap的org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5467)org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150) ache.catalina.core.ContainerBase $ StartChild.call(ContainerBase.java:1559)atg.apache.catalina.core.ContainerBase $ StartChild.call(ContainerBase.java:1549)at java.util.concurrent.FutureTask.run( FutureTask.java:262)java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)at java.util.concurrent.ThreadPoolExecutor $ Worker.run(ThreadPoolExecutor.java:615)at java.lang.Thread.run (Thread.java:745)

3 回答

  • 0

    根据documentation,spring-object允许的唯一子元素是属性和属性 . 如果要配置property-entry-point-resolver,则需要为组件执行此操作 .

  • 3

    试试下面的东西

    <component>
            <property-entry-point-resolver property = "checkEvent" />
    </component>
    
  • 0

    杰巴,我有一个模板可以满足您的要求:

    https://github.com/jrichardsz/mule-esb-usefull-templates

    这个项目包含一个简单的 spring 组件,并展示了如何在mule app中使用它 .

    还显示了如何读取属性文件和同时处理mule消息 .

    Structure :

    mule-project\pom.xml
    mule-project\README.md
    mule-project\src
    mule-project\src\main
    mule-project\src\test
    mule-project\src\main\app
    mule-project\src\main\java
    mule-project\src\main\resources
    mule-project\src\main\app\mule-app.properties
    mule-project\src\main\app\mule-deploy.properties
    mule-project\src\main\app\spring-mule.xml
    mule-project\src\main\java\com
    mule-project\src\main\java\com\spring
    mule-project\src\main\java\com\spring\component
    mule-project\src\main\java\com\spring\component\SearchAuthor.java
    mule-project\src\main\resources\app-spring-component.xml
    mule-project\src\main\resources\app-spring-context.xml
    mule-project\src\main\resources\app.properties
    mule-project\src\test\java
    mule-project\src\test\resources
    mule-project\src\test\java\.keep
    mule-project\src\test\resources\.keep
    

    Mule app :

    <?xml version="1.0" encoding="UTF-8"?>
    
    <mule xmlns="http://www.mulesoft.org/schema/mule/core" xmlns:doc="http://www.mulesoft.org/schema/mule/documentation"
        xmlns:spring="http://www.springframework.org/schema/beans" version="EE-3.6.1"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:stdio="http://www.mulesoft.org/schema/mule/stdio"
        xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-current.xsd
    http://www.mulesoft.org/schema/mule/core http://www.mulesoft.org/schema/mule/core/current/mule.xsd
    http://www.mulesoft.org/schema/mule/stdio http://www.mulesoft.org/schema/mule/stdio/3.6/mule-stdio.xsd">
    
        <spring:beans>
            <spring:import
                resource="classpath*:/app-spring-context.xml" />        
            <spring:import
                resource="classpath*:/app-spring-component.xml" />      
        </spring:beans>
    
        <stdio:connector name="stdioConnector" messageDelayTime="1234"
               outputMessage="abc" promptMessage="Ingrese el nombre del libro : "
               promptMessageCode="456"
               doc:name="STDIO"/>
    
        <flow name="spring-muleFlow">
    
            <stdio:inbound-endpoint  system="IN" connector-ref="stdioConnector" doc:name="STDIO"/>
            <logger message="Search book : #[payload]" level="INFO" doc:name="Logger"/>
    
            <component doc:name="searchAuthor">
                <spring-object bean="searchAuthor" />
            </component>
            <logger message="Show Results : #[payload]" level="INFO" doc:name="Logger"/>
        </flow>
    </mule>
    

    Spring component :

    package com.spring.component;
    
    import java.util.Map;
    
    import javax.annotation.Resource;
    
    import org.mule.api.MuleEventContext;
    import org.mule.api.lifecycle.Callable;
    import org.springframework.context.annotation.Scope;
    import org.springframework.stereotype.Component;
    
    @Component("searchAuthor")
    @Scope("prototype")
    
    /*
     * Use Callable if you want : 
     * (spring functionalities, handle mule message and read a properties file) 
     * at the same time.
     * 
     * This is what you will use more.
     * 
     * If you need only spring, dont use : implements Callable
     * 
     * */
    public class SearchAuthor implements Callable{
    
    //  @Autowired
    //  private AnotherSpringComponetOrServiceOrWhatever spring;    
    
        @Resource(name="app") //app is the id="app" app-spring-context.xml
        protected Map<String,String> propertiesApp; 
    
        @Override
        public Object onCall(MuleEventContext eventContext) throws Exception {
    
            String payload = (String) eventContext.getMessage().getPayload();
    
            return String.format("This book [%s] was made by : %s", payload, propertiesApp.get("by"));
        }
    
    }
    

    Spring xml configurations :

    app-spring-context.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:context="http://www.springframework.org/schema/context"
        xmlns:util="http://www.springframework.org/schema/util"
        xmlns:tx="http://www.springframework.org/schema/tx"
        xmlns:jee="http://www.springframework.org/schema/jee"
        xsi:schemaLocation="http://www.springframework.org/schema/jee http://www.springframework.org/schema/jee/spring-jee-3.0.xsd
            http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
            http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-3.0.xsd
            http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.0.xsd
            http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd">
    
        <!--general spring configurations-->
        <context:annotation-config />   
    
        <util:properties id="app" location="classpath:app.properties"/>
        <context:property-placeholder properties-ref="app" ignore-resource-not-found="true"/>
    
        <context:component-scan base-package="com.spring.component"/>
    
    
    </beans>
    

    app-spring-component.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:context="http://www.springframework.org/schema/context"
        xmlns:util="http://www.springframework.org/schema/util" xmlns:tx="http://www.springframework.org/schema/tx"
        xmlns:jee="http://www.springframework.org/schema/jee"
        xsi:schemaLocation="http://www.springframework.org/schema/jee http://www.springframework.org/schema/jee/spring-jee-3.0.xsd
            http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
            http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-3.0.xsd
            http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.0.xsd
            http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd">
    
        <!-- import objects that have not been scanned or another spring functionalities -->
    
        <!-- <bean ... -->
    
    </beans>
    

    我希望这可以帮助你 .

    问候 .

相关问题