]> git.argeo.org Git - gpl/argeo-slc.git/blob - runtime/org.argeo.slc.server/src/main/java/org/argeo/slc/web/mvc/XsltMarshallerViewResolver.java
Read the message body using the same method as ActiveMQ web
[gpl/argeo-slc.git] / runtime / org.argeo.slc.server / src / main / java / org / argeo / slc / web / mvc / XsltMarshallerViewResolver.java
1 package org.argeo.slc.web.mvc;
2
3 import java.io.IOException;
4 import java.util.Map;
5 import java.util.TreeMap;
6
7 import javax.xml.transform.Source;
8 import javax.xml.transform.TransformerException;
9 import javax.xml.transform.URIResolver;
10 import javax.xml.transform.stream.StreamSource;
11
12 import org.apache.commons.logging.Log;
13 import org.apache.commons.logging.LogFactory;
14 import org.argeo.slc.SlcException;
15 import org.springframework.core.io.Resource;
16 import org.springframework.oxm.Marshaller;
17 import org.springframework.web.servlet.view.AbstractUrlBasedView;
18 import org.springframework.web.servlet.view.xslt.XsltViewResolver;
19
20 /**
21 * Xslt View resolver implementing URI resolver as well.
22 *
23 * @see URIResolver
24 * @see XsltViewResolver
25 */
26 public class XsltMarshallerViewResolver extends XsltViewResolver implements
27 URIResolver {
28 private final static Log log = LogFactory
29 .getLog(XsltMarshallerViewResolver.class);
30
31 private Marshaller marshaller;
32 private Map<String, Source> cacheUriResolver = new TreeMap<String, Source>();
33
34 public XsltMarshallerViewResolver() {
35 setUriResolver(this);
36 }
37
38 @Override
39 protected AbstractUrlBasedView buildView(String viewName) throws Exception {
40 AbstractUrlBasedView viewT = super.buildView(viewName);
41 XsltMarshallerView view = (XsltMarshallerView) viewT;
42 view.setMarshaller(marshaller);
43 return view;
44 }
45
46 public void setMarshaller(Marshaller marshaller) {
47 this.marshaller = marshaller;
48 }
49
50 public Source resolve(String href, String base) throws TransformerException {
51 if (log.isTraceEnabled())
52 log.trace("Resolve URI for href=" + href + " base=" + base);
53
54 Source res = null;
55 if (isCache())
56 res = cacheUriResolver.get(href);
57
58 if (res == null)
59 res = getStylesheetSource(href);
60
61 if (res == null)
62 res = getStylesheetSource(getPrefix() + href);
63
64 if (res == null)
65 throw new SlcException("Can't resolve URI for href=" + href
66 + " base=" + base);
67
68 if (isCache() && !cacheUriResolver.containsKey(href))
69 cacheUriResolver.put(href, res);
70
71 return res;
72 }
73
74 protected Source getStylesheetSource(String url) {
75 if (log.isDebugEnabled()) {
76 log.debug("Loading XSLT stylesheet from '" + url + "'");
77 }
78 try {
79 final Resource stylesheetResource = getApplicationContext()
80 .getResource(url);
81 String systemId = url.substring(0, url.lastIndexOf('/') + 1);
82 return new StreamSource(stylesheetResource.getInputStream(),
83 systemId);
84 } catch (IOException e) {
85 if (log.isTraceEnabled())
86 log.trace("Cannot load stylesheet " + url, e);
87 return null;
88 }
89 }
90
91 }