[
https://issues.apache.org/jira/browse/CXF-7520?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16343379#comment-16343379
]
ASF GitHub Bot commented on CXF-7520:
-------------------------------------
jimma closed pull request #371: [CXF-7520]:Set NoEscapeHandler for fastinfoset
content type;Fix couple of test failures
URL: https://github.com/apache/cxf/pull/371
This is a PR merged from a forked repository.
As GitHub hides the original diff on merge, it is displayed below for
the sake of provenance:
As this is a foreign pull request (from a fork), the diff is supplied
below (as it won't show otherwise due to GitHub magic):
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 fb2d51fd1bb..352fc92e15a 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.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 @@
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 @@ private static String getPostfix(Class<?> cls) {
}
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 static Object createEscapeHandler(Class<?> cls) {
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 6a9648d60cf..20ab5c21e56 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
@@ -243,20 +243,26 @@ public JAXBDataBinding(JAXBContext context) {
this();
setContext(context);
}
-
+
public JAXBContext getContext() {
return context;
}
public final void setContext(JAXBContext ctx) {
context = ctx;
- escapeHandler = JAXBUtils.createEscapeHandler(ctx.getClass());
+ //create default MininumEscapeHandler
+ escapeHandler = JAXBUtils.createMininumEscapeHandler(ctx.getClass());
}
public Object getEscapeHandler() {
return escapeHandler;
}
+ public void setEscapeHandler(Object handler) {
+ escapeHandler = handler;
+
+ }
+
@SuppressWarnings("unchecked")
public <T> DataWriter<T> createWriter(Class<T> c) {
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 a8ae15a3406..b342c32b969 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 @@
ValidationEventHandler veventHandler;
boolean setEventHandler = true;
+ boolean noEscape;
private JAXBDataBinding databinding;
public DataWriterImpl(JAXBDataBinding binding) {
@@ -79,6 +80,10 @@ public void setProperty(String prop, Object value) {
}
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,11 @@ public Marshaller createMarshaller(Object elValue,
MessagePartInfo part) {
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 || databinding.getEscapeHandler() == null) {
+ 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 c42c26d8a35..5c0d10c057f 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)
diff --git
a/rt/ws/addr/src/main/java/org/apache/cxf/ws/addressing/soap/MAPCodec.java
b/rt/ws/addr/src/main/java/org/apache/cxf/ws/addressing/soap/MAPCodec.java
index 4967467ba29..f1348147fad 100644
--- a/rt/ws/addr/src/main/java/org/apache/cxf/ws/addressing/soap/MAPCodec.java
+++ b/rt/ws/addr/src/main/java/org/apache/cxf/ws/addressing/soap/MAPCodec.java
@@ -715,8 +715,10 @@ private AddressingProperties decode(SoapMessage message) {
Class<T> clz,
JAXBContext ctx,
boolean mustUnderstand) throws JAXBException {
+ JAXBDataBinding jaxbDataBinding = new JAXBDataBinding(ctx);
+ jaxbDataBinding.setEscapeHandler(null);
SoapHeader h = new SoapHeader(qname, new JAXBElement<T>(qname, clz,
value),
- new JAXBDataBinding(ctx));
+ jaxbDataBinding);
h.setMustUnderstand(mustUnderstand);
message.getHeaders().add(h);
}
diff --git
a/testutils/src/main/java/org/apache/cxf/testutil/common/ServerLauncher.java
b/testutils/src/main/java/org/apache/cxf/testutil/common/ServerLauncher.java
index ed2f0bf0291..873c40fac95 100644
--- a/testutils/src/main/java/org/apache/cxf/testutil/common/ServerLauncher.java
+++ b/testutils/src/main/java/org/apache/cxf/testutil/common/ServerLauncher.java
@@ -30,6 +30,7 @@
import java.net.URL;
import java.net.URLClassLoader;
import java.nio.file.Files;
+import java.nio.file.NoSuchFileException;
import java.nio.file.Paths;
import java.util.ArrayList;
import java.util.HashMap;
@@ -287,17 +288,21 @@ public void run() {
try {
try {
os = Files.newOutputStream(Paths.get(outputDir + className
+ ".out"));
- } catch (FileNotFoundException fex) {
- outputDir = System.getProperty("basedir");
- if (outputDir == null) {
- outputDir = "target/surefire-reports/";
+ } catch (IOException ioe) {
+ if (ioe instanceof FileNotFoundException || ioe instanceof
NoSuchFileException) {
+ outputDir = System.getProperty("basedir");
+ if (outputDir == null) {
+ outputDir = "target/surefire-reports/";
+ } else {
+ outputDir += "/target/surefire-reports/";
+ }
+
+ File file = new File(outputDir);
+ file.mkdirs();
+ os = Files.newOutputStream(Paths.get(outputDir +
className + ".out"));
} else {
- outputDir += "/target/surefire-reports/";
+ throw ioe;
}
-
- File file = new File(outputDir);
- file.mkdirs();
- os = Files.newOutputStream(Paths.get(outputDir + className
+ ".out"));
}
} catch (IOException ex) {
if (!ex.getMessage().contains("Stream closed")) {
----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on GitHub and use the
URL above to go to the specific comment.
For queries about this service, please contact Infrastructure at:
[email protected]
> Ensure CXF can build with JDK9.0.1 and JDK8_161
> -----------------------------------------------
>
> Key: CXF-7520
> URL: https://issues.apache.org/jira/browse/CXF-7520
> Project: CXF
> Issue Type: Bug
> Reporter: Freeman Fang
> Assignee: Freeman Fang
> Priority: Major
> Fix For: 3.2.2
>
>
> a couple of cxf test failied with JDK9 GA due to recent change
> Mainly in JAXB and SAAJ
--
This message was sent by Atlassian JIRA
(v7.6.3#76005)