Включение сущности в файл сопоставления myBatis - PullRequest
1 голос
/ 16 февраля 2012

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

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

В iBatis это работало нормально.

Единственное структурное изменение, которое я сделал, - это то, что я изменил папку ibatis на 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)

Кто-нибудь знает, изменилось ли что-то, о чем я, возможно, не знаю?1012 * Является ли classpath не известным протоколом?Если нет, какой протокол я могу использовать и как?

1 Ответ

1 голос
/ 23 февраля 2012

Вероятно, это не имеет никакого отношения к MyBATIS. Или Xerces, в этом отношении, поскольку протокол classpath должен обрабатываться вне обоих компонентов, используя принцип разделения интересов. Я сомневаюсь, что iBATIS зарегистрировал обработчик протокола "classpath:" - в исходном коде, который я имею, нет реализации URLStreamHandler. Возможно, какой-то другой компонент в вашем стеке сделал это, и вы удалили его при переключении на myBatis.

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

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

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

...