Running Java code under different locle

I was recently looking at a piece of code where in we are using a file
writer to write a WSDL file. The piece of code was working perfectly
fine on Windows. When we wanted to run the same piece of code on
Solaris 10 with Japanese Encoding(ja). it was giving the following
exception:

WSDLException: faultCode=OTHER_ERROR: WSDLException: faultCode=CONFIGURATION_ERROR: Unsupported Java encoding for
writing wsdl file: 'EUC_JP_Solaris'.:

I tried to debug the same and the following code was causing the issue.

final WSDLWriter writer = WSDLGenerator.factory.newWSDLWriter();
final String outputFileName = this.wsdlFileLocation + "/" + this.mWSDLFileName + ".wsdl";
final Writer sink = new FileWriter(outputFileName);
writer.writeWSDL(this.def, sink);


Here
the java.io.FileWriter extended from java.io.Writer and do not have a
way to specify the encoding. It seems to take the default encoding from
the underlying platform. Solaris 1o running in Japanese locale was
returning "EUC_JP_Solaris". After a session of debugging I tried the
following program to get the supported encoding from a simple java
program.


package javaapplication1;

import java.nio.charset.Charset;
/\*\*
\*
\* @author nr194586
\*/
public class Main {

/\*\*
\* @param args the command line arguments
\*/
public static void main(String[] args) {
            // TODO code application logic here
            java.util.Iterator charsetIt = Charset.availableCharsets().values().iterator();
            boolean flag = false;
            String chSetName = null;
            while(charsetIt.hasNext()){
                chSetName = charsetIt.next().toString();
                System.out.print( chSetName + "\\t"  );
                if(chSetName.trim().equals( "EUC_JP_Solaris" ))
                        flag = true;
              }
        if(flag)
            System.out.println( "\\n\\n Found Charset" ) ;
        else
            System.out.println( "\\n\\n Couldn't found the charset " ) ;
   }

}

I got the following output:

init:
deps-jar:
Compiling 1 source file to /home/nr194586/NetBeansProjects/JavaApplication1/build/classes
compile:
run:
Big5
Big5-HKSCS EUC-JP EUC-KR GB18030 GB2312 GBK IBM-Thai IBM00858 IBM01140
IBM01141 IBM01142 IBM01143 IBM01144 IBM01145 IBM01146 IBM01147 IBM01148
IBM01149 IBM037 IBM1026 IBM1047 IBM273 IBM277 IBM278 IBM280 IBM284
IBM285 IBM297 IBM420 IBM424 IBM437 IBM500 IBM775 IBM850 IBM852 IBM855
IBM857 IBM860 IBM861 IBM862 IBM863 IBM864 IBM865 IBM866 IBM868 IBM869
IBM870 IBM871 IBM918 ISO-2022-CN ISO-2022-JP ISO-2022-KR ISO-8859-1
ISO-8859-13 ISO-8859-15 ISO-8859-2 ISO-8859-3 ISO-8859-4 ISO-8859-5
ISO-8859-6 ISO-8859-7 ISO-8859-8 ISO-8859-9 JIS_X0201 JIS_X0212-1990
KOI8-R Shift_JIS TIS-620 US-ASCII UTF-16 UTF-16BE UTF-16LE UTF-8
windows-1250 windows-1251 windows-1252 windows-1253 windows-1254
windows-1255 windows-1256 windows-1257 windows-1258 windows-31j
x-Big5-Solaris x-euc-jp-linux x-EUC-TW x-eucJP-Open x-IBM1006 x-IBM1025
x-IBM1046 x-IBM1097 x-IBM1098 x-IBM1112 x-IBM1122 x-IBM1123 x-IBM1124
x-IBM1381 x-IBM1383 x-IBM33722 x-IBM737 x-IBM834 x-IBM856 x-IBM874
x-IBM875 x-IBM921 x-IBM922 x-IBM930 x-IBM933 x-IBM935 x-IBM937 x-IBM939
x-IBM942 x-IBM942C x-IBM943 x-IBM943C x-IBM948 x-IBM949 x-IBM949C
x-IBM950 x-IBM964 x-IBM970 x-ISCII91 x-ISO-2022-CN-CNS x-ISO-2022-CN-GB
x-iso-8859-11 x-JIS0208 x-JISAutoDetect x-Johab x-MacArabic
x-MacCentralEurope x-MacCroatian x-MacCyrillic x-MacDingbat x-MacGreek
x-MacHebrew x-MacIceland x-MacRoman x-MacRomania x-MacSymbol x-MacThai
x-MacTurkish x-MacUkraine x-MS950-HKSCS x-mswin-936 x-PCK
x-windows-50220 x-windows-50221 x-windows-874 x-windows-949
x-windows-950 x-windows-iso2022jp

Couldn't found the charset

The encoding "EUC_JP_Solaris" was not there. I fixed the issue in the following way.

final WSDLWriter writer = WSDLGenerator.factory.newWSDLWriter();
final String outputFileName = this.wsdlFileLocation + File.separator + this.mWSDLFileName + ".wsdl" ;
java.io.FileOutputStream fos = new java.io.FileOutputStream(outputFileName);
final Writer sink = new java.io.OutputStreamWriter(fos,"UTF-8";); // we can have any of the supported encoding also apart from "UTF8"
writer.writeWSDL(this.def, sink);

I
felt like, for your code to be platform independent with respect to
java.io, do not rely on the platform completely, rather say the
encoding explicitly if the platform do not support the specified
encoding.

Comments:

Post a Comment:
  • HTML Syntax: NOT allowed
About

I was part of Sun R&D in Java CAPS and later Glassfish ESB. I moved from R&D to Consulting. I am currently working as a Solution Architect in Oracle Consulting Services (India). I was sharing my experience w.r.t. Java CAPS and other technologies during Sun period. Now in Oracle world I share my experiences with Oracle FMW product line as well as other Oracle Technologies and products.

Search

Archives
« April 2014
SunMonTueWedThuFriSat
  
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
   
       
Today