[jbossws-issues] [JBoss JIRA] (JBWS-3957) publishWsdlImports writes WSDL-XML files with wrong characterset under Windows

Martin Both (JIRA) issues at jboss.org
Fri Oct 23 10:42:00 EDT 2015


    [ https://issues.jboss.org/browse/JBWS-3957?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13121561#comment-13121561 ] 

Martin Both commented on JBWS-3957:
-----------------------------------

Hello Jim Ma,
it is not my code. It is the code of JBoss application server witch write and read WSDL files during a deployment of a webservice if there is no explicit wsdlLocation in the war file.
1. I have a WSDL file in UTF-8 encoding. Both file encoding and XML-encoding are UTF-8.
2. I have generate Java code with JAX-WS and write my service implementation.
3. I create a deployment archive. A war file without the original wsdl file but it is based on the original wsdl file.
4. I deploy my war on JBoss (or WildFly it's the same error). JBoss generate a new WSDL file in the data directory and read also this generated files a second later. That is stupid but that it is. If the JBoss Java VM is configured to use the file.encoding Cp1252 than JBoss wirte imported WSDL files in that encoding but says in the XML-Prolog that the encoding is UTF-8 but it is'nt.
JBoss reads the corrupt WSDL and complain that the file is wrong. How stupid! The deployment ends with an error.
I'm using a selfmade fix of WSDL4J. I try to open a ticket against WSDL4J but it is not possible. Maybe WSDL4J is to old or the guys of WSDL4J like there own mistakes so much. I don't know.
It is also possible to fix that error in JBoss if JBoss would write WSDL import files always in UTF-8 encoding. Or better don't write and read because it is useless and would be faster without.
My fix to WSDL4J is to remove the default mapping because than WSDL4J would throw errors in case of missing mapping. Much importend is the new mapping between Cp1252 and Wndows-1252..
    //xmlEncodingMap.put(System.getProperty("file.encoding"),
    //                   Constants.XML_DECL_DEFAULT);
    xmlEncodingMap.put("Cp1252", "Windows-1252");

Martin


> publishWsdlImports writes WSDL-XML files with wrong characterset under Windows
> ------------------------------------------------------------------------------
>
>                 Key: JBWS-3957
>                 URL: https://issues.jboss.org/browse/JBWS-3957
>             Project: JBoss Web Services
>          Issue Type: Bug
>         Environment: WildFly 9, Windows 7 with default Java file.encoding Cp1252.
>            Reporter: Martin Both
>            Assignee: Jim Ma
>             Fix For: jbossws-cxf-5.2.0.Final
>
>
> I would like to deploy a WebService but I get an exception. The WSDL XSD file contains an german character 'ä'. See:
> Here is the part of the XSD:
>   <xs:simpleType name="Teilnehmerart">
>     <xs:restriction base="xs:string">
>       <xs:enumeration value="Privat"></xs:enumeration>
>       <xs:enumeration value="Geschäftlich"></xs:enumeration>
>     </xs:restriction>
>   </xs:simpleType>
> The JBoss class org.jboss.ws.common.utils.AbstractWSDLFilePublisher
> writes the imported WSDL file using a FileWriter at line 166 + 167.
>                 FileWriter fw = new FileWriter(targetFile);
>                wsdlWriter.writeWSDL(subdef, fw);
> In a next step this file is read again and results in an exception:
>  Invalid byte 2 of 3-byte UTF-8 sequence.
> This is because the file is written in Cp1252 enconding together with an XML prolog
> UTF-8 encoding. That is crazy and cannot work.
> A workaround would be to set the Java file.encoding to UTF-8 but that is not what I want.
> There are two solutions:
> I think it is better to create a binary OutputStream instead of creating a FileWriter.
> The wsdlWriter offers two methods! The method with OutputStream argument would always write XML files using a UTF-8 encoding.
> An other way to fix that would be a bug fix to WSDL4J 1.6.3.
> The WSDL4J method com.ibm.wsdl.xml.WSDLWriterImpl.writeWSDL(Definition wsdlDef, Writer sink) does map default Java file.encoding to "UTF-8". That is sometimes wrong.
> The class com.ibm.wsdl.util.xml.DOM2Writer should have an XmlEncodingMapping from "Cp1252" to "Windows-1252". That would fix the problem also. But I think it would be better to use always UTF-8 with the OutputStream method.
> Best regards
> Martin Both



--
This message was sent by Atlassian JIRA
(v6.4.11#64026)



More information about the jbossws-issues mailing list