0

I'm trying to transform message in Message Queue by using Smooks mediator. And I followed through this tutorial : http://wso2.com/library/tutorials/2011/06/perform-data-mapping-smooks-editor-wso2-carbon-studio/ But I got an error like this:

    [2015-07-01 06:09:23,986] ERROR - SmooksMediator Failed to filter source.
org.milyn.SmooksException: Failed to filter source.
        at org.milyn.delivery.sax.SmooksSAXFilter.doFilter(SmooksSAXFilter.java:97)
        at org.milyn.delivery.sax.SmooksSAXFilter.doFilter(SmooksSAXFilter.java:64)
        at org.milyn.Smooks._filter(Smooks.java:526)
        at org.milyn.Smooks.filterSource(Smooks.java:482)
        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$Worker.runTask(ThreadPoolExecutor.java:886)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
        at java.lang.Thread.run(Thread.java:662) Caused by: java.lang.IllegalArgumentException: prefix cannot be "null" when creating a QName
        at javax.xml.namespace.QName.<init>(QName.java:253)
        at com.sun.xml.internal.stream.events.XMLEventAllocatorImpl.getQName(XMLEventAllocatorImpl.java:256)
        at com.sun.xml.internal.stream.events.XMLEventAllocatorImpl.getXMLEvent(XMLEventAllocatorImpl.java:78)
        at com.sun.xml.internal.stream.events.XMLEventAllocatorImpl.allocate(XMLEventAllocatorImpl.java:55)
        at com.sun.xml.internal.stream.XMLEventReaderImpl.nextEvent(XMLEventReaderImpl.java:86)
        at com.sun.xml.internal.stream.XMLEventReaderImpl.next(XMLEventReaderImpl.java:250)
        at org.wso2.carbon.mediator.transform.stream.IOElementPipe.populateEvents(IOElementPipe.java:90)
        at org.wso2.carbon.mediator.transform.stream.IOElementPipe.getData(IOElementPipe.java:68)
        at org.wso2.carbon.mediator.transform.stream.ElementInputStream.read(ElementInputStream.java:61)
        at sun.nio.cs.StreamDecoder.readBytes(StreamDecoder.java:264)
        at sun.nio.cs.StreamDecoder.implRead(StreamDecoder.java:306)
        at sun.nio.cs.StreamDecoder.read(StreamDecoder.java:158)
        at java.io.InputStreamReader.read(InputStreamReader.java:167)
        at org.apache.xerces.impl.XMLEntityScanner.load(Unknown Source)
        at org.apache.xerces.impl.XMLEntityScanner.skipString(Unknown Source)
        at org.apache.xerces.impl.XMLVersionDetector.determineDocVersion(Unknown Source)
        at org.apache.xerces.parsers.XML11Configuration.parse(Unknown Source)
        at org.apache.xerces.parsers.XML11Configuration.parse(Unknown Source)
        at org.apache.xerces.parsers.XMLParser.parse(Unknown Source)
        at org.apache.xerces.parsers.AbstractSAXParser.parse(Unknown Source)
        at org.milyn.delivery.sax.SAXParser.parse(SAXParser.java:76)
        at org.milyn.delivery.sax.SmooksSAXFilter.doFilter(SmooksSAXFilter.java:86)
        ... 15 more
[2015-07-01 06:09:23,986] ERROR - NativeWorkerPool Uncaught exceptionorg.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$Worker.runTask(ThreadPoolExecutor.java:886)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
        at java.lang.Thread.run(Thread.java:662)

My inSequence has been defined as below:

<inSequence>
         <log level="custom" separator=" == ">
            <property name="StartingLogging" value="------ STARTING PS ------"/>
         </log>
         <property name="message" expression="/" scope="default" type="STRING"/>
         <log level="custom">
            <property name="Message" expression="$ctx:message"/>
         </log>
         <payloadFactory media-type="xml">
            <format>
               <GeoRequest xmlns="">
                  <lat>$1</lat>
                  <long>$2</long>
               </GeoRequest>
            </format>
            <args>
               <arg xmlns:p="http://www.example.org/NewWSDLFile/"
                    evaluator="xml"
                    expression="$body/p:GeoRequest/lat/text()"/>
               <arg xmlns:p="http://www.example.org/NewWSDLFile/"
                    evaluator="xml"
                    expression="$body/p:GeoRequest/long/text()"/>
            </args>
         </payloadFactory>
         <log level="full"/>
         <smooks config-key="conf:smooks/DemoRequestTransform.xml">
            <input type="xml"/>
            <output type="xml" expression="$body/GeoRequest" action="replace"/>
         </smooks>
         <log level="full" separator=" *** "/>
         <send>
            <endpoint key="DemoGeoService"/>
         </send>
      </inSequence>

This is my Smooks configuration:

<?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="input.xml" type="input.type.actived">file://E:\WSO2\workspace\DemoRegistryResources\RequestInputModel.xml</param>
  </params>
  <ftl:freemarker applyOnElement="#document">
    <ftl:template><![CDATA[<?xml version="1.0" encoding="UTF-8"?>
<geo:getZipCode xmlns:geo="http://geo.wso2">
    <geo:latitude>${.vars["Geolocation"]["lat"]}</geo:latitude>    
    <geo:longitude>${.vars["Geolocation"]["long"]}</geo:longitude>    
</geo:getZipCode>]]></ftl:template>
    <param name="modelSrc">file://E:\WSO2\workspace\DemoRegistryResources\RequetsOutputModel.xml</param>
    <param name="modelSrcType">XML</param>
    <param name="messageType">XML</param>
    <param name="templateDataProvider">input</param>
  </ftl:freemarker>
  <resource-config selector="#document">
    <resource>org.milyn.delivery.DomModelCreator</resource>
  </resource-config>
</smooks-resource-list>

Are there some problems with Smooks' configuration?

I'm confusing about the parameters in tag "param" of configuration file. Is it necessary to upload it to Registry or not?

Can u give me some advises to get over this problem or some ways to transform messages with Smooks for xml-to-xml-transformation?

Thanks,

Community
  • 1
  • 1
NesToDre
  • 28
  • 2
  • Could you confirm that the Smooks config is in the configuration space of the registry? – chamilad Jul 01 '15 at 15:50
  • yea, smooks's configuration file "DemoTransMessage.xml" has been uploaded to config registry of ESB. In details, the location is "/_system/config/smooks/DemoTransMessage.xml". But I configured it by using Smooks Configuration Tools provided by WSO2 Dev tool. Of course, I have used 2 file for making mapping between 2 xml forms. So is it necessary to upload 2 xml files too? As you can see on the Smooks Configuration file above, 2 xml files are stored at: "E:\WSO2\workspace\DemoRegistryResources" folder. And in this case, I want to transform message sent to Smooks Mediator in MQ. – NesToDre Jul 02 '15 at 02:35

0 Answers0