Java objects to plist serializer
Java CSS
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Failed to load latest commit information.
etc/site
src
.gitignore
LICENSE.txt
README.md
pom.xml

README.md

Java Objects to Property List Serializer

Build Status

java-plist-serializer is a Java library that can be used to convert Java Objects into their Property List representation.

Usage is very simple:

Comment comment = new Comment("maciej walkowiak", "hello plist");
PlistSerializer serializer = new PlistSerializerImpl();

String xml = serializer.serialize(comment); // creates xml just for serialized object
String validXml = serializer.toXML(comment); // creates valid xml with header, dtd include

Supported data types

Out of the box serializer supports fields with types:

  • Boolean, Short, Integer, Long, Float, Double and their primitive equivalents
  • String
  • java.util.Date
  • java.util.Collection
  • java.util.Map

When object passed to serialization is not of one fields included in that list - serializer iterates through its fields using reflection, serializes each field and wraps result into .

Adding custom serializer

If there is a need to add serializer for another data type it can be done by implementing pl.maciejwalkowiak.plist.handler.Handler interface and then added to PlistSerializer by calling pl.maciejwalkowiak.plist.PlistSerializerImpl#setAdditionalHandlers.

An example how to implement and add custom data type serializer can be found in test method: PlistSerializerImplTest#testAdditionalHandler

Customization

There are few ways to customize XML output:

  • object fields can be ignored by annotating them with @PlistIgnore
  • object field by default is serialized to with field's name content. To provide custom key name use @PlistAlias annotation
  • you can choose or define your own key naming strategy. Currently keys can be created with exactly the same name as field by using DefaultNamingStrategy or fields can be changed to uppercase using UppercaseNamingStrategy. You can implement your own naming policy by implementing pl.maciejwalkowiak.plist.NamingStrategy and registering it by PlistSerializerImpl constructor argument

Example

We have classes:

public class Post {
    private String title;
    private Integer views = 0;
    private List<Comment> comments = new ArrayList<Comment>();
    private Author author;

    public Post(Author author, String title, Integer views) {
        this.title = title;
        this.views = views;
        this.author = author;
    }
}

public class Comment {
    private String content;
    private String author;

    public Comment(String author, String content) {
        this.content = content;
        this.author = author;
    }
}

public class Author {
    private String name;
}

And execute code:

Post post = new Post(new Author("jason bourne"), "java-plist-serializer introduction", 9);
post.addComment(new Comment("maciejwalkowiak", "first comment"));
post.addComment(new Comment("john doe", "second comment"));

String xml = plistSerializer.toXmlPlist(post);

xml will contain unformatted version of:

<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
    <dict>
        <key>author</key>
        <dict>
            <key>name</key>
            <string>jason bourne</string>
        </dict>
        <key>comments</key>
        <array>
            <dict>
                <key>author</key>
                <string>maciejwalkowiak</string>
                <key>content</key>
                <string>first comment</string>
            </dict>
            <dict>
                <key>author</key>
                <string>john doe</string>
                <key>content</key>
                <string>second comment</string>
            </dict>
        </array>
        <key>title</key>
        <string>java-plist-serializer introduction</string>
        <key>views</key>
        <integer>9</integer>
    </dict>
</plist>

Spring Integration

It is possible to use PlistSerializer together with Spring MVC. To return property lists in a response of calling some Spring Controller you can use pl.maciejwalkowiak.plist.spring.PlistView.

There are several ways to configure Spring MVC. The easiest to understand example of usage of PlistView:

@Controller
public class BlogController {
    @RequestMapping(value = "/loadBlogPost", method = RequestMethod.GET)
    public ModelAndView loadBlogPost() {
        Post post = new Post(new Author("jason bourne"), "java-plist-serializer introduction", 9);
        post.addComment(new Comment("maciejwalkowiak", "first comment"));
        post.addComment(new Comment("john doe", "second comment"));

        ModelMap model = new ModelMap();
        model.addAttribute("RESULT", notification);

        return new ModelAndView(new PlistView(), model);
    }
}

Installation

Current stable version is 1.0.1. Its not uploaded to any public Maven repository. In order to use it please download source code and run mvn install.

Known issues

If you have cycle dependency in serialized object tree you will get StackOverFlowError unless you ignore reference by annotating with @PlistIgnore

Bitdeli Badge