...
diff --git a/src/mapper/java/org/codehaus/jackson/map/DeserializationConfig.java b/src/mapper/java/org/codehaus/jackson/map/DeserializationConfig.java
index f87ab6c..5d455a6 100644
--- a/src/mapper/java/org/codehaus/jackson/map/DeserializationConfig.java
+++ b/src/mapper/java/org/codehaus/jackson/map/DeserializationConfig.java
@@ -179,6 +179,23 @@
* @since 1.2
*/
FAIL_ON_UNKNOWN_PROPERTIES(true)
+
+ // // // Structural changes
+
+ /**
+ * Feature that can be enabled to handle "wrapped" values
+ * (see {@link SerializationConfig.Feature#WRAP_ROOT_VALUE}
+ * for details).
+ * If enabled, value being deserialized must be a single-property
+ * JSON Object where the key name matches expected "root name"
+ * (determined using annotation, or if none, fallback which is
+ * the unqualified class name of the expected value)
+ *<p>
+ * Default setting is false, meaning root value is not wrapped.
+ *
+ * @since 1.3
+ */
+ ,WRAP_ROOT_VALUE(false)
;
final boolean _defaultState;
diff --git a/src/mapper/java/org/codehaus/jackson/map/SerializationConfig.java b/src/mapper/java/org/codehaus/jackson/map/SerializationConfig.java
index ee7ce73..88a143e 100644
--- a/src/mapper/java/org/codehaus/jackson/map/SerializationConfig.java
+++ b/src/mapper/java/org/codehaus/jackson/map/SerializationConfig.java
@@ -136,6 +136,21 @@
*/
,USE_STATIC_TYPING(false)
+ /**
+ * Feature that can be enabled to make root value (usually JSON
+ * Object but can be any type) wrapped within a single property
+ * JSON object, where key as the "root name", as determined by
+ * annotation introspector (esp. for JAXB that uses
+ * <code>@XmlRootElement.name</code>) or fallback (non-qualified
+ * class name).
+ * Feature is mostly intended for JAXB compatibility.
+ *<p>
+ * Default setting is false, meaning root value is not wrapped.
+ *
+ * @since 1.3
+ */
+ ,WRAP_ROOT_VALUE(false)
+
// // // Features for datatype-specific serialization
/**
diff --git a/src/test/org/codehaus/jackson/io/TestIOContext.java b/src/test/org/codehaus/jackson/io/TestIOContext.java
new file mode 100644
index 0000000..353b955
--- /dev/null
+++ b/src/test/org/codehaus/jackson/io/TestIOContext.java
@@ -0,0 +1,94 @@
+package org.codehaus.jackson.io;
+
+import java.io.*;
+
+import org.codehaus.jackson.util.BufferRecycler;
+
+public class TestIOContext
+ extends main.BaseTest
+{
+ public void testAllocations() throws Exception
+ {
+ IOContext ctxt = new IOContext(new BufferRecycler(), "N/A", true);
+
+ /* I/O Read buffer */
+
+ // First succeeds:
+ assertNotNull(ctxt.allocReadIOBuffer());
+ // second fails
+ try {
+ ctxt.allocReadIOBuffer();
+ } catch (IllegalStateException e) {
+ verifyException(e, "second time");
+ }
+ // Also: can't succeed with different buffer
+ try {
+ ctxt.releaseReadIOBuffer(new byte[1]);
+ } catch (IllegalArgumentException e) {
+ verifyException(e, "not owned");
+ }
+ // but call with null is a NOP for convenience
+ ctxt.releaseReadIOBuffer(null);
+
+ /* I/O Write buffer */
+
+ assertNotNull(ctxt.allocWriteIOBuffer());
+ try {
+ ctxt.allocWriteIOBuffer();
+ } catch (IllegalStateException e) {
+ verifyException(e, "second time");
+ }
+ try {
+ ctxt.releaseWriteIOBuffer(new byte[1]);
+ } catch (IllegalArgumentException e) {
+ verifyException(e, "not owned");
+ }
+ ctxt.releaseWriteIOBuffer(null);
+
+ /* Token (read) buffer */
+
+ assertNotNull(ctxt.allocTokenBuffer());
+ try {
+ ctxt.allocTokenBuffer();
+ } catch (IllegalStateException e) {
+ verifyException(e, "second time");
+ }
+ try {
+ ctxt.releaseTokenBuffer(new char[1]);
+ } catch (IllegalArgumentException e) {
+ verifyException(e, "not owned");
+ }
+ ctxt.releaseTokenBuffer(null);
+
+ /* Concat (write?) buffer */
+
+ assertNotNull(ctxt.allocConcatBuffer());
+ try {
+ ctxt.allocConcatBuffer();
+ } catch (IllegalStateException e) {
+ verifyException(e, "second time");
+ }
+ try {
+ ctxt.releaseConcatBuffer(new char[1]);
+ } catch (IllegalArgumentException e) {
+ verifyException(e, "not owned");
+ }
+ ctxt.releaseConcatBuffer(null);
+
+ /* NameCopy (write?) buffer */
+
+ assertNotNull(ctxt.allocNameCopyBuffer(100));
+ try {
+ ctxt.allocNameCopyBuffer(100);
+ } catch (IllegalStateException e) {
+ verifyException(e, "second time");
+ }
+ try {
+ ctxt.releaseNameCopyBuffer(new char[1]);
+ } catch (IllegalArgumentException e) {
+ verifyException(e, "not owned");
+ }
+ ctxt.releaseNameCopyBuffer(null);
+ }
+}
+