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
Вероятно, самый простой способ отладки таких проблем - перечислить зарегистрированные обработчики протоколов.