2009-04-07 14 views
13

JavaでXMLSchemaを検証し、無効なコンテンツモデルがあるとSAXParseExceptionsをスローします。SAXParseExceptionをJavaで効果的に使用する方法

私はこれらの例外を使用して検証が失敗した場所を強調しますが、SAXParseExceptionsはあまりにも低レベルなようです。

たとえば、列挙に失敗した場合、提供された値が1つの例外でコンテンツモデルと一致せず、次に適用される要素と一致しないという妥当性エラーが発生します。

私は、関連するエラーを一緒にマージし、例外テキストを使用可能な例外プロパティに解析するために少し抽象化したユーティリティを用意する必要があると考えています。

これは合理的なアプローチですか、それとも何か不足しているのでしょうか、あるいはライブラリやヘルパークラスですか?


更新@timgilbert、応答に感謝します。例えば

、SAXParseExceptionのは、私は私のために重要な事は

  • 要素 'en' と、この例外が適用されるあるt'internet

    cvc-pattern-valid: Value 'en' is not facet-valid 
    with respect to pattern '([a-zA-Z]{1,8})(-[a-zA-Z0-9]{1,8})*' 
    

    で見つかりました。なぜexception.getElement()か何かを呼び出すことができないのですが、問題の要素に対してXPathを使用しないのはなぜですか?メモリ内の文書に行と列の番号よりも便利です!

  • パターンの検証に失敗しました。なぜ失敗の可能性のある列挙型や適切な型への参照のようなものが得られないのでしょうか?
  • 検証が失敗した実際のパターン。私が

に私が行うことができるようにしたいものの一例をマージする必要があり、問題の原因となった「エン」要素の値を伝えるために、次のスロー別の例外があることでしょう

  • 人々が文書を提出し、その文書が強調表示されているところで、ユーザーフレンドリーなメッセージで検証が失敗した場所を強調表示させる - 一番上のエラーメッセージはあまりフレンドリーではないようだ...一重引用符で解析する必要がある。

    私はおそらく、 'reference-to-element'のことで間違っていると思います。おそらく、検証の一環としてドキュメントの恒等変換を行うべきでしょう。私がCSSで選ぶことができる検証エラー属性を使った変換。しかし、メッセージを解析してよりフレンドリーにする必要がある場合は、まだ助けにならないでしょう。

    Re:tight binding、javax.xml.validation.Validator.validate()throws org.xml.sax.SAXExceptionとにかく - ではない私は離れて結合を仮定から得ることができるかどうかはわかり...

    乾杯

  • +1

    +1、私はちょうど今朝早く同じ種類の問題に遭遇しました。投稿していただきありがとうございます。 –

    +1

    問題はありません、私がばかではないことがうれしいです! – Brabster

    +0

    私は非常に似た問題があります。これらのエラーをよりユーザーフレンドリーにするソリューションを見つけましたか? – Turismo

    答えて

    2

    私は多分あなたは何をあなたについて、もう少し詳細を提供することができ、あなたはここに求めていることについて完全には明らかではありませんよ例外が低すぎることを意味しますか?エラーメッセージ自体は分かりませんか?

    SaxParseExceptionクラスには、エラーを修正するためにユーザーに提示できるgetColumnNumber()およびgetLineNumber()メソッドがあります。

    異なるXML解析実装を使用していることがあります。すべてのパーサーが無効なコードを検出するとエラーをスローしますが、実装によって異なるエラーメッセージと例外チェーンが存在する可能性があります。

    実際、このような理由から、例外チェーンを検査し、より一貫性のあるエラーメッセージを作成しようとするライブラリを構築しようとすると疑いがあります。 XML解析実装の具体的な詳細(特に、エラーメッセージの特定の言葉に頼っている場合)

    (申し訳ありませんが、これは、より具体的ではない、多分あなたは、あなたが見ている問題の例を与えることができる?)私はどの要素に伝えるために必要な場所私も帰り同様の問題に直面した

    1

    Brabster XMLエラーが発生しました。私はSAX Parserのハンドラにスタックを維持することで少し問題を解決しました。 startElementメソッドでは、スタック内のqName(要素の名前)をプッシュし、endElementメソッドでスタックからqNameをポップします。

    例外が発生するたびに、スタックは要素の完全なXPathを表します。

    唯一の問題は、同じ名前の要素が複数ある場合、その要素のエラーがわからないことでした。しかし、少なくとも完全なXPathの詳細はLineNumberとColumnNumberに役立ちました。

    これが役に立ちます。

    関連する問題