Question

Je suis mise à niveau de iBatis 2.x à mybatis 3.0.6 et j'ai un fichier mappeur qui comprend une entité externe comme suit:

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

Dans le cadre iBatis utilisé pour ce beau travail.

Le seul changement structurel que j'ai fait est que j'ai changé le dossier ibatis à mybatis.

Mais quand je lance maintenant je reçois l'exception / stacktrace suivant:

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)

Quelqu'un at-il une idée de savoir si quelque chose a changé que je ne pourrais pas savoir?

est classpath donc pas un protocole connu? Sinon, quel protocole pourrais-je utiliser et comment?

Était-ce utile?

La solution

Il n'a probablement rien à voir avec mybatis. Ou Xerces, pour cette matière, étant donné que le protocole classpath doit être traité en dehors des deux composants, en utilisant la séparation du principe de préoccupation. Je doute iBATIS avait « classpath: » gestionnaire de protocole enregistré - dans le code source je, il n'y a pas de mise en œuvre URLStreamHandler. Peut-être un autre composant sur votre pile a fait bien, et vous l'avez retiré lors du passage à mybatis.

Pour l'essentiel, URL pour les ressources de charge du classpath en Java a une réponse pour vous.

Tout ce que vous devez faire est d'ajouter une petite classe et extension URLStreamHandler mettre en œuvre un URLStreamHandlerFactory. Les deux sont très simples et nécessitent une douzaine de lignes de code.

Vous pouvez regarder dans votre pile de technologie précédente, il y avait une mise en œuvre de java.net.URLStreamHandler fait par un composant (recherche plein texte dans des fichiers binaires fera l'affaire, mais vous devez voir si elle était réellement en œuvre « classpath: » - la réponse ci-dessus donne un aperçu exhaustif)

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top