Java – Registrieren von benutzerdefinierten URL-Protokollhandlern

Ich habe versucht, einen benutzerdefinierten URL-Handler für ein classnpfadprotokoll zu registrieren, wie in einem anderen Thread beschrieben . Hier ist der Code:

package com.mycompany; import org.junit.Test; import java.net.MalformedURLException; import java.net.URL; import com.mycompany.protocol.classpath.Handler; public class ParserTest { @Test public void testParsing() throws MalformedURLException { System.out.println(System.getProperty("java.protocol.handler.pkgs")); //URL url = new URL(null, "classpath://com.mycompany/hello-world.xml", new Handler(ClassLoader.getSystemClassLoader())); URL url = new URL("classpath://com.mycompany/hello-world.xml"); } } 

Der Testfall hat die folgenden JVM-Argumente:

 -Djava.protocol.handler.pkgs=com.mycompany.protocol 

In der Zeile System.out.println wird com.mycompany.protocol ordnungsgemäß com.mycompany.protocol , sodass die Eigenschaft festgelegt wird. Es sieht jedoch so aus, als ob es nicht in Kraft tritt, da der obige Aufruf eine java.net.MalformedURLException: unknown protocol: classpath Ausnahme java.net.MalformedURLException: unknown protocol: classpath .

Wenn ich den Handler explizit wie in der kommentierten Zeile zur Verfügung stelle, ist alles in Ordnung. Allerdings würde ich es lieber nicht explizit angeben – es sollte automatisch erfolgen.

Was mache ich falsch?

Ich habe das Problem gefunden. Die ursprüngliche classnpfad-Handler-class , die ich verwendet habe, hatte einen nicht standardmäßigen Konstruktor. Da es nur einen nicht standardmäßigen Konstruktor hatte, konnte der Handler natürlich nicht instanziiert werden. Ich entschuldige mich bei allen, die versucht haben, dieses Problem zu debuggen. Ich habe diese Verbindung nicht gesehen.

Die einfachste Möglichkeit, solche Probleme zu beheben, ist die Auflistung der registrierten Protokoll-Handler.