Martin Bonato created CXF-6351:
----------------------------------

             Summary: Character encoding error in XML schema validation
                 Key: CXF-6351
                 URL: https://issues.apache.org/jira/browse/CXF-6351
             Project: CXF
          Issue Type: Bug
    Affects Versions: 2.7.15, 3.0.4
         Environment: JVM using platform default encoding other than UTF-8
            Reporter: Martin Bonato


I'm using a WSDL with referenced XML schema files containing german umlaut 
characters. The WSDL and schema files reside in the applications classpath. 
When XML schema validation is enabled for the corresponding webservice, the 
schema validation fails if the platform default encoding is not UTF-8 (e.g. 
ISO-8859-1).

I've created a test case for the issue (tested with CXF 2.7.15) 
https://github.com/datentechnik/cxf-schema-encoding

When the test case is executed with a {{-Dfile.encoding=ISO-8859-1}} it fails 
with:
{noformat}
org.apache.cxf.interceptor.Fault: Could not parse the XML stream caused by: 
javax.xml.stream.XMLStreamException: cvc-enumeration-valid: Value 'm�nnlich' is 
not facet-valid with respect to enumeration '[männlich, weiblich, unbekannt]'. 
It must be a value from the enumeration.
{noformat}

The reason is, schema references in WSDL files are read using platform default 
encoding:
{code:title=org.apache.cxf.wsdl.EndpointReferenceUtils.SchemaLSResourceResolver}
        private LSInputImpl createInput(String newId, byte[] value) {
            LSInputImpl impl = new LSInputImpl();
            impl.setSystemId(newId);
            impl.setBaseURI(newId);
            impl.setCharacterStream(
                new InputStreamReader(
                    new ByteArrayInputStream(value)));
            return impl;
        }
{code}
The {{InputStreamReader}} uses the default platform character encoding. I would 
recommend to set the InputStream in LSInputImpl instead of the CharacterStream 
and let the Schema parser decide on the character encoding.

I've created a pull request https://github.com/apache/cxf/pull/65 which solves 
the problem (tested with CXF 2.7.x).

I've only tested with the 2.7.x branch, but from the code I think master is 
affected as well.





--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

Reply via email to