Showing posts with label xstream. Show all posts
Showing posts with label xstream. Show all posts

Friday, March 8, 2013

Convert java attributes to start with upperCase when being written to xml file using XStream

    if (xstream == null) {
                xstream = new XStream(){
                  
                    @Override
                    protected MapperWrapper wrapMapper(MapperWrapper next) {
                            return new UpperCaseMapper(next);
                    }
                };
            }
           
    private static class UpperCaseMapper extends MapperWrapper {
        public UpperCaseMapper(Mapper wrapped) {
                super(wrapped);
        }

        @Override
        public String serializedMember(Class type, String memberName) {
            String camelCase = memberName.substring(0, 1).toUpperCase() + memberName.substring(1);
            return super.serializedMember(type, camelCase);
        }
       
        @Override
        public String realMember(Class type, String serialized) {
                String camelCase = serialized.substring(0, 1).toLowerCase()
                                + serialized.substring(1);
                return super.realMember(type, camelCase);
        }
    }

Saturday, January 12, 2013

Using XStream to set xmlns attribute (xml namespace)

Thoughtworks xstream does not have an API to add xmlns attribute to xml root element. There is a work around to do the same using their useAttributeFor() API. Its a bit of hack but serves the purpose.

java pojo
public class TestXmlns {
    private String name;
    private String address;
    private String xmlns;
   
    ...get/set for above attributes.
   
}

create an instance of xstream and add below configuration
xstream.useAttributeFor(TestXmlns.class, "xmlns");

Example:
TestXmlns x1 = new TestXmlns();
x1.setName("abc");
x1.setAddress("zyx");
z1.setXmlns("http://com.company.mytest");

XStream xstream = new XStream();
xstream.useAttributeFor(TestXmlns.class, "xmlns");

String xmlString = xstream.toXML(x1);

output
<TestXmlns xmlns="http://com.company.mytest">
    <name>abc</name>
    <address>xyz</address>
</TestXmlns>