axis-c-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "nadir amra (JIRA)" <>
Subject [jira] Commented: (AXISCPP-964) SOAP request/response not UTF-8 encoded (but claims to be)
Date Fri, 13 Feb 2009 23:24:59 GMT


nadir amra commented on AXISCPP-964:

OK, I have created:

src/platforms/PlatformLanguageUtils.hpp that has a static routine:

    static wchar_t * toWchar(const char *charBuf, int charLen);
    static char *       toChar(const wchar_t *wcharBuf, int wcharLen);
    static char *       toUTF8(const char *charBuf, int charLen);

The key here is toUTF8().  Question is whether there is a generic implementation that can
be used to convert strings to UTF8 for windows and unix?  Is iconv() something that should
be used?  Currently the routine throws an exception of invoked.  However, OS/400 has own implementation
file in 


that it uses.  If iconv is something that can be used, is that part of OS on unix and windows?
 What is dll (window) or library name (unix name)?

> SOAP request/response not UTF-8 encoded (but claims to be)
> ----------------------------------------------------------
>                 Key: AXISCPP-964
>                 URL:
>             Project: Axis-C++
>          Issue Type: Bug
>          Components: SOAP
>    Affects Versions: current (nightly)
>         Environment: All platforms, except OS/400
>            Reporter: Henrik Nordberg
> (See the end of this description for a one-liner that works around this problem for most
> SoapSerializer.cpp, line 379 says
> serialize( "<?xml version='1.0' encoding='utf-8' ?>", NULL);
> that is that the SOAP response is UTF-8 encoded. But this is only true for OS/400 as
can be seen in HTTPTransport.cpp, lines 311-
> #ifndef __OS400__
>         *m_pActiveChannel << this->getHTTPHeaders ();
>         *m_pActiveChannel << this->m_strBytesToSend.c_str ();
> #else
>         // Ebcdic (OS/400) systems need to convert the data to UTF-8. Note that free()
>         // correctly used and should not be changed to delete().		
>         const char *buf = this->getHTTPHeaders ();
>         utf8Buf = toUTF8((char *)buf, strlen(buf)+1);
>         *m_pActiveChannel << utf8Buf;
>         free(utf8Buf);
>         utf8Buf = NULL;
>         utf8Buf = toUTF8((char *)this->m_strBytesToSend.c_str(), this->m_strBytesToSend.length()+1);
>         *m_pActiveChannel << utf8Buf;
>         free(utf8Buf);
>         utf8Buf = NULL;
> #endif
> This leads to clients trying to decode the response as UTF-8, and will have errors whenever
the response contains non-ASCII characters (i.e., > 127).
> Axis Java, for example, will prduce this error upon decoding: 
> " Invalid byte 2 of 3-byte UTF-8 sequence."
> A simple workaround is to change SoapSerializer.cpp, line 379:
> from
> serialize( "<?xml version='1.0' encoding='utf-8' ?>", NULL);
> to
> serialize( "<?xml version='1.0' encoding='ISO-8859-1' ?>", NULL);
> The real fix, however, is to encode the response with UTF-8 for all platforms (not just

This message is automatically generated by JIRA.
You can reply to this email to add a comment to the issue online.

View raw message