2011-06-08 9 views
16

Intenté registrar un manejador de URL personalizado para un protocolo de ruta de clases, como se describe en another thread. Aquí está el código:Java: registro de manejadores de protocolo URL personalizados

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"); 
    } 
} 

El caso de prueba tiene las siguientes argumentos de JVM:

-Djava.protocol.handler.pkgs=com.mycompany.protocol 

La línea de salida a System.out.println adecuadamente com.mycompany.protocol, por lo que la propiedad está siendo ajustado. Sin embargo, parece que no se está aplicando, porque la llamada anterior emitirá una excepción java.net.MalformedURLException: unknown protocol: classpath.

Si proporciono el controlador explícitamente como en la línea comentada, todo está bien. Sin embargo, preferiría no proporcionarlo explícitamente, debería hacerse automáticamente.

¿Qué estoy haciendo mal?

+0

¿Funciona si pasa el controlador al constructor de la URL? (Esta es solo una propuesta de depuración, no la solución final). –

+0

Sí, si hago un comentario sobre la primera afirmación y la uso en su lugar, funciona. – Dario

+0

Ah, lo siento, no leí la pregunta completamente :-(. –

Respuesta

12

He encontrado el problema. El original classpath handler class que utilicé tenía un constructor no predeterminado. Por supuesto, debido a que solo tenía un constructor no predeterminado, no se pudo crear una instancia del controlador. Pido disculpas a todos los que han tratado de solucionar este problema, no pude ver esta conexión.

+2

no lo siento, también sabrán cómo resolver este tipo de pregunta. –

0

Probablemente la forma más fácil de solucionar estos problemas es enumerar los manejadores de protocolo registrados.

+2

Si bien esto teóricamente puede responder a la pregunta, [sería preferible] (http://meta.stackexchange.com/q/8259) para incluir las partes esenciales de la respuesta aquí y proporcione el enlace para referencia. – oers

+2

El enlace parece no ser válido (desde el 11/03/2014) –

Cuestiones relacionadas