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?
¿Funciona si pasa el controlador al constructor de la URL? (Esta es solo una propuesta de depuración, no la solución final). –
Sí, si hago un comentario sobre la primera afirmación y la uso en su lugar, funciona. – Dario
Ah, lo siento, no leí la pregunta completamente :-(. –