Frage

Ich bin von Ibatis 2.x auf mybatis 3.0.6 aktualisiert und habe eine Mapper -Datei, die wie folgt eine externe Entität enthält:

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

Unter Ibatis funktionierte das früher gut.

Der einzige strukturelle Wandel, den ich vorgenommen habe, ist, dass ich den Ibatis -Ordner in MyBatis geändert habe.

Wenn ich es jetzt jetzt ausführe, bekomme ich die folgende Ausnahme/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)

Hat jemand eine Idee, ob sich etwas geändert hat, von dem ich vielleicht nichts weiß?

Ist der Klassenpfad damals kein bekanntes Protokoll? Wenn nicht, welches Protokoll könnte ich verwenden und wie?

War es hilfreich?

Lösung

Es hat wahrscheinlich nichts mit MyBatis zu tun. Oder Xerces, da das ClassPath -Protokoll außerhalb beider Komponenten unter Verwendung des Trennung von Bedenken gehandhabt werden sollte. Ich bezweifle, dass Ibatis "Klassenpfad" hatte: Protokollhandler registriert - in dem Quellcode, den ich habe, gibt es keine URLStreamHandler Implementierung. Vielleicht hat es eine andere Komponente auf Ihrem Stapel getan, und Sie haben es beim Wechsel zu MyBatis entfernt.

Im Wesentlichen, URL, um Ressourcen aus dem Klassenpfad in Java zu laden Hat eine Antwort für Sie.

Sie müssen lediglich eine kleine Klasse hinzufügen, die sich erstreckt URLStreamHandler und implementieren a URLStreamHandlerFactory. Beide sind sehr einfach und erfordern rund ein Dutzend Codezeilen.

Sie können versuchen, Ihren vorherigen Technologiestapel zu schauen, wenn es eine gab java.net.URLStreamHandler Implementierung durch eine Komponente (Volltext -Suche in Binärdateien erfolgt den Trick, aber dann müssen Sie sehen, ob sie tatsächlich "ClassPath" implementiert hat: - Die obige Antwort bietet erschöpfende Einsicht)

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top