2009-08-31 9 views
0

ベンダーアプレットを使用しています。アプレットはJRE 1.4.2_Xと1.6.Xでは正常に動作しますが、1.5.Xのすべてのバージョンでは失敗します。 1.6で実行することは、Java 6ではうまくいきませんが、別のアプリケーションの競合のためにオプションではありません。Java 5はDTDを検証しません

私が信じる問題は、DTDが検証されていないということです。これは、 "宣言されていない"問題と結果のnullポインタを引き起こしています。

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 

私はこれに使用できる別の検証はありますか?

アプレットがベンダーからの人生を超えているコードを変更するオプションはありません。そのため、サポートを得ることはまずありません。したがって、コードを変更しても、それを所有していないため回避策には使用できません。

+0

ポイント1:JDK 1.5はDTDを検証します。私はそれができなければ失敗するプログラムをたくさん持っています。 – kdgregory

+0

ポイント#2:エレメントタイプが実際にDTDに対して妥当性が確認され、XMLにDTDの一部ではない要素があるか、DTD内部的に一貫性がありません(エラーメッセージの原因を見ていない)。 – kdgregory

+0

ポイント#3:Sun JDK(とJRockitも、私が信じている)は既にXercesを使用しています。したがって、Xercesディストリビューションではなく、JDKディストリビューションでは修正されていない特定のバグがない限り、別のバリデーターを設定することはあなたを助けません。 – kdgregory

答えて

1

Xercesの現在のバージョンをclassspathに置き、それらの-Dをすべて削除してください。 XercesのSPIがこれを引き継いで、より良く動作するかもしれません。

+0

私はXMLを手に入れようとしますが、私はスニファーログでそれを見るのを覚えていないと思います。私はrelaxngが本当に働くことを期待していませんでした。私はこれが何か違うことをやろうとしています。このアプレットは1.5で100%の時間で失敗します。私は主に、障害の原因となった1.5と1.6の間の違いを把握しようとしていました。私はそれを得るときにXMLを投稿します。 pojaとしてこれを再現するのは、私がソースを持っていなくてxmlかもしれないので簡単ではないでしょう。 – Keibosh

0

既存のすべてのコードをそのまま使用してアプレットを展開し、実行するJavaのバージョンを指定することができます。

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

異なるJava

の最後の4つのメジャーリリースのための classids

1.3使用CAFEEFAC-0013から0001-FFFF-がありますので、同様にあなたは、アプレットでclassidパラメータを宣言することによって、これを行います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

したがって、アプレットを実行する1.4を持っている限り、エンドユーザーに別のバージョンのJavaがインストールされているかどうかは関係ありません。

+0

私はclassid'sとあなたの言うことを理解しています。しかし、1.5をインストールすると、そのファミリの外でJREを実行することは拒否されます。レジストリを変更して、安全な静的バージョニングを無効にすることはできますが、これにより、クライアントマシン上の他の3つのアプレットのうちの1つが破損します。私は1.6をロードすることができ、それはセキュリティプロンプトを渡した後、古いJREを実行できるようになりますが、1.6では他のアプレットも壊れます。 1.5で動作するようにすれば、すべてのアプレットを正常に動作させることができます。 – Keibosh

0

Java 1.5でXercesにバグがあったようです。この最後のコメントを参照Tomcat bug.

+0

更新をお寄せいただき、ありがとうございます。 – Keibosh

関連する問題