使用 wso2 进行 XML 到 XML 的转换 [英] XML to XML transformation with wso2

查看:15
本文介绍了使用 wso2 进行 XML 到 XML 的转换的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在使用 wso2 esb 4.8.1.我正在尝试在 smooks 调解器的帮助下进行 xml 到 xml 的转换,但是当来自 wso2 的应用程序部署控制台的 try it 命中请求时,我得到以下异常,

I am using wso2 esb 4.8.1. I am trying to do xml to xml transformation with the help of smooks mediator but I am getting following exception when is hit request from the try it from application deployment console of wso2,

[2014-11-07 09:39:20,401] ERROR - SmooksMediator Failed to filter source.
org.milyn.SmooksException: Failed to filter source.
    at org.milyn.delivery.sax.SmooksSAXFilter.doFilter(SmooksSAXFilter.java:86)
    at org.milyn.delivery.sax.SmooksSAXFilter.doFilter(SmooksSAXFilter.java:61)
    at org.milyn.Smooks._filter(Smooks.java:516)
    at org.milyn.Smooks.filterSource(Smooks.java:475)
    at org.wso2.carbon.mediator.transform.SmooksMediator.mediate(SmooksMediator.java:123)
    at org.apache.synapse.mediators.AbstractListMediator.mediate(AbstractListMediator.java:77)
    at org.apache.synapse.mediators.AbstractListMediator.mediate(AbstractListMediator.java:47)
    at org.apache.synapse.mediators.base.SequenceMediator.mediate(SequenceMediator.java:131)
    at org.apache.synapse.core.axis2.ProxyServiceMessageReceiver.receive(ProxyServiceMessageReceiver.java:166)
    at org.apache.axis2.engine.AxisEngine.receive(AxisEngine.java:180)
    at org.apache.synapse.transport.passthru.ServerWorker.processEntityEnclosingRequest(ServerWorker.java:411)
    at org.apache.synapse.transport.passthru.ServerWorker.run(ServerWorker.java:183)
    at org.apache.axis2.transport.base.threads.NativeWorkerPool$1.run(NativeWorkerPool.java:172)
    at 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:724)
Caused by: org.xml.sax.SAXParseException; lineNumber: 1; columnNumber: 1; Premature end of file.
    at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.parse(AbstractSAXParser.java:1236)
    at org.milyn.delivery.sax.SAXParser.parse(SAXParser.java:70)
    at org.milyn.delivery.sax.SmooksSAXFilter.doFilter(SmooksSAXFilter.java:75)
    ... 15 more
[2014-11-07 09:39:20,417] ERROR - NativeWorkerPool Uncaught exception
org.wso2.carbon.mediator.service.MediatorException: Failed to filter source. Caused by Failed to filter source.
    at org.wso2.carbon.mediator.transform.SmooksMediator.handleException(SmooksMediator.java:242)
    at org.wso2.carbon.mediator.transform.SmooksMediator.mediate(SmooksMediator.java:137)
    at org.apache.synapse.mediators.AbstractListMediator.mediate(AbstractListMediator.java:77)
    at org.apache.synapse.mediators.AbstractListMediator.mediate(AbstractListMediator.java:47)
    at org.apache.synapse.mediators.base.SequenceMediator.mediate(SequenceMediator.java:131)
    at org.apache.synapse.core.axis2.ProxyServiceMessageReceiver.receive(ProxyServiceMessageReceiver.java:166)
    at org.apache.axis2.engine.AxisEngine.receive(AxisEngine.java:180)
    at org.apache.synapse.transport.passthru.ServerWorker.processEntityEnclosingRequest(ServerWorker.java:411)
    at org.apache.synapse.transport.passthru.ServerWorker.run(ServerWorker.java:183)
    at org.apache.axis2.transport.base.threads.NativeWorkerPool$1.run(NativeWorkerPool.java:172)
    at 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:724)

seqence xml如下,

seqence xml is as below,

<?xml version="1.0" encoding="UTF-8"?>
<proxy xmlns="http://ws.apache.org/ns/synapse" name="smooksTransService" transports="http https" startOnLoad="true" trace="disable">
    <target>
        <inSequence>
            <log level="full" separator=","/>
            <smooks config-key="gov:/_system/config/transforms/smooksconfig.xml">
                <input type="text"/>
                <output type="xml"/>
            </smooks>
            <log level="full" separator=","/>
            <drop/>
        </inSequence>
        <outSequence/>
        <faultSequence/>
    </target>
</proxy>

下面是smooks的配置文件,

Below is smooks configuration file,

<?xml version="1.0" encoding="UTF-8"?><smooks-resource-list xmlns="http://www.milyn.org/xsd/smooks-1.1.xsd" xmlns:ftl="http://www.milyn.org/xsd/smooks/freemarker-1.1.xsd">
  <params>
    <param name="stream.filter.type">SAX</param>
    <param name="inputType">input.xml</param>
    <param name="default.serialization.on">true</param>
    <param name="input.xml" type="input.type.actived">File:/C:Shaileshxmlsmodel-input.xml</param>
  </params>
  <ftl:freemarker applyOnElement="#document">
    <ftl:template><![CDATA[<?xml version="1.0" encoding="UTF-8"?>
<h:salesorder xmlns:h="http://www.w3.org/TR/html4/">
    <h:details>
        <h:orderid>${.vars["order"]["@id"]}</h:orderid>        
        <h:customer>
            <h:id>${.vars["order"]["header/customer/@number"]}</h:id>            
            <h:name>${.vars["order"]["header/customer"]}</h:name>            
        </h:customer>        
    </h:details>    
    <#list .vars["order"]["order-items"] as order_items>
    <h:itemList>
        <#list .vars["order_items"]["order-item"] as order_item>
        <h:item>
            <h:id>${.vars["order_item"]["@id"]}</h:id>            
            <h:productId>${.vars["order_item"]["product"]}</h:productId>            
            <h:quantity>${.vars["order_item"]["quantity"]}</h:quantity>            
            <h:price>${.vars["order_item"]["price"]}</h:price>            
        </h:item>
        </#list>        
    </h:itemList>
    </#list>    
</h:salesorder>]]></ftl:template>
    <param name="modelSrc">File:/C:Shaileshxmlsmodel-output.xml</param>
    <param name="modelSrcType">XML</param>
    <param name="mess![enter image description here][2]ageType">XML</param>
    <param name="templateDataProvider">input</param>
  </ftl:freemarker>
  <resource-config selector="#document">
    <resource>org.milyn.delivery.DomModelCreator</resource>
  </resource-config>
</smooks-resource-list>

我的代理服务请求如附图所示.

My request for proxy service is as shown in attached image.

推荐答案

我没有仔细阅读您的示例,但似乎错误是 Smooks Mediator 找不到注册表资源.

I didn't go through your example thoroughly, but it seems the error is that the Smooks Mediator cannot find the registry resource.

您指定 smooks config-key 属性时似乎存在问题.当您使用注册表时,您需要知道有不同的注册表空间.

Looks like there is an issue when you specify the smooks config-key attribute. When you are working with the registry, you need to know that there are different registry spaces.

如果您通过gov:"引用资源,该资源将位于/_system/governance"中.您需要使用conf:"来引用/_system/config"中的资源.

If you refer a resource via "gov:", the resource will be in "/_system/governance". You need to use "conf:" to refer a resource in "/_system/config".

例如:如果您在/_system/config/transforms/smooksconfig.xml"中有资源,则需要如下引用:

For eg: If you have a resource in "/_system/config/transforms/smooksconfig.xml", you need to refer it as follows:

"conf:transforms/smooksconfig.xml"

"conf:transforms/smooksconfig.xml"

相关问题:如何在 WSO2 ESB 中访问注册表

我希望这会有所帮助.

这篇关于使用 wso2 进行 XML 到 XML 的转换的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆