- PR -

JAXPのDOMパースでのwarning

1
投稿者投稿内容
finch
常連さん
会議室デビュー日: 2006/09/29
投稿数: 26
投稿日時: 2006-12-18 13:47
JAXPのDOMパースに関してです。
ErrorHandlerに渡るエラーの内、errorとfatalErrorが発生するパターンは簡単に分かったのですが、warningが発生するケースがどうしても分かりません。
このwarningエラーが発生するパターンをご存知の方がいらっしゃいましたら、教示お願い致します。

xmlにはdtdファイルがあり、下記のようなコーディングを行っております。
(JDKは5.0です)

コード:
java.io.InputStream aStream = xxxxx;
javax.xml.parsers.DocumentBuilderFactory DocumentBuilderFactory01 =
	javax.xml.parsers.DocumentBuilderFactory.newInstance();
DocumentBuilderFactory01.setValidating(true);
javax.xml.parsers.DocumentBuilder DocumentBuilder01 =
	DocumentBuilderFactory01.newDocumentBuilder();       
XXErrorHandler XXErrorHandler01 = new XXErrorHandler();
DocumentBuilder01.setErrorHandler(XXErrorHandler01);		
org.w3c.dom.Document Document01 = DocumentBuilder01.parse(aStream);        

class XXErrorHandler implements ErrorHandler {
   public void warning(SAXParseException a_SAXParseException01)
       throws SAXParseException
   {
   	throw a_SAXParseException01;
   }
   public void error(SAXParseException a_SAXParseException01)
       throws SAXParseException
   {
    	throw a_SAXParseException01;
   }
   public void fatalError(SAXParseException a_SAXParseException01)
       throws SAXParseException
   {
    	throw a_SAXParseException01;
   }
}


スフレ
ぬし
会議室デビュー日: 2005/05/27
投稿数: 281
お住まい・勤務地: 東京
投稿日時: 2006-12-18 13:52
JAXPの中身がXercesであれば、以下のページの warn-on-... をセットして該当の条件になればwarning()が呼ばれるのではないでしょうか。試していませんが。

http://xerces.apache.org/xerces2-j/features.html

finch
常連さん
会議室デビュー日: 2006/09/29
投稿数: 26
投稿日時: 2006-12-18 14:37
返信ありがとうございます。
下記のサイトに記載されているwarn-on-...のFeatureを、DocumentBuilderFactory01.setFeature()により指定してみたのですが、
javax.xml.parsers.ParserConfigurationException: jaxp_feature_not_supported
になってしまいました。
http://xerces.apache.org/xerces2-j/features.html

なお、General Featuresである
http://xml.org/sax/features/namespaces
も同様のエラーになりましたので、どのFeatureもダメのようです。
tanabo
常連さん
会議室デビュー日: 2003/04/24
投稿数: 34
投稿日時: 2006-12-18 16:09
Xerces2.9.0を使って試してみました。

Feature:http://apache.org/xml/features/validation/warn-on-duplicate-attdef

XMLのサンプル:
<?xml version="1.0"?>
<!DOCTYPE welcome [
<!ATTLIST welcome id ID #IMPLIED>
<!ATTLIST welcome id CDATA #REQUIRED>
]>
<welcome id="a" id="b">
</welcome>

この環境でfinchさんのコードを使ったところ、warningメソッドが呼ばれました。
ただし、JDK付属のXercesでは認識しないようです。
finch
常連さん
会議室デビュー日: 2006/09/29
投稿数: 26
投稿日時: 2006-12-19 09:39
tanaboさん、返信ありがとうございます。

まず、JAXPでsetFeature()がエラーになる件ですが、setAttribute()により、エラーにならなくなりました。

次に、tanaboさんが実験して頂いた条件ですが、JAXPでは、このFeatureを設定してもしなくても、fatalErrorになりました。
しかし、DTDを下記のようにすると、このFeatureを設定した場合に、warningが発生しました。

コード:
<!ATTLIST item name CDATA #IMPLIED name CDATA #IMPLIED
               type CDATA #IMPLIED>


1

スキルアップ/キャリアアップ(JOB@IT)