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

时间:2015-09-16 04:39:59

标签: spring mule

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

骡流配置

<?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:XML文档中的第35行   来自URL   [文件:/ d:/Work/.metadata/.plugins/org.eclipse.wst.server.core/tmp0/wtpwebapps /...../ WEB-INF /类/ EventHandler.xml]   是无效的;嵌套异常是org.xml.sax.SAXParseException;   lineNumber:35; columnNumber:66; cvc-complex-type.2.4.a:无效   找到内容以元素开头   &#39;属性-入口点 - 解析器&#39 ;.之一   &#39; {&#34; http://www.mulesoft.org/schema/mule/core&#34;:属性,   &#34; http://www.mulesoft.org/schema/mule/core&#34;:性质}&#39;是期待。   (org.mule.api.lifecycle.InitialisationException)at   org.mule.config.builders.AbstractConfigurationBuilder.configure(AbstractConfigurationBuilder.java:49)     在   org.mule.config.builders.AbstractResourceConfigurationBuilder.configure(AbstractResourceConfigurationBuilder.java:69)     在   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.mule.context.DefaultMuleContextFactory.createMuleContext(DefaultMuleContextFactory.java:57)     在   com.dbs.ibgt.scf.startup.MuleStartup.contextInitialized(MuleStartup.java:57)     在   org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:4973)     在   org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5467)     在   org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)     在   org.apache.catalina.core.ContainerBase $ StartChild.call(ContainerBase.java:1559)     在   org.apache.catalina.core.ContainerBase $ StartChild.call(ContainerBase.java:1549)     在java.util.concurrent.FutureTask.run(FutureTask.java:262)at   java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)     在   java.util.concurrent.ThreadPoolExecutor中的$ Worker.run(ThreadPoolExecutor.java:615)     在java.lang.Thread.run(Thread.java:745)

3 个答案:

答案 0 :(得分:3)

Jeba,我有一个符合您要求的模板:

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

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

还显示如何读取属性文件并同时处理mule消息。

结构:

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

骡子应用

<?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组件:

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配置:

应用 - 弹簧 - 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>

应用 - 弹簧 - 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>

我希望这会对你有所帮助。

问候。

答案 1 :(得分:0)

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

答案 2 :(得分:0)

试试下面的内容

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