5 Replies Latest reply on Jan 8, 2008 9:16 AM by fheldt

    charset problem with jbossws 2.0.2 and .net clients

      Good evening ladies and gentleman,

      I am struggling sending special character like the German üö from the .net client to the jboss server.

      I have the following reproducible scenario:

      jboss 4.22
      jbossws 2.0.2GA
      .Net Client

      .net is pinging the following String to jboss:
      ""from .NET with ü -- ö""

      Jboss is receiving this string and post back an array with following to values
      "from .NET with ü -- ö" the String .net sended just post it back
      "Greetings from J with ü -- ö"

      .net output is:
      Sending: from .NET with ü -- ö
      Recived from Jboss Value 1: Greetings from J with ü -- ö
      Recived from Jboss Value 2: from .NET with ü -- ö

      the jboss output is:

      2008-01-05 21:54:36,921 DEBUG [de.Company.test.WebSevices.ServerAgentEndpointBean] from .Net recived: from .NET with ü -- ö

      The interesting thing is happening when the protocol sniffer is on:
      in the Sniffer: .NET is Sending

      POST /SKMS_Server-SKMS_Server/ServerAgentEndpointBean HTTP/1.1
      User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; MS Web Services Client Protocol 2.0.50727.1433)
      Content-Type: text/xml; charset=utf-8
      SOAPAction: ""
      Host: 127.0.0.1:8080
      Content-Length: 359
      Expect: 100-continue
      Connection: Keep-Alive
      <?xml version="1.0" encoding="utf-8"?>
      <soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
      <soap:Body>
      <test xmlns="http://WebSevices.test.company.de/">
      <TestString xmlns="">from .NET with ü -- ö</TestString>
      </test>
      </soap:Body>
      </soap:Envelope>
      
      


      in the Sniffer: Jboss Server is sending back!
      HTTP/1.1 200 OK
      Server: Apache-Coyote/1.1
      X-Powered-By: Servlet 2.4; JBoss-4.2.2.GA (build: SVNTag=JBoss_4_2_2_GA date=200710221139)/Tomcat-5.5
      Content-Type: text/xml;charset=UTF-8
      Transfer-Encoding: chunked
      Date: Sat, 05 Jan 2008 20:54:36 GMT
      
      <env:Envelope xmlns:env='http://schemas.xmlsoap.org/soap/envelope/'>
      <env:Header></env:Header><env:Body>
      <ns2:testResponse xmlns:ns2="http://WebSevices.test.company.de/">
      <return>Greetings from J with �¼ -- �¶</return><return>from .NET with �¼ --
      �¶
      </return></ns2:testResponse></env:Body></env:Envelope>
      



      The .NET Client Code
      test test_remote = new WebReference.test();
      String tesString = "from .NET with ü -- ö";
      test_remote.TestString = tesString;
      
      string[] result = new WebReference.ServerAgentEndpoint().test(test_remote);
      
      Console.WriteLine("Sending: " + tesString);
      Console.WriteLine("Recived from Jboss Value 1: " + result[0]);
      Console.WriteLine("Recived from Jboss Value 2: " + result[1]);
      



      The Java Code is:

      @WebMethod
       public String[] test (@WebParam(name="TestString") String str){
       String[] result = new String[]{"Greetings from J with ü -- ö",str};
       log.debug("from .Net recived: " + str);
       log.debug("This will be the result by Jboss to .Net" + result.toString());
       return result;
       }
      
      
      


      As I see it from the sniffer the .Net client is sendig the data right to jboss encoding the content with utf-8 and jboss is decoding it right.

      When jboss is sending data to .net the data are encoded twice with utf-8
      you can see it in the sniffer.
      .net is sending: from .NET with ü -- ö" <<-- sniffer: encoded once with utf-8
      The line "from J with �¼ -- �¶" <<-- sniffer: utf-8 over utf-8
      .net did it right and encoded it to "from J with ü -- ö" <<-- decoded the string but still one utf-8 encoding is left.

      so i guess something is wrong with the utf-8 encoding in jboss or jbossws?

      can anybody verify my problem?

      greetings

      V.




        • 1. Re: charset problem with jbossws 2.0.2 and .net clients

          This is the debug message of the response of the Test(String ping) function from the jboss logs.
          The interesting thing about it is that at the point were the logs were created the values are encoded already in utf-8.
          So the second encoding step is happening somewhere further beyond this point.


          2008-01-05 21:54:36,921 DEBUG [org.jboss.ws.core.EndpointInvocation] setReturnValue: [Ljava.lang.String;
          2008-01-05 21:54:36,921 DEBUG [org.jboss.ws.core.jaxws.handler.MessageContextJAXWS] Begin response processing
          2008-01-05 21:54:36,921 DEBUG [org.jboss.ws.core.soap.MessageContextAssociation] popMessageContext: org.jboss.ws.core.jaxws.handler.SOAPMessageContextJAXWS@eb91ec (Thread http-127.0.0.1-8080-13)
          2008-01-05 21:54:36,921 DEBUG [org.jboss.ws.core.soap.MessageContextAssociation] pushMessageContext: org.jboss.ws.core.jaxws.handler.SOAPMessageContextJAXWS@159318b (Thread http-127.0.0.1-8080-13)
          2008-01-05 21:54:36,921 DEBUG [org.jboss.ws.core.jaxws.binding.SOAP11BindingJAXWS] bindResponseMessage: {http://WebSevices.test.Company.de/}test
          2008-01-05 21:54:36,921 DEBUG [org.jboss.ws.core.EndpointInvocation] getReturnValue
          2008-01-05 21:54:36,921 DEBUG [org.jboss.ws.core.EndpointInvocation] transformPayloadValue: [Ljava.lang.String; -> [Ljava.lang.String;
          2008-01-05 21:54:36,921 DEBUG [org.jboss.ws.core.jaxrpc.ParameterWrapping] wrapResponseParameter: de.Company.test.WebSevices.jaxws.TestResponse
          2008-01-05 21:54:36,921 DEBUG [org.jboss.ws.core.EndpointInvocation] setReturnValue: org.jboss.ws.core.soap.SOAPBodyElementDoc
          2008-01-05 21:54:36,921 DEBUG [org.jboss.ws.core.jaxws.handler.HandlerDelegateJAXWS] callResponseHandlerChain: PRE
          2008-01-05 21:54:36,921 DEBUG [org.jboss.ws.core.jaxws.handler.HandlerDelegateJAXWS] callResponseHandlerChain: ENDPOINT
          2008-01-05 21:54:36,921 DEBUG [org.jboss.ws.core.jaxws.handler.HandlerDelegateJAXWS] callResponseHandlerChain: POST
          2008-01-05 21:54:36,921 DEBUG [org.jboss.ws.core.jaxws.handler.HandlerDelegateJAXWS] closeHandlerChain
          2008-01-05 21:54:36,921 DEBUG [org.jboss.ws.core.jaxws.handler.HandlerChainExecutor] close
          2008-01-05 21:54:36,921 DEBUG [org.jboss.ws.core.jaxws.handler.HandlerDelegateJAXWS] closeHandlerChain
          2008-01-05 21:54:36,921 DEBUG [org.jboss.ws.core.jaxws.handler.HandlerChainExecutor] close
          2008-01-05 21:54:36,921 DEBUG [org.jboss.ws.core.jaxws.handler.HandlerDelegateJAXWS] closeHandlerChain
          2008-01-05 21:54:36,921 DEBUG [org.jboss.ws.core.jaxws.handler.HandlerChainExecutor] close
          2008-01-05 21:54:36,921 DEBUG [org.jboss.wsf.stack.jbws.RequestHandlerImpl] END handleRequest: jboss.ws:context=SKMS_Server-SKMS_Server,endpoint=ServerAgentEndpointBean
          2008-01-05 21:54:36,921 DEBUG [org.jboss.ws.core.soap.SOAPContentElement] -----------------------------------
          2008-01-05 21:54:36,921 DEBUG [org.jboss.ws.core.soap.SOAPContentElement] Transitioning from OBJECT_VALID to XML_VALID
          2008-01-05 21:54:36,921 DEBUG [org.jboss.ws.core.soap.ObjectContent] getXMLFragment from Object [xmlType={http://WebSevices.test.Company.de/}testResponse,javaType=class de.Company.test.WebSevices.jaxws.TestResponse]
          2008-01-05 21:54:36,921 DEBUG [org.jboss.ws.core.jaxws.JAXBSerializer] serialize: [xmlName={http://WebSevices.test.Company.de/}testResponse,xmlType={http://WebSevices.test.Company.de/}testResponse]
          2008-01-05 21:54:36,921 DEBUG [org.jboss.ws.core.jaxws.JAXBSerializer] serialized: <ns2:testResponse xmlns:ns2="http://WebSevices.test.Company.de/"><return>Greetings from J with ü -- ö</return><return>from .NET with ü -- ö</return></ns2:testResponse>
          2008-01-05 21:54:36,921 DEBUG [org.jboss.ws.core.soap.ObjectContent] xmlFragment: [source=<ns2:testResponse xmlns:ns2="http://WebSevices.test.Company.de/"><return>Greetings from J with ü -- ö</return><return>from .NET with ü -- ö</return></ns2:testResponse>]
          2008-01-05 21:54:36,921 DEBUG [org.jboss.ws.core.soap.SOAPContentElement] -----------------------------------
          


          • 2. Re: charset problem with jbossws 2.0.2 and .net clients
            fheldt

            Start JBoss with JAVA_OPTS=-Dfile.encoding=UTF-8, that should fix it.

            • 3. Re: charset problem with jbossws 2.0.2 and .net clients

              I think I can't use the -Dfile.encoding=UTF-8 option because the 3rd party modules I am using don't work anymore if this option is on.


              Am I right if I say that normally the conversation should be done automatically upon receive of the elements?

              it is working in the forward direction
              .NET (latin1) (auto convert to utf-8) |--->transport channel ( in utf-8)--->| (auto convert to latin1) jboss (Latin1)

              but not in the backward direction (how I expected it would be)
              .NET (latin1) (auto convert to latin1) |<---transport channel (in utf-8)<---| (auto convert to utf-8) jboss (Latin1)

              what really happens is this: (you can see it from my first ans second post)
              .NET (latin1) (auto convert to latin1) |<---transport channel (in utf-8)<---| (second time convert to utf-8)(auto convert to utf-8) jboss (Latin1)

              result is = one utf-8 conversation needed on the .net Side



              Is there any other way to solve this problem then this option with -D-Dfile.encoding=UTF-8 ?

              thank you for help

              Best Regard

              Vadim



              • 4. Re: charset problem with jbossws 2.0.2 and .net clients

                What is in general the best solution, best practice to overcome such issues?

                Always enable -Dfile.encoding=UTF-8 option if possible? then why is it not the enabled by standard?

                • 5. Re: charset problem with jbossws 2.0.2 and .net clients
                  fheldt

                  Well that's a good question and i have no answer...

                  See also: http://jira.jboss.org/jira/browse/JBWS-1716