Author: dims
Date: Fri Jun 22 18:41:11 2007
New Revision: 549996

URL: http://svn.apache.org/viewvc?view=rev&rev=549996
Log:
Fix for AXIS2-1575 - Axis2 does not decodes SOAP responses using the character 
encoding set on the response's XML declaration. Problem converting from 
iso-8859-1 to utf-8.

Added:
    
webservices/commons/trunk/modules/axiom/modules/axiom-tests/src/test/java/org/apache/axiom/soap/impl/llom/CharacterEncoding2Test.java
Modified:
    
webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/om/OMXMLParserWrapper.java
    
webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/om/impl/builder/StAXBuilder.java
    
webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/soap/impl/builder/StAXSOAPModelBuilder.java
    
webservices/commons/trunk/modules/axiom/modules/axiom-impl/src/main/java/org/apache/axiom/om/impl/llom/OMStAXWrapper.java

Modified: 
webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/om/OMXMLParserWrapper.java
URL: 
http://svn.apache.org/viewvc/webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/om/OMXMLParserWrapper.java?view=diff&rev=549996&r1=549995&r2=549996
==============================================================================
--- 
webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/om/OMXMLParserWrapper.java
 (original)
+++ 
webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/om/OMXMLParserWrapper.java
 Fri Jun 22 18:41:11 2007
@@ -82,4 +82,10 @@
      * @return Returns Object.
      */
     Object getRegisteredContentHandler();
+
+    /**
+     * Returns the encoding style of the XML data
+     * @return the character encoding, defaults to "UTF-8"
+     */
+    public String getCharacterEncoding();
 }

Modified: 
webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/om/impl/builder/StAXBuilder.java
URL: 
http://svn.apache.org/viewvc/webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/om/impl/builder/StAXBuilder.java?view=diff&rev=549996&r1=549995&r2=549996
==============================================================================
--- 
webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/om/impl/builder/StAXBuilder.java
 (original)
+++ 
webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/om/impl/builder/StAXBuilder.java
 Fri Jun 22 18:41:11 2007
@@ -71,6 +71,7 @@
     protected boolean parserAccessed = false;
     protected OMDocument document;
 
+    protected String charEncoding = null;
     /**
      * Constructor StAXBuilder.
      *
@@ -80,6 +81,7 @@
     protected StAXBuilder(OMFactory ombuilderFactory, XMLStreamReader parser) {
         this.parser = parser;
         omfactory = ombuilderFactory;
+        charEncoding = parser.getCharacterEncodingScheme();
 
         if (parser instanceof BuilderAwareReader) {
             ((BuilderAwareReader) parser).setBuilder(this);
@@ -99,6 +101,9 @@
     protected StAXBuilder() {
     }
 
+    /**
+     * @deprecated Not used anywhere
+     */
     public void init(InputStream inputStream, String charSetEncoding, String 
url,
                      String contentType) throws OMException {
         try {
@@ -511,5 +516,16 @@
             // property is not found.
         }
         return false;
+    }
+
+    /**
+     * Returns the encoding style of the XML data
+     * @return the character encoding, defaults to "UTF-8"
+     */
+    public String getCharacterEncoding() {
+        if(this.charEncoding == null){
+            return "UTF-8";
+        }
+        return this.charEncoding;
     }
 }

Modified: 
webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/soap/impl/builder/StAXSOAPModelBuilder.java
URL: 
http://svn.apache.org/viewvc/webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/soap/impl/builder/StAXSOAPModelBuilder.java?view=diff&rev=549996&r1=549995&r2=549996
==============================================================================
--- 
webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/soap/impl/builder/StAXSOAPModelBuilder.java
 (original)
+++ 
webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/soap/impl/builder/StAXSOAPModelBuilder.java
 Fri Jun 22 18:41:11 2007
@@ -76,7 +76,6 @@
 
     private SOAPBuilderHelper builderHelper;
 
-    private String charEncoding = null;
     private String parserVersion = null;
     private static final boolean isDebugEnabled = log.isDebugEnabled();
 
@@ -92,7 +91,6 @@
      */
     public StAXSOAPModelBuilder(XMLStreamReader parser, String soapVersion) {
         super(parser);
-        charEncoding = parser.getCharacterEncodingScheme();
         parserVersion = parser.getVersion();
         identifySOAPVersion(soapVersion);
     }
@@ -102,11 +100,9 @@
      * validating the transport level soap version with the Envelope version.
      *
      * @param parser
-     * @param soapVersion parameter is to give the soap version for the 
transport.
      */
     public StAXSOAPModelBuilder(XMLStreamReader parser) {
         super(parser);
-        charEncoding = parser.getCharacterEncodingScheme();
         parserVersion = parser.getVersion();
         SOAPEnvelope soapEnvelope = getSOAPEnvelope();
         envelopeNamespace = soapEnvelope.getNamespace();
@@ -124,7 +120,6 @@
     public StAXSOAPModelBuilder(XMLStreamReader parser, SOAPFactory factory, 
String soapVersion) {
         super(factory, parser);
         soapFactory = factory;
-        charEncoding = parser.getCharacterEncodingScheme();
         parserVersion = parser.getVersion();
         identifySOAPVersion(soapVersion);
     }

Modified: 
webservices/commons/trunk/modules/axiom/modules/axiom-impl/src/main/java/org/apache/axiom/om/impl/llom/OMStAXWrapper.java
URL: 
http://svn.apache.org/viewvc/webservices/commons/trunk/modules/axiom/modules/axiom-impl/src/main/java/org/apache/axiom/om/impl/llom/OMStAXWrapper.java?view=diff&rev=549996&r1=549995&r2=549996
==============================================================================
--- 
webservices/commons/trunk/modules/axiom/modules/axiom-impl/src/main/java/org/apache/axiom/om/impl/llom/OMStAXWrapper.java
 (original)
+++ 
webservices/commons/trunk/modules/axiom/modules/axiom-impl/src/main/java/org/apache/axiom/om/impl/llom/OMStAXWrapper.java
 Fri Jun 22 18:41:11 2007
@@ -40,6 +40,7 @@
 import org.apache.axiom.om.OMText;
 import org.apache.axiom.om.OMXMLParserWrapper;
 import org.apache.axiom.om.impl.EmptyOMLocation;
+import org.apache.axiom.om.impl.builder.StAXBuilder;
 import org.apache.axiom.om.impl.exception.OMStreamingException;
 import org.apache.axiom.om.impl.llom.util.NamespaceContextImpl;
 
@@ -1077,6 +1078,9 @@
      * @return Returns String.
      */
     public String getCharacterEncodingScheme() {
+        if(builder != null) {
+            return builder.getCharacterEncoding();
+        }
         return "utf-8";
     }
 

Added: 
webservices/commons/trunk/modules/axiom/modules/axiom-tests/src/test/java/org/apache/axiom/soap/impl/llom/CharacterEncoding2Test.java
URL: 
http://svn.apache.org/viewvc/webservices/commons/trunk/modules/axiom/modules/axiom-tests/src/test/java/org/apache/axiom/soap/impl/llom/CharacterEncoding2Test.java?view=auto&rev=549996
==============================================================================
--- 
webservices/commons/trunk/modules/axiom/modules/axiom-tests/src/test/java/org/apache/axiom/soap/impl/llom/CharacterEncoding2Test.java
 (added)
+++ 
webservices/commons/trunk/modules/axiom/modules/axiom-tests/src/test/java/org/apache/axiom/soap/impl/llom/CharacterEncoding2Test.java
 Fri Jun 22 18:41:11 2007
@@ -0,0 +1,50 @@
+package org.apache.axiom.soap.impl.llom;
+
+import org.apache.axiom.soap.SOAPEnvelope;
+import org.apache.axiom.soap.impl.builder.StAXSOAPModelBuilder;
+import org.apache.axiom.om.OMOutputFormat;
+import org.custommonkey.xmlunit.XMLTestCase;
+import org.custommonkey.xmlunit.XMLUnit;
+
+import javax.xml.stream.XMLInputFactory;
+import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
+import java.io.StringReader;
+import java.io.InputStreamReader;
+
+public class CharacterEncoding2Test extends XMLTestCase {
+    String xml = "<?xml version=\"1.0\" encoding=\"iso-8859-1\"?>" +
+            "<soap:Envelope 
xmlns:soap=\"http://schemas.xmlsoap.org/soap/envelope/\";>" +
+            "<soap:Body>" +
+            "<AgendaPesquisa>" +
+            "<status>0</status>" +
+            "<ListaContatosPesquisa>" +
+            "<tipo>C</tipo>" +
+            "<dono>lucia</dono>" +
+            "<posicao>177</posicao>" +
+            "<nome>Abricó Gimarães</nome>" +
+            "<email></email>" +
+            "</ListaContatosPesquisa>" +
+            "</AgendaPesquisa>" +
+            "</soap:Body>" +
+            "</soap:Envelope>";
+
+    public void testISO99591() throws Exception {
+        ByteArrayInputStream byteInStr = new 
ByteArrayInputStream(xml.getBytes("iso-8859-1"));
+
+        StAXSOAPModelBuilder builder = new StAXSOAPModelBuilder(
+                
XMLInputFactory.newInstance().createXMLStreamReader(byteInStr));
+
+        SOAPEnvelope envelope = builder.getSOAPEnvelope();
+        envelope.build();
+
+        assertEquals("iso-8859-1", 
envelope.getXMLStreamReader().getCharacterEncodingScheme());
+
+        ByteArrayOutputStream byteOutStr = new ByteArrayOutputStream();
+        OMOutputFormat outputFormat = new OMOutputFormat();
+        outputFormat.setCharSetEncoding("iso-8859-1");
+        envelope.serialize(byteOutStr, outputFormat);
+
+        assertXMLEqual(new StringReader(xml), new InputStreamReader(new 
ByteArrayInputStream(byteOutStr.toByteArray())));
+    }
+}



---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to