Domanda

Sono Aggiornamento da iBatis 2.xa myBatis 3.0.6 e ho un file di mapping che comprende un'entità esterna come segue:

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

In questo iBatis utilizzato per funzionare bene.

L'unico cambiamento strutturale che ho fatto è che ho cambiato la cartella ibatis a mybatis.

Tuttavia, quando la società l'eseguo ottengo la seguente eccezione / 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)

Qualcuno ha preso qualche idea sul fatto che qualcosa è cambiato, che potrei non sapere?

È classpath quindi non un protocollo noto? Se no, che il protocollo potrei utilizzare e come?

È stato utile?

Soluzione

Probabilmente non ha nulla a che fare con MyBATIS. Oppure Xerces, del resto, dal momento che il protocollo classpath deve essere maneggiato al di fuori di entrambi i componenti, utilizzando la separazione di principio di preoccupazione. Dubito iBATIS aveva "percorso di classe:" gestore di protocollo registrato - nel codice sorgente che ho, non v'è alcuna implementazione URLStreamHandler. Forse qualche altro componente sul tuo stack lo ha fatto però, e rimosso quando si passa a myBatis.

In sostanza, URL a risorse di carico del percorso di classe in Java ha una risposta per voi.

Tutto quello che dovete fare è aggiungere una piccola classe che estende URLStreamHandler e attuare una URLStreamHandlerFactory. Entrambi sono molto semplici e richiedono circa una dozzina di righe di codice.

Si può provare a guardare nel vostro stack tecnologico precedente, se ci fosse un'implementazione java.net.URLStreamHandler fatto da qualche componente (ricerca di testo completo nel file binari farà il trucco, ma poi avete bisogno di vedere se effettivamente è stato attuando "classpath:" - la risposta di cui sopra fornisce una visione esaustiva)

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top