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

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (83)

我尝试为类路径协议注册一个自定义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异常。

如果我在注释行中明确提供处理程序,则一切正常。但是,我宁愿不明确提供它 - 它应该自动完成。

我究竟做错了什么?

提问于
用户回答回答于

我发现了这个问题。我使用的原始类路径处理程序类有一个非默认构造函数。当然,因为它只有一个非默认的构造函数,所以处理程序不能被实例化。我向所有试图调试此问题的人道歉,但我未能看到这一关联。

用户回答回答于

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

扫码关注云+社区