JUNEAU-169 Dynamic annotations.
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/MetaProvider.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/MetaProvider.java
new file mode 100644
index 0000000..6bdd5e2
--- /dev/null
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/MetaProvider.java
@@ -0,0 +1,18 @@
+// ***************************************************************************************************************************
+// * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file *
+// * distributed with this work for additional information regarding copyright ownership. The ASF licenses this file *
+// * to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance *
+// * with the License. You may obtain a copy of the License at *
+// * *
+// * http://www.apache.org/licenses/LICENSE-2.0 *
+// * *
+// * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an *
+// * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the *
+// * specific language governing permissions and limitations under the License. *
+// ***************************************************************************************************************************
+package org.apache.juneau;
+
+/**
+ * Parent interface for all class/method language-specific metadata providers.
+ */
+public interface MetaProvider {}
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/csv/CsvBeanPropertyMeta.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/csv/CsvBeanPropertyMeta.java
new file mode 100644
index 0000000..2dca01b
--- /dev/null
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/csv/CsvBeanPropertyMeta.java
@@ -0,0 +1,42 @@
+// ***************************************************************************************************************************
+// * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file *
+// * distributed with this work for additional information regarding copyright ownership. The ASF licenses this file *
+// * to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance *
+// * with the License. You may obtain a copy of the License at *
+// * *
+// * http://www.apache.org/licenses/LICENSE-2.0 *
+// * *
+// * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an *
+// * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the *
+// * specific language governing permissions and limitations under the License. *
+// ***************************************************************************************************************************
+package org.apache.juneau.csv;
+
+import org.apache.juneau.*;
+import org.apache.juneau.csv.annotation.*;
+
+/**
+ * Metadata on bean properties specific to the CSV serializers and parsers pulled from the {@link Csv @Csv}
+ * annotation on the bean property.
+ */
+public final class CsvBeanPropertyMeta extends ExtendedBeanPropertyMeta {
+
+ /**
+ * Default instance.
+ */
+ public static final CsvBeanPropertyMeta DEFAULT = new CsvBeanPropertyMeta();
+
+ /**
+ * Constructor.
+ *
+ * @param bpm The metadata of the bean property of this additional metadata.
+ * @param csvMetaProvider CSV metadata provider (for finding information about other artifacts).
+ */
+ public CsvBeanPropertyMeta(BeanPropertyMeta bpm, CsvMetaProvider csvMetaProvider) {
+ super(bpm);
+ }
+
+ private CsvBeanPropertyMeta() {
+ super(null);
+ }
+}
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/csv/CsvClassMeta.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/csv/CsvClassMeta.java
new file mode 100644
index 0000000..ebbcdee
--- /dev/null
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/csv/CsvClassMeta.java
@@ -0,0 +1,45 @@
+// ***************************************************************************************************************************
+// * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file *
+// * distributed with this work for additional information regarding copyright ownership. The ASF licenses this file *
+// * to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance *
+// * with the License. You may obtain a copy of the License at *
+// * *
+// * http://www.apache.org/licenses/LICENSE-2.0 *
+// * *
+// * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an *
+// * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the *
+// * specific language governing permissions and limitations under the License. *
+// ***************************************************************************************************************************
+package org.apache.juneau.csv;
+
+import org.apache.juneau.*;
+import org.apache.juneau.csv.annotation.*;
+
+/**
+ * Metadata on classes specific to the CSV serializers and parsers pulled from the {@link Csv @Csv} annotation on
+ * the class.
+ */
+public class CsvClassMeta extends ExtendedClassMeta {
+
+ private final Csv csv;
+
+ /**
+ * Constructor.
+ *
+ * @param cm The class that this annotation is defined on.
+ * @param csvMetaProvider CSV metadata provider (for finding information about other artifacts).
+ */
+ public CsvClassMeta(ClassMeta<?> cm, CsvMetaProvider csvMetaProvider) {
+ super(cm);
+ this.csv = cm.getInfo().getAnnotation(Csv.class);
+ }
+
+ /**
+ * Returns the {@link Csv @Csv} annotation defined on the class.
+ *
+ * @return The value of the annotation, or <jk>null</jk> if not specified.
+ */
+ protected Csv getAnnotation() {
+ return csv;
+ }
+}
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/csv/CsvMetaProvider.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/csv/CsvMetaProvider.java
new file mode 100644
index 0000000..edc336f
--- /dev/null
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/csv/CsvMetaProvider.java
@@ -0,0 +1,37 @@
+// ***************************************************************************************************************************
+// * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file *
+// * distributed with this work for additional information regarding copyright ownership. The ASF licenses this file *
+// * to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance *
+// * with the License. You may obtain a copy of the License at *
+// * *
+// * http://www.apache.org/licenses/LICENSE-2.0 *
+// * *
+// * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an *
+// * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the *
+// * specific language governing permissions and limitations under the License. *
+// ***************************************************************************************************************************
+package org.apache.juneau.csv;
+
+import org.apache.juneau.*;
+
+/**
+ * Interface for providing access to {@link CsvClassMeta} and {@link CsvBeanPropertyMeta} objects.
+ */
+public interface CsvMetaProvider extends MetaProvider {
+
+ /**
+ * Returns the language-specific metadata on the specified class.
+ *
+ * @param cm The class to return the metadata on.
+ * @return The metadata.
+ */
+ CsvClassMeta getCsvClassMeta(ClassMeta<?> cm);
+
+ /**
+ * Returns the language-specific metadata on the specified bean property.
+ *
+ * @param bpm The bean property to return the metadata on.
+ * @return The metadata.
+ */
+ CsvBeanPropertyMeta getCsvBeanPropertyMeta(BeanPropertyMeta bpm);
+}
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/csv/CsvParser.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/csv/CsvParser.java
index 3073f39..d8442ca 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/csv/CsvParser.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/csv/CsvParser.java
@@ -12,6 +12,9 @@
// ***************************************************************************************************************************
package org.apache.juneau.csv;
+import java.util.*;
+import java.util.concurrent.*;
+
import org.apache.juneau.*;
import org.apache.juneau.annotation.*;
import org.apache.juneau.parser.*;
@@ -20,7 +23,7 @@
* TODO - Work in progress. CSV parser.
*/
@ConfigurableContext
-public class CsvParser extends ReaderParser implements CsvCommon {
+public class CsvParser extends ReaderParser implements CsvMetaProvider, CsvCommon {
//-------------------------------------------------------------------------------------------------------------------
// Configurable properties
@@ -40,6 +43,9 @@
// Instance
//-------------------------------------------------------------------------------------------------------------------
+ private final Map<ClassMeta<?>,CsvClassMeta> csvClassMetas = new ConcurrentHashMap<>();
+ private final Map<BeanPropertyMeta,CsvBeanPropertyMeta> csvBeanPropertyMetas = new ConcurrentHashMap<>();
+
/**
* Constructor.
*
@@ -78,6 +84,32 @@
}
//-----------------------------------------------------------------------------------------------------------------
+ // Extended metadata
+ //-----------------------------------------------------------------------------------------------------------------
+
+ @Override /* CsvMetaProvider */
+ public CsvClassMeta getCsvClassMeta(ClassMeta<?> cm) {
+ CsvClassMeta m = csvClassMetas.get(cm);
+ if (m == null) {
+ m = new CsvClassMeta(cm, this);
+ csvClassMetas.put(cm, m);
+ }
+ return m;
+ }
+
+ @Override /* CsvMetaProvider */
+ public CsvBeanPropertyMeta getCsvBeanPropertyMeta(BeanPropertyMeta bpm) {
+ if (bpm == null)
+ return CsvBeanPropertyMeta.DEFAULT;
+ CsvBeanPropertyMeta m = csvBeanPropertyMetas.get(bpm);
+ if (m == null) {
+ m = new CsvBeanPropertyMeta(bpm.getDelegateFor(), this);
+ csvBeanPropertyMetas.put(bpm, m);
+ }
+ return m;
+ }
+
+ //-----------------------------------------------------------------------------------------------------------------
// Other methods
//-----------------------------------------------------------------------------------------------------------------
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/csv/CsvSerializer.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/csv/CsvSerializer.java
index 440dcc3..e62ea5d 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/csv/CsvSerializer.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/csv/CsvSerializer.java
@@ -12,6 +12,9 @@
// ***************************************************************************************************************************
package org.apache.juneau.csv;
+import java.util.*;
+import java.util.concurrent.*;
+
import org.apache.juneau.*;
import org.apache.juneau.annotation.*;
import org.apache.juneau.serializer.*;
@@ -20,7 +23,7 @@
* TODO - Work in progress. CSV serializer.
*/
@ConfigurableContext
-public final class CsvSerializer extends WriterSerializer implements CsvCommon {
+public final class CsvSerializer extends WriterSerializer implements CsvMetaProvider,CsvCommon {
//-------------------------------------------------------------------------------------------------------------------
// Configurable properties
@@ -40,6 +43,9 @@
// Instance
//-------------------------------------------------------------------------------------------------------------------
+ private final Map<ClassMeta<?>,CsvClassMeta> csvClassMetas = new ConcurrentHashMap<>();
+ private final Map<BeanPropertyMeta,CsvBeanPropertyMeta> csvBeanPropertyMetas = new ConcurrentHashMap<>();
+
/**
* Constructor.
*
@@ -81,6 +87,32 @@
}
//-----------------------------------------------------------------------------------------------------------------
+ // Extended metadata
+ //-----------------------------------------------------------------------------------------------------------------
+
+ @Override /* CsvMetaProvider */
+ public CsvClassMeta getCsvClassMeta(ClassMeta<?> cm) {
+ CsvClassMeta m = csvClassMetas.get(cm);
+ if (m == null) {
+ m = new CsvClassMeta(cm, this);
+ csvClassMetas.put(cm, m);
+ }
+ return m;
+ }
+
+ @Override /* CsvMetaProvider */
+ public CsvBeanPropertyMeta getCsvBeanPropertyMeta(BeanPropertyMeta bpm) {
+ if (bpm == null)
+ return CsvBeanPropertyMeta.DEFAULT;
+ CsvBeanPropertyMeta m = csvBeanPropertyMetas.get(bpm);
+ if (m == null) {
+ m = new CsvBeanPropertyMeta(bpm.getDelegateFor(), this);
+ csvBeanPropertyMetas.put(bpm, m);
+ }
+ return m;
+ }
+
+ //-----------------------------------------------------------------------------------------------------------------
// Other methods
//-----------------------------------------------------------------------------------------------------------------
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/HtmlMetaProvider.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/HtmlMetaProvider.java
index 74c7949..a1f8fce 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/HtmlMetaProvider.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/HtmlMetaProvider.java
@@ -17,7 +17,7 @@
/**
* Interface for providing access to {@link HtmlClassMeta} and {@link HtmlBeanPropertyMeta} objects.
*/
-public interface HtmlMetaProvider {
+public interface HtmlMetaProvider extends MetaProvider {
/**
* Returns the language-specific metadata on the specified class.
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/jso/JsoBeanPropertyMeta.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/jso/JsoBeanPropertyMeta.java
new file mode 100644
index 0000000..006338e
--- /dev/null
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/jso/JsoBeanPropertyMeta.java
@@ -0,0 +1,42 @@
+// ***************************************************************************************************************************
+// * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file *
+// * distributed with this work for additional information regarding copyright ownership. The ASF licenses this file *
+// * to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance *
+// * with the License. You may obtain a copy of the License at *
+// * *
+// * http://www.apache.org/licenses/LICENSE-2.0 *
+// * *
+// * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an *
+// * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the *
+// * specific language governing permissions and limitations under the License. *
+// ***************************************************************************************************************************
+package org.apache.juneau.jso;
+
+import org.apache.juneau.*;
+import org.apache.juneau.jso.annotation.*;
+
+/**
+ * Metadata on bean properties specific to the JSO serializers and parsers pulled from the {@link Jso @Jso}
+ * annotation on the bean property.
+ */
+public final class JsoBeanPropertyMeta extends ExtendedBeanPropertyMeta {
+
+ /**
+ * Default instance.
+ */
+ public static final JsoBeanPropertyMeta DEFAULT = new JsoBeanPropertyMeta();
+
+ /**
+ * Constructor.
+ *
+ * @param bpm The metadata of the bean property of this additional metadata.
+ * @param jsoMetaProvider JSO metadata provider (for finding information about other artifacts).
+ */
+ public JsoBeanPropertyMeta(BeanPropertyMeta bpm, JsoMetaProvider jsoMetaProvider) {
+ super(bpm);
+ }
+
+ private JsoBeanPropertyMeta() {
+ super(null);
+ }
+}
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/jso/JsoClassMeta.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/jso/JsoClassMeta.java
new file mode 100644
index 0000000..0d984d5
--- /dev/null
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/jso/JsoClassMeta.java
@@ -0,0 +1,45 @@
+// ***************************************************************************************************************************
+// * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file *
+// * distributed with this work for additional information regarding copyright ownership. The ASF licenses this file *
+// * to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance *
+// * with the License. You may obtain a copy of the License at *
+// * *
+// * http://www.apache.org/licenses/LICENSE-2.0 *
+// * *
+// * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an *
+// * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the *
+// * specific language governing permissions and limitations under the License. *
+// ***************************************************************************************************************************
+package org.apache.juneau.jso;
+
+import org.apache.juneau.*;
+import org.apache.juneau.jso.annotation.*;
+
+/**
+ * Metadata on classes specific to the JSO serializers and parsers pulled from the {@link Jso @Jso} annotation on
+ * the class.
+ */
+public class JsoClassMeta extends ExtendedClassMeta {
+
+ private final Jso jso;
+
+ /**
+ * Constructor.
+ *
+ * @param cm The class that this annotation is defined on.
+ * @param jsoMetaProvider JSO metadata provider (for finding information about other artifacts).
+ */
+ public JsoClassMeta(ClassMeta<?> cm, JsoMetaProvider jsoMetaProvider) {
+ super(cm);
+ this.jso = cm.getInfo().getAnnotation(Jso.class);
+ }
+
+ /**
+ * Returns the {@link Jso @Jso} annotation defined on the class.
+ *
+ * @return The value of the annotation, or <jk>null</jk> if not specified.
+ */
+ protected Jso getAnnotation() {
+ return jso;
+ }
+}
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/jso/JsoMetaProvider.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/jso/JsoMetaProvider.java
new file mode 100644
index 0000000..beef60b
--- /dev/null
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/jso/JsoMetaProvider.java
@@ -0,0 +1,37 @@
+// ***************************************************************************************************************************
+// * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file *
+// * distributed with this work for additional information regarding copyright ownership. The ASF licenses this file *
+// * to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance *
+// * with the License. You may obtain a copy of the License at *
+// * *
+// * http://www.apache.org/licenses/LICENSE-2.0 *
+// * *
+// * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an *
+// * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the *
+// * specific language governing permissions and limitations under the License. *
+// ***************************************************************************************************************************
+package org.apache.juneau.jso;
+
+import org.apache.juneau.*;
+
+/**
+ * Interface for providing access to {@link JsoClassMeta} and {@link JsoBeanPropertyMeta} objects.
+ */
+public interface JsoMetaProvider extends MetaProvider {
+
+ /**
+ * Returns the language-specific metadata on the specified class.
+ *
+ * @param cm The class to return the metadata on.
+ * @return The metadata.
+ */
+ JsoClassMeta getJsoClassMeta(ClassMeta<?> cm);
+
+ /**
+ * Returns the language-specific metadata on the specified bean property.
+ *
+ * @param bpm The bean property to return the metadata on.
+ * @return The metadata.
+ */
+ JsoBeanPropertyMeta getJsoBeanPropertyMeta(BeanPropertyMeta bpm);
+}
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/jso/JsoParser.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/jso/JsoParser.java
index b197364..4f13d57 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/jso/JsoParser.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/jso/JsoParser.java
@@ -13,6 +13,8 @@
package org.apache.juneau.jso;
import java.io.*;
+import java.util.*;
+import java.util.concurrent.*;
import org.apache.juneau.*;
import org.apache.juneau.annotation.*;
@@ -26,7 +28,7 @@
* Consumes <c>Content-Type</c> types: <bc>application/x-java-serialized-object</bc>
*/
@ConfigurableContext
-public final class JsoParser extends InputStreamParser implements JsoCommon {
+public final class JsoParser extends InputStreamParser implements JsoMetaProvider, JsoCommon {
//-------------------------------------------------------------------------------------------------------------------
// Configurable properties
@@ -45,6 +47,9 @@
// Instance
//-------------------------------------------------------------------------------------------------------------------
+ private final Map<ClassMeta<?>,JsoClassMeta> jsoClassMetas = new ConcurrentHashMap<>();
+ private final Map<BeanPropertyMeta,JsoBeanPropertyMeta> jsoBeanPropertyMetas = new ConcurrentHashMap<>();
+
/**
* Constructor.
*
@@ -86,6 +91,32 @@
}
//-----------------------------------------------------------------------------------------------------------------
+ // Extended metadata
+ //-----------------------------------------------------------------------------------------------------------------
+
+ @Override /* JsoMetaProvider */
+ public JsoClassMeta getJsoClassMeta(ClassMeta<?> cm) {
+ JsoClassMeta m = jsoClassMetas.get(cm);
+ if (m == null) {
+ m = new JsoClassMeta(cm, this);
+ jsoClassMetas.put(cm, m);
+ }
+ return m;
+ }
+
+ @Override /* JsoMetaProvider */
+ public JsoBeanPropertyMeta getJsoBeanPropertyMeta(BeanPropertyMeta bpm) {
+ if (bpm == null)
+ return JsoBeanPropertyMeta.DEFAULT;
+ JsoBeanPropertyMeta m = jsoBeanPropertyMetas.get(bpm);
+ if (m == null) {
+ m = new JsoBeanPropertyMeta(bpm.getDelegateFor(), this);
+ jsoBeanPropertyMetas.put(bpm, m);
+ }
+ return m;
+ }
+
+ //-----------------------------------------------------------------------------------------------------------------
// Other methods
//-----------------------------------------------------------------------------------------------------------------
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/jso/JsoSerializer.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/jso/JsoSerializer.java
index 4fd10d2..a41850f 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/jso/JsoSerializer.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/jso/JsoSerializer.java
@@ -13,6 +13,8 @@
package org.apache.juneau.jso;
import java.io.*;
+import java.util.*;
+import java.util.concurrent.*;
import org.apache.juneau.*;
import org.apache.juneau.annotation.*;
@@ -28,7 +30,7 @@
* Produces <c>Content-Type</c> types: <bc>application/x-java-serialized-object</bc>
*/
@ConfigurableContext
-public class JsoSerializer extends OutputStreamSerializer implements JsoCommon {
+public class JsoSerializer extends OutputStreamSerializer implements JsoMetaProvider, JsoCommon {
//-------------------------------------------------------------------------------------------------------------------
// Configurable properties
@@ -47,6 +49,9 @@
// Instance
//-------------------------------------------------------------------------------------------------------------------
+ private final Map<ClassMeta<?>,JsoClassMeta> jsoClassMetas = new ConcurrentHashMap<>();
+ private final Map<BeanPropertyMeta,JsoBeanPropertyMeta> jsoBeanPropertyMetas = new ConcurrentHashMap<>();
+
/**
* Constructor.
*
@@ -88,6 +93,32 @@
}
//-----------------------------------------------------------------------------------------------------------------
+ // Extended metadata
+ //-----------------------------------------------------------------------------------------------------------------
+
+ @Override /* JsoMetaProvider */
+ public JsoClassMeta getJsoClassMeta(ClassMeta<?> cm) {
+ JsoClassMeta m = jsoClassMetas.get(cm);
+ if (m == null) {
+ m = new JsoClassMeta(cm, this);
+ jsoClassMetas.put(cm, m);
+ }
+ return m;
+ }
+
+ @Override /* JsoMetaProvider */
+ public JsoBeanPropertyMeta getJsoBeanPropertyMeta(BeanPropertyMeta bpm) {
+ if (bpm == null)
+ return JsoBeanPropertyMeta.DEFAULT;
+ JsoBeanPropertyMeta m = jsoBeanPropertyMetas.get(bpm);
+ if (m == null) {
+ m = new JsoBeanPropertyMeta(bpm.getDelegateFor(), this);
+ jsoBeanPropertyMetas.put(bpm, m);
+ }
+ return m;
+ }
+
+ //-----------------------------------------------------------------------------------------------------------------
// Other methods
//-----------------------------------------------------------------------------------------------------------------
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/json/JsonBeanPropertyMeta.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/json/JsonBeanPropertyMeta.java
new file mode 100644
index 0000000..5237126
--- /dev/null
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/json/JsonBeanPropertyMeta.java
@@ -0,0 +1,42 @@
+// ***************************************************************************************************************************
+// * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file *
+// * distributed with this work for additional information regarding copyright ownership. The ASF licenses this file *
+// * to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance *
+// * with the License. You may obtain a copy of the License at *
+// * *
+// * http://www.apache.org/licenses/LICENSE-2.0 *
+// * *
+// * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an *
+// * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the *
+// * specific language governing permissions and limitations under the License. *
+// ***************************************************************************************************************************
+package org.apache.juneau.json;
+
+import org.apache.juneau.*;
+import org.apache.juneau.json.annotation.*;
+
+/**
+ * Metadata on bean properties specific to the JSON serializers and parsers pulled from the {@link Json @Json}
+ * annotation on the bean property.
+ */
+public final class JsonBeanPropertyMeta extends ExtendedBeanPropertyMeta {
+
+ /**
+ * Default instance.
+ */
+ public static final JsonBeanPropertyMeta DEFAULT = new JsonBeanPropertyMeta();
+
+ /**
+ * Constructor.
+ *
+ * @param bpm The metadata of the bean property of this additional metadata.
+ * @param jsonMetaProvider JSON metadata provider (for finding information about other artifacts).
+ */
+ public JsonBeanPropertyMeta(BeanPropertyMeta bpm, JsonMetaProvider jsonMetaProvider) {
+ super(bpm);
+ }
+
+ private JsonBeanPropertyMeta() {
+ super(null);
+ }
+}
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/json/JsonMetaProvider.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/json/JsonMetaProvider.java
index 9d28c35..98b53c4 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/json/JsonMetaProvider.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/json/JsonMetaProvider.java
@@ -15,9 +15,9 @@
import org.apache.juneau.*;
/**
- * Interface for providing access to {@link JsonClassMeta} objects.
+ * Interface for providing access to {@link JsonClassMeta} and {@link JsonBeanPropertyMeta} objects.
*/
-public interface JsonMetaProvider {
+public interface JsonMetaProvider extends MetaProvider {
/**
* Returns the language-specific metadata on the specified class.
@@ -26,4 +26,12 @@
* @return The metadata.
*/
JsonClassMeta getJsonClassMeta(ClassMeta<?> cm);
+
+ /**
+ * Returns the language-specific metadata on the specified bean property.
+ *
+ * @param bpm The bean property to return the metadata on.
+ * @return The metadata.
+ */
+ JsonBeanPropertyMeta getJsonBeanPropertyMeta(BeanPropertyMeta bpm);
}
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/json/JsonParser.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/json/JsonParser.java
index 760a226..a023bd0 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/json/JsonParser.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/json/JsonParser.java
@@ -200,6 +200,7 @@
private final boolean validateEnd;
private final Map<ClassMeta<?>,JsonClassMeta> jsonClassMetas = new ConcurrentHashMap<>();
+ private final Map<BeanPropertyMeta,JsonBeanPropertyMeta> jsonBeanPropertyMetas = new ConcurrentHashMap<>();
/**
* Constructor.
@@ -266,6 +267,18 @@
return m;
}
+ @Override /* JsonMetaProvider */
+ public JsonBeanPropertyMeta getJsonBeanPropertyMeta(BeanPropertyMeta bpm) {
+ if (bpm == null)
+ return JsonBeanPropertyMeta.DEFAULT;
+ JsonBeanPropertyMeta m = jsonBeanPropertyMetas.get(bpm);
+ if (m == null) {
+ m = new JsonBeanPropertyMeta(bpm.getDelegateFor(), this);
+ jsonBeanPropertyMetas.put(bpm, m);
+ }
+ return m;
+ }
+
//-----------------------------------------------------------------------------------------------------------------
// Properties
//-----------------------------------------------------------------------------------------------------------------
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/json/JsonSerializer.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/json/JsonSerializer.java
index a8318d0..2637868 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/json/JsonSerializer.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/json/JsonSerializer.java
@@ -314,6 +314,7 @@
escapeSolidus,
addBeanTypes;
private final Map<ClassMeta<?>,JsonClassMeta> jsonClassMetas = new ConcurrentHashMap<>();
+ private final Map<BeanPropertyMeta,JsonBeanPropertyMeta> jsonBeanPropertyMetas = new ConcurrentHashMap<>();
private volatile JsonSchemaSerializer schemaSerializer;
@@ -421,6 +422,18 @@
return m;
}
+ @Override /* JsonMetaProvider */
+ public JsonBeanPropertyMeta getJsonBeanPropertyMeta(BeanPropertyMeta bpm) {
+ if (bpm == null)
+ return JsonBeanPropertyMeta.DEFAULT;
+ JsonBeanPropertyMeta m = jsonBeanPropertyMetas.get(bpm);
+ if (m == null) {
+ m = new JsonBeanPropertyMeta(bpm.getDelegateFor(), this);
+ jsonBeanPropertyMetas.put(bpm, m);
+ }
+ return m;
+ }
+
//-----------------------------------------------------------------------------------------------------------------
// Properties
//-----------------------------------------------------------------------------------------------------------------
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/jsonschema/JsonSchemaMetaProvider.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/jsonschema/JsonSchemaMetaProvider.java
index 9f34b9e..a715f5c 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/jsonschema/JsonSchemaMetaProvider.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/jsonschema/JsonSchemaMetaProvider.java
@@ -17,7 +17,7 @@
/**
* Interface for providing access to {@link JsonSchemaClassMeta} and {@link JsonSchemaBeanPropertyMeta} objects.
*/
-public interface JsonSchemaMetaProvider {
+public interface JsonSchemaMetaProvider extends MetaProvider {
/**
* Returns the language-specific metadata on the specified class.
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/msgpack/MsgPackBeanPropertyMeta.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/msgpack/MsgPackBeanPropertyMeta.java
new file mode 100644
index 0000000..84782af
--- /dev/null
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/msgpack/MsgPackBeanPropertyMeta.java
@@ -0,0 +1,42 @@
+// ***************************************************************************************************************************
+// * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file *
+// * distributed with this work for additional information regarding copyright ownership. The ASF licenses this file *
+// * to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance *
+// * with the License. You may obtain a copy of the License at *
+// * *
+// * http://www.apache.org/licenses/LICENSE-2.0 *
+// * *
+// * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an *
+// * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the *
+// * specific language governing permissions and limitations under the License. *
+// ***************************************************************************************************************************
+package org.apache.juneau.msgpack;
+
+import org.apache.juneau.*;
+import org.apache.juneau.msgpack.annotation.*;
+
+/**
+ * Metadata on bean properties specific to the MessagePack serializers and parsers pulled from the {@link MsgPack @MsgPack}
+ * annotation on the bean property.
+ */
+public final class MsgPackBeanPropertyMeta extends ExtendedBeanPropertyMeta {
+
+ /**
+ * Default instance.
+ */
+ public static final MsgPackBeanPropertyMeta DEFAULT = new MsgPackBeanPropertyMeta();
+
+ /**
+ * Constructor.
+ *
+ * @param bpm The metadata of the bean property of this additional metadata.
+ * @param msgPackMetaProvider MessagePack metadata provider (for finding information about other artifacts).
+ */
+ public MsgPackBeanPropertyMeta(BeanPropertyMeta bpm, MsgPackMetaProvider msgPackMetaProvider) {
+ super(bpm);
+ }
+
+ private MsgPackBeanPropertyMeta() {
+ super(null);
+ }
+}
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/msgpack/MsgPackClassMeta.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/msgpack/MsgPackClassMeta.java
new file mode 100644
index 0000000..7298470
--- /dev/null
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/msgpack/MsgPackClassMeta.java
@@ -0,0 +1,45 @@
+// ***************************************************************************************************************************
+// * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file *
+// * distributed with this work for additional information regarding copyright ownership. The ASF licenses this file *
+// * to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance *
+// * with the License. You may obtain a copy of the License at *
+// * *
+// * http://www.apache.org/licenses/LICENSE-2.0 *
+// * *
+// * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an *
+// * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the *
+// * specific language governing permissions and limitations under the License. *
+// ***************************************************************************************************************************
+package org.apache.juneau.msgpack;
+
+import org.apache.juneau.*;
+import org.apache.juneau.msgpack.annotation.*;
+
+/**
+ * Metadata on classes specific to the MessagePack serializers and parsers pulled from the {@link MsgPack @MsgPack} annotation on
+ * the class.
+ */
+public class MsgPackClassMeta extends ExtendedClassMeta {
+
+ private final MsgPack msgPack;
+
+ /**
+ * Constructor.
+ *
+ * @param cm The class that this annotation is defined on.
+ * @param msgPackMetaProvider MessagePack metadata provider (for finding information about other artifacts).
+ */
+ public MsgPackClassMeta(ClassMeta<?> cm, MsgPackMetaProvider msgPackMetaProvider) {
+ super(cm);
+ this.msgPack = cm.getInfo().getAnnotation(MsgPack.class);
+ }
+
+ /**
+ * Returns the {@link MsgPack @MsgPack} annotation defined on the class.
+ *
+ * @return The value of the annotation, or <jk>null</jk> if not specified.
+ */
+ protected MsgPack getAnnotation() {
+ return msgPack;
+ }
+}
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/msgpack/MsgPackMetaProvider.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/msgpack/MsgPackMetaProvider.java
new file mode 100644
index 0000000..ca47478
--- /dev/null
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/msgpack/MsgPackMetaProvider.java
@@ -0,0 +1,37 @@
+// ***************************************************************************************************************************
+// * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file *
+// * distributed with this work for additional information regarding copyright ownership. The ASF licenses this file *
+// * to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance *
+// * with the License. You may obtain a copy of the License at *
+// * *
+// * http://www.apache.org/licenses/LICENSE-2.0 *
+// * *
+// * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an *
+// * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the *
+// * specific language governing permissions and limitations under the License. *
+// ***************************************************************************************************************************
+package org.apache.juneau.msgpack;
+
+import org.apache.juneau.*;
+
+/**
+ * Interface for providing access to {@link MsgPackClassMeta} and {@link MsgPackBeanPropertyMeta} objects.
+ */
+public interface MsgPackMetaProvider extends MetaProvider {
+
+ /**
+ * Returns the language-specific metadata on the specified class.
+ *
+ * @param cm The class to return the metadata on.
+ * @return The metadata.
+ */
+ MsgPackClassMeta getMsgPackClassMeta(ClassMeta<?> cm);
+
+ /**
+ * Returns the language-specific metadata on the specified bean property.
+ *
+ * @param bpm The bean property to return the metadata on.
+ * @return The metadata.
+ */
+ MsgPackBeanPropertyMeta getMsgPackBeanPropertyMeta(BeanPropertyMeta bpm);
+}
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/msgpack/MsgPackParser.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/msgpack/MsgPackParser.java
index 34bfc93..b4264ec 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/msgpack/MsgPackParser.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/msgpack/MsgPackParser.java
@@ -12,6 +12,9 @@
// ***************************************************************************************************************************
package org.apache.juneau.msgpack;
+import java.util.*;
+import java.util.concurrent.*;
+
import org.apache.juneau.*;
import org.apache.juneau.annotation.*;
import org.apache.juneau.parser.*;
@@ -24,7 +27,7 @@
* Handles <c>Content-Type</c> types: <bc>octal/msgpack</bc>
*/
@ConfigurableContext
-public class MsgPackParser extends InputStreamParser implements MsgPackCommon {
+public class MsgPackParser extends InputStreamParser implements MsgPackMetaProvider, MsgPackCommon {
//-------------------------------------------------------------------------------------------------------------------
// Configurable properties
@@ -83,6 +86,9 @@
// Instance
//-------------------------------------------------------------------------------------------------------------------
+ private final Map<ClassMeta<?>,MsgPackClassMeta> msgPackClassMetas = new ConcurrentHashMap<>();
+ private final Map<BeanPropertyMeta,MsgPackBeanPropertyMeta> msgPackBeanPropertyMetas = new ConcurrentHashMap<>();
+
/**
* Constructor.
*
@@ -124,6 +130,32 @@
}
//-----------------------------------------------------------------------------------------------------------------
+ // Extended metadata
+ //-----------------------------------------------------------------------------------------------------------------
+
+ @Override /* MsgPackMetaProvider */
+ public MsgPackClassMeta getMsgPackClassMeta(ClassMeta<?> cm) {
+ MsgPackClassMeta m = msgPackClassMetas.get(cm);
+ if (m == null) {
+ m = new MsgPackClassMeta(cm, this);
+ msgPackClassMetas.put(cm, m);
+ }
+ return m;
+ }
+
+ @Override /* MsgPackMetaProvider */
+ public MsgPackBeanPropertyMeta getMsgPackBeanPropertyMeta(BeanPropertyMeta bpm) {
+ if (bpm == null)
+ return MsgPackBeanPropertyMeta.DEFAULT;
+ MsgPackBeanPropertyMeta m = msgPackBeanPropertyMetas.get(bpm);
+ if (m == null) {
+ m = new MsgPackBeanPropertyMeta(bpm.getDelegateFor(), this);
+ msgPackBeanPropertyMetas.put(bpm, m);
+ }
+ return m;
+ }
+
+ //-----------------------------------------------------------------------------------------------------------------
// Other methods
//-----------------------------------------------------------------------------------------------------------------
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/msgpack/MsgPackSerializer.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/msgpack/MsgPackSerializer.java
index 3093033..36924da 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/msgpack/MsgPackSerializer.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/msgpack/MsgPackSerializer.java
@@ -12,6 +12,9 @@
// ***************************************************************************************************************************
package org.apache.juneau.msgpack;
+import java.util.*;
+import java.util.concurrent.*;
+
import org.apache.juneau.*;
import org.apache.juneau.annotation.*;
import org.apache.juneau.serializer.*;
@@ -26,7 +29,7 @@
* Produces <c>Content-Type</c> types: <bc>octal/msgpack</bc>
*/
@ConfigurableContext
-public class MsgPackSerializer extends OutputStreamSerializer implements MsgPackCommon {
+public class MsgPackSerializer extends OutputStreamSerializer implements MsgPackMetaProvider, MsgPackCommon {
//-------------------------------------------------------------------------------------------------------------------
// Configurable properties
@@ -114,6 +117,8 @@
private final boolean
addBeanTypes;
+ private final Map<ClassMeta<?>,MsgPackClassMeta> msgPackClassMetas = new ConcurrentHashMap<>();
+ private final Map<BeanPropertyMeta,MsgPackBeanPropertyMeta> msgPackBeanPropertyMetas = new ConcurrentHashMap<>();
/**
* Constructor.
@@ -157,6 +162,32 @@
}
//-----------------------------------------------------------------------------------------------------------------
+ // Extended metadata
+ //-----------------------------------------------------------------------------------------------------------------
+
+ @Override /* MsgPackMetaProvider */
+ public MsgPackClassMeta getMsgPackClassMeta(ClassMeta<?> cm) {
+ MsgPackClassMeta m = msgPackClassMetas.get(cm);
+ if (m == null) {
+ m = new MsgPackClassMeta(cm, this);
+ msgPackClassMetas.put(cm, m);
+ }
+ return m;
+ }
+
+ @Override /* MsgPackMetaProvider */
+ public MsgPackBeanPropertyMeta getMsgPackBeanPropertyMeta(BeanPropertyMeta bpm) {
+ if (bpm == null)
+ return MsgPackBeanPropertyMeta.DEFAULT;
+ MsgPackBeanPropertyMeta m = msgPackBeanPropertyMetas.get(bpm);
+ if (m == null) {
+ m = new MsgPackBeanPropertyMeta(bpm.getDelegateFor(), this);
+ msgPackBeanPropertyMetas.put(bpm, m);
+ }
+ return m;
+ }
+
+ //-----------------------------------------------------------------------------------------------------------------
// Properties
//-----------------------------------------------------------------------------------------------------------------
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/oapi/OpenApiBeanPropertyMeta.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/oapi/OpenApiBeanPropertyMeta.java
new file mode 100644
index 0000000..416e081
--- /dev/null
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/oapi/OpenApiBeanPropertyMeta.java
@@ -0,0 +1,42 @@
+// ***************************************************************************************************************************
+// * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file *
+// * distributed with this work for additional information regarding copyright ownership. The ASF licenses this file *
+// * to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance *
+// * with the License. You may obtain a copy of the License at *
+// * *
+// * http://www.apache.org/licenses/LICENSE-2.0 *
+// * *
+// * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an *
+// * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the *
+// * specific language governing permissions and limitations under the License. *
+// ***************************************************************************************************************************
+package org.apache.juneau.oapi;
+
+import org.apache.juneau.*;
+import org.apache.juneau.oapi.annotation.*;
+
+/**
+ * Metadata on bean properties specific to the OpenAPI serializers and parsers pulled from the {@link OpenApi @OpenApi}
+ * annotation on the bean property.
+ */
+public final class OpenApiBeanPropertyMeta extends ExtendedBeanPropertyMeta {
+
+ /**
+ * Default instance.
+ */
+ public static final OpenApiBeanPropertyMeta DEFAULT = new OpenApiBeanPropertyMeta();
+
+ /**
+ * Constructor.
+ *
+ * @param bpm The metadata of the bean property of this additional metadata.
+ * @param openApiMetaProvider OpenApi metadata provider (for finding information about other artifacts).
+ */
+ public OpenApiBeanPropertyMeta(BeanPropertyMeta bpm, OpenApiMetaProvider openApiMetaProvider) {
+ super(bpm);
+ }
+
+ private OpenApiBeanPropertyMeta() {
+ super(null);
+ }
+}
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/oapi/OpenApiClassMeta.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/oapi/OpenApiClassMeta.java
new file mode 100644
index 0000000..e65596b
--- /dev/null
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/oapi/OpenApiClassMeta.java
@@ -0,0 +1,45 @@
+// ***************************************************************************************************************************
+// * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file *
+// * distributed with this work for additional information regarding copyright ownership. The ASF licenses this file *
+// * to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance *
+// * with the License. You may obtain a copy of the License at *
+// * *
+// * http://www.apache.org/licenses/LICENSE-2.0 *
+// * *
+// * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an *
+// * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the *
+// * specific language governing permissions and limitations under the License. *
+// ***************************************************************************************************************************
+package org.apache.juneau.oapi;
+
+import org.apache.juneau.*;
+import org.apache.juneau.oapi.annotation.*;
+
+/**
+ * Metadata on classes specific to the OpenApi serializers and parsers pulled from the {@link OpenApi @OpenApi} annotation on
+ * the class.
+ */
+public class OpenApiClassMeta extends ExtendedClassMeta {
+
+ private final OpenApi openApi;
+
+ /**
+ * Constructor.
+ *
+ * @param cm The class that this annotation is defined on.
+ * @param openApiMetaProvider OpenApi metadata provider (for finding information about other artifacts).
+ */
+ public OpenApiClassMeta(ClassMeta<?> cm, OpenApiMetaProvider openApiMetaProvider) {
+ super(cm);
+ this.openApi = cm.getInfo().getAnnotation(OpenApi.class);
+ }
+
+ /**
+ * Returns the {@link OpenApi @OpenApi} annotation defined on the class.
+ *
+ * @return The value of the annotation, or <jk>null</jk> if not specified.
+ */
+ protected OpenApi getAnnotation() {
+ return openApi;
+ }
+}
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/oapi/OpenApiMetaProvider.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/oapi/OpenApiMetaProvider.java
new file mode 100644
index 0000000..d5f9f60
--- /dev/null
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/oapi/OpenApiMetaProvider.java
@@ -0,0 +1,37 @@
+// ***************************************************************************************************************************
+// * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file *
+// * distributed with this work for additional information regarding copyright ownership. The ASF licenses this file *
+// * to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance *
+// * with the License. You may obtain a copy of the License at *
+// * *
+// * http://www.apache.org/licenses/LICENSE-2.0 *
+// * *
+// * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an *
+// * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the *
+// * specific language governing permissions and limitations under the License. *
+// ***************************************************************************************************************************
+package org.apache.juneau.oapi;
+
+import org.apache.juneau.*;
+
+/**
+ * Interface for providing access to {@link OpenApiClassMeta} and {@link OpenApiBeanPropertyMeta} objects.
+ */
+public interface OpenApiMetaProvider extends MetaProvider {
+
+ /**
+ * Returns the language-specific metadata on the specified class.
+ *
+ * @param cm The class to return the metadata on.
+ * @return The metadata.
+ */
+ OpenApiClassMeta getOpenApiClassMeta(ClassMeta<?> cm);
+
+ /**
+ * Returns the language-specific metadata on the specified bean property.
+ *
+ * @param bpm The bean property to return the metadata on.
+ * @return The metadata.
+ */
+ OpenApiBeanPropertyMeta getOpenApiBeanPropertyMeta(BeanPropertyMeta bpm);
+}
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/oapi/OpenApiParser.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/oapi/OpenApiParser.java
index 0a66fd8..7295f00 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/oapi/OpenApiParser.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/oapi/OpenApiParser.java
@@ -12,6 +12,9 @@
// ***************************************************************************************************************************
package org.apache.juneau.oapi;
+import java.util.*;
+import java.util.concurrent.*;
+
import org.apache.juneau.*;
import org.apache.juneau.annotation.*;
import org.apache.juneau.parser.*;
@@ -25,7 +28,7 @@
* </ul>
*/
@ConfigurableContext
-public class OpenApiParser extends UonParser implements OpenApiCommon {
+public class OpenApiParser extends UonParser implements OpenApiMetaProvider, OpenApiCommon {
//-------------------------------------------------------------------------------------------------------------------
// Configurable properties
@@ -45,6 +48,9 @@
// Instance
//-------------------------------------------------------------------------------------------------------------------
+ private final Map<ClassMeta<?>,OpenApiClassMeta> openApiClassMetas = new ConcurrentHashMap<>();
+ private final Map<BeanPropertyMeta,OpenApiBeanPropertyMeta> openApiBeanPropertyMetas = new ConcurrentHashMap<>();
+
/**
* Constructor.
*
@@ -102,6 +108,32 @@
}
//-----------------------------------------------------------------------------------------------------------------
+ // Extended metadata
+ //-----------------------------------------------------------------------------------------------------------------
+
+ @Override /* OpenApiMetaProvider */
+ public OpenApiClassMeta getOpenApiClassMeta(ClassMeta<?> cm) {
+ OpenApiClassMeta m = openApiClassMetas.get(cm);
+ if (m == null) {
+ m = new OpenApiClassMeta(cm, this);
+ openApiClassMetas.put(cm, m);
+ }
+ return m;
+ }
+
+ @Override /* OpenApiMetaProvider */
+ public OpenApiBeanPropertyMeta getOpenApiBeanPropertyMeta(BeanPropertyMeta bpm) {
+ if (bpm == null)
+ return OpenApiBeanPropertyMeta.DEFAULT;
+ OpenApiBeanPropertyMeta m = openApiBeanPropertyMetas.get(bpm);
+ if (m == null) {
+ m = new OpenApiBeanPropertyMeta(bpm.getDelegateFor(), this);
+ openApiBeanPropertyMetas.put(bpm, m);
+ }
+ return m;
+ }
+
+ //-----------------------------------------------------------------------------------------------------------------
// Other methods
//-----------------------------------------------------------------------------------------------------------------
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/oapi/OpenApiSerializer.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/oapi/OpenApiSerializer.java
index f3ee5bd..5eb518a 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/oapi/OpenApiSerializer.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/oapi/OpenApiSerializer.java
@@ -12,6 +12,9 @@
// ***************************************************************************************************************************
package org.apache.juneau.oapi;
+import java.util.*;
+import java.util.concurrent.*;
+
import org.apache.juneau.*;
import org.apache.juneau.annotation.*;
import org.apache.juneau.httppart.*;
@@ -26,7 +29,7 @@
* </ul>
*/
@ConfigurableContext
-public class OpenApiSerializer extends UonSerializer implements OpenApiCommon {
+public class OpenApiSerializer extends UonSerializer implements OpenApiMetaProvider, OpenApiCommon {
//-------------------------------------------------------------------------------------------------------------------
// Configurable properties
@@ -46,6 +49,9 @@
// Instance
//-------------------------------------------------------------------------------------------------------------------
+ private final Map<ClassMeta<?>,OpenApiClassMeta> openApiClassMetas = new ConcurrentHashMap<>();
+ private final Map<BeanPropertyMeta,OpenApiBeanPropertyMeta> openApiBeanPropertyMetas = new ConcurrentHashMap<>();
+
/**
* Constructor.
*
@@ -145,6 +151,32 @@
}
//-----------------------------------------------------------------------------------------------------------------
+ // Extended metadata
+ //-----------------------------------------------------------------------------------------------------------------
+
+ @Override /* OpenApiMetaProvider */
+ public OpenApiClassMeta getOpenApiClassMeta(ClassMeta<?> cm) {
+ OpenApiClassMeta m = openApiClassMetas.get(cm);
+ if (m == null) {
+ m = new OpenApiClassMeta(cm, this);
+ openApiClassMetas.put(cm, m);
+ }
+ return m;
+ }
+
+ @Override /* OpenApiMetaProvider */
+ public OpenApiBeanPropertyMeta getOpenApiBeanPropertyMeta(BeanPropertyMeta bpm) {
+ if (bpm == null)
+ return OpenApiBeanPropertyMeta.DEFAULT;
+ OpenApiBeanPropertyMeta m = openApiBeanPropertyMetas.get(bpm);
+ if (m == null) {
+ m = new OpenApiBeanPropertyMeta(bpm.getDelegateFor(), this);
+ openApiBeanPropertyMetas.put(bpm, m);
+ }
+ return m;
+ }
+
+ //-----------------------------------------------------------------------------------------------------------------
// Other methods
//-----------------------------------------------------------------------------------------------------------------
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/plaintext/PlainTextBeanPropertyMeta.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/plaintext/PlainTextBeanPropertyMeta.java
new file mode 100644
index 0000000..812c67f
--- /dev/null
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/plaintext/PlainTextBeanPropertyMeta.java
@@ -0,0 +1,42 @@
+// ***************************************************************************************************************************
+// * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file *
+// * distributed with this work for additional information regarding copyright ownership. The ASF licenses this file *
+// * to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance *
+// * with the License. You may obtain a copy of the License at *
+// * *
+// * http://www.apache.org/licenses/LICENSE-2.0 *
+// * *
+// * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an *
+// * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the *
+// * specific language governing permissions and limitations under the License. *
+// ***************************************************************************************************************************
+package org.apache.juneau.plaintext;
+
+import org.apache.juneau.*;
+import org.apache.juneau.plaintext.annotation.*;
+
+/**
+ * Metadata on bean properties specific to the PlainText serializers and parsers pulled from the {@link PlainText @PlainText}
+ * annotation on the bean property.
+ */
+public final class PlainTextBeanPropertyMeta extends ExtendedBeanPropertyMeta {
+
+ /**
+ * Default instance.
+ */
+ public static final PlainTextBeanPropertyMeta DEFAULT = new PlainTextBeanPropertyMeta();
+
+ /**
+ * Constructor.
+ *
+ * @param bpm The metadata of the bean property of this additional metadata.
+ * @param plainTextMetaProvider PlainText metadata provider (for finding information about other artifacts).
+ */
+ public PlainTextBeanPropertyMeta(BeanPropertyMeta bpm, PlainTextMetaProvider plainTextMetaProvider) {
+ super(bpm);
+ }
+
+ private PlainTextBeanPropertyMeta() {
+ super(null);
+ }
+}
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/plaintext/PlainTextClassMeta.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/plaintext/PlainTextClassMeta.java
new file mode 100644
index 0000000..6c51b02
--- /dev/null
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/plaintext/PlainTextClassMeta.java
@@ -0,0 +1,45 @@
+// ***************************************************************************************************************************
+// * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file *
+// * distributed with this work for additional information regarding copyright ownership. The ASF licenses this file *
+// * to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance *
+// * with the License. You may obtain a copy of the License at *
+// * *
+// * http://www.apache.org/licenses/LICENSE-2.0 *
+// * *
+// * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an *
+// * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the *
+// * specific language governing permissions and limitations under the License. *
+// ***************************************************************************************************************************
+package org.apache.juneau.plaintext;
+
+import org.apache.juneau.*;
+import org.apache.juneau.plaintext.annotation.*;
+
+/**
+ * Metadata on classes specific to the PlainText serializers and parsers pulled from the {@link PlainText @PlainText} annotation on
+ * the class.
+ */
+public class PlainTextClassMeta extends ExtendedClassMeta {
+
+ private final PlainText plainText;
+
+ /**
+ * Constructor.
+ *
+ * @param cm The class that this annotation is defined on.
+ * @param plainTextMetaProvider PlainText metadata provider (for finding information about other artifacts).
+ */
+ public PlainTextClassMeta(ClassMeta<?> cm, PlainTextMetaProvider plainTextMetaProvider) {
+ super(cm);
+ this.plainText = cm.getInfo().getAnnotation(PlainText.class);
+ }
+
+ /**
+ * Returns the {@link PlainText @PlainText} annotation defined on the class.
+ *
+ * @return The value of the annotation, or <jk>null</jk> if not specified.
+ */
+ protected PlainText getAnnotation() {
+ return plainText;
+ }
+}
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/plaintext/PlainTextMetaProvider.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/plaintext/PlainTextMetaProvider.java
new file mode 100644
index 0000000..f54d883
--- /dev/null
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/plaintext/PlainTextMetaProvider.java
@@ -0,0 +1,37 @@
+// ***************************************************************************************************************************
+// * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file *
+// * distributed with this work for additional information regarding copyright ownership. The ASF licenses this file *
+// * to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance *
+// * with the License. You may obtain a copy of the License at *
+// * *
+// * http://www.apache.org/licenses/LICENSE-2.0 *
+// * *
+// * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an *
+// * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the *
+// * specific language governing permissions and limitations under the License. *
+// ***************************************************************************************************************************
+package org.apache.juneau.plaintext;
+
+import org.apache.juneau.*;
+
+/**
+ * Interface for providing access to {@link PlainTextClassMeta} and {@link PlainTextBeanPropertyMeta} objects.
+ */
+public interface PlainTextMetaProvider extends MetaProvider {
+
+ /**
+ * Returns the language-specific metadata on the specified class.
+ *
+ * @param cm The class to return the metadata on.
+ * @return The metadata.
+ */
+ PlainTextClassMeta getPlainTextClassMeta(ClassMeta<?> cm);
+
+ /**
+ * Returns the language-specific metadata on the specified bean property.
+ *
+ * @param bpm The bean property to return the metadata on.
+ * @return The metadata.
+ */
+ PlainTextBeanPropertyMeta getPlainTextBeanPropertyMeta(BeanPropertyMeta bpm);
+}
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/plaintext/PlainTextParser.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/plaintext/PlainTextParser.java
index 7f7cd69..d6e47f5 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/plaintext/PlainTextParser.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/plaintext/PlainTextParser.java
@@ -12,6 +12,9 @@
// ***************************************************************************************************************************
package org.apache.juneau.plaintext;
+import java.util.*;
+import java.util.concurrent.*;
+
import org.apache.juneau.*;
import org.apache.juneau.annotation.*;
import org.apache.juneau.parser.*;
@@ -39,7 +42,7 @@
* defined on it.
*/
@ConfigurableContext
-public class PlainTextParser extends ReaderParser implements PlainTextCommon {
+public class PlainTextParser extends ReaderParser implements PlainTextMetaProvider, PlainTextCommon {
//-------------------------------------------------------------------------------------------------------------------
// Configurable properties
@@ -59,6 +62,9 @@
// Instance
//-------------------------------------------------------------------------------------------------------------------
+ private final Map<ClassMeta<?>,PlainTextClassMeta> plainTextClassMetas = new ConcurrentHashMap<>();
+ private final Map<BeanPropertyMeta,PlainTextBeanPropertyMeta> plainTextBeanPropertyMetas = new ConcurrentHashMap<>();
+
/**
* Constructor.
*
@@ -112,6 +118,32 @@
}
//-----------------------------------------------------------------------------------------------------------------
+ // Extended metadata
+ //-----------------------------------------------------------------------------------------------------------------
+
+ @Override /* PlainTextMetaProvider */
+ public PlainTextClassMeta getPlainTextClassMeta(ClassMeta<?> cm) {
+ PlainTextClassMeta m = plainTextClassMetas.get(cm);
+ if (m == null) {
+ m = new PlainTextClassMeta(cm, this);
+ plainTextClassMetas.put(cm, m);
+ }
+ return m;
+ }
+
+ @Override /* PlainTextMetaProvider */
+ public PlainTextBeanPropertyMeta getPlainTextBeanPropertyMeta(BeanPropertyMeta bpm) {
+ if (bpm == null)
+ return PlainTextBeanPropertyMeta.DEFAULT;
+ PlainTextBeanPropertyMeta m = plainTextBeanPropertyMetas.get(bpm);
+ if (m == null) {
+ m = new PlainTextBeanPropertyMeta(bpm.getDelegateFor(), this);
+ plainTextBeanPropertyMetas.put(bpm, m);
+ }
+ return m;
+ }
+
+ //-----------------------------------------------------------------------------------------------------------------
// Other methods
//-----------------------------------------------------------------------------------------------------------------
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/plaintext/PlainTextSerializer.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/plaintext/PlainTextSerializer.java
index fc9c17a..43c605e 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/plaintext/PlainTextSerializer.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/plaintext/PlainTextSerializer.java
@@ -12,6 +12,9 @@
// ***************************************************************************************************************************
package org.apache.juneau.plaintext;
+import java.util.*;
+import java.util.concurrent.*;
+
import org.apache.juneau.*;
import org.apache.juneau.annotation.*;
import org.apache.juneau.serializer.*;
@@ -35,7 +38,7 @@
* transform defined on it.
*/
@ConfigurableContext
-public class PlainTextSerializer extends WriterSerializer implements PlainTextCommon {
+public class PlainTextSerializer extends WriterSerializer implements PlainTextMetaProvider, PlainTextCommon {
//-------------------------------------------------------------------------------------------------------------------
// Configurable properties
@@ -55,6 +58,9 @@
// Instance
//-------------------------------------------------------------------------------------------------------------------
+ private final Map<ClassMeta<?>,PlainTextClassMeta> plainTextClassMetas = new ConcurrentHashMap<>();
+ private final Map<BeanPropertyMeta,PlainTextBeanPropertyMeta> plainTextBeanPropertyMetas = new ConcurrentHashMap<>();
+
/**
* Constructor.
*
@@ -128,6 +134,32 @@
}
//-----------------------------------------------------------------------------------------------------------------
+ // Extended metadata
+ //-----------------------------------------------------------------------------------------------------------------
+
+ @Override /* PlainTextMetaProvider */
+ public PlainTextClassMeta getPlainTextClassMeta(ClassMeta<?> cm) {
+ PlainTextClassMeta m = plainTextClassMetas.get(cm);
+ if (m == null) {
+ m = new PlainTextClassMeta(cm, this);
+ plainTextClassMetas.put(cm, m);
+ }
+ return m;
+ }
+
+ @Override /* PlainTextMetaProvider */
+ public PlainTextBeanPropertyMeta getPlainTextBeanPropertyMeta(BeanPropertyMeta bpm) {
+ if (bpm == null)
+ return PlainTextBeanPropertyMeta.DEFAULT;
+ PlainTextBeanPropertyMeta m = plainTextBeanPropertyMetas.get(bpm);
+ if (m == null) {
+ m = new PlainTextBeanPropertyMeta(bpm.getDelegateFor(), this);
+ plainTextBeanPropertyMetas.put(bpm, m);
+ }
+ return m;
+ }
+
+ //-----------------------------------------------------------------------------------------------------------------
// Other methods
//-----------------------------------------------------------------------------------------------------------------
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/soap/SoapXmlBeanPropertyMeta.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/soap/SoapXmlBeanPropertyMeta.java
new file mode 100644
index 0000000..776c7b9
--- /dev/null
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/soap/SoapXmlBeanPropertyMeta.java
@@ -0,0 +1,42 @@
+// ***************************************************************************************************************************
+// * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file *
+// * distributed with this work for additional information regarding copyright ownership. The ASF licenses this file *
+// * to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance *
+// * with the License. You may obtain a copy of the License at *
+// * *
+// * http://www.apache.org/licenses/LICENSE-2.0 *
+// * *
+// * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an *
+// * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the *
+// * specific language governing permissions and limitations under the License. *
+// ***************************************************************************************************************************
+package org.apache.juneau.soap;
+
+import org.apache.juneau.*;
+import org.apache.juneau.soap.annotation.*;
+
+/**
+ * Metadata on bean properties specific to the SOAP/XML serializers and parsers pulled from the {@link SoapXml @SoapXml}
+ * annotation on the bean property.
+ */
+public final class SoapXmlBeanPropertyMeta extends ExtendedBeanPropertyMeta {
+
+ /**
+ * Default instance.
+ */
+ public static final SoapXmlBeanPropertyMeta DEFAULT = new SoapXmlBeanPropertyMeta();
+
+ /**
+ * Constructor.
+ *
+ * @param bpm The metadata of the bean property of this additional metadata.
+ * @param soapXmlMetaProvider SOAP/XML metadata provider (for finding information about other artifacts).
+ */
+ public SoapXmlBeanPropertyMeta(BeanPropertyMeta bpm, SoapXmlMetaProvider soapXmlMetaProvider) {
+ super(bpm);
+ }
+
+ private SoapXmlBeanPropertyMeta() {
+ super(null);
+ }
+}
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/soap/SoapXmlClassMeta.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/soap/SoapXmlClassMeta.java
new file mode 100644
index 0000000..3c47da9
--- /dev/null
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/soap/SoapXmlClassMeta.java
@@ -0,0 +1,45 @@
+// ***************************************************************************************************************************
+// * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file *
+// * distributed with this work for additional information regarding copyright ownership. The ASF licenses this file *
+// * to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance *
+// * with the License. You may obtain a copy of the License at *
+// * *
+// * http://www.apache.org/licenses/LICENSE-2.0 *
+// * *
+// * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an *
+// * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the *
+// * specific language governing permissions and limitations under the License. *
+// ***************************************************************************************************************************
+package org.apache.juneau.soap;
+
+import org.apache.juneau.*;
+import org.apache.juneau.soap.annotation.*;
+
+/**
+ * Metadata on classes specific to the SOAP/XML serializers and parsers pulled from the {@link SoapXml @SoapXml} annotation on
+ * the class.
+ */
+public class SoapXmlClassMeta extends ExtendedClassMeta {
+
+ private final SoapXml soapXml;
+
+ /**
+ * Constructor.
+ *
+ * @param cm The class that this annotation is defined on.
+ * @param soapXmlMetaProvider SOAP/XML metadata provider (for finding information about other artifacts).
+ */
+ public SoapXmlClassMeta(ClassMeta<?> cm, SoapXmlMetaProvider soapXmlMetaProvider) {
+ super(cm);
+ this.soapXml = cm.getInfo().getAnnotation(SoapXml.class);
+ }
+
+ /**
+ * Returns the {@link SoapXml @SoapXml} annotation defined on the class.
+ *
+ * @return The value of the annotation, or <jk>null</jk> if not specified.
+ */
+ protected SoapXml getAnnotation() {
+ return soapXml;
+ }
+}
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/soap/SoapXmlMetaProvider.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/soap/SoapXmlMetaProvider.java
new file mode 100644
index 0000000..1528965
--- /dev/null
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/soap/SoapXmlMetaProvider.java
@@ -0,0 +1,37 @@
+// ***************************************************************************************************************************
+// * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file *
+// * distributed with this work for additional information regarding copyright ownership. The ASF licenses this file *
+// * to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance *
+// * with the License. You may obtain a copy of the License at *
+// * *
+// * http://www.apache.org/licenses/LICENSE-2.0 *
+// * *
+// * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an *
+// * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the *
+// * specific language governing permissions and limitations under the License. *
+// ***************************************************************************************************************************
+package org.apache.juneau.soap;
+
+import org.apache.juneau.*;
+
+/**
+ * Interface for providing access to {@link SoapXmlClassMeta} and {@link SoapXmlBeanPropertyMeta} objects.
+ */
+public interface SoapXmlMetaProvider extends MetaProvider {
+
+ /**
+ * Returns the language-specific metadata on the specified class.
+ *
+ * @param cm The class to return the metadata on.
+ * @return The metadata.
+ */
+ SoapXmlClassMeta getSoapXmlClassMeta(ClassMeta<?> cm);
+
+ /**
+ * Returns the language-specific metadata on the specified bean property.
+ *
+ * @param bpm The bean property to return the metadata on.
+ * @return The metadata.
+ */
+ SoapXmlBeanPropertyMeta getSoapXmlBeanPropertyMeta(BeanPropertyMeta bpm);
+}
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/soap/SoapXmlSerializer.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/soap/SoapXmlSerializer.java
index 1a7ca6a..7a76b6b 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/soap/SoapXmlSerializer.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/soap/SoapXmlSerializer.java
@@ -12,6 +12,9 @@
// ***************************************************************************************************************************
package org.apache.juneau.soap;
+import java.util.*;
+import java.util.concurrent.*;
+
import org.apache.juneau.*;
import org.apache.juneau.annotation.*;
import org.apache.juneau.serializer.*;
@@ -31,7 +34,7 @@
* Essentially the same output as {@link XmlDocSerializer}, except wrapped in a standard SOAP envelope.
*/
@ConfigurableContext
-public final class SoapXmlSerializer extends XmlSerializer implements SoapXmlCommon {
+public final class SoapXmlSerializer extends XmlSerializer implements SoapXmlMetaProvider,SoapXmlCommon {
//-------------------------------------------------------------------------------------------------------------------
// Configurable properties
@@ -61,6 +64,8 @@
//-------------------------------------------------------------------------------------------------------------------
final String soapAction;
+ private final Map<ClassMeta<?>,SoapXmlClassMeta> soapXmlClassMetas = new ConcurrentHashMap<>();
+ private final Map<BeanPropertyMeta,SoapXmlBeanPropertyMeta> soapXmlBeanPropertyMetas = new ConcurrentHashMap<>();
/**
* Constructor.
@@ -104,6 +109,32 @@
}
//-----------------------------------------------------------------------------------------------------------------
+ // Extended metadata
+ //-----------------------------------------------------------------------------------------------------------------
+
+ @Override /* SoapXmlMetaProvider */
+ public SoapXmlClassMeta getSoapXmlClassMeta(ClassMeta<?> cm) {
+ SoapXmlClassMeta m = soapXmlClassMetas.get(cm);
+ if (m == null) {
+ m = new SoapXmlClassMeta(cm, this);
+ soapXmlClassMetas.put(cm, m);
+ }
+ return m;
+ }
+
+ @Override /* SoapXmlMetaProvider */
+ public SoapXmlBeanPropertyMeta getSoapXmlBeanPropertyMeta(BeanPropertyMeta bpm) {
+ if (bpm == null)
+ return SoapXmlBeanPropertyMeta.DEFAULT;
+ SoapXmlBeanPropertyMeta m = soapXmlBeanPropertyMetas.get(bpm);
+ if (m == null) {
+ m = new SoapXmlBeanPropertyMeta(bpm.getDelegateFor(), this);
+ soapXmlBeanPropertyMetas.put(bpm, m);
+ }
+ return m;
+ }
+
+ //-----------------------------------------------------------------------------------------------------------------
// Properties
//-----------------------------------------------------------------------------------------------------------------
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/uon/UonBeanPropertyMeta.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/uon/UonBeanPropertyMeta.java
new file mode 100644
index 0000000..f07afb9
--- /dev/null
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/uon/UonBeanPropertyMeta.java
@@ -0,0 +1,42 @@
+// ***************************************************************************************************************************
+// * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file *
+// * distributed with this work for additional information regarding copyright ownership. The ASF licenses this file *
+// * to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance *
+// * with the License. You may obtain a copy of the License at *
+// * *
+// * http://www.apache.org/licenses/LICENSE-2.0 *
+// * *
+// * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an *
+// * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the *
+// * specific language governing permissions and limitations under the License. *
+// ***************************************************************************************************************************
+package org.apache.juneau.uon;
+
+import org.apache.juneau.*;
+import org.apache.juneau.uon.annotation.*;
+
+/**
+ * Metadata on bean properties specific to the UON serializers and parsers pulled from the {@link Uon @Uon}
+ * annotation on the bean property.
+ */
+public final class UonBeanPropertyMeta extends ExtendedBeanPropertyMeta {
+
+ /**
+ * Default instance.
+ */
+ public static final UonBeanPropertyMeta DEFAULT = new UonBeanPropertyMeta();
+
+ /**
+ * Constructor.
+ *
+ * @param bpm The metadata of the bean property of this additional metadata.
+ * @param uonMetaProvider UON metadata provider (for finding information about other artifacts).
+ */
+ public UonBeanPropertyMeta(BeanPropertyMeta bpm, UonMetaProvider uonMetaProvider) {
+ super(bpm);
+ }
+
+ private UonBeanPropertyMeta() {
+ super(null);
+ }
+}
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/uon/UonClassMeta.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/uon/UonClassMeta.java
new file mode 100644
index 0000000..9ee9da7
--- /dev/null
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/uon/UonClassMeta.java
@@ -0,0 +1,45 @@
+// ***************************************************************************************************************************
+// * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file *
+// * distributed with this work for additional information regarding copyright ownership. The ASF licenses this file *
+// * to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance *
+// * with the License. You may obtain a copy of the License at *
+// * *
+// * http://www.apache.org/licenses/LICENSE-2.0 *
+// * *
+// * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an *
+// * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the *
+// * specific language governing permissions and limitations under the License. *
+// ***************************************************************************************************************************
+package org.apache.juneau.uon;
+
+import org.apache.juneau.*;
+import org.apache.juneau.uon.annotation.*;
+
+/**
+ * Metadata on classes specific to the UON serializers and parsers pulled from the {@link Uon @Uon} annotation on
+ * the class.
+ */
+public class UonClassMeta extends ExtendedClassMeta {
+
+ private final Uon uon;
+
+ /**
+ * Constructor.
+ *
+ * @param cm The class that this annotation is defined on.
+ * @param uonMetaProvider Uon metadata provider (for finding information about other artifacts).
+ */
+ public UonClassMeta(ClassMeta<?> cm, UonMetaProvider uonMetaProvider) {
+ super(cm);
+ this.uon = cm.getInfo().getAnnotation(Uon.class);
+ }
+
+ /**
+ * Returns the {@link Uon @Uon} annotation defined on the class.
+ *
+ * @return The value of the annotation, or <jk>null</jk> if not specified.
+ */
+ protected Uon getAnnotation() {
+ return uon;
+ }
+}
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/uon/UonMetaProvider.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/uon/UonMetaProvider.java
new file mode 100644
index 0000000..b7e6344
--- /dev/null
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/uon/UonMetaProvider.java
@@ -0,0 +1,37 @@
+// ***************************************************************************************************************************
+// * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file *
+// * distributed with this work for additional information regarding copyright ownership. The ASF licenses this file *
+// * to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance *
+// * with the License. You may obtain a copy of the License at *
+// * *
+// * http://www.apache.org/licenses/LICENSE-2.0 *
+// * *
+// * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an *
+// * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the *
+// * specific language governing permissions and limitations under the License. *
+// ***************************************************************************************************************************
+package org.apache.juneau.uon;
+
+import org.apache.juneau.*;
+
+/**
+ * Interface for providing access to {@link UonClassMeta} and {@link UonBeanPropertyMeta} objects.
+ */
+public interface UonMetaProvider extends MetaProvider {
+
+ /**
+ * Returns the language-specific metadata on the specified class.
+ *
+ * @param cm The class to return the metadata on.
+ * @return The metadata.
+ */
+ UonClassMeta getUonClassMeta(ClassMeta<?> cm);
+
+ /**
+ * Returns the language-specific metadata on the specified bean property.
+ *
+ * @param bpm The bean property to return the metadata on.
+ * @return The metadata.
+ */
+ UonBeanPropertyMeta getUonBeanPropertyMeta(BeanPropertyMeta bpm);
+}
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/uon/UonParser.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/uon/UonParser.java
index 68317f1..12296de 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/uon/UonParser.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/uon/UonParser.java
@@ -13,6 +13,8 @@
package org.apache.juneau.uon;
import java.lang.reflect.*;
+import java.util.*;
+import java.util.concurrent.*;
import org.apache.juneau.*;
import org.apache.juneau.annotation.*;
@@ -32,7 +34,7 @@
* This parser uses a state machine, which makes it very fast and efficient.
*/
@ConfigurableContext
-public class UonParser extends ReaderParser implements HttpPartParser, UonCommon {
+public class UonParser extends ReaderParser implements HttpPartParser, UonMetaProvider, UonCommon {
//-------------------------------------------------------------------------------------------------------------------
// Configurable properties
@@ -158,6 +160,8 @@
private final boolean
decoding, validateEnd;
+ private final Map<ClassMeta<?>,UonClassMeta> uonClassMetas = new ConcurrentHashMap<>();
+ private final Map<BeanPropertyMeta,UonBeanPropertyMeta> uonBeanPropertyMetas = new ConcurrentHashMap<>();
/**
* Constructor.
@@ -258,6 +262,32 @@
}
//-----------------------------------------------------------------------------------------------------------------
+ // Extended metadata
+ //-----------------------------------------------------------------------------------------------------------------
+
+ @Override /* UonMetaProvider */
+ public UonClassMeta getUonClassMeta(ClassMeta<?> cm) {
+ UonClassMeta m = uonClassMetas.get(cm);
+ if (m == null) {
+ m = new UonClassMeta(cm, this);
+ uonClassMetas.put(cm, m);
+ }
+ return m;
+ }
+
+ @Override /* UonMetaProvider */
+ public UonBeanPropertyMeta getUonBeanPropertyMeta(BeanPropertyMeta bpm) {
+ if (bpm == null)
+ return UonBeanPropertyMeta.DEFAULT;
+ UonBeanPropertyMeta m = uonBeanPropertyMetas.get(bpm);
+ if (m == null) {
+ m = new UonBeanPropertyMeta(bpm.getDelegateFor(), this);
+ uonBeanPropertyMetas.put(bpm, m);
+ }
+ return m;
+ }
+
+ //-----------------------------------------------------------------------------------------------------------------
// Properties
//-----------------------------------------------------------------------------------------------------------------
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/uon/UonSerializer.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/uon/UonSerializer.java
index cd2525b..2ba44e4 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/uon/UonSerializer.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/uon/UonSerializer.java
@@ -12,6 +12,9 @@
// ***************************************************************************************************************************
package org.apache.juneau.uon;
+import java.util.*;
+import java.util.concurrent.*;
+
import org.apache.juneau.*;
import org.apache.juneau.annotation.*;
import org.apache.juneau.httppart.*;
@@ -116,7 +119,7 @@
* </p>
*/
@ConfigurableContext
-public class UonSerializer extends WriterSerializer implements HttpPartSerializer, UonCommon {
+public class UonSerializer extends WriterSerializer implements HttpPartSerializer, UonMetaProvider, UonCommon {
//-------------------------------------------------------------------------------------------------------------------
// Configurable properties
@@ -313,6 +316,9 @@
private final ParamFormat
paramFormat;
+ private final Map<ClassMeta<?>,UonClassMeta> uonClassMetas = new ConcurrentHashMap<>();
+ private final Map<BeanPropertyMeta,UonBeanPropertyMeta> uonBeanPropertyMetas = new ConcurrentHashMap<>();
+
/**
* Constructor.
*
@@ -413,6 +419,32 @@
}
//-----------------------------------------------------------------------------------------------------------------
+ // Extended metadata
+ //-----------------------------------------------------------------------------------------------------------------
+
+ @Override /* UonMetaProvider */
+ public UonClassMeta getUonClassMeta(ClassMeta<?> cm) {
+ UonClassMeta m = uonClassMetas.get(cm);
+ if (m == null) {
+ m = new UonClassMeta(cm, this);
+ uonClassMetas.put(cm, m);
+ }
+ return m;
+ }
+
+ @Override /* UonMetaProvider */
+ public UonBeanPropertyMeta getUonBeanPropertyMeta(BeanPropertyMeta bpm) {
+ if (bpm == null)
+ return UonBeanPropertyMeta.DEFAULT;
+ UonBeanPropertyMeta m = uonBeanPropertyMetas.get(bpm);
+ if (m == null) {
+ m = new UonBeanPropertyMeta(bpm.getDelegateFor(), this);
+ uonBeanPropertyMetas.put(bpm, m);
+ }
+ return m;
+ }
+
+ //-----------------------------------------------------------------------------------------------------------------
// Properties
//-----------------------------------------------------------------------------------------------------------------
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/urlencoding/UrlEncodingBeanPropertyMeta.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/urlencoding/UrlEncodingBeanPropertyMeta.java
new file mode 100644
index 0000000..324dbd6
--- /dev/null
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/urlencoding/UrlEncodingBeanPropertyMeta.java
@@ -0,0 +1,42 @@
+// ***************************************************************************************************************************
+// * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file *
+// * distributed with this work for additional information regarding copyright ownership. The ASF licenses this file *
+// * to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance *
+// * with the License. You may obtain a copy of the License at *
+// * *
+// * http://www.apache.org/licenses/LICENSE-2.0 *
+// * *
+// * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an *
+// * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the *
+// * specific language governing permissions and limitations under the License. *
+// ***************************************************************************************************************************
+package org.apache.juneau.urlencoding;
+
+import org.apache.juneau.*;
+import org.apache.juneau.urlencoding.annotation.*;
+
+/**
+ * Metadata on bean properties specific to the URL-Encoding serializers and parsers pulled from the {@link UrlEncoding @UrlEncoding}
+ * annotation on the bean property.
+ */
+public final class UrlEncodingBeanPropertyMeta extends ExtendedBeanPropertyMeta {
+
+ /**
+ * Default instance.
+ */
+ public static final UrlEncodingBeanPropertyMeta DEFAULT = new UrlEncodingBeanPropertyMeta();
+
+ /**
+ * Constructor.
+ *
+ * @param bpm The metadata of the bean property of this additional metadata.
+ * @param urlEncodingMetaProvider URL-Encoding metadata provider (for finding information about other artifacts).
+ */
+ public UrlEncodingBeanPropertyMeta(BeanPropertyMeta bpm, UrlEncodingMetaProvider urlEncodingMetaProvider) {
+ super(bpm);
+ }
+
+ private UrlEncodingBeanPropertyMeta() {
+ super(null);
+ }
+}
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/urlencoding/UrlEncodingMetaProvider.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/urlencoding/UrlEncodingMetaProvider.java
index e7d5e2c..dd937c7 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/urlencoding/UrlEncodingMetaProvider.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/urlencoding/UrlEncodingMetaProvider.java
@@ -15,9 +15,9 @@
import org.apache.juneau.*;
/**
- * Interface for providing access to {@link UrlEncodingClassMeta} objects.
+ * Interface for providing access to {@link UrlEncodingClassMeta} and {@link UrlEncodingBeanPropertyMeta} objects.
*/
-public interface UrlEncodingMetaProvider {
+public interface UrlEncodingMetaProvider extends MetaProvider {
/**
* Returns the language-specific metadata on the specified class.
@@ -26,4 +26,12 @@
* @return The metadata.
*/
UrlEncodingClassMeta getUrlEncodingClassMeta(ClassMeta<?> cm);
+
+ /**
+ * Returns the language-specific metadata on the specified bean property.
+ *
+ * @param bpm The bean property to return the metadata on.
+ * @return The metadata.
+ */
+ UrlEncodingBeanPropertyMeta getUrlEncodingBeanPropertyMeta(BeanPropertyMeta bpm);
}
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/urlencoding/UrlEncodingParser.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/urlencoding/UrlEncodingParser.java
index 2bcd867..23331b3 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/urlencoding/UrlEncodingParser.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/urlencoding/UrlEncodingParser.java
@@ -114,6 +114,7 @@
private final boolean expandedParams;
private final Map<ClassMeta<?>,UrlEncodingClassMeta> urlEncodingClassMetas = new ConcurrentHashMap<>();
+ private final Map<BeanPropertyMeta,UrlEncodingBeanPropertyMeta> urlEncodingBeanPropertyMetas = new ConcurrentHashMap<>();
/**
* Constructor.
@@ -180,6 +181,18 @@
return m;
}
+ @Override /* UrlEncodingMetaProvider */
+ public UrlEncodingBeanPropertyMeta getUrlEncodingBeanPropertyMeta(BeanPropertyMeta bpm) {
+ if (bpm == null)
+ return UrlEncodingBeanPropertyMeta.DEFAULT;
+ UrlEncodingBeanPropertyMeta m = urlEncodingBeanPropertyMetas.get(bpm);
+ if (m == null) {
+ m = new UrlEncodingBeanPropertyMeta(bpm.getDelegateFor(), this);
+ urlEncodingBeanPropertyMetas.put(bpm, m);
+ }
+ return m;
+ }
+
//-----------------------------------------------------------------------------------------------------------------
// Properties
//-----------------------------------------------------------------------------------------------------------------
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/urlencoding/UrlEncodingSerializer.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/urlencoding/UrlEncodingSerializer.java
index c25aa20..32ee9b2 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/urlencoding/UrlEncodingSerializer.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/urlencoding/UrlEncodingSerializer.java
@@ -253,6 +253,7 @@
private final boolean
expandedParams;
private final Map<ClassMeta<?>,UrlEncodingClassMeta> urlEncodingClassMetas = new ConcurrentHashMap<>();
+ private final Map<BeanPropertyMeta,UrlEncodingBeanPropertyMeta> urlEncodingBeanPropertyMetas = new ConcurrentHashMap<>();
/**
* Constructor.
@@ -351,6 +352,18 @@
return m;
}
+ @Override /* UrlEncodingMetaProvider */
+ public UrlEncodingBeanPropertyMeta getUrlEncodingBeanPropertyMeta(BeanPropertyMeta bpm) {
+ if (bpm == null)
+ return UrlEncodingBeanPropertyMeta.DEFAULT;
+ UrlEncodingBeanPropertyMeta m = urlEncodingBeanPropertyMetas.get(bpm);
+ if (m == null) {
+ m = new UrlEncodingBeanPropertyMeta(bpm.getDelegateFor(), this);
+ urlEncodingBeanPropertyMetas.put(bpm, m);
+ }
+ return m;
+ }
+
//-----------------------------------------------------------------------------------------------------------------
// Properties
//-----------------------------------------------------------------------------------------------------------------
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/xml/XmlMetaProvider.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/xml/XmlMetaProvider.java
index 668763a..b0082db 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/xml/XmlMetaProvider.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/xml/XmlMetaProvider.java
@@ -17,7 +17,7 @@
/**
* Interface for providing access to {@link XmlClassMeta}, {@link XmlBeanMeta}, and {@link XmlBeanPropertyMeta} objects.
*/
-public interface XmlMetaProvider {
+public interface XmlMetaProvider extends MetaProvider {
/**
* Returns the language-specific metadata on the specified class.