尝试使用Mule XML流功能,因为必须处理非常大的xml文件。根据文档,文档中没有具体的示例。
当我检查有效负载时,我得到的是XMLUtils类,而不是文档中声明的XMLStreamReader类。
流程如下:有一个文件连接器,它将有效负载传递给自定义转换器,转换器将数据传递给spring bean,后者将进行基于事件的处理。
在spring bean中。在运行时,spring bean获取XMLUtils类,而不是XMLStreamReader类。
Mule - Config:
<spring:beans>
<spring:bean id="OracleCDMMapper" class="oraclecdmstream.OracleCDMMapper">
</spring:bean>
<spring:bean id = "OraclePaySlip" class="com.nect.transform.OracleCDMPaySlip" ></spring:bean>
</spring:beans>
<flow name="mulefileconnectorexampleFlow1" >
<file:inbound-endpoint path="C:/c-OracleCloud/src/main/resources" pollingFrequency="600000" moveToDirectory="C:/c-OracleCloud/src/main/resources/back" doc:name="File Input" >
<!-- <file:filename-regex-filter pattern="(^*.xml$)" caseSensitive="false"/>
--> <file:filename-wildcard-filter pattern="*.xml"></file:filename-wildcard-filter>
</file:inbound-endpoint>
<logger message="Transferring file : #[message.inboundProperties['originalFilename']]" level="INFO" doc:name="Logger"/>
<logger message ="Logger 1 " level="INFO" doc:name ="Logger1" />
<!-- Call the XMLSTREAMER -->
**<custom-transformer name="XmlToXSR" class="org.mule.module.xml.transformer.XmlToXMLStreamReader" doc:name="XMLTOORACLE">**
</custom-transformer>
<component doc:name="Java">
<spring-object bean="OracleCDMMapper"/>
</component>
-->
<logger message ="I am Complete " level="INFO" doc:name ="LoggerMurali" />
</flow>
</mule>这是Javacode:
Spring Bean
public class OracleCDMMapper implements Callable {
private final Logger logger = LoggerFactory.getLogger(OracleCDMMapper.class);
@Override
public Object onCall(MuleEventContext eventContext) throws Exception {
// TODO Auto-generated method stub
MuleMessage muleMessage = eventContext.getMessage();
logger.info("In the Spring Component");
logger.info(muleMessage.getPayload().getClass().toString());
**javax.xml.stream.XMLStreamReader xsr = (XMLStreamReader) muleMessage.getPayload(javax.xml.stream.XMLStreamReader.class);**任何帮助都将不胜感激
发布于 2015-11-14 23:25:00
我已经验证过了,你是对的,在代码中假设返回的类应该是一个实现XMLStreamReader的DelegateXMLStreamReader类,但返回的类是XMLUtils的一个匿名内部类,在运行时不能强制转换为任何类似流的类。这似乎是一个缺陷。
如果你真的需要控制xml流,你可以使用一个自定义的java组件:
<component class="com.foo.CustomJavaComponent" doc:name="Java"/>。
public class CustomJavaComponent implements Callable{
@Override
public Object onCall(MuleEventContext eventContext) throws Exception {
MuleMessage muleMessage = eventContext.getMessage();
FileInputStream fis = (FileInputStream)muleMessage.getPayload();
//Do something with this stream
return "Hello world";
}
} 然后让输入流做任何你想做的事情。
https://stackoverflow.com/questions/33657466
复制相似问题