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]