Re: accessing JAXB generated properties of a bean (accessing static inner class)

"Walker, Robert" <[email protected]>
Newsgroups gmane.comp.web.freemarker.user
Message-ID <[email protected]>
I want to generate a xml file that can be opened by excel, and that format is pretty
Well known so I can use xslt to output the correct spreadsheetML markup, if I can get
Freemarker to read my java beans



From: Angelo zerr [mailto:[email protected]]
Sent: Friday, March 30, 2012 8:15 AM
To: Daniel Dekany; FreeMarker-user
Subject: Re: [FreeMarker-user] accessing JAXB generated properties of a bean (accessing static inner class)

Hi Robert,

" wanted to use it to generate spreadsheetML(xml that  Excel will open as if it were a xlsx file)"

It seems that you wish do the same thing than our XDocReport<http://code.google.com/p/xdocreport/> project.
Today we have implemented well docx+odt (and a few pptx).
We could start to implement xlsx if you wish and work together?

Jus a question : you wish generate a xlsx from scratch or design your xlsx with MS Excel and set Freemarker directive (it's the goal of XDocReport).

Regards Angelo
Le 30 mars 2012 13:27, Daniel Dekany <[email protected]<mailto:[email protected]>> a écrit :
How the templates sees the objects depends on the ObjectWrapper. As I
see you are using the DefaultObjectWrapper, which means that when you
write someExp.bar 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
 Java

- 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
>
> OrganisationInfo.java
> =====================
> @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;
> .
> .
> }
> }
>
>
> Network.java
> ============
> @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
http://p.sf.net/sfu/sfd2d-msazure
_______________________________________________
FreeMarker-user mailing list
[email protected]<mailto:[email protected]>
https://lists.sourceforge.net/lists/listinfo/freemarker-user

------------------------------------------------------------------------------
This SF email is sponsosred by:
Try Windows Azure free for 90 days Click Here 
http://p.sf.net/sfu/sfd2d-msazure

_______________________________________________
FreeMarker-user mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/freemarker-user
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.