2016-08-09 11 views
1

Dies ist nicht eine Wiederholung von Loading a Java Charset manually ist. Ich möchte dasselbe tun, aber ohne META-INF. Ist es möglich? Ist eine allgemeine Lösung für verschiedene Servicetypen?Legen Sie eine Java-Charset explizit dynamisch

In diesem speziellen Fall muss ich utf-7-Daten unter Verwendung eines CharsetProvider wie JUTF7 verarbeiten. Neben dem Krug zum Classpath hinzufügen, erfordert dies eine Datei META-INF Hinzufügen/Dienstleistungen, wenn der Dateiname java.nio.charset.spi.CharsetProvider und der Inhalt identifiziert jutf7 ist. In diesem Fall kann META-INF jedoch nicht verwendet werden. Gibt es eine Problemumgehung?

+1

Warum ist es nicht möglich, META-INF zu benutzen? – Andreas

Antwort

2

Nein, es ist nicht möglich, ein neues CharSet zu registrieren, außer durch die Implementierung eines CharSetProvider, und es kann nur durch META-INF/services registriert werden. Sieh dir das Javadoc an.

Das bedeutet jedoch nicht, dass Sie diese Datei für jutf7 bereitstellen müssen. Die Datei jutf7 jar enthält bereits die erforderliche Servicedatei. Da die Seite, die Sie sagt verknüpft: einfach das Glas in Ihrem Classpath fallen, und Sie sind bereit zu gehen.

+0

Dank für die Spitze, die eine Abhilfe vorgeschlagen. Leider schlägt das fehl, weil der Systemklassenlader nicht derselbe Klassenlader ist, der zum Laden benutzerimportierter Klassen verwendet wird, und in meinem Fall verwendet der Zeichensatzanbieterdienst den Systemklassenlader direkt. Es gibt eine Lösung mit Reflektion, aber es ist nicht schön. –

+2

Das ist ein alter ungelöster Fehler: [JDK-4619777: (cs) Zeichensatzanbieter werden nicht über den Kontextklassenlader nachgeschlagen] (http://bugs.java.com/bugdatabase/view_bug.do?bug_id=4619777) – Andreas

Verwandte Themen