-->

XML to XML transformation with wso2

2019-03-01 09:51发布

问题:

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 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>

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:\Shailesh\xmls\model-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:\Shailesh\xmls\model-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.

回答1:

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

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.

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".

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

"conf:transforms/smooksconfig.xml"

Related question: Howto access registry in WSO2 ESB

I hope this helps.