首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Mule XML Streaming - (Mule XML转换)

Mule XML Streaming - (Mule XML转换)
EN

Stack Overflow用户
提问于 2015-11-12 02:33:50
回答 1查看 593关注 0票数 2

尝试使用Mule XML流功能,因为必须处理非常大的xml文件。根据文档,文档中没有具体的示例。

当我检查有效负载时,我得到的是XMLUtils类,而不是文档中声明的XMLStreamReader类。

流程如下:有一个文件连接器,它将有效负载传递给自定义转换器,转换器将数据传递给spring bean,后者将进行基于事件的处理。

在spring bean中。在运行时,spring bean获取XMLUtils类,而不是XMLStreamReader类。

Mule - Config:

代码语言:javascript
复制
<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:

代码语言:javascript
复制
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);**

任何帮助都将不胜感激

EN

回答 1

Stack Overflow用户

发布于 2015-11-14 23:25:00

我已经验证过了,你是对的,在代码中假设返回的类应该是一个实现XMLStreamReaderDelegateXMLStreamReader类,但返回的类是XMLUtils的一个匿名内部类,在运行时不能强制转换为任何类似流的类。这似乎是一个缺陷。

如果你真的需要控制xml流,你可以使用一个自定义的java组件:

代码语言:javascript
复制
 <component class="com.foo.CustomJavaComponent" doc:name="Java"/>

代码语言:javascript
复制
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";
    }
} 

然后让输入流做任何你想做的事情。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33657466

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档