Я попытался зарегистрировать собственный обработчик 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
.
Если я предоставляю обработчик явно, как в прокомментированной строке, все в порядке. Однако я бы предпочел не предоставлять его явно - это должно быть сделано автоматически.
Что я делаю неправильно?