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");