I have both examples there.

Ralph

On Apr 1, 2014, at 1:57 PM, Matt Sicker <[email protected]> wrote:

> Is that for the XML or JSON mapping?
> 
> 
> On 1 April 2014 15:55, Ralph Goers <[email protected]> wrote:
> Also, with Jackson you only have to annotate things where the normal mapping 
> doesn’t do what you want. For example, by default everything will be an 
> element. You need to annotate it if you want it to be an attribute.
> 
> 
> On Apr 1, 2014, at 1:52 PM, Ralph Goers <[email protected]> wrote:
> 
>> Oops - For XML the serialization is
>> 
>>     public void serialize(OutputStream stream) {
>>         try {
>>             final XmlMapper mapper = new XmlMapper();
>>             mapper.writeValue(stream, this);
>>         } catch (Exception ex) {
>>             ex.printStackTrace();
>>         }
>>     }
>> 
>> 
>> On Apr 1, 2014, at 1:49 PM, Ralph Goers <[email protected]> wrote:
>> 
>>> 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
>>> 
>> 
> 
> 
> 
> 
> -- 
> Matt Sicker <[email protected]>

Reply via email to