axis-java-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Amila Suriarachchi" <amilasuriarach...@gmail.com>
Subject Re: [Axis2] Character Set Encoding problem
Date Mon, 28 Jul 2008 04:15:01 GMT
On Fri, Jul 25, 2008 at 10:05 AM, <temp2oo5-axis2dev@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.

Mime
View raw message