Вопрос

Я обновляюсь с ibatis 2.x до mybatis 3.0.6, и у меня есть файл Mapper, который включает внешнюю сущность следующим образом:

    <!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">
]>

Под ибатисом это работало нормально.

Единственное структурное изменение, которое я сделал, - это то, что я изменил папку ибатис на Mybatis.

Однако, когда я сейчас запускаю, я получаю следующее исключение/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)

У кого -нибудь есть представление о том, изменилось ли что -то, о чем я, возможно, не знаю?

Тогда не известный протокол. Если нет, то какой протокол я могу использовать и как?

Это было полезно?

Решение

Это, вероятно, не имеет ничего общего с Mybatis. Или Xerces, в этом отношении, поскольку протокол Classpath следует обрабатывать за пределами обоих компонентов, используя принцип разделения беспокойства. Я сомневаюсь, что у Ibatis был зарегистрирован обработчик протокола - в исходном коде, который у меня есть, нет URLStreamHandler реализация. Может быть, какой -то другой компонент в вашем стеке сделал это, и вы удалили его при переходе на Mybatis.

По сути, URL для загрузки ресурсов с пути класса в Java есть ответ для вас.

Все, что вам нужно сделать, это добавить небольшой класс, расширяющий URLStreamHandler и реализовать а URLStreamHandlerFactory. Анкет Оба очень просты и требуют около дюжины строк кода.

Вы можете попробовать посмотреть в своем предыдущем технологическом стеке, если был java.net.URLStreamHandler Реализация, выполненная каким -то компонентом (полное поиск текста в двоичных файлах сделает свое дело, но тогда вам нужно посмотреть, действительно ли он реализовал «ClassPath:» - Ответ выше дает исчерпывающую информацию)

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top