You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cxf.apache.org by co...@apache.org on 2020/03/12 12:40:51 UTC
[cxf] 01/02: CXF-8234 - Add the encoding to the
TransformOutInterceptor XMLStreamWriter
This is an automated email from the ASF dual-hosted git repository.
coheigea pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/cxf.git
commit 36111759cd4534a395750eb5b17ebfec3c60287d
Author: Colm O hEigeartaigh <co...@apache.org>
AuthorDate: Wed Mar 11 14:18:54 2020 +0000
CXF-8234 - Add the encoding to the TransformOutInterceptor XMLStreamWriter
---
.../transform/TransformOutInterceptor.java | 23 +++++++++++++++++-
.../cxf/staxutils/transform/TransformUtils.java | 27 ++++++++++++++++++++--
.../org/apache/cxf/systest/jaxrs/BookStore.java | 5 ++--
3 files changed, 50 insertions(+), 5 deletions(-)
diff --git a/core/src/main/java/org/apache/cxf/interceptor/transform/TransformOutInterceptor.java b/core/src/main/java/org/apache/cxf/interceptor/transform/TransformOutInterceptor.java
index 505c3d1..ba3a242 100644
--- a/core/src/main/java/org/apache/cxf/interceptor/transform/TransformOutInterceptor.java
+++ b/core/src/main/java/org/apache/cxf/interceptor/transform/TransformOutInterceptor.java
@@ -21,6 +21,7 @@ package org.apache.cxf.interceptor.transform;
import java.io.OutputStream;
+import java.nio.charset.StandardCharsets;
import java.util.List;
import java.util.Map;
@@ -28,10 +29,12 @@ import javax.xml.stream.XMLStreamWriter;
import org.apache.cxf.interceptor.StaxOutEndingInterceptor;
import org.apache.cxf.interceptor.StaxOutInterceptor;
+import org.apache.cxf.message.Exchange;
import org.apache.cxf.message.Message;
import org.apache.cxf.message.MessageUtils;
import org.apache.cxf.phase.AbstractPhaseInterceptor;
import org.apache.cxf.phase.Phase;
+import org.apache.cxf.phase.PhaseInterceptorChain;
import org.apache.cxf.staxutils.transform.TransformUtils;
import static org.apache.cxf.interceptor.AbstractOutDatabindingInterceptor.DISABLE_OUTPUTSTREAM_OPTIMIZATION;
@@ -109,14 +112,32 @@ public class TransformOutInterceptor extends AbstractPhaseInterceptor<Message> {
}
}
+ private String getEncoding(Message message) {
+ Exchange ex = message.getExchange();
+ String encoding = (String)message.get(Message.ENCODING);
+ if (encoding == null && ex.getInMessage() != null) {
+ encoding = (String) ex.getInMessage().get(Message.ENCODING);
+ message.put(Message.ENCODING, encoding);
+ }
+
+ if (encoding == null) {
+ encoding = StandardCharsets.UTF_8.name();
+ message.put(Message.ENCODING, encoding);
+ }
+ return encoding;
+ }
+
protected XMLStreamWriter createTransformWriterIfNeeded(XMLStreamWriter writer, OutputStream os) {
+ Message m = PhaseInterceptorChain.getCurrentMessage();
+ String encoding = getEncoding(m);
return TransformUtils.createTransformWriterIfNeeded(writer, os,
outElementsMap,
outDropElements,
outAppendMap,
outAttributesMap,
attributesToElements,
- defaultNamespace);
+ defaultNamespace,
+ encoding);
}
public void setOutTransformElements(Map<String, String> outElements) {
diff --git a/core/src/main/java/org/apache/cxf/staxutils/transform/TransformUtils.java b/core/src/main/java/org/apache/cxf/staxutils/transform/TransformUtils.java
index 04a146f..e2c856b 100644
--- a/core/src/main/java/org/apache/cxf/staxutils/transform/TransformUtils.java
+++ b/core/src/main/java/org/apache/cxf/staxutils/transform/TransformUtils.java
@@ -43,7 +43,16 @@ public final class TransformUtils {
}
public static XMLStreamWriter createNewWriterIfNeeded(XMLStreamWriter writer, OutputStream os) {
- return writer == null ? StaxUtils.createXMLStreamWriter(os) : writer;
+ return createNewWriterIfNeeded(writer, os, null);
+ }
+
+ public static XMLStreamWriter createNewWriterIfNeeded(XMLStreamWriter writer, OutputStream os, String encoding) {
+ if (writer != null) {
+ return writer;
+ } else if (encoding != null) {
+ return StaxUtils.createXMLStreamWriter(os, encoding);
+ }
+ return StaxUtils.createXMLStreamWriter(os);
}
public static XMLStreamWriter createTransformWriterIfNeeded(XMLStreamWriter writer,
@@ -70,9 +79,23 @@ public final class TransformUtils {
Map<String, String> outAttributesMap,
boolean attributesToElements,
String defaultNamespace) {
+ return createTransformWriterIfNeeded(writer, os, outElementsMap, outDropElements,
+ outAppendMap, outAttributesMap, attributesToElements,
+ defaultNamespace, null);
+ }
+
+ public static XMLStreamWriter createTransformWriterIfNeeded(XMLStreamWriter writer,
+ OutputStream os,
+ Map<String, String> outElementsMap,
+ List<String> outDropElements,
+ Map<String, String> outAppendMap,
+ Map<String, String> outAttributesMap,
+ boolean attributesToElements,
+ String defaultNamespace,
+ String encoding) {
if (outElementsMap != null || outDropElements != null
|| outAppendMap != null || attributesToElements) {
- writer = new OutTransformWriter(createNewWriterIfNeeded(writer, os), outElementsMap, outAppendMap,
+ writer = new OutTransformWriter(createNewWriterIfNeeded(writer, os, encoding), outElementsMap, outAppendMap,
outDropElements, outAttributesMap, attributesToElements, defaultNamespace);
}
return writer;
diff --git a/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/BookStore.java b/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/BookStore.java
index 17898b9..6418293 100644
--- a/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/BookStore.java
+++ b/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/BookStore.java
@@ -1509,7 +1509,8 @@ public class BookStore {
String ct1 = httpHeaders.getMediaType().toString();
String ct2 = httpHeaders.getRequestHeader("Content-Type").get(0);
String ct3 = httpHeaders.getRequestHeaders().getFirst("Content-Type");
- if (!("application/xml".equals(ct1) && ct1.equals(ct2) && ct1.equals(ct3))) {
+ if (!(ct1.startsWith("application/xml") && ct2.startsWith("application/xml")
+ && ct3.startsWith("application/xml"))) {
throw new RuntimeException("Unexpected content type");
}
@@ -1704,7 +1705,7 @@ public class BookStore {
return Response.accepted(name).build();
}
-
+
@POST
@Path("/empty202")
@Consumes("text/plain")