You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@tomcat.apache.org by Johan Krisar <jo...@depicta.com> on 2003/08/13 14:18:33 UTC

Using an Extra CharsetProvider in a Servlet

I'm messing around with character sets and character set conversions, and 
have a problem getting it to work in servlets. Installing an additional 
Charset requires entries in the file java.nio.charset.spi.CharsetProvider 
in META-INF/services. My problem is in understanding exactly WHAT META-INF 
directory I should place this file in...

So far, the only way I've been able to get things to work properly, is to 
unpack the $CATALINA_HOME/bin/bootstrap.jar, add my Charset, 
CharsetProvider, CharsetEncoder and CharsetDecoder classes to it, change 
the META-INF, and re-pack the bootstrap jar. However, this does seem a 
rather "hacky" way to get things working...

Actually, I found that James Manger had exactly the same problem about a 
year ago. I include his original posting, as it formulates the problem 
rather well:


>I would like to use a non-standard character set for selected operations
>within a servlet.  I have implemented a CharsetProvider, Charset,
>CharsetEncoder & CharsetDecoder.
>
>I can use my new character set from a Java application by listing the
>CharsetProvider class name in the following file within the application JAR.
>         META-INF/services/java.nio.charset.spi.CharsetProvider
>(see API for CharsetProvider)
>
>My application (without any particular "import" statements) can make calls
>such as:
>         String msg = "Hello, World!";
>         byte[] encoding = msg.getBytes("MY-CHARSET");
>
>I cannot get these lines to work in a servlet -- the
>msg.getBytes("MY-CHARSET") throws:
>         java.nio.charset.UnsupportedCharsetException: MY-CHARSET
>
>QUESTION: How do I tell the system running my servlet about my character
>set?
>
>Adding a JAR with the character set (and META-INF... file) to the jre/ext/
>directory makes the character set available to all Java apps - but not to
>the servlet!  Adding the JAR to tomcat/common/lib/ did not seem to work
>either.
>
>My servlet can see my CharsetProvider class, but my CharsetProvider is not
>"registered" with the system (and it needs to be "registered" for
>String.getBytes("MY-CHARSET") to work).
>
>[JWSDP 1.0_01, J2SE 1.4.0_01, Tomcat 4.1.2, SunOS 5.6]
>
>James Manger


Unlike James, I'm using J2SE 1.4.1_02-b06, Tomcat 4.1.18 and RedHat 8.0.


Happy for any clue anyone may be able to provide!


Cheers,

- Johan

---
   Johan Krisár,
   johan.krisar(at)depicta.com