簡體   English   中英

Java 5不驗證DTD

[英]Java 5 Does not validate DTD

我正在使用供應商小程序,該小程序可以在JRE 1.4.2_X和1.6.X上正常工作,但是在每個1.5.X版本上均無法正常運行。 由於其他應用程序沖突在Java 6中無法正常運行,因此不能選擇以1.6運行。

我認為問題在於DTD尚未得到驗證。 這導致了“未聲明”的問題,並導致了空指針。

 Error: Fri Aug 28 11:21:29 EDT 2009 org.xml.sax.SAXParseException: 
 Element type "UserSessionList" is not declared.
 java.lang.NullPointerException

我嘗試更改默認的驗證類,但問題仍然沒有改變。

 -Djavax.xml.validation.SchemaFactory:http://relaxng.org/ns/structure
 /1.0=org.apache.xerces.jaxp.validation.XMLSchemaFactory

我可以使用另一個驗證嗎?

我真的沒有選擇修改applet的代碼,這些代碼超出了供應商的使用壽命,因此不太可能從他們那里獲得支持。 因此,任何變通辦法都不能涉及更改代碼,因為我們不擁有它。

嘗試將當前版本的Xerces放入類路徑中,並擺脫所有這些-D。 Xerces中的SPI將接管所有這一切,並且可能會表現得更好。

您可以在不修改所有現有代碼的情況下部署該applet,並指定它在其下執行的Java版本。 您可以通過在applet中聲明一個classid參數來完成此操作,如下所示:

<OBJECT
    classid="clsid:CAFEEFAC-0014-0002-FFFF-ABCDEFFEDCBA"
    width="200" height="200">
    <PARAM name="code" value="Applet1.class">
</OBJECT>

Java的最后四個主要版本有不同的classids

1.3使用CAFEEFAC-0013-0001-FFFF-ABCDEFFEDCBA
1.4使用CAFEEFAC-0014-0002-FFFF-ABCDEFFEDCBA
1.5使用CAFEEFAC-0015-0000-FFFF-ABCDEFFEDCBA
1.6使用CAFEEFAC-0016-0000-FFFF-ABCDEFFEDCBA

需要注意的是,客戶端計算機必須安裝了該版本的Java,但是JRE在Sun的站點上仍然可用。 此處的更多信息: http : //java.sun.com/javase/6/webnotes/family-clsid.html

因此,您可以強制要求您的applet僅運行1.4,並且最終用戶是否安裝了Java的另一個版本都沒有關系,只要他們具有運行Applet的1.4。

與Java 1.5一起使用時,似乎Xerces中存在一個錯誤。 請參閱關於此Tomcat錯誤的最新評論

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM