5 Replies Latest reply: May 22, 2012 7:37 AM by Jim Ma RSS

    Encoding of response

    Nicklas Karlsson Master

      Hi,

       

         I have a WebService deployed on a JBAS 7.1.1. Testing with SoapUI, I see an UTF-8 encoded request coming in, an UTF-8 encoded response  going out, "åäöÅÄÖ" is encoded correctly etc. The WS is however also used by an Eclipse BIRT reporting engine and it insists on encoding the request as ISO-8859-1 and. The In/Out logger interceptors show the response also being ISO-8859-1 encoded but the "åäöÅÄÖ" has now become "??????". I discussed this with Richard Opalka and the mentioned that the response is always encoded in UTF-8. If I can't force the client to use UTF-8, what options are there left? Are there any CXF-interceptors that would allow me to change the encoding (on the way in)?

       

      The WS definition is a very simple

       

       

      @Stateless
      @WebService
      @ExcludeDefaultInterceptors
      @InInterceptors(interceptors = "org.apache.cxf.interceptor.LoggingInInterceptor")
      @OutInterceptors(interceptors = "org.apache.cxf.interceptor.LoggingOutInterceptor")
      public class ReportWebService 
      {
                @Inject
                private Reportgenerator reportgenerator;
      
      // methods calling reportgenerator, spitting out a POJO-structure
      
      
        • 1. Re: Encoding of response
          Jim Ma Apprentice

          Hi Nicklas, what is the payload printed by logginInInterceptor  ? If it is "??????", it could be the client side issue and it doesn't encode the "åäöÅÄÖ" correctly.  I had a quick try in CXF , send this request  with ISO-8859-1 encoded and cxf can handle  the response correctly.

          • 2. Re: Encoding of response
            Nicklas Karlsson Master
            12:50:59,837 INFO  [org.apache.cxf.interceptor.LoggingInInterceptor] (http--0.0.0.0-80-5) Inbound Message
            ----------------------------
            ID: 4
            Address: http://fikarlsnic01/OSTi/WebMarelaReportWebService
            Encoding: ISO-8859-1
            Http-Method: POST
            Content-Type: text/xml
            Headers: {Accept=[text/html, image/gif, image/jpeg, *; q=.2, */*; q=.2], cache-control=[no-cache], connection=[Close], Content-Length=[554], content-type=[text/xml], host=[fikarlsnic01], pragma=[no-cache], SOAPAction=[], user-agent=[Java/1.7.0]}
            Payload: <?xml version="1.0"?>
            <SOAP-ENV:Envelope
            xmlns:xsd="http://www.w3.org/2001/XMLSchema"
            xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/"
            xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
            xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/">
                      <SOAP-ENV:Body>
                                <m:haeKulutusraportti xmlns:m="http://report.webmarela.osti.affecto.fi/">
                                          <arg0>V2</arg0>
                                          <arg1>WebMarela</arg1>
                                          <arg2>0018</arg2>
                                          <arg3>012011</arg3>
                                          <arg4>012012</arg4>
                                          <arg5>cafebabe1</arg5>
                                </m:haeKulutusraportti>
                      </SOAP-ENV:Body>
            </SOAP-ENV:Envelope>
            
            

             

             

            12:50:59,500 INFO  [org.apache.cxf.interceptor.LoggingOutInterceptor] (http--0.0.0.0-80-5) Outbound Message
            ---------------------------
            ID: 3
            Encoding: ISO-8859-1
            Content-Type: text/xml
            Headers: {}
            Payload: <soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"><soap:Body><ns2:haeKulutusraporttiResponse xmlns:ns2="http://report.webmarela.osti.affecto.fi/"><return><otsikko><arvo10>0.0</arvo10><arvo11>0.0</arvo11><arvo12>0.0</arvo12><arvo13>0.0</arvo13><arvo14>0.0</arvo14><arvo15>0.0</arvo15><arvo2>Ajalta :01.11.0120 - 31.12.0120</arvo2><arvo3>.</arvo3><arvo4>.</arvo4><arvo5>.</arvo5><arvo6>0.0</arvo6><arvo7>0.0</arvo7><arvo8>0.0</arvo8><arvo9>0.0</arvo9><id><arvo1>??????</arvo1><naytto>MYY917</naytto><numero>1428</numero><tunnus>0000000000</tunnus></id><raportti>.</raportti></otsikko></return></ns2:haeKulutusraporttiResponse></soap:Body></soap:Envelope>
            --------------------------------------
            
            

             

            The question marks come in the <arvo1> where the åäöÅÄÖ was sent

            • 3. Re: Encoding of response
              Nicklas Karlsson Master

              Some further testing:

               

              case 1, soapUI, åäö OK

               

              request

               

              ID: 1
              Address: http://fikarlsnic01/OSTi/WebMarelaReportWebService
              Encoding: UTF-8
              Http-Method: POST
              Content-Type: text/xml;charset=UTF-8
              Headers: {accept-encoding=[gzip,deflate], Content-Length=[444], content-type=[text/xml;charset=UTF-8], host=[fikarlsnic01], SOAPAction=[""], user-agent=[Jakarta Commons-HttpClient/3.1]}
              Payload: <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:rep="http://report.webmarela.osti.affecto.fi/">
              ...
              

               

              response

               

              ID: 1
              Encoding: UTF-8
              Content-Type: text/xml
              Headers: {}
              Payload: <soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
              ...
              

               

              case 2, httpClient (saved request from soapUI), åäö become "???"


              request

               

              ID: 2
              Address: http://fikarlsnic01/OSTi/WebMarelaReportWebService
              Encoding: ISO-8859-1
              Http-Method: POST
              Content-Type: text/xml; charset=ISO-8859-1
              Headers: {connection=[Keep-Alive], Content-Length=[443], content-type=[text/xml; charset=ISO-8859-1], host=[fikarlsnic01:80], user-agent=[Apache-HttpClient/4.1.3 (java 1.5)]}
              Payload: soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:rep="http://report.webmarela.osti.affecto.fi/">
              ...
              

               

              response

               

              ID: 2
              Encoding: ISO-8859-1
              Content-Type: text/xml
              Headers: {}
              Payload: <soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
              ...
              

               

              case 3, BIRT report viewer call, åäö become "???"

               

              request

               

              ID: 3
              Address: http://fikarlsnic01/OSTi/WebMarelaReportWebService
              Encoding: ISO-8859-1
              Http-Method: POST
              Content-Type: text/xml
              Headers: {Accept=[text/html, image/gif, image/jpeg, *; q=.2, */*; q=.2], cache-control=[no-cache], connection=[Close], Content-Length=[554], content-type=[text/xml], host=[fikarlsnic01], pragma=[no-cache], SOAPAction=[], user-agent=[Java/1.7.0]}
              Payload: <?xml version="1.0"?>
              <SOAP-ENV:Envelope
              xmlns:xsd="http://www.w3.org/2001/XMLSchema"
              xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/"
              xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
              xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/">
              ...
              

               

              response

               

              ID: 6
              Encoding: ISO-8859-1
              Content-Type: text/xml
              Headers: {}
              Payload: <soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
              ...
              

               

              So in my environment UTF-encoded request/reponse works fine but ISO-8859-1 fails for both httpClient and the BIRT viewer.

              • 4. Re: Encoding of response
                Nicklas Karlsson Master

                A strange thing is also that httpClient doesn't work for UTF-8 encoding. But SoapUI works even if it apparently uses httpClient internally. Sigh.

                • 5. Re: Encoding of response
                  Jim Ma Apprentice

                  Is there any special operation in the  ReportWebService to generate '"åäöÅÄÖ" ? CXF sets the response with same encoding style as request.   I think add an intercetor after org.apache.cxf.interceptor.StaxInInterceptor  could change the response encoding to what you want:

                   

                  public class ChangeEncodingInterceptor extends AbstractPhaseInterceptor<Message> {

                       ....

                   

                      public void handleMessage(Message message) {

                          message.put(Message.ENCODING, "UTF-8");

                      }

                  }