我尝试为类路径协议注册自定义URL处理程序,如another thread中所述。这是代码:
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
异常。
如果我在注释行中显式提供处理程序,一切都很好。但是,我宁愿不明确地提供它 - 它应该自动完成。
我做错了什么?
答案 0 :(得分:12)
我找到了这个问题。我使用的original classpath handler class有一个非默认的构造函数。当然,因为它只有一个非默认的构造函数,所以无法实例化处理程序。我向所有试图调试此问题的人道歉,我没有看到这种联系。
答案 1 :(得分:0)
调试此类问题的最简单方法是枚举已注册的协议处理程序。