我正在将一个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="#[message.payload]"" />
</flow>
</mule>
@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)
答案 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>