Java - Регистрация обработчиков пользовательских URL-адресов

Я попытался зарегистрировать собственный обработчик URL для протокола classpath, как описано в другом потоке. Вот код:

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.

Если я предоставляю обработчик явно, как в прокомментированной строке, все в порядке. Однако я бы предпочел не предоставлять его явно - это должно быть сделано автоматически.

Что я делаю неправильно?

Ответ 1

Я нашел проблему. оригинальный класс обработчика classpath, который я использовал, имел конструктор, отличный от стандартного. Конечно, поскольку у него был только конструктор, отличный от стандартного, обработчик не мог быть создан. Я приношу свои извинения всем, кто пытался отладить эту проблему, я не видел этого соединения.

Ответ 2

Вероятно, самый простой способ отладки таких проблем - перечислить зарегистрированные обработчики протоколов.