Actually, that brought up an idea I just had. Since the XML parsing log4j's
config does isn't strict about whether you use an attribute or nested
element (which sounds like it meshes nicely with JSON), maybe the parsing
can be unified somewhat? I know I made some progress at de-duplicating code
in the three FooConfiguration classes, and there's already the Node/etc.
abstraction for the parsed tree.


On 1 April 2014 15:57, 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<http://www.manning.com/bauer3/>
>>>>> JUnit in Action, Second Edition <http://www.manning.com/tahchiev/>
>>>>> Spring Batch in Action <http://www.manning.com/templier/>
>>>>> 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<http://www.manning.com/bauer3/>
>>> JUnit in Action, Second Edition <http://www.manning.com/tahchiev/>
>>> Spring Batch in Action <http://www.manning.com/templier/>
>>> 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<http://www.manning.com/bauer3/>
>> JUnit in Action, Second Edition <http://www.manning.com/tahchiev/>
>> Spring Batch in Action <http://www.manning.com/templier/>
>> Blog: http://garygregory.wordpress.com
>> Home: http://garygregory.com/
>> Tweet! http://twitter.com/GaryGregory
>>
>>
>>
>>
>>
>
>
> --
> Matt Sicker <[email protected]>
>



-- 
Matt Sicker <[email protected]>

Reply via email to