You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ws.apache.org by ve...@apache.org on 2016/05/14 12:05:20 UTC
svn commit: r1743819 - in /webservices/axiom/trunk/aspects/core-aspects/src:
main/java/org/apache/axiom/core/stream/serializer/
test/java/org/apache/axiom/core/stream/serializer/
Author: veithen
Date: Sat May 14 12:05:19 2016
New Revision: 1743819
URL: http://svn.apache.org/viewvc?rev=1743819&view=rev
Log:
Generalize the unmappable character handling.
Added:
webservices/axiom/trunk/aspects/core-aspects/src/main/java/org/apache/axiom/core/stream/serializer/UnmappableCharacterHandler.java (with props)
Modified:
webservices/axiom/trunk/aspects/core-aspects/src/main/java/org/apache/axiom/core/stream/serializer/OutputStreamXmlWriter.java
webservices/axiom/trunk/aspects/core-aspects/src/main/java/org/apache/axiom/core/stream/serializer/WriterToASCI.java
webservices/axiom/trunk/aspects/core-aspects/src/main/java/org/apache/axiom/core/stream/serializer/WriterToUTF8Buffered.java
webservices/axiom/trunk/aspects/core-aspects/src/main/java/org/apache/axiom/core/stream/serializer/WriterXmlWriter.java
webservices/axiom/trunk/aspects/core-aspects/src/main/java/org/apache/axiom/core/stream/serializer/XmlWriter.java
webservices/axiom/trunk/aspects/core-aspects/src/test/java/org/apache/axiom/core/stream/serializer/OutputStreamXmlWriterTest.java
Modified: webservices/axiom/trunk/aspects/core-aspects/src/main/java/org/apache/axiom/core/stream/serializer/OutputStreamXmlWriter.java
URL: http://svn.apache.org/viewvc/webservices/axiom/trunk/aspects/core-aspects/src/main/java/org/apache/axiom/core/stream/serializer/OutputStreamXmlWriter.java?rev=1743819&r1=1743818&r2=1743819&view=diff
==============================================================================
--- webservices/axiom/trunk/aspects/core-aspects/src/main/java/org/apache/axiom/core/stream/serializer/OutputStreamXmlWriter.java (original)
+++ webservices/axiom/trunk/aspects/core-aspects/src/main/java/org/apache/axiom/core/stream/serializer/OutputStreamXmlWriter.java Sat May 14 12:05:19 2016
@@ -31,6 +31,7 @@ final class OutputStreamXmlWriter extend
private final CharBuffer encoderIn;
private final ByteBuffer encoderOut;
private final CharsetEncoder encoder;
+ private UnmappableCharacterHandler unmappableCharacterHandler = UnmappableCharacterHandler.THROW_EXCEPTION;
private boolean processingUnmappableCharacter;
private CharBuffer encoderInAlt;
@@ -74,7 +75,7 @@ final class OutputStreamXmlWriter extend
try {
switch (coderResult.length()) {
case 1:
- writeCharacterReference(encoderIn.get());
+ unmappableCharacterHandler.processUnmappableCharacter(encoderIn.get(), this);
break;
case 2:
throw new UnsupportedOperationException("TODO");
@@ -91,6 +92,14 @@ final class OutputStreamXmlWriter extend
}
}
+ @Override
+ void setUnmappableCharacterHandler(UnmappableCharacterHandler unmappableCharacterHandler) throws IOException {
+ if (unmappableCharacterHandler != this.unmappableCharacterHandler) {
+ flush(encoderIn);
+ this.unmappableCharacterHandler = unmappableCharacterHandler;
+ }
+ }
+
@Override
void write(char c) throws IOException {
CharBuffer encoderIn = getEncoderIn();
Added: webservices/axiom/trunk/aspects/core-aspects/src/main/java/org/apache/axiom/core/stream/serializer/UnmappableCharacterHandler.java
URL: http://svn.apache.org/viewvc/webservices/axiom/trunk/aspects/core-aspects/src/main/java/org/apache/axiom/core/stream/serializer/UnmappableCharacterHandler.java?rev=1743819&view=auto
==============================================================================
--- webservices/axiom/trunk/aspects/core-aspects/src/main/java/org/apache/axiom/core/stream/serializer/UnmappableCharacterHandler.java (added)
+++ webservices/axiom/trunk/aspects/core-aspects/src/main/java/org/apache/axiom/core/stream/serializer/UnmappableCharacterHandler.java Sat May 14 12:05:19 2016
@@ -0,0 +1,39 @@
+/*
+ * 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.axiom.core.stream.serializer;
+
+import java.io.IOException;
+
+abstract class UnmappableCharacterHandler {
+ static final UnmappableCharacterHandler THROW_EXCEPTION = new UnmappableCharacterHandler() {
+ @Override
+ void processUnmappableCharacter(int codePoint, XmlWriter writer) throws IOException {
+ throw new IOException("Unmappable character (code point " + codePoint + ")");
+ }
+ };
+
+ static final UnmappableCharacterHandler CONVERT_TO_CHARACTER_REFERENCE = new UnmappableCharacterHandler() {
+ @Override
+ void processUnmappableCharacter(int codePoint, XmlWriter writer) throws IOException {
+ writer.writeCharacterReference(codePoint);
+ }
+ };
+
+ abstract void processUnmappableCharacter(int codePoint, XmlWriter writer) throws IOException;
+}
Propchange: webservices/axiom/trunk/aspects/core-aspects/src/main/java/org/apache/axiom/core/stream/serializer/UnmappableCharacterHandler.java
------------------------------------------------------------------------------
svn:eol-style = native
Modified: webservices/axiom/trunk/aspects/core-aspects/src/main/java/org/apache/axiom/core/stream/serializer/WriterToASCI.java
URL: http://svn.apache.org/viewvc/webservices/axiom/trunk/aspects/core-aspects/src/main/java/org/apache/axiom/core/stream/serializer/WriterToASCI.java?rev=1743819&r1=1743818&r2=1743819&view=diff
==============================================================================
--- webservices/axiom/trunk/aspects/core-aspects/src/main/java/org/apache/axiom/core/stream/serializer/WriterToASCI.java (original)
+++ webservices/axiom/trunk/aspects/core-aspects/src/main/java/org/apache/axiom/core/stream/serializer/WriterToASCI.java Sat May 14 12:05:19 2016
@@ -52,6 +52,12 @@ final class WriterToASCI extends XmlWrit
m_os = os;
}
+ @Override
+ void setUnmappableCharacterHandler(UnmappableCharacterHandler unmappableCharacterHandler) {
+ // TODO
+ throw new UnsupportedOperationException();
+ }
+
/**
* Write a portion of an array of characters.
*
Modified: webservices/axiom/trunk/aspects/core-aspects/src/main/java/org/apache/axiom/core/stream/serializer/WriterToUTF8Buffered.java
URL: http://svn.apache.org/viewvc/webservices/axiom/trunk/aspects/core-aspects/src/main/java/org/apache/axiom/core/stream/serializer/WriterToUTF8Buffered.java?rev=1743819&r1=1743818&r2=1743819&view=diff
==============================================================================
--- webservices/axiom/trunk/aspects/core-aspects/src/main/java/org/apache/axiom/core/stream/serializer/WriterToUTF8Buffered.java (original)
+++ webservices/axiom/trunk/aspects/core-aspects/src/main/java/org/apache/axiom/core/stream/serializer/WriterToUTF8Buffered.java Sat May 14 12:05:19 2016
@@ -93,6 +93,11 @@ final class WriterToUTF8Buffered extends
// this(out, 8*1024);
}
+ @Override
+ void setUnmappableCharacterHandler(UnmappableCharacterHandler unmappableCharacterHandler) {
+ // There are no unmappable characters in UTF-8
+ }
+
/**
* Create an buffered UTF-8 writer to write data to the
* specified underlying output stream with the specified buffer
Modified: webservices/axiom/trunk/aspects/core-aspects/src/main/java/org/apache/axiom/core/stream/serializer/WriterXmlWriter.java
URL: http://svn.apache.org/viewvc/webservices/axiom/trunk/aspects/core-aspects/src/main/java/org/apache/axiom/core/stream/serializer/WriterXmlWriter.java?rev=1743819&r1=1743818&r2=1743819&view=diff
==============================================================================
--- webservices/axiom/trunk/aspects/core-aspects/src/main/java/org/apache/axiom/core/stream/serializer/WriterXmlWriter.java (original)
+++ webservices/axiom/trunk/aspects/core-aspects/src/main/java/org/apache/axiom/core/stream/serializer/WriterXmlWriter.java Sat May 14 12:05:19 2016
@@ -31,6 +31,10 @@ final class WriterXmlWriter extends XmlW
}
@Override
+ void setUnmappableCharacterHandler(UnmappableCharacterHandler unmappableCharacterHandler) {
+ }
+
+ @Override
void write(char c) throws IOException {
out.write(c);
}
Modified: webservices/axiom/trunk/aspects/core-aspects/src/main/java/org/apache/axiom/core/stream/serializer/XmlWriter.java
URL: http://svn.apache.org/viewvc/webservices/axiom/trunk/aspects/core-aspects/src/main/java/org/apache/axiom/core/stream/serializer/XmlWriter.java?rev=1743819&r1=1743818&r2=1743819&view=diff
==============================================================================
--- webservices/axiom/trunk/aspects/core-aspects/src/main/java/org/apache/axiom/core/stream/serializer/XmlWriter.java (original)
+++ webservices/axiom/trunk/aspects/core-aspects/src/main/java/org/apache/axiom/core/stream/serializer/XmlWriter.java Sat May 14 12:05:19 2016
@@ -21,6 +21,7 @@ package org.apache.axiom.core.stream.ser
import java.io.IOException;
abstract class XmlWriter {
+ abstract void setUnmappableCharacterHandler(UnmappableCharacterHandler unmappableCharacterHandler) throws IOException;
abstract void write(char c) throws IOException;
abstract void write(String s) throws IOException;
abstract void write(char chars[], int start, int length) throws IOException;
Modified: webservices/axiom/trunk/aspects/core-aspects/src/test/java/org/apache/axiom/core/stream/serializer/OutputStreamXmlWriterTest.java
URL: http://svn.apache.org/viewvc/webservices/axiom/trunk/aspects/core-aspects/src/test/java/org/apache/axiom/core/stream/serializer/OutputStreamXmlWriterTest.java?rev=1743819&r1=1743818&r2=1743819&view=diff
==============================================================================
--- webservices/axiom/trunk/aspects/core-aspects/src/test/java/org/apache/axiom/core/stream/serializer/OutputStreamXmlWriterTest.java (original)
+++ webservices/axiom/trunk/aspects/core-aspects/src/test/java/org/apache/axiom/core/stream/serializer/OutputStreamXmlWriterTest.java Sat May 14 12:05:19 2016
@@ -27,9 +27,10 @@ import org.junit.Test;
public class OutputStreamXmlWriterTest {
@Test
- public void test() throws Exception {
+ public void testUnmappableCharacterToCharacterReference() throws Exception {
ByteArrayOutputStream baos = new ByteArrayOutputStream();
XmlWriter writer = new OutputStreamXmlWriter(baos, Charset.forName("iso-8859-1"));
+ writer.setUnmappableCharacterHandler(UnmappableCharacterHandler.CONVERT_TO_CHARACTER_REFERENCE);
writer.write("abc\u20ACdef");
writer.flushBuffer();
assertThat(baos.toString("iso-8859-1")).isEqualTo("abc€def");