1 Reply Latest reply on Jul 4, 2011 10:06 AM by mlog

    Java-to-xml transformation

    mlog Newbie


      I am trying to transform a java class to an xml document with Smooks and Freemarker template. I looked for any example, and found only one about java-to-xml default transformation and a lot about xml-to-anything with templating. But no one java-to-xml with templating. Then I played with example of default transformation and found out that I have to use fully qualified name of my class as Smooks resource selector and element name. Is it wrong? But now, I couldn’t use it in Freemarker template because the dots have another meaning inside “${}” construction.

      So the question is – how to use java-to-xml Smooks transformation with Freemarker template?


      This is my smooks-config.xml file. It works with static template (without “${}”). It is not useful, though.


            <param name="stream.filter.type">SAX</param>
            <param name="default.serialization.on">false</param>
         <resource-config selector="fully.qulified.object.name">
         <ftl:freemarker applyOnElement="fully.qulified.object.name">
            <ftl:template><!--<object field=”${name.field}”/>--></ftl:template>


      Thanks in advance.

        • 1. Re: Java-to-xml transformation
          mlog Newbie

          I’m afraid that I didn’t clearly explain my problem. Ok then, I’ll try again.

          I have an action that produces a domain specific java class. I need to transform it to an xml document. I am trying to do that with Smooks. My class looks like this:


          package my.namespace.domain;
          class className {
                private String field;
                private anotherClassName innerClass;


          The default Smooks transformation (just like java-to-xml Smooks’ example) produces this result:


                <field>field value</field>
                      <!-- inner class fields -->


          So the name of the root element is fully qualified java class name. Now, I can use Freemarker templates like ${innerClass.field} but cannot like ${my.namespace.domain.className.field}. That is I cannot use direct descendants of the root element in my template.

          Yes, I could wrap my class to another one (and I did for a while) but it isn’t the right way, is it?