Включая сущность в файле Mybatis Mapper
-
26-10-2019 - |
Вопрос
Я обновляюсь с 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:» - Ответ выше дает исчерпывающую информацию)