2012-02-16 90 views
1

我從iBatis的2.x升級到MyBatis的3.0.6和我有一個映射器文件,該文件包括外部實體如下:包含在映射器的MyBatis文件的實體

<!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。

然而,當我現在運行它,我得到下面的異常/堆棧跟蹤:

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) 

有沒有人有任何想法,是否有什麼地方改變了,我可能不知道的?

是類路徑然後不是一個已知的協議?如果沒有,我可以使用什麼協議以及如何?

回答

1

它可能與MyBATIS無關。或者Xerces,因爲classpath協議應該在兩個組件之外進行處理,使用關注分離原則。我懷疑iBATIS有「classpath:」協議處理程序註冊 - 在我的源代碼中,沒有URLStreamHandler實現。也許在你的堆棧上有其他組件做了它,並且當你切換到myBatis時刪除了它。

本質上,url to load resources from the classpath in Java有一個答案給你。

您只需添加一個擴展URLStreamHandler的小類並實現URLStreamHandlerFactory即可。兩者都非常簡單,需要大約十幾行代碼。

如果某個組件執行了java.net.URLStreamHandler實現(您可以嘗試查看以前的技術堆棧(在二進制文件中進行全文搜索就可以做到這一點,但是您需要查看它是否實際實現了「classpath: 「 - 上面的答案提供了詳盡的見解)

+0

我做了類似的工作。謝謝 :-) – kkudi 2012-03-06 13:42:38