🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Thread View: pl.comp.lang.java
5 messages
5 total messages Started by Mariusz Mon, 22 Aug 2011 11:42
SOAP (jws) problem z kodowaniem UTF-8
#152773
Author: Mariusz
Date: Mon, 22 Aug 2011 11:42
59 lines
2925 bytes
Witam,
Piszę pierwszy web service w java i mam maly problem:
Baza danych zwraca mi dane zakodowane w windows-1250, web service wysyla 
dane w UTF-8.
Jeśli w wyniku zapytania nie ma znaków polskich to wszystko jest ok ale 
jeśli są to dostaję wyjątek:
Service invocation threw an exception with message : 
com.sun.org.apache.xerces.internal.impl.io.MalformedByteSequenceException: 
Invalid byte 2 of 2-byte UTF-8 sequence.; Refer to the server log for more 
details

Na początku robiłem tak:
cat.name=rs.getString(2);
nie jest rzucany wyjątek MalformedByteSequenceException ale z polskich liter 
mam krzaki...

Robię tak:
//"cat" to moja klasa WebCategory opakowujaca dane - kolumna 2 w wyniku sql 
danych zawiera String w windows-1250
//"lst" to ArrayList<WebCategory>

      ResultSet rs=null;
       Statement stmt;
       WebCategory cat;
       String errstr="";
       try{
          stmt = dbConnection.createStatement();
          rs=stmt.executeQuery(sql);
          while(rs.next()){
             cat=new WebCategory();
             cat.category_id=rs.getInt(1);
             cat.parent_id=rs.getInt(3);
             cat.name="";
             try {
                cat.name=new String(rs.getBytes(2),"windows-1250");
             }
             catch(UnsupportedEncodingException ex) {
             }
             lst.add(cat);
          }
       }
       catch(SQLException e){
          errstr=e.getMessage();
          this.errorCode=3;
          return null;
       }

Deskryptor metody tego webservice:
   @WebResult(name="category")
    @WebMethod(operationName = "getDictionaryCategoryList")
    public WebCategory[] getDictionaryCategoryList(@WebParam(name = "start") 
Integer start, @WebParam(name = "count") Integer count){
        WebCategory[] categories =new WebCategory[count];
        categories=dba.getCategories(start,count);
        return categories;
    }
-- 
Pozdrawiam
Mariusz 
Re: SOAP (jws) problem z kodowaniem UTF-8
#152774
Author: Jacek Czerwinski
Date: Mon, 22 Aug 2011 13:00
17 lines
1616 bytes
W dniu 2011-08-22 13:42, Mariusz pisze:
> Witam,
> Piszę pierwszy web service w java i mam maly problem:
> Baza danych zwraca mi dane zakodowane w windows-1250, web service wysyla
> dane w UTF-8.

Yyyyy ???
W Javie nie ma wyboru, w odróznieniu od innych języków, w jakim 
kodowaniu są wewnętrzne stringi. To może być tylko unikod (prawdę mówiąc 
nigdy nie potzrebowałem wiedzieć które jego realizacja)

Driver (połączenie) jdbc należy tak uruchomić, aby było ok. Z niektórymi 
jest od reki (MSSQL), z Firebirdem i Myslq trzeba podawać parametry.

Z firebirdem zależało to od drivera, i któremuś staremu driverowi chyba 
trzeba było podawać GLOBALNE ustawienie w konfiguracji Javy, co było 
bardzo głupie.
Re: SOAP (jws) problem z kodowaniem UTF-8
#152775
Author: Mariusz
Date: Mon, 22 Aug 2011 13:29
24 lines
2189 bytes
Użytkownik "Jacek Czerwinski"  napisał w wiadomości grup 
dyskusyjnych:j2tjtd$80f$1@news.onet.pl...
> Z firebirdem zależało to od drivera, i któremuś staremu driverowi chyba 
> trzeba było podawać GLOBALNE ustawienie w konfiguracji Javy, co było 
> bardzo głupie.

Właśnie bazą danych jest Firebird ale próbowałem wymuszać inne kodowanie dla 
drivera (UTF-8) i dane z bazy otrzymywałem z prawidłowymi polskimi znakami 
ale po przesłaniu do web service dostaję ten sam exception.
Drivera Firebirda używam poprzez connection pool/jndi zdefiniowany w 
glassfish-u (3.1) i tam mam przypisane globalnie wszystkie parametry 
polaczenia z serwerem DB.

Debuggując aplikację dostaję na 100% prawidłowy unikod w obu przypadkach ale 
nie wiem gdzie coś się z tymi Stringami dzieje że się psują...
Chyba na etapie generowania web service, sam nbie wiem...

Do pisania tego webservice używam Netbeans-a z wbudowanym glassfishem - może 
coś netbeans gdzieś we właściwościach coś psuje - nie wiem nawet gdzie 
szukać przyczyny...

-- 
Pozdrawiam
Mariusz 
Re: SOAP (jws) problem z kodowaniem UTF-8
#152776
Author: Mariusz Pieniążek
Date: Tue, 23 Aug 2011 18:25
9 lines
1309 bytes
Może coś leży pomiędzy klientem, a web service? Przechwyć czymś
komunikację (np. wiresharkiem) i zobacz nagłówki. Zwłaszcza
"Content-Type". Poprawnie ma być coś w stylu:

POST /item HTTP/1.1
Content-Type: application/soap+xml; charset=utf-8
Content-Length: 250

Jak jest: "Content-Type: text/plain" to źle :)
Re: SOAP (jws) problem z kodowaniem UTF-8
#152777
Author: Mariusz
Date: Fri, 26 Aug 2011 08:07
17 lines
1878 bytes
Użytkownik "Mariusz Pieniążek"  napisał w wiadomości grup 
dyskusyjnych:j30ra9$5gc$1@news.onet.pl...
> Jak jest: "Content-Type: text/plain" to źle :)

Witam,
Sprawdziłem że na 100% web service generuje prawidłowo UTF-8 i odpowiednie 
nagłówki - okazało się że problemem jest testowy "web service client" 
generowany automatycznie przez netbeans - jeśli przypiąłem się innym 
klientem to wszystko jest prawidłowo. Niestety nie udało mi się znaleźć 
przyczyny nieprawidłowego działania tego generatora w netbeans - może kiedyś 
to naprawią...;)

Dziękuję za sugestie.

-- 
Pozdrawiam
Mariusz
Thread Navigation

This is a paginated view of messages in the thread with full content displayed inline.

Messages are displayed in chronological order, with the original post highlighted in green.

Use pagination controls to navigate through all messages in large threads.

Back to All Threads