Prevent recursive wrapping
diff --git a/johnzon-mapper/src/main/java/org/apache/johnzon/mapper/FactoryCreateException.java b/johnzon-mapper/src/main/java/org/apache/johnzon/mapper/FactoryCreateException.java
new file mode 100644
index 0000000..1b8fc3d
--- /dev/null
+++ b/johnzon-mapper/src/main/java/org/apache/johnzon/mapper/FactoryCreateException.java
@@ -0,0 +1,29 @@
+/*
+ * 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.johnzon.mapper;
+
+import javax.json.JsonObject;
+import java.lang.reflect.Type;
+
+public class FactoryCreateException extends MapperException {
+ public FactoryCreateException(final Type type, final JsonObject object, final String snippet, final Exception e) {
+ super(String.format("%s cannot be constructed to deserialize %s: %s%n%s",
+ ExceptionMessages.simpleName(type), ExceptionMessages.description(object),
+ snippet, e.getMessage()
+ ), e);
+ }
+}
diff --git a/johnzon-mapper/src/main/java/org/apache/johnzon/mapper/MappingParserImpl.java b/johnzon-mapper/src/main/java/org/apache/johnzon/mapper/MappingParserImpl.java
index 36f3a28..f98edb6 100644
--- a/johnzon-mapper/src/main/java/org/apache/johnzon/mapper/MappingParserImpl.java
+++ b/johnzon-mapper/src/main/java/org/apache/johnzon/mapper/MappingParserImpl.java
@@ -383,12 +383,11 @@
} else {
t = classMapping.factory.create(createParameters(classMapping, object, jsonPointer));
}
+ } catch (FactoryCreateException e){
+ throw e;
} catch (Exception e) {
- final String message = String.format("%s cannot be constructed to deserialize %s: %s%n%s",
- ExceptionMessages.simpleName(type), ExceptionMessages.description(object),
- config.getSnippet().of(object), e.getMessage()
- );
- throw new MapperException(message, e);
+ final String snippet = config.getSnippet().of(object);
+ throw new FactoryCreateException(type, object, snippet, e);
}
// store the new object under it's jsonPointer in case it gets referenced later