Java Mailing List Archive

Home » FreeMarker-user »

Re: [FreeMarker-user] accessing JAXB generated properties of a
 bean  (accessing static inner class)

Walker, Robert


Author LoginPost Reply

Thanks Daniel


> you thing your code should work?


Yes, I thought it should work, but I am new to this so I was getting hung up on syntax


You set me on the right path though, I wasn't exactly at my list yet when I tried to use indexing [0]


I should have used





> Why is it relevant that the classes are generated with JAXB?


JAXB generates a lot of static inner classes and I thought that was tripping me up,

(As opposed to conventional non-inner classes, and not static either)


I really wish there was a freemarker book, this templating is really powerful

And I’d love to learn more about it









-----Original Message-----
From: Daniel Dekany []
Sent: Friday, March 30, 2012 7:28 AM
To: Walker, Robert
Cc: ''
Subject: Re: [FreeMarker-user] accessing JAXB generated properties of a bean (accessing static inner class)


How the templates sees the objects depends on the ObjectWrapper. As I

see you are using the DefaultObjectWrapper, which means that when you

write in a template, that it does one of these:


- someExp is instanceof Map, in which case it calls someExp.get("bar")

  in Java


- someExp is instanceof org.w3c.dom.Node, in which case it calls

  something like someExp.getElementsByTagNameNS(defaultNS, "bar") in



- Some other cases exist that are not relevant for you...


- Otherwise it calls someExp.getBar() in Java (or whatever the

  BeanInfo sais the reader method is)


and if you have someExp[numericalIndex] then it will try to do

someExp.get(numericalIndex), the List method. (Unless it's also a

Map... I can't remember which one had priority in that case.)


So keeping these in mind, you thing your code should work? I don't

know... I don't see much from the source code excerpts given. Like how

a NetworkList ended up being a scalar (i.e., a string), I don't know.


Why is it relevant that the classes are generated with JAXB? I mean,

it should be clear that to use the XML-wrapper, the objects had to

implement org.w3c.dom.Node.



Best regards,

Daniel Dekany



Friday, March 30, 2012, 5:55:30 AM, Walker, Robert wrote:


> Hi all, I was turned onto freemarker today and really impressed

> with it, and wanted to use it to generate spreadsheetML

> (xml that  Excel will open as if it were a xlsx file)

> I am having problems accessing properties buried a few layers deep.

> Basically, I have a   OrganisationInfo class which contains an

> OrganisationInfo. NetworkList object,

> And that networkList property contains a List of Network objects, from which I need to get

> property values.

> I am wondering if JAXB has generated something freemarker can’t be used to access in it’s template.

> I want to try something like

> cfg.setObjectWrapper(  new DefaultObjectWrapper() );

> SimpleHash root = new SimpleHash();

> // expose JAXB generated java object

> root.put("organisationInfo", organisationInfo);

> then my template has accessing syntax like

> <h1> ${organisationInfo.networkList[0].tadigCode} </h1>

> Is this possible with freemarker? Is there an example of this anywhere?

> I get various errors Expected hash. organisationInfo.networkList[0]

> evaluated instead to freemarker.template.SimpleScalar.

> Thanks all

> I have JAXB generated classes like this


> =====================

> @XmlRootElement(name = "OrganisationInfo")

> public class OrganisationInfo

> {   

> @XmlElement(name = "NetworkList", required = true)

> protected OrganisationInfo.NetworkList networkList;

> .

> .

> .

> @XmlAccessorType(XmlAccessType.FIELD)

> @XmlType(name = "", propOrder = {"network"})

> public static class NetworkList

> {

>               @XmlElement(name = "Network", required = true)

>         protected List<Network> network;

> .

> .

> }

> }


> ============

> @XmlRootElement(name = "Network")

> public class Network

> {

>     @XmlElement(name = "TADIGCode", required = true)

>     protected String tadigCode;

>       .

>       .

> }




This SF email is sponsosred by:

Try Windows Azure free for 90 days Click Here


FreeMarker-user mailing list

This SF email is sponsosred by:
Try Windows Azure free for 90 days Click Here
FreeMarker-user mailing list
©2008 - Jax Systems, LLC, U.S.A.