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, [EMAIL PROTECTED] <[EMAIL PROTECTED]> wrote: > From: [EMAIL PROTECTED] <[EMAIL PROTECTED]> > Subject: [Axis2] Character Set Encoding problem > To: [email protected] > 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: [EMAIL PROTECTED] > For additional commands, e-mail: > [EMAIL PROTECTED] --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]
