tag:blogger.com,1999:blog-37450934868552582762024-03-08T16:42:50.391-08:00Betwixt Multi Mapping ExampleRahimunisa Noordeenhttp://www.blogger.com/profile/08340670220289160712noreply@blogger.comBlogger1125tag:blogger.com,1999:blog-3745093486855258276.post-87660972443167761702009-02-06T13:19:00.001-08:002010-02-27T10:26:22.470-08:00Betwixt Multi Mapping Example<span style="font-size:85%;"><span style="font-family:arial;">Betwixt Multi Mapping Example<br />Betwixt is a dynamic, start-from-java XML-object binder. For those unfamiliar with these terms, this means that it maps XML <-> objects defining a binding from an existing group of java objects into xml (and back again) without the use of code generation.<br /><br />Below is a simple betwixt configuration file. The code sniplet is self descriptive, the code in myClass.java shows how a simple java object is converted in to xml document based on the specification provided in the configuration file.<br /></span><span style="font-family:arial;"><span style="font-weight: bold;"><br />Betwixt-config.xml</span><br /><pre><br /><span style="font-family:arial;"><?xml version="1.0"?></span><br /><span style="font-family:arial;"><betwixt-config></span><br /><br /><span style="font-family:arial;"> <class name="com.syn.soft.DescBean"></span><br /><span style="font-family:arial;"> <element name="addContent"></span><br /><span style="font-family:arial;"> <element name="author" property="author" /></span><br /><span style="font-family:arial;"> <element name="description" property="description"/></span><br /><span style="font-family:arial;"> <element name="title" property="title"/></span><br /><span style="font-family:arial;"> </element></span><br /><span style="font-family:arial;"><element name="Bean" property="summaryBean"/></span><br /><span style="font-family:arial;"> </class></span><br /><br /><span style="font-family:arial;"> <class name=" com.syn.soft.SummaryBean"></span><br /><span style="font-family:arial;"> <element name="media"></span><br /><span style="font-family:arial;"> <element name="summary" property="summary"/></span><br /><span style="font-family:arial;"> <element name="description" value="I am static breadcrumb"/> </span><br /><span style="font-family:arial;"></element></span><br /><span style="font-family:arial;"></class></span><br /><span style="font-family:arial;"></betwixt-config></span><br /></pre><br /><br /><span style="font-weight: bold;font-family:arial;" >Test code:</span><br /><span style="font-family:arial;">Public class <span style="font-weight: bold;">myClass </span>{</span><br /><span style="font-family:arial;">public... main(String[] arg) {<br /></span></span></span><span style="font-size:85%;"><span style="font-family:arial;"><span style="font-family:arial;"><span style="font-weight: bold;">myDescBean = new </span></span></span></span><span style="font-size:85%;"><span style="font-family:arial;"><span style="font-family:arial;"><span style="font-weight: bold;">DescBean();<br />myDescBean.setTitle("testing my title");<br />....<br />...<br /><br /></span></span></span></span><div style="text-align: left;"><span style="font-size:85%;"><span style="font-family:arial;"><span style="font-family:arial;"> XmlTransformer xmlTransformer = new XmlTransformer();</span></span></span><br /><span style="font-size:85%;"><span style="font-family:arial;"><span style="font-family:arial;"> String xml = xmlTransformer.transform(myDescBean);</span></span></span><br /><span style="font-size:85%;"><span style="font-family:arial;"><span style="font-family:arial;"> System.out.println(xml);</span></span></span><br /></div><span style="font-size:85%;"><span style="font-family:arial;"><span style="font-family:arial;">}</span><br /><span style="font-family:arial;">}</span><br /><br /><span style="font-weight: bold;font-family:arial;" >Bean Code:</span><br /><span style="font-family:arial;">Public class <span style="font-weight: bold;">SummaryBean </span>{</span><br /><span style="font-family:arial;"> Private String summary, description;</span><br /><span style="font-family:arial;"> // create all setter & getters..</span><br /><span style="font-family:arial;">}</span><br /><br /><span style="font-family:arial;">Public class <span style="font-weight: bold;">DescBean </span>{</span><br /><span style="font-family:arial;"> Private String author, description, title;</span><br /><span style="font-family:arial;"> // create all setter & getters..</span><br /><span style="font-family:arial;">}</span><br /><br /><span style="font-weight: bold;font-family:arial;" >Transformation Code</span><br /><br /><span style="font-weight: bold; font-style: italic;font-family:arial;" >XmlTransformer.java</span><br /><br /><span style="font-family:arial;">public class <span style="font-weight: bold;">XmlTransformer </span>{</span><br /><span style="font-family:arial;"> public static final String betwixtMappingFileName = "betwixt-config.xml"; </span><br /><br /><span style="font-family:arial;"> public String transform(Object bean)throws Exception{</span><br /><span style="font-family:arial;"> XMLSingleMappingFileIntrospector xmlIntrospector = new XMLSingleMappingFileIntrospector();</span><br /><span style="font-family:arial;"> xmlIntrospector.setMappingFile(betwixtMappingFileName); </span><br /><span style="font-family:arial;"> StringWriter stringWriter = new StringWriter();</span><br /><span style="font-family:arial;"> BeanWriter beanWriter = BeanWriterFactory.getBeanWriter(stringWriter,xmlIntrospector);</span><br /><span style="font-family:arial;"> beanWriter.writeXmlDeclaration(BeanWriterFactory.XML_DECLARATION);</span><br /><span style="font-family:arial;"> beanWriter.write(bean);</span><br /><span style="font-family:arial;"> String transformationResult = stringWriter.toString();</span><br /><span style="font-family:arial;"> return transformationResult; </span><br /><span style="font-family:arial;"> }</span><br /><span style="font-family:arial;">}</span><br /><br /><span style="font-weight: bold; font-style: italic;font-family:arial;" >BeanWriterFactory.java</span><br /><span style="font-family:arial;">public class BeanWriterFactory {</span><br /><span style="font-family:arial;"> public static final String XML_DECLARATION = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>";</span><br /><br /><span style="font-family:arial;"> public static BeanWriter getBeanWriter(Writer writer, XMLIntrospector introSpector) {</span><br /><span style="font-family:arial;"> BeanWriter beanWriter = new BeanWriter(writer);</span><br /><span style="font-family:arial;"> if(introSpector != null) {</span><br /><span style="font-family:arial;"> beanWriter.setXMLIntrospector(introSpector);</span><br /><span style="font-family:arial;"> }</span><br /><span style="font-family:arial;"> beanWriter.getXMLIntrospector().getConfiguration().setAttributesForPrimitives(false);</span><br /><span style="font-family:arial;"> beanWriter.setMixedContentEncodingStrategy(new WWEMixedContentEncodingStrategy());</span><br /><span style="font-family:arial;"> BindingConfiguration bindingConfiguration = new BindingConfiguration();</span><br /><span style="font-family:arial;"> bindingConfiguration.setMapIDs(false);</span><br /><span style="font-family:arial;"> beanWriter.setBindingConfiguration(bindingConfiguration);</span><br /><span style="font-family:arial;"> beanWriter.enablePrettyPrint();</span><br /><span style="font-family:arial;"> beanWriter.getXMLIntrospector().getConfiguration().setWrapCollectionsInElement(false);</span><br /><span style="font-family:arial;"> beanWriter.getXMLIntrospector().getConfiguration().setElementNameMapper(</span><br /><span style="font-family:arial;"> new DecapitalizeNameMapper());</span><br /><span style="font-family:arial;"> return beanWriter;</span><br /><span style="font-family:arial;"> }</span><br /><br /><span style="font-family:arial;"> public static BeanWriter getBeanWriter(Writer writer) {</span><br /><span style="font-family:arial;"> return getBeanWriter(writer, null);</span><br /><span style="font-family:arial;"> }</span><br /><br /><span style="font-family:arial;">}<br /><br /><span style="font-weight: bold;">References</span><br /><a href="http://commons.apache.org/betwixt/guide/tutorial.html">http://commons.apache.org/betwixt/guide/tutorial.html</a><br /><a href="http://commons.apache.org/betwixt/index.html">http://commons.apache.org/betwixt/index.html</a><br /><br /><br /></span><br /></span></span>Rahimunisa Noordeenhttp://www.blogger.com/profile/08340670220289160712noreply@blogger.com0