17

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?

Community
  • 1
  • 1
Ariod
  • 5,757
  • 22
  • 73
  • 103

2 Answers2

14

I have found the issue. The original classpath handler class that I used had a non-default constructor. Of course, because it had only a non-default constructor, the handler couldn't be instantiated. I apologize to everyone who have tried to debug this issue, I failed to see this connection.

Community
  • 1
  • 1
Ariod
  • 5,757
  • 22
  • 73
  • 103
0

Probably easiest way to debug such problems is to enumerate the protocol handlers registered.

Matt
  • 74,352
  • 26
  • 153
  • 180
Kiran
  • 1
  • 2
    Whilst this may theoretically answer the question, [it would be preferable](http://meta.stackexchange.com/q/8259) to include the essential parts of the answer here, and provide the link for reference. – oers Oct 26 '12 at 10:50
  • 2
    The link seems no longer valid (as of 11/03/2014) – Oliver Mason Mar 11 '14 at 15:01