You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cxf.apache.org by em...@apache.org on 2018/01/29 14:06:56 UTC
[cxf] 01/02: [CXF-7520]:Set NoEscapeHandler for fastinfoset content
type to fix couple of test failures; Fix javascript test
This is an automated email from the ASF dual-hosted git repository.
ema pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/cxf.git
commit 4d5e77d6be0f39b298840a033d82cc173d590bbf
Author: Jim Ma <em...@apache.org>
AuthorDate: Fri Jan 26 13:26:46 2018 +0800
[CXF-7520]:Set NoEscapeHandler for fastinfoset content type to fix couple of test failures; Fix javascript test
---
.../java/org/apache/cxf/common/jaxb/JAXBUtils.java | 46 ++++++++++++++++------
.../java/org/apache/cxf/jaxb/JAXBDataBinding.java | 2 +-
.../org/apache/cxf/jaxb/io/DataWriterImpl.java | 12 +++++-
.../src/test/resources/deserializationTests.js | 5 ++-
4 files changed, 50 insertions(+), 15 deletions(-)
diff --git a/core/src/main/java/org/apache/cxf/common/jaxb/JAXBUtils.java b/core/src/main/java/org/apache/cxf/common/jaxb/JAXBUtils.java
index fb2d51f..352fc92 100644
--- a/core/src/main/java/org/apache/cxf/common/jaxb/JAXBUtils.java
+++ b/core/src/main/java/org/apache/cxf/common/jaxb/JAXBUtils.java
@@ -46,6 +46,7 @@ import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
+import java.util.Optional;
import java.util.Set;
import java.util.StringTokenizer;
import java.util.logging.Level;
@@ -124,7 +125,8 @@ public final class JAXBUtils {
private static final Map<String, String> BUILTIN_DATATYPES_MAP;
private static final Map<String, Class<?>> HOLDER_TYPES_MAP;
private static ClassLoader jaxbXjcLoader;
- private static volatile Object jaxbEscapeHandler;
+ private static volatile Optional<Object> jaxbMinimumEscapeHandler;
+ private static volatile Optional<Object> jaxbNoEscapeHandler;
static {
BUILTIN_DATATYPES_MAP = new HashMap<>();
@@ -1543,32 +1545,55 @@ public final class JAXBUtils {
}
return null;
}
+
public static void setMinimumEscapeHandler(Marshaller marshaller) {
- if (jaxbEscapeHandler == null) {
- jaxbEscapeHandler = createEscapeHandler(marshaller.getClass());
+ if (jaxbMinimumEscapeHandler == null) {
+ jaxbMinimumEscapeHandler = Optional.ofNullable(createMininumEscapeHandler(marshaller.getClass()));
+ }
+ //if escape handler class is not loaded
+ if (jaxbMinimumEscapeHandler.isPresent()) {
+ setEscapeHandler(marshaller, jaxbMinimumEscapeHandler.get());
+ }
+
+ }
+
+ public static void setNoEscapeHandler(Marshaller marshaller) {
+ if (jaxbNoEscapeHandler == null) {
+ jaxbNoEscapeHandler = Optional.ofNullable(createNoEscapeHandler(marshaller.getClass()));
+ }
+ //if escape handler class is not loaded
+ if (jaxbNoEscapeHandler.isPresent()) {
+ setEscapeHandler(marshaller, jaxbNoEscapeHandler.get());
}
- setMinimumEscapeHandler(marshaller, jaxbEscapeHandler);
}
- public static void setMinimumEscapeHandler(Marshaller marshaller, Object escapeHandler) {
+
+ public static void setEscapeHandler(Marshaller marshaller, Object escapeHandler) {
try {
String postFix = getPostfix(marshaller.getClass());
marshaller.setProperty("com.sun.xml" + postFix + ".bind.characterEscapeHandler", escapeHandler);
} catch (PropertyException e) {
- e.printStackTrace();
LOG.log(Level.INFO, "Failed to set MinumEscapeHandler to jaxb marshaller", e);
}
}
- public static Object createEscapeHandler(Class<?> cls) {
+ public static Object createMininumEscapeHandler(Class<?> cls) {
+ return createEscapeHandler(cls, "MinimumEscapeHandler");
+ }
+
+ public static Object createNoEscapeHandler(Class<?> cls) {
+ return createEscapeHandler(cls, "NoEscapeHandler");
+ }
+
+ private static Object createEscapeHandler(Class<?> cls, String simpleClassName) {
try {
String postFix = getPostfix(cls);
if (postFix == null) {
- LOG.log(Level.WARNING, "Failed to create MinumEscapeHandler for unknown jaxb class:"
+ LOG.log(Level.WARNING, "Failed to create" + simpleClassName + " for unknown jaxb class:"
+ cls);
return null;
}
Class<?> handlerClass = ClassLoaderUtils.loadClass("com.sun.xml" + postFix
- + ".bind.marshaller.MinimumEscapeHandler",
+ + ".bind.marshaller." + simpleClassName,
cls);
Class<?> handlerInterface = ClassLoaderUtils
.loadClass("com.sun.xml" + postFix + ".bind.marshaller.CharacterEscapeHandler",
@@ -1578,8 +1603,7 @@ public final class JAXBUtils {
new Class[] {handlerInterface},
new EscapeHandlerInvocationHandler(targetHandler));
} catch (Exception e) {
- e.printStackTrace();
- LOG.log(Level.INFO, "Failed to create MinumEscapeHandler", e);
+ LOG.log(Level.INFO, "Failed to create " + simpleClassName);
}
return null;
}
diff --git a/rt/databinding/jaxb/src/main/java/org/apache/cxf/jaxb/JAXBDataBinding.java b/rt/databinding/jaxb/src/main/java/org/apache/cxf/jaxb/JAXBDataBinding.java
index 6a9648d..98e0635 100644
--- a/rt/databinding/jaxb/src/main/java/org/apache/cxf/jaxb/JAXBDataBinding.java
+++ b/rt/databinding/jaxb/src/main/java/org/apache/cxf/jaxb/JAXBDataBinding.java
@@ -250,7 +250,7 @@ public class JAXBDataBinding extends AbstractInterceptorProvidingDataBinding
public final void setContext(JAXBContext ctx) {
context = ctx;
- escapeHandler = JAXBUtils.createEscapeHandler(ctx.getClass());
+ escapeHandler = JAXBUtils.createMininumEscapeHandler(ctx.getClass());
}
public Object getEscapeHandler() {
diff --git a/rt/databinding/jaxb/src/main/java/org/apache/cxf/jaxb/io/DataWriterImpl.java b/rt/databinding/jaxb/src/main/java/org/apache/cxf/jaxb/io/DataWriterImpl.java
index a8ae15a..db7c424 100644
--- a/rt/databinding/jaxb/src/main/java/org/apache/cxf/jaxb/io/DataWriterImpl.java
+++ b/rt/databinding/jaxb/src/main/java/org/apache/cxf/jaxb/io/DataWriterImpl.java
@@ -59,6 +59,7 @@ public class DataWriterImpl<T> extends JAXBDataBase implements DataWriter<T> {
ValidationEventHandler veventHandler;
boolean setEventHandler = true;
+ boolean noEscape;
private JAXBDataBinding databinding;
public DataWriterImpl(JAXBDataBinding binding) {
@@ -79,6 +80,10 @@ public class DataWriterImpl<T> extends JAXBDataBase implements DataWriter<T> {
}
setEventHandler = MessageUtils.getContextualBoolean(m,
JAXBDataBinding.SET_VALIDATION_EVENT_HANDLER, true);
+ Object contentType = m.get(org.apache.cxf.message.Message.CONTENT_TYPE);
+ if (contentType != null && contentType.toString().contains("fastinfoset")) {
+ noEscape = true;
+ }
}
}
@@ -130,7 +135,12 @@ public class DataWriterImpl<T> extends JAXBDataBase implements DataWriter<T> {
marshaller.setProperty(Marshaller.JAXB_FRAGMENT, true);
marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, Boolean.FALSE);
marshaller.setListener(databinding.getMarshallerListener());
- JAXBUtils.setMinimumEscapeHandler(marshaller, databinding.getEscapeHandler());
+ if (noEscape) {
+ JAXBUtils.setNoEscapeHandler(marshaller);
+ } else {
+ JAXBUtils.setEscapeHandler(marshaller, databinding.getEscapeHandler());
+
+ }
if (setEventHandler) {
ValidationEventHandler h = veventHandler;
diff --git a/rt/javascript/javascript-tests/src/test/resources/deserializationTests.js b/rt/javascript/javascript-tests/src/test/resources/deserializationTests.js
index c42c26d..5c0d10c 100644
--- a/rt/javascript/javascript-tests/src/test/resources/deserializationTests.js
+++ b/rt/javascript/javascript-tests/src/test/resources/deserializationTests.js
@@ -34,8 +34,9 @@ function deserializeTestBean3_1(xmlString)
{
var dom = parseXml(xmlString);
var bean = org_apache_cxf_javascript_testns_testBean1_deserialize(jsutils, dom);
- if(bean.getStringItem() != "bean1>stringItem")
- assertionFailed("deserializeTestBean3_1 stringItem " + bean.getStringItem());
+ //since jdk1.8_161 and jdk9 escape '>' character
+ if(bean.getStringItem() != "bean1>stringItem" && bean.getStringItem() != "bean1>stringItem")
+ assertionFailed("deserializeTestBean3_1 stringItem " + bean.getStringItem());
if(bean.getIntItem() != 43)
assertionFailed("deserializeTestBean3_1 intItem " + bean.getIntItem());
if(bean.getLongItem() != 0)
--
To stop receiving notification emails like this one, please contact
ema@apache.org.