I tried to register a custom URL handler for a classpath protocol, as described in another thread. Here is the code:
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");
}
}
The test case has the following JVM arguments:
-Djava.protocol.handler.pkgs=com.mycompany.protocol
The System.out.println line properly outputs com.mycompany.protocol, so the property is being set. However, it looks like it's not being taken into effect, because the above call will throw a java.net.MalformedURLException: unknown protocol: classpath exception.
If I provide the handler explicitly as in the commented line, everything is fine. However, I would rather not provide it explicitly - it should be done automatically.
What am I doing wrong?