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

17

我试图注册一个类路径协议的自定义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 异常,因此似乎没有生效。

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

我做错了什么?


如果将处理程序传递给URL的构造函数,它能正常工作吗?(这只是一个调试建议,而不是最终解决方案。) - Paŭlo Ebermann
是的,如果我注释掉第一条语句并使用那个语句,它就可以工作。 - Ariod
啊,抱歉,没有完全阅读问题 :-(。 - Paŭlo Ebermann
@Dario,你能告诉我如何编写自定义的JDBC驱动程序吗?如果有好的参考资料,请帮我提供链接。 - KCK
2个回答

14

我找到了问题所在。我使用的原始classpath处理器类具有非默认构造函数。当然,因为它只有非默认构造函数,该处理程序无法实例化。对于所有试图调试此问题的人,我表示歉意,我没有看到这个联系。


2
不要抱歉,他们也会知道如何解决这种问题。 - Nandkumar Tekale

0

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


2
虽然这理论上回答了问题,但最好在此处包含答案的基本部分,并提供参考链接。 - oers
2
该链接似乎已失效(截至2014年11月3日)。 - Oliver Mason

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接