Pregunta

Estoy actualizando de Ibatis 2.x a MyBatis 3.0.6 y tengo un archivo mapper que incluye una entidad externa de la siguiente manera:

    <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"
[
    <!ENTITY rating_analysis_state_cases SYSTEM "classpath://ibatis/includes/rating_analysis_state_cases.sql">
]>

Bajo Ibatis esto solía funcionar bien.

El único cambio estructural que he hecho es que cambié la carpeta Ibatis a MyBatis.

Sin embargo, cuando ahora lo ejecuto, obtengo la siguiente excepción/StackTrace:

Caused By: java.net.MalformedURLException: unknown protocol: classpath
    at java.net.URL.<init>(URL.java:574)
    at java.net.URL.<init>(URL.java:464)
    at java.net.URL.<init>(URL.java:413)
    at com.sun.org.apache.xerces.internal.impl.XMLEntityManager.setupCurrentEntity(XMLEntityManager.java:650)
    at com.sun.org.apache.xerces.internal.impl.XMLEntityManager.startEntity(XMLEntityManager.java:1315)

¿Alguien tiene alguna idea de si algo ha cambiado de lo que podría no saber?

¿Classpath no es un protocolo conocido? Si no, ¿qué protocolo podría usar y cómo?

¿Fue útil?

Solución

Probablemente no tenga nada que ver con MyBatis. O Xerces, para el caso, ya que el protocolo ClassPath debe manejarse fuera de ambos componentes, utilizando el principio de separación de preocupación. Dudo que Ibatis haya tenido "classpath:" controlador de protocolo registrado: en el código fuente que tengo, no hay URLStreamHandler implementación. Sin embargo, tal vez algún otro componente en su pila lo hizo, y lo eliminó al cambiar a mybatis.

Esencialmente, URL para cargar recursos de la classpath en Java tiene una respuesta para ti.

Todo lo que necesita hacer es agregar una clase pequeña que se extiende URLStreamHandler e implementar un URLStreamHandlerFactory. Ambos son muy simples y requieren alrededor de una docena de líneas de código.

Puede intentar mirar en su pila de tecnología anterior, si había un java.net.URLStreamHandler Implementación realizada por algún componente (la búsqueda de texto completo en archivos binarios hará el truco, pero luego debe ver si realmente estaba implementando "classpath:" - La respuesta anterior proporciona una visión exhaustiva)

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top