I just did this the other day for both XML and JSON.  

For XML I did:

    public static TransactionRequest deserialize(String xmlFile) {
        try {
            XmlMapper mapper = new XmlMapper();
            InputStream stream = new FileInputStream(xmlFile);
            return mapper.readValue(stream, TransactionRequest.class);
        } catch (Exception ex) {
            ex.printStackTrace();
        }
        return null;
    }
    public static TransactionRequest deserialize(String xmlFile) {
        try {
            XmlMapper mapper = new XmlMapper();
            InputStream stream = new FileInputStream(xmlFile);
            return mapper.readValue(stream, TransactionRequest.class);
        } catch (Exception ex) {
            ex.printStackTrace();
        }
        return null;
    }

Where needed I used things like:

    @JacksonXmlProperty(localName = "return")
    private PostSale creditCardReturn;

and 

    @JacksonXmlProperty(isAttribute = true)

For JSON I did

    public static JSONRequest deserialize(String json)
    {
        try
        {
            ObjectMapper mapper = new ObjectMapper();
            return mapper.readValue(json, JSONRequest.class);
        }
        catch (Exception ex)
        {
            ex.printStackTrace();
        }
        return null;
    }

and

    public String serialize()
    {
        try
        {
            final ObjectMapper mapper = new ObjectMapper();
            return mapper.writeValueAsString(this);
        }
        catch (Exception ex)
        {
            ex.printStackTrace();
        }
        return null;
    }

HTH,

Ralph


On Apr 1, 2014, at 1:05 PM, Gary Gregory <[email protected]> wrote:

> Well... so much for Jackson making my life easy. Jackson says it "supports" 
> JAXB annotations but that must be only for the simplest cases. Jackson does 
> not work with the JAXB annotations I used on Log4jLogEvents. This suppose 
> this is not surprising. Back to the drawing board...
> 
> Gary
> 
> 
> On Tue, Apr 1, 2014 at 12:05 PM, Gary Gregory <[email protected]> wrote:
> All good ideas, thank you. The JSON API I know best is GSON, which let's you 
> listen to objects opening and closing. Maybe Jackson has something like 
> that... I'll have to dig in.
> 
> Gary
> 
> 
> On Tue, Apr 1, 2014 at 11:14 AM, Ralph Goers <[email protected]> 
> wrote:
> So you are hacking the stream before passing it to the unmarshalling 
> framework?  Then you will have to keep track of the ‘{‘ and ‘}’ characters 
> yourself, either with the stack Matt suggests or as a counter.
> 
> Ralph
> 
> On Apr 1, 2014, at 8:07 AM, Matt Sicker <[email protected]> wrote:
> 
>> Keep a stack of {'s and pop them when you get a }. Like a deterministic 
>> pushdown automaton.
>> 
>> 
>> On 1 April 2014 07:45, Gary Gregory <[email protected]> wrote:
>> I have a local patch for LOG4J2-583 to have the Log4j TCP and UDP socket 
>> servers unmarhsal XML log events.
>> 
>> This is "easy" for XML because when you have a stream of bytes and you know 
>> its encoding, you can look for the end of an event by looking for its 
>> closing tag: </Event>. Right now, my XML processing code, looks for the end 
>> tag and feeds JAXB a substring from the buffer. Easy. Done.
>> 
>> Not so much with JSON. You cannot use the same hack, there is no end tag. 
>> All you have is an "end of object" closing bracket "}" which looks the same 
>> as the closing marker for all other objects.
>> 
>> So it looks like I would need to hook in a little deeper into a JSON 
>> unmarshalling framework to extract each JSON log events as I see them.
>> 
>> Any thoughts here?
>> 
>> Gary
>> 
>> -- 
>> E-Mail: [email protected] | [email protected] 
>> Java Persistence with Hibernate, Second Edition
>> JUnit in Action, Second Edition
>> Spring Batch in Action
>> Blog: http://garygregory.wordpress.com 
>> Home: http://garygregory.com/
>> Tweet! http://twitter.com/GaryGregory
>> 
>> 
>> 
>> -- 
>> Matt Sicker <[email protected]>
> 
> 
> 
> 
> -- 
> E-Mail: [email protected] | [email protected] 
> Java Persistence with Hibernate, Second Edition
> JUnit in Action, Second Edition
> Spring Batch in Action
> Blog: http://garygregory.wordpress.com 
> Home: http://garygregory.com/
> Tweet! http://twitter.com/GaryGregory
> 
> 
> 
> -- 
> E-Mail: [email protected] | [email protected] 
> Java Persistence with Hibernate, Second Edition
> JUnit in Action, Second Edition
> Spring Batch in Action
> Blog: http://garygregory.wordpress.com 
> Home: http://garygregory.com/
> Tweet! http://twitter.com/GaryGregory

Reply via email to