Repository: incubator-juneau Updated Branches: refs/heads/master a69156a81 -> 953f1d9e3
JUNEAU-51 - properties added to rest client, serializer, and parser are not available during pojo swap and unswap methods Project: http://git-wip-us.apache.org/repos/asf/incubator-juneau/repo Commit: http://git-wip-us.apache.org/repos/asf/incubator-juneau/commit/953f1d9e Tree: http://git-wip-us.apache.org/repos/asf/incubator-juneau/tree/953f1d9e Diff: http://git-wip-us.apache.org/repos/asf/incubator-juneau/diff/953f1d9e Branch: refs/heads/master Commit: 953f1d9e395235df1aac0a09a6436b27dcb3d33f Parents: a69156a Author: JamesBognar <[email protected]> Authored: Tue May 23 17:51:48 2017 -0400 Committer: JamesBognar <[email protected]> Committed: Tue May 23 17:51:48 2017 -0400 ---------------------------------------------------------------------- .../apache/juneau/jena/RdfParserSession.java | 2 +- .../main/java/org/apache/juneau/Context.java | 15 ++++- .../main/java/org/apache/juneau/ObjectMap.java | 14 +---- .../java/org/apache/juneau/PropertyStore.java | 12 ++-- .../main/java/org/apache/juneau/Session.java | 64 ++++++++++++++++++-- .../apache/juneau/html/HtmlDocSerializer.java | 8 +-- .../apache/juneau/soap/SoapXmlSerializer.java | 2 +- .../juneau/examples/rest/PhotosResource.java | 2 +- .../examples/rest/RequestEchoResource.java | 2 +- .../juneau/rest/test/AcceptCharsetResource.java | 4 +- .../juneau/rest/test/NlsPropertyResource.java | 2 +- .../juneau/rest/test/OnPostCallResource.java | 3 +- .../juneau/rest/test/OnPreCallResource.java | 5 +- .../juneau/rest/test/PropertiesResource.java | 8 +-- 14 files changed, 97 insertions(+), 46 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/953f1d9e/juneau-core-rdf/src/main/java/org/apache/juneau/jena/RdfParserSession.java ---------------------------------------------------------------------- diff --git a/juneau-core-rdf/src/main/java/org/apache/juneau/jena/RdfParserSession.java b/juneau-core-rdf/src/main/java/org/apache/juneau/jena/RdfParserSession.java index f699443..257fc7a 100644 --- a/juneau-core-rdf/src/main/java/org/apache/juneau/jena/RdfParserSession.java +++ b/juneau-core-rdf/src/main/java/org/apache/juneau/jena/RdfParserSession.java @@ -206,7 +206,7 @@ public class RdfParserSession extends ParserSession { * @param name The property name. * @return The new property object. */ - public final Property getProperty(String name) { + public final Property getRdfProperty(String name) { return model.createProperty(juneauBpNs.getUri(), name); } http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/953f1d9e/juneau-core/src/main/java/org/apache/juneau/Context.java ---------------------------------------------------------------------- diff --git a/juneau-core/src/main/java/org/apache/juneau/Context.java b/juneau-core/src/main/java/org/apache/juneau/Context.java index d6912e7..5eeff2c 100644 --- a/juneau-core/src/main/java/org/apache/juneau/Context.java +++ b/juneau-core/src/main/java/org/apache/juneau/Context.java @@ -30,6 +30,8 @@ import org.apache.juneau.serializer.*; */ public abstract class Context { + private final PropertyStore propertyStore; + /** * Constructor for this class. * <p> @@ -37,7 +39,18 @@ public abstract class Context { * * @param propertyStore The factory that created this config. */ - public Context(PropertyStore propertyStore) {} + public Context(PropertyStore propertyStore) { + this.propertyStore = PropertyStore.create(propertyStore); + } + + /** + * Returns the property store associated with this context. + * + * @return The property store associated with this context. + */ + protected PropertyStore getPropertyStore() { + return propertyStore; + } /** * Returns the properties defined on this bean context as a simple map for debugging purposes. http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/953f1d9e/juneau-core/src/main/java/org/apache/juneau/ObjectMap.java ---------------------------------------------------------------------- diff --git a/juneau-core/src/main/java/org/apache/juneau/ObjectMap.java b/juneau-core/src/main/java/org/apache/juneau/ObjectMap.java index 0bb3491..1cfccb7 100644 --- a/juneau-core/src/main/java/org/apache/juneau/ObjectMap.java +++ b/juneau-core/src/main/java/org/apache/juneau/ObjectMap.java @@ -100,7 +100,7 @@ public class ObjectMap extends LinkedHashMap<String,Object> { private static final long serialVersionUID = 1L; private transient BeanSession session; - private ObjectMap inner; + private Map<String,Object> inner; private transient PojoRest pojoRest; /** @@ -240,7 +240,7 @@ public class ObjectMap extends LinkedHashMap<String,Object> { * Can be <jk>null</jk> to remove the inner map from an existing map. * @return This object (for method chaining). */ - public ObjectMap setInner(ObjectMap inner) { + public ObjectMap setInner(Map<String,Object> inner) { this.inner = inner; return this; } @@ -258,16 +258,6 @@ public class ObjectMap extends LinkedHashMap<String,Object> { return null; } - - /** - * Returns the inner map if one was set through {@link #setInner(ObjectMap)}. - * - * @return The inner map if one was set through {@link #setInner(ObjectMap)}, or <jk>null</jk> if no inner map is present. - */ - public ObjectMap getInner() { - return inner; - } - /** * Override the default bean session used for converting POJOs. * <p> http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/953f1d9e/juneau-core/src/main/java/org/apache/juneau/PropertyStore.java ---------------------------------------------------------------------- diff --git a/juneau-core/src/main/java/org/apache/juneau/PropertyStore.java b/juneau-core/src/main/java/org/apache/juneau/PropertyStore.java index 8d19304..91af225 100644 --- a/juneau-core/src/main/java/org/apache/juneau/PropertyStore.java +++ b/juneau-core/src/main/java/org/apache/juneau/PropertyStore.java @@ -290,11 +290,13 @@ public final class PropertyStore { * @return This object (for method chaining). */ public PropertyStore copyFrom(PropertyStore ps) { - // TODO - Needs more testing. - for (Map.Entry<String,PropertyMap> e : ps.properties.entrySet()) - this.properties.put(e.getKey(), new PropertyMap(this.properties.get(e.getKey()), e.getValue())); - this.classLoader = ps.classLoader; - this.defaultParser = ps.defaultParser; + if (ps != null) { + // TODO - Needs more testing. + for (Map.Entry<String,PropertyMap> e : ps.properties.entrySet()) + this.properties.put(e.getKey(), new PropertyMap(this.properties.get(e.getKey()), e.getValue())); + this.classLoader = ps.classLoader; + this.defaultParser = ps.defaultParser; + } return this; } http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/953f1d9e/juneau-core/src/main/java/org/apache/juneau/Session.java ---------------------------------------------------------------------- diff --git a/juneau-core/src/main/java/org/apache/juneau/Session.java b/juneau-core/src/main/java/org/apache/juneau/Session.java index e0864e1..a75d197 100644 --- a/juneau-core/src/main/java/org/apache/juneau/Session.java +++ b/juneau-core/src/main/java/org/apache/juneau/Session.java @@ -33,6 +33,7 @@ public abstract class Session { private JuneauLogger logger; private final ObjectMap properties; + private final Context ctx; private Map<String,Object> cache; private boolean closed; private List<String> warnings; // Any warnings encountered. @@ -44,17 +45,68 @@ public abstract class Session { * The context contains all the configuration settings for the session. * @param op Properties associated with this session. */ - protected Session(Context ctx, ObjectMap op) { + protected Session(final Context ctx, ObjectMap op) { + this.ctx = ctx; this.properties = op != null ? op : ObjectMap.EMPTY_MAP; } /** - * Returns the properties associated with this session. - * - * @return The properties associated with this session. + * Returns the session property with the specified key. + * <p> + * The order of lookup for the property is as follows: + * <ul> + * <li>Override property passed in through the constructor. + * <li>Property defined on the context object. + * <li>System.property. + * </ul> + * + * @param key The property key. + * @return The property value, or <jk>null</jk> if it doesn't exist. + */ + public String getProperty(String key) { + return getProperty(key, null); + } + + /** + * Same as {@link #getProperty(String)} but with a default value. + * + * @param key The property key. + * @param def The default value if the property doesn't exist or is <jk>null</jk>. + * @return The property value. + */ + public String getProperty(String key, String def) { + Object v = properties.get(key); + if (v == null) + v = ctx.getPropertyStore().getProperty(key, String.class, null); + if (v == null) + v = def; + return StringUtils.toString(v); + } + + /** + * Same as {@link #getProperty(String)} but transforms the value to the specified type. + * + * @param type The class type of the value. + * @param key The property key. + * @return The property value. + */ + public <T> T getProperty(Class<T> type, String key) { + return getProperty(type, key, null); + } + + /** + * Same as {@link #getProperty(Class,String)} but with a default value. + * + * @param type The class type of the value. + * @param key The property key. + * @param def The default value if the property doesn't exist or is <jk>null</jk>. + * @return The property value. */ - public ObjectMap getProperties() { - return properties; + public <T> T getProperty(Class<T> type, String key, T def) { + T t = properties.get(type, key); + if (t == null) + t = ctx.getPropertyStore().getProperty(key, type, def); + return t; } /** http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/953f1d9e/juneau-core/src/main/java/org/apache/juneau/html/HtmlDocSerializer.java ---------------------------------------------------------------------- diff --git a/juneau-core/src/main/java/org/apache/juneau/html/HtmlDocSerializer.java b/juneau-core/src/main/java/org/apache/juneau/html/HtmlDocSerializer.java index 68e19e2..9bd5a10 100644 --- a/juneau-core/src/main/java/org/apache/juneau/html/HtmlDocSerializer.java +++ b/juneau-core/src/main/java/org/apache/juneau/html/HtmlDocSerializer.java @@ -85,9 +85,7 @@ public class HtmlDocSerializer extends HtmlStrippedDocSerializer { HtmlDocSerializerSession s = (HtmlDocSerializerSession)session; HtmlWriter w = s.getWriter(); - ObjectMap op = s.getProperties(); - - boolean isOptionsPage = op.containsKey(REST_method) && op.getString(REST_method).equalsIgnoreCase("OPTIONS"); + boolean isOptionsPage = session.getProperty(REST_method, "").equalsIgnoreCase("OPTIONS"); // Render the header. w.sTag("html").nl(); @@ -95,7 +93,7 @@ public class HtmlDocSerializer extends HtmlStrippedDocSerializer { String cssUrl = s.getCssUrl(); if (cssUrl == null) - cssUrl = op.getString(REST_relativeServletURI) + "/style.css"; + cssUrl = session.getProperty(REST_relativeServletURI, "") + "/style.css"; w.oTag(1, "style") .attr("type", "text/css") @@ -129,7 +127,7 @@ public class HtmlDocSerializer extends HtmlStrippedDocSerializer { for (Map.Entry<String,String> e : htmlLinks.entrySet()) { String uri = e.getValue(); if (uri.indexOf("://") == -1 && ! StringUtils.startsWith(uri, '/')) { - StringBuilder sb = new StringBuilder(op.getString(REST_relativeServletURI)); + StringBuilder sb = new StringBuilder(session.getProperty(REST_relativeServletURI, "")); if (! (uri.isEmpty() || uri.charAt(0) == '?' || uri.charAt(0) == '/')) sb.append('/'); sb.append(uri); http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/953f1d9e/juneau-core/src/main/java/org/apache/juneau/soap/SoapXmlSerializer.java ---------------------------------------------------------------------- diff --git a/juneau-core/src/main/java/org/apache/juneau/soap/SoapXmlSerializer.java b/juneau-core/src/main/java/org/apache/juneau/soap/SoapXmlSerializer.java index 707402e..81580f2 100644 --- a/juneau-core/src/main/java/org/apache/juneau/soap/SoapXmlSerializer.java +++ b/juneau-core/src/main/java/org/apache/juneau/soap/SoapXmlSerializer.java @@ -65,7 +65,7 @@ public final class SoapXmlSerializer extends XmlSerializer { .attr("encoding", "UTF-8") .appendln("?>"); w.oTag("soap", "Envelope") - .attr("xmlns", "soap", s.getProperties().getString(SOAPXML_SOAPAction, "http://www.w3.org/2003/05/soap-envelope")) + .attr("xmlns", "soap", s.getProperty(SOAPXML_SOAPAction, "http://www.w3.org/2003/05/soap-envelope")) .appendln(">"); w.sTag(1, "soap", "Body").nl(); super.serialize(s, o); http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/953f1d9e/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/PhotosResource.java ---------------------------------------------------------------------- diff --git a/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/PhotosResource.java b/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/PhotosResource.java index b5dace5..c8745f3 100644 --- a/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/PhotosResource.java +++ b/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/PhotosResource.java @@ -134,7 +134,7 @@ public class PhotosResource extends Resource { @Override /* Serializer */ protected void doSerialize(SerializerSession session, Object o) throws Exception { RenderedImage image = (RenderedImage)o; - String mediaType = session.getProperties().getString("mediaType"); + String mediaType = session.getProperty("mediaType"); ImageIO.write(image, mediaType.substring(mediaType.indexOf('/')+1), session.getOutputStream()); } } http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/953f1d9e/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/RequestEchoResource.java ---------------------------------------------------------------------- diff --git a/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/RequestEchoResource.java b/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/RequestEchoResource.java index 244f6a0..be993bd 100644 --- a/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/RequestEchoResource.java +++ b/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/RequestEchoResource.java @@ -49,7 +49,7 @@ public class RequestEchoResource extends Resource { private static final long serialVersionUID = 1L; /** GET request handler */ - @RestMethod(name="GET", path="/*", converters={Traversable.class,Queryable.class}, summary="Serializes the incoming HttpServletRequest object.") + @RestMethod(name="*", path="/*", converters={Traversable.class,Queryable.class}, summary="Serializes the incoming HttpServletRequest object.") public HttpServletRequest doGet(RestRequest req, RestResponse res, @Properties ObjectMap properties) { // Set the HtmlDocSerializer title programmatically. res.setPageTitle("Contents of HttpServletRequest object"); http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/953f1d9e/juneau-rest-test/src/main/java/org/apache/juneau/rest/test/AcceptCharsetResource.java ---------------------------------------------------------------------- diff --git a/juneau-rest-test/src/main/java/org/apache/juneau/rest/test/AcceptCharsetResource.java b/juneau-rest-test/src/main/java/org/apache/juneau/rest/test/AcceptCharsetResource.java index 9ab29c6..3f5ef8b 100644 --- a/juneau-rest-test/src/main/java/org/apache/juneau/rest/test/AcceptCharsetResource.java +++ b/juneau-rest-test/src/main/java/org/apache/juneau/rest/test/AcceptCharsetResource.java @@ -64,7 +64,7 @@ public class AcceptCharsetResource extends RestServlet { @SuppressWarnings("unchecked") @Override /* Parser */ protected <T> T doParse(ParserSession session, ClassMeta<T> type) throws Exception { - return (T)session.getProperties().getString("characterEncoding"); + return (T)session.getProperty("characterEncoding"); } } @@ -78,7 +78,7 @@ public class AcceptCharsetResource extends RestServlet { @Override /* Serializer */ protected void doSerialize(SerializerSession session, Object o) throws Exception { Writer w = new OutputStreamWriter(session.getOutputStream()); - w.append(o.toString()).append('/').append(session.getProperties().getString("characterEncoding")); + w.append(o.toString()).append('/').append(session.getProperty("characterEncoding")); w.flush(); w.close(); } http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/953f1d9e/juneau-rest-test/src/main/java/org/apache/juneau/rest/test/NlsPropertyResource.java ---------------------------------------------------------------------- diff --git a/juneau-rest-test/src/main/java/org/apache/juneau/rest/test/NlsPropertyResource.java b/juneau-rest-test/src/main/java/org/apache/juneau/rest/test/NlsPropertyResource.java index 05093b9..6785872 100644 --- a/juneau-rest-test/src/main/java/org/apache/juneau/rest/test/NlsPropertyResource.java +++ b/juneau-rest-test/src/main/java/org/apache/juneau/rest/test/NlsPropertyResource.java @@ -61,7 +61,7 @@ public class NlsPropertyResource extends RestServlet { @Override /* Serializer */ protected void doSerialize(SerializerSession session, Object o) throws Exception { - session.getWriter().write(session.getProperties().getString("TestProperty")); + session.getWriter().write(session.getProperty("TestProperty")); } } } http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/953f1d9e/juneau-rest-test/src/main/java/org/apache/juneau/rest/test/OnPostCallResource.java ---------------------------------------------------------------------- diff --git a/juneau-rest-test/src/main/java/org/apache/juneau/rest/test/OnPostCallResource.java b/juneau-rest-test/src/main/java/org/apache/juneau/rest/test/OnPostCallResource.java index e046779..b5a3981 100644 --- a/juneau-rest-test/src/main/java/org/apache/juneau/rest/test/OnPostCallResource.java +++ b/juneau-rest-test/src/main/java/org/apache/juneau/rest/test/OnPostCallResource.java @@ -44,8 +44,7 @@ public class OnPostCallResource extends RestServlet { @Override /* Serializer */ protected void doSerialize(SerializerSession session, Object o) throws Exception { - ObjectMap p = session.getProperties(); - session.getWriter().write("p1="+p.get("p1")+",p2="+p.get("p2")+",p3="+p.get("p3")+",p4="+p.get("p4")+",p5="+p.get("p5")+",contentType="+session.getProperties().getString("mediaType")); + session.getWriter().write("p1="+session.getProperty("p1")+",p2="+session.getProperty("p2")+",p3="+session.getProperty("p3")+",p4="+session.getProperty("p4")+",p5="+session.getProperty("p5")+",contentType="+session.getProperty("mediaType")); } @Override /* Serializer */ public ObjectMap getResponseHeaders(ObjectMap properties) { http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/953f1d9e/juneau-rest-test/src/main/java/org/apache/juneau/rest/test/OnPreCallResource.java ---------------------------------------------------------------------- diff --git a/juneau-rest-test/src/main/java/org/apache/juneau/rest/test/OnPreCallResource.java b/juneau-rest-test/src/main/java/org/apache/juneau/rest/test/OnPreCallResource.java index feefe2f..d4f6e20 100644 --- a/juneau-rest-test/src/main/java/org/apache/juneau/rest/test/OnPreCallResource.java +++ b/juneau-rest-test/src/main/java/org/apache/juneau/rest/test/OnPreCallResource.java @@ -47,9 +47,8 @@ public class OnPreCallResource extends RestServlet { @SuppressWarnings("unchecked") @Override /* Parser */ protected <T> T doParse(ParserSession session, ClassMeta<T> type) throws Exception { - ObjectMap p = session.getProperties(); - String matchingContentType = session.getProperties().getString("mediaType"); - return (T)("p1="+p.get("p1")+",p2="+p.get("p2")+",p3="+p.get("p3")+",p4="+p.get("p4")+",p5="+p.get("p5")+",contentType="+matchingContentType); + String matchingContentType = session.getProperty("mediaType"); + return (T)("p1="+session.getProperty("p1")+",p2="+session.getProperty("p2")+",p3="+session.getProperty("p3")+",p4="+session.getProperty("p4")+",p5="+session.getProperty("p5")+",contentType="+matchingContentType); } } http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/953f1d9e/juneau-rest-test/src/main/java/org/apache/juneau/rest/test/PropertiesResource.java ---------------------------------------------------------------------- diff --git a/juneau-rest-test/src/main/java/org/apache/juneau/rest/test/PropertiesResource.java b/juneau-rest-test/src/main/java/org/apache/juneau/rest/test/PropertiesResource.java index ff41a3b..9ea92b6 100644 --- a/juneau-rest-test/src/main/java/org/apache/juneau/rest/test/PropertiesResource.java +++ b/juneau-rest-test/src/main/java/org/apache/juneau/rest/test/PropertiesResource.java @@ -68,10 +68,9 @@ public class PropertiesResource extends RestServletDefault { @Override /* Serializer */ protected void doSerialize(SerializerSession session, Object output) throws Exception { - ObjectMap p = session.getProperties(); session.getWriter().write(format("A1=%s,A2=%s,B1=%s,B2=%s,C=%s,R1a=%s,R1b=%s,R2=%s,R3=%s,R4=%s,R5=%s,R6=%s", - p.get("A1"), p.get("A2"), p.get("B1"), p.get("B2"), p.get("C"), - p.get("R1a"), p.get("R1b"), p.get("R2"), p.get("R3"), p.get("R4"), p.get("R5"), p.get("R6"))); + session.getProperty("A1"), session.getProperty("A2"), session.getProperty("B1"), session.getProperty("B2"), session.getProperty("C"), + session.getProperty("R1a"), session.getProperty("R1b"), session.getProperty("R2"), session.getProperty("R3"), session.getProperty("R4"), session.getProperty("R5"), session.getProperty("R6"))); } } @@ -92,8 +91,7 @@ public class PropertiesResource extends RestServletDefault { @Override /* Serializer */ protected void doSerialize(SerializerSession session, Object output) throws Exception { - ObjectMap p = session.getProperties(); - session.getWriter().write(format("A=%s,P=%s,H=%s", p.get("A"), p.get("P"), p.get("h"))); + session.getWriter().write(format("A=%s,P=%s,H=%s", session.getProperty("A"), session.getProperty("P"), session.getProperty("h"))); } } }
