解決離線Could not parse configuration:hibernate.cfg.xml錯誤


 

離線使用hibernate tool 生成反向工程,在配置 配置文件完,生成配置文件后,會報出org.hibernate.HibernateException: Could not parse configuration:錯誤

 

  原因:就是讀取不到本地dtd約束,然后必須每次聯網加載才行,具體原因不了解,因為網絡這方面的解答都比較模糊,應該是小范圍問題,感覺是jdk與tools要求版本不一致,導致部分插件未正常安裝,解析出現問題

 

解決方式(同理可解決映射文件出現的解析不成的問題)

:  首先確認cfg.xml文件的格式內容的正確

 

        方式1. 連接網絡!!!!!

                                           (如果網絡不好會出現解析不成功)

        方式2. 使用本地的dtd..(hibernate設計是首先讀取本地,但可能是由於插件出現問題,讀取不了本地,直接加載網絡)

                                          (快捷,提高效率)

 

<!DOCTYPE hibernate-configuration  SYSTEM

"classpath://org/hibernate/hibernate-configuration-3.0.dtd">

<!—這是最可取的替換方式-->

  (使用前,請確認是否將hibernate包導入)

------------------------------------------------------弄點廢話

  之前測試時,電腦連着網絡,在修改本地路徑時,只是修改"http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd"這部分內容,只要聯網其實怎么修改都不影響,因為前邊還有個public id影響,還有不應該使用普通的路徑格式,根據xml格式使用uri格式,因為xml分析器首先會以某種機制查找公共DTD的名稱,查到了,則以此為標准,如果查不到,再到DTD位置上去找,所以還是只需要修改部分內容即可,但是需要路徑寫對,尋找本地的xml約束有多種方式。

 

 

  第一種在eclipse設置中,window/preferences/xml/xml catalog/ 設置下 找到-//Hibernate/Hibernate Configuration DTD 3.0//EN 點擊,下方詳情會出現其uri。。復制並替換xml的dtd即可

 

<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE hibernate-configuration PUBLIC

                                "-//Hibernate/Hibernate Configuration DTD 3.0//EN"

                                "file:/C:/Program Files/eclipse/../../xx/.eclipse/org.eclipse.platform_4.5.1_1709980481_win32_win32_x86_64/plugins/org.hibernate.eclipse.mapper_4.0.1.Final-v20150324-2307-B95/dtd/hibernate-configuration-3.0.dtd">

 

<!--這是通過xml設置中找到的,各個電腦的路徑不同,要復制自己的路徑,路徑太長,不建議使用-->

  

  第二種,其實在hibernate-core-xx核心jar包里已經內置dtd文件了(配置文件和映射文件都有),在org/hibernate/包下,由於已經導包,所以也可以使用classpath路徑

 

<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE hibernate-configuration PUBLIC

                                "-//Hibernate/Hibernate Configuration DTD 3.0//EN"

                                "classpath://org/hibernate/hibernate-configuration-3.0.dtd">

 

<!--這是使用classpath路徑配置,適應各個機器,建議使用,但使用以下方式,解析會快捷一些-->

  

  雖然以上都能解決問題,但是建議使用直接本地約束的方式SYSTEM,不管有網沒網直接讀取本地約束,這樣速度要快的多

 

<!DOCTYPE hibernate-configuration  SYSTEM

                                "file:/C:/Program Files/eclipse/../../xx/.eclipse/org.eclipse.platform_4.5.1_1709980481_win32_win32_x86_64/plugins/org.hibernate.eclipse.mapper_4.0.1.Final-v20150324-2307-B95/dtd/hibernate-configuration-3.0.dtd">

 

<!--這是通過xml設置中找到的,路徑長不建議使用-->

 

 

<!DOCTYPE hibernate-configuration  SYSTEM

"classpath://org/hibernate/hibernate-configuration-3.0.dtd">

<!--classpath配置-,路徑短,適應不同機器,速度快,建議使用此配置->

  

  

(同理如果映射文件出現問題也可以采取此方式)

<!DOCTYPE hibernate-mapping SYSTEM

"classpath://org/hibernate/hibernate-mapping-3.0.dtd">

  

 

 

有關dtd的知識(主要是兩種引用方式)

 

定義外部DTD的語法:

<!DOCTYPE  根元素名 SYSTEM "外部DTD文件的URI">(SYSTEM表示DTD文件是私有的。引號不能少)

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>

<?xml-stylesheet href="simple1.css" type="text/css" ?>

<!-- 外部DTD -->

<!DOCTYPE poem SYSTEM "poem.dtd">

<poem>

 <title>靜夜思</title>

 <author>李白</author>

 <line>床前明月光,</line>

 <line>疑事地上霜.</line>

 <line>舉頭望明月,</line>

 <line>低頭思故鄉.</line>

 <commet>李白是中國最偉大的詩人!</commet>

</poem>

-----------------------------相同目錄下的poem.dtd內容如下:

<?xml version="1.0" encoding="UTF-8"?>

<!ELEMENT poem (title,author,line+,commet)>

<!ELEMENT title (#PCDATA)>

<!ELEMENT author (#PCDATA)>

<!ELEMENT line (#PCDATA)>

<!ELEMENT commet  (#PCDATA)>

 

如果想引用一個公共的DTD文檔,又該如何呢?

<!DOCTYPE  根元素名 PUBLIC "DTD的名稱" "外部DTD文件的URI">(PUBLIC表示DTD文件是公共的,注意在PUBLIC之后,還多了一個DTD的名稱。引號不能少)

下面是taglib的DTD:

<!DOCTYPE taglib PUBLIC "-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.2//EN"

    "http://java.sun.com/dtd/web-jsptaglibrary_1_2.dtd">

分析一下這個外部DTD聲明:

1、關鍵字DOCTYPE,PUBLIC。

2、根元素名:taglib。所以每一個標簽庫定義文件都是以taglib為根元素的,否則就不會驗證通過。

3、紫色的字"-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.2//EN",這是公共DTD的名稱。這個東西命名是有些講究的。首先它是以"-"開頭的,表示這個DTD不是一個標准組織制定的。(如果是ISO標准化組織批准的,以“ISO”開頭,如果不是ISO的標准化組織批准的,以“+”開頭。)。接着就是雙斜杠“//”,跟着的是DTD所有者的名字,很明顯這個DTD是sun公司定的。接着又是雙斜杠“//”,然后跟着的是DTD描述的文檔類型,可以看出這份DTD描述的是jsp 標簽庫1.2版本的格式。再跟着的就是“//”和ISO 639語言標識符。

4、綠色的字"http://java.sun.com/dtd/web-jsptaglibrary_1_2.dtd",表示這個DTD的位置。

疑問:是不是xml分析器都會到java.sun.com上去找這個dtd呢?答案是否定的,xml分析器首先會以某種機制查找公共DTD的名稱,查到了,則以此為標准,如果查不到,再到DTD位置上去找。

 

 

 

 

 

有關uri url方面的知識

 

URI:Uniform Resource Identifier,統一資源標識符;

URL:Uniform Resource Locator,統一資源定位符;

URN:Uniform Resource Name,統一資源名稱。

其中,URL,URN是URI的子集。

Web上地址的基本形式是URI,它代表統一資源標識符。有兩種形式:

URL:目前URI的最普遍形式就是無處不在的URL或統一資源定位器。

URN:URL的一種更新形式,統一資源名稱(URN, Uniform Resource Name)不依賴於位置,並且有可能減少失效連接的個數。但是其流行還需假以時日,因為它需要更精密軟件的支持。

URI是以某種統一的(標准化的)方式標識資源的簡單字符串。

URI一般由三部分組成:

1. 訪問資源的命名機制。

2. 存放資源的主機名。

3. 資源自身的名稱,由路徑表示。

典型情況下,這種字符串以scheme(命名URI的名字空間的標識符——一組相關的名稱)開頭,語法如下:

[scheme:] scheme-specific-part

URI以scheme和冒號開頭。Scheme用大寫/小寫字母開頭,后面為空或者跟着更多的大寫/小寫字母、數字、加號、減號和點號。冒號把 scheme與scheme-specific-part分開了,並且scheme-specific-part的語法和語義(意思)由URI的名字空間 決定。如下面的例子:

http://www.cnn.com,其中http是scheme,//www.cnn.com是 scheme-specific-part,並且它的scheme與scheme-specific-part被冒號分開了。

URI有絕對和相對之分,絕對的URI指以scheme(后面跟着冒號)開頭的URI。前面提到的http://www.cnn.com就是絕對的URI 的一個例子,其它的例子還有mailto:jeff@javajeff.com、news:comp.lang.java.help和xyz: //whatever。你可以把絕對的URI看作是以某種方式引用某種資源,而這種方式對標識符出現的環境沒有依賴。如果使用文件系統作類比,絕對的 URI類似於從根目錄開始的某個文件的徑。

與絕對的URI不同的,相對的URI不是以scheme(后面跟着冒號)開始的URI。 它的一個例子是articles/articles.html。你可以把相對的URI看作是以某種方式引用某種資源,而這種方式依賴於標識符出現的環境。 如果用文件系統作類比,相對的URI類似於從當前目錄開始的文件路徑。

 

URL是Uniform Resource Location的縮寫,譯為"統一資源定位符"。通俗地說,URL是Internet上用來描述信息資源的字符串,主要用在各種WWW客戶程序和服務器 程序上,特別是著名的Mosaic。采用URL可以用一種統一的格式來描述各種信息資源,包括文件、服務器的地址和目錄等。

URL的格式由下列三部分組成:

第一部分是協議(或稱為服務方式);

第二部分是存有該資源的主機IP地址(有時也包括端口號);

第三部分是主機資源的具體地址。,如目錄和文件名等。

第一部分和第二部分之間用"://"符號隔開,第二部分和第三部分用"/"符號隔開。第一部分和第二部分是不可缺少的,第三部分有時可以省略。

目前最大的缺點是當信息資源的存放地點發生變化時,必須對URL作相應的改變。因此人們正在研究新的信息資源表示方法,例如:URI(Universal Resource Identifier)即"通用資源標識"(參見RFC 1630)、URN(Uniform Resource Name)即"統一資源名"和URC(Uniform Resource Citation)即"統一資源引用符"等。

URI目前還處在進一步的研究當中。研究的方向就是彌補URL目前存在的缺點。

 

 

 

參考資料

 

http://www.blogjava.net/flysky19/articles/93379.html

 

http://my.oschina.net/aiguozhe/blog/40592

 

http://stackoverflow.com/questions/4301294/cant-parse-hibernate-cfg-xml-while-offline


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM