You are viewing a plain text version of this content. The canonical link for it is here.
Posted to java-dev@axis.apache.org by te...@yahoo.com on 2008/07/25 06:35:59 UTC
[Axis2] Character Set Encoding problem
Hi
I am using Axis2 v1.4 to consume a webservice. I have generated the stubs using WSDL2Java with jdk1.6.0_06
While running the client, I am getting the following exception:
org.apache.axis2.AxisFault: Character Set Encoding from transport information [ISO-8859-1] does not match with character set encoding in the received SOAP message [UTF-8]
at org.apache.axis2.builder.BuilderUtil.validateCharSetEncoding(BuilderUtil.java:786)
at org.apache.axis2.builder.SOAPBuilder.processDocument(SOAPBuilder.java:57)
at org.apache.axis2.transport.TransportUtils.createDocumentElement(TransportUtils.java:164)
at org.apache.axis2.transport.TransportUtils.createSOAPMessage(TransportUtils.java:112)
at org.apache.axis2.transport.TransportUtils.createSOAPMessage(TransportUtils.java:88)
at org.apache.axis2.description.OutInAxisOperationClient.handleResponse(OutInAxisOperation.java:353)
at org.apache.axis2.description.OutInAxisOperationClient.send(OutInAxisOperation.java:416)
at org.apache.axis2.description.OutInAxisOperationClient.executeImpl(OutInAxisOperation.java:228)
at org.apache.axis2.client.OperationClient.execute(OperationClient.java:163)
at ymws.yahoo.YmwsStub.GetUserData(YmwsStub.java:1587)
I am explicitly setting charset encoding in my code as below:
stub._getServiceClient().getOptions().setProperty(org.apache.axis2.Constants.Configuration.CHARACTER_SET_ENCODING,"iso-8859-1");
However that does not seem help the exception pasted above. When tracing using the Axis2 1.4 source, I found a possible issue at the following line
streamReader = StAXUtils.createXMLStreamReader(pis, actualCharSetEncoding);
of the SOAPBuilder class (see source below):
package org.apache.axis2.builder;
import org.apache.axiom.om.OMElement;
import org.apache.axiom.om.impl.builder.StAXBuilder;
import org.apache.axiom.om.util.StAXUtils;
import org.apache.axiom.soap.SOAPEnvelope;
import org.apache.axiom.soap.impl.builder.StAXSOAPModelBuilder;
import org.apache.axis2.AxisFault;
import org.apache.axis2.Constants;
import org.apache.axis2.context.MessageContext;
import javax.xml.stream.XMLStreamException;
import javax.xml.stream.XMLStreamReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.PushbackInputStream;
public class SOAPBuilder implements Builder {
public OMElement processDocument(InputStream inputStream, String contentType,
MessageContext messageContext) throws AxisFault {
XMLStreamReader streamReader;
try {
String charSetEncoding = (String) messageContext
.getProperty(Constants.Configuration.CHARACTER_SET_ENCODING);
// Get the actual encoding by looking at the BOM of the InputStream
PushbackInputStream pis = BuilderUtil.getPushbackInputStream(inputStream);
String actualCharSetEncoding = BuilderUtil.getCharSetEncoding(pis, charSetEncoding);
// Get the XMLStreamReader for this input stream
streamReader = StAXUtils.createXMLStreamReader(pis, actualCharSetEncoding);
StAXBuilder builder = new StAXSOAPModelBuilder(streamReader);
SOAPEnvelope envelope = (SOAPEnvelope) builder.getDocumentElement();
BuilderUtil
.validateSOAPVersion(BuilderUtil.getEnvelopeNamespace(contentType), envelope);
BuilderUtil.validateCharSetEncoding(charSetEncoding, builder.getDocument()
.getCharsetEncoding(), envelope.getNamespace().getNamespaceURI());
return envelope;
} catch (IOException e) {
throw AxisFault.makeFault(e);
} catch (XMLStreamException e) {
throw AxisFault.makeFault(e);
}
}
}
The issue seems like, the streamReader always reads in UTF-8 instead of the specified encoding. And hence the following statement of the above class fails
BuilderUtil.validateCharSetEncoding(charSetEncoding, builder.getDocument()
.getCharsetEncoding(), envelope.getNamespace().getNamespaceURI());
How can we solve this problem?
Regards,
Harsha
---------------------------------------------------------------------
To unsubscribe, e-mail: axis-dev-unsubscribe@ws.apache.org
For additional commands, e-mail: axis-dev-help@ws.apache.org
Re: [Axis2] Character Set Encoding problem
Posted by Amila Suriarachchi <am...@gmail.com>.
On Fri, Jul 25, 2008 at 10:05 AM, <te...@yahoo.com> wrote:
> Hi
>
> I am using Axis2 v1.4 to consume a webservice. I have generated the stubs
> using WSDL2Java with jdk1.6.0_06
>
> While running the client, I am getting the following exception:
>
> org.apache.axis2.AxisFault: Character Set Encoding from transport
> information [ISO-8859-1] does not match with character set encoding in the
> received SOAP message [UTF-8]
> at
> org.apache.axis2.builder.BuilderUtil.validateCharSetEncoding(BuilderUtil.java:786)
> at
> org.apache.axis2.builder.SOAPBuilder.processDocument(SOAPBuilder.java:57)
> at
> org.apache.axis2.transport.TransportUtils.createDocumentElement(TransportUtils.java:164)
> at
> org.apache.axis2.transport.TransportUtils.createSOAPMessage(TransportUtils.java:112)
> at
> org.apache.axis2.transport.TransportUtils.createSOAPMessage(TransportUtils.java:88)
> at
> org.apache.axis2.description.OutInAxisOperationClient.handleResponse(OutInAxisOperation.java:353)
This exception occurs when client try to process the response soap message.
Can you send the response soap message? Seems that it has different
character encoding in different places.
thanks,
Amila.
>
> at
> org.apache.axis2.description.OutInAxisOperationClient.send(OutInAxisOperation.java:416)
> at
> org.apache.axis2.description.OutInAxisOperationClient.executeImpl(OutInAxisOperation.java:228)
> at
> org.apache.axis2.client.OperationClient.execute(OperationClient.java:163)
> at ymws.yahoo.YmwsStub.GetUserData(YmwsStub.java:1587)
>
>
> I am explicitly setting charset encoding in my code as below:
>
>
> stub._getServiceClient().getOptions().setProperty(org.apache.axis2.Constants.Configuration.CHARACTER_SET_ENCODING,"iso-8859-1");
>
>
>
> However that does not seem help the exception pasted above. When tracing
> using the Axis2 1.4 source, I found a possible issue at the following line
>
> streamReader = StAXUtils.createXMLStreamReader(pis,
> actualCharSetEncoding);
>
>
> of the SOAPBuilder class (see source below):
>
> package org.apache.axis2.builder;
>
> import org.apache.axiom.om.OMElement;
> import org.apache.axiom.om.impl.builder.StAXBuilder;
> import org.apache.axiom.om.util.StAXUtils;
> import org.apache.axiom.soap.SOAPEnvelope;
> import org.apache.axiom.soap.impl.builder.StAXSOAPModelBuilder;
> import org.apache.axis2.AxisFault;
> import org.apache.axis2.Constants;
> import org.apache.axis2.context.MessageContext;
>
> import javax.xml.stream.XMLStreamException;
> import javax.xml.stream.XMLStreamReader;
> import java.io.IOException;
> import java.io.InputStream;
> import java.io.PushbackInputStream;
>
> public class SOAPBuilder implements Builder {
>
> public OMElement processDocument(InputStream inputStream, String
> contentType,
> MessageContext messageContext)
> throws AxisFault {
> XMLStreamReader streamReader;
> try {
> String charSetEncoding = (String) messageContext
>
> .getProperty(Constants.Configuration.CHARACTER_SET_ENCODING);
>
> // Get the actual encoding by looking at the BOM of the
> InputStream
> PushbackInputStream pis =
> BuilderUtil.getPushbackInputStream(inputStream);
> String actualCharSetEncoding =
> BuilderUtil.getCharSetEncoding(pis, charSetEncoding);
>
> // Get the XMLStreamReader for this input stream
> streamReader = StAXUtils.createXMLStreamReader(pis,
> actualCharSetEncoding);
>
> StAXBuilder builder = new
> StAXSOAPModelBuilder(streamReader);
> SOAPEnvelope envelope = (SOAPEnvelope)
> builder.getDocumentElement();
> BuilderUtil
>
> .validateSOAPVersion(BuilderUtil.getEnvelopeNamespace(contentType),
> envelope);
> BuilderUtil.validateCharSetEncoding(charSetEncoding,
> builder.getDocument()
> .getCharsetEncoding(),
> envelope.getNamespace().getNamespaceURI());
> return envelope;
> } catch (IOException e) {
> throw AxisFault.makeFault(e);
> } catch (XMLStreamException e) {
> throw AxisFault.makeFault(e);
> }
> }
> }
>
>
>
> The issue seems like, the streamReader always reads in UTF-8 instead of the
> specified encoding. And hence the following statement of the above class
> fails
>
> BuilderUtil.validateCharSetEncoding(charSetEncoding,
> builder.getDocument()
> .getCharsetEncoding(), envelope.getNamespace().getNamespaceURI());
>
>
> How can we solve this problem?
>
> Regards,
> Harsha
>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: axis-dev-unsubscribe@ws.apache.org
> For additional commands, e-mail: axis-dev-help@ws.apache.org
>
>
--
Amila Suriarachchi,
WSO2 Inc.
Re: [Axis2] Character Set Encoding problem
Posted by WJ Krpelan <kr...@yahoo.com>.
Hi,
I'm sure the client wont do a charset-conversion just because of setting this property. So in my view the "problem" is rather on the server side.
Mind that XML-Standards default to UTF-8 or UTF-16 and you probably will lose some interoperability by using a different charset encoding.
Why dont you read in your data in UTF-8 and do the charset-conversion
afterwards?
Cheers,
Wolfgang
--- On Fri, 7/25/08, temp2oo5-axis2dev@yahoo.com <te...@yahoo.com> wrote:
> From: temp2oo5-axis2dev@yahoo.com <te...@yahoo.com>
> Subject: [Axis2] Character Set Encoding problem
> To: axis-dev@ws.apache.org
> Date: Friday, July 25, 2008, 6:35 AM
> Hi
>
> I am using Axis2 v1.4 to consume a webservice. I have
> generated the stubs using WSDL2Java with jdk1.6.0_06
>
> While running the client, I am getting the following
> exception:
>
> org.apache.axis2.AxisFault: Character Set Encoding from
> transport information [ISO-8859-1] does not match with
> character set encoding in the received SOAP message [UTF-8]
> at
> org.apache.axis2.builder.BuilderUtil.validateCharSetEncoding(BuilderUtil.java:786)
> at
> org.apache.axis2.builder.SOAPBuilder.processDocument(SOAPBuilder.java:57)
> at
> org.apache.axis2.transport.TransportUtils.createDocumentElement(TransportUtils.java:164)
> at
> org.apache.axis2.transport.TransportUtils.createSOAPMessage(TransportUtils.java:112)
> at
> org.apache.axis2.transport.TransportUtils.createSOAPMessage(TransportUtils.java:88)
> at
> org.apache.axis2.description.OutInAxisOperationClient.handleResponse(OutInAxisOperation.java:353)
> at
> org.apache.axis2.description.OutInAxisOperationClient.send(OutInAxisOperation.java:416)
> at
> org.apache.axis2.description.OutInAxisOperationClient.executeImpl(OutInAxisOperation.java:228)
> at
> org.apache.axis2.client.OperationClient.execute(OperationClient.java:163)
> at ymws.yahoo.YmwsStub.GetUserData(YmwsStub.java:1587)
>
>
> I am explicitly setting charset encoding in my code as
> below:
>
>
> stub._getServiceClient().getOptions().setProperty(org.apache.axis2.Constants.Configuration.CHARACTER_SET_ENCODING,"iso-8859-1");
>
>
>
> However that does not seem help the exception pasted above.
> When tracing using the Axis2 1.4 source, I found a possible
> issue at the following line
>
> streamReader = StAXUtils.createXMLStreamReader(pis,
> actualCharSetEncoding);
>
>
> of the SOAPBuilder class (see source below):
>
> package org.apache.axis2.builder;
>
> import org.apache.axiom.om.OMElement;
> import org.apache.axiom.om.impl.builder.StAXBuilder;
> import org.apache.axiom.om.util.StAXUtils;
> import org.apache.axiom.soap.SOAPEnvelope;
> import
> org.apache.axiom.soap.impl.builder.StAXSOAPModelBuilder;
> import org.apache.axis2.AxisFault;
> import org.apache.axis2.Constants;
> import org.apache.axis2.context.MessageContext;
>
> import javax.xml.stream.XMLStreamException;
> import javax.xml.stream.XMLStreamReader;
> import java.io.IOException;
> import java.io.InputStream;
> import java.io.PushbackInputStream;
>
> public class SOAPBuilder implements Builder {
>
> public OMElement processDocument(InputStream
> inputStream, String contentType,
> MessageContext
> messageContext) throws AxisFault {
> XMLStreamReader streamReader;
> try {
> String charSetEncoding = (String)
> messageContext
>
> .getProperty(Constants.Configuration.CHARACTER_SET_ENCODING);
>
> // Get the actual encoding by looking at
> the BOM of the InputStream
> PushbackInputStream pis =
> BuilderUtil.getPushbackInputStream(inputStream);
> String actualCharSetEncoding =
> BuilderUtil.getCharSetEncoding(pis, charSetEncoding);
>
> // Get the XMLStreamReader for this input
> stream
> streamReader =
> StAXUtils.createXMLStreamReader(pis,
> actualCharSetEncoding);
>
> StAXBuilder builder = new
> StAXSOAPModelBuilder(streamReader);
> SOAPEnvelope envelope = (SOAPEnvelope)
> builder.getDocumentElement();
> BuilderUtil
>
> .validateSOAPVersion(BuilderUtil.getEnvelopeNamespace(contentType),
> envelope);
>
> BuilderUtil.validateCharSetEncoding(charSetEncoding,
> builder.getDocument()
> .getCharsetEncoding(),
> envelope.getNamespace().getNamespaceURI());
> return envelope;
> } catch (IOException e) {
> throw AxisFault.makeFault(e);
> } catch (XMLStreamException e) {
> throw AxisFault.makeFault(e);
> }
> }
> }
>
>
>
> The issue seems like, the streamReader always reads in
> UTF-8 instead of the specified encoding. And hence the
> following statement of the above class fails
>
> BuilderUtil.validateCharSetEncoding(charSetEncoding,
> builder.getDocument()
> .getCharsetEncoding(),
> envelope.getNamespace().getNamespaceURI());
>
>
> How can we solve this problem?
>
> Regards,
> Harsha
>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: axis-dev-unsubscribe@ws.apache.org
> For additional commands, e-mail:
> axis-dev-help@ws.apache.org
---------------------------------------------------------------------
To unsubscribe, e-mail: axis-dev-unsubscribe@ws.apache.org
For additional commands, e-mail: axis-dev-help@ws.apache.org