Java – 注册自定义URL协议处理程序

我尝试为类路径协议注册自定义URL处理程序,如另一个线程中所述 。 这是代码:

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"); } } 

测试用例具有以下JVM参数:

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

System.out.println行正确输出com.mycompany.protocol ,因此正在设置该属性。 但是,看起来它没有生效,因为上面的调用将抛出一个java.net.MalformedURLException: unknown protocol: classpath exception。

如果我在注释行中显式提供处理程序,一切都很好。 但是,我宁愿不明确地提供它 – 它应该自动完成。

我究竟做错了什么?

我发现了这个问题。 我使用的原始类路径处理程序类具有非默认构造函数。 当然,因为它只有一个非默认的构造函数,所以处理程序无法实例化。 我向所有尝试调试此问题的人道歉,我没有看到这种联系。

调试此类问题的最简单方法是枚举已注册的协议处理程序。