-1

私のアプリケーションはXMLを解析しようとしていますが、次の例外がスローされます。

ドキュメントの要素コンテンツに無効なXML文字(Unicode:0x52)が見つかりました。

XMLが有効であると100%確信しています。しかし、それでもなぜこの例外が発生するのかわかりません。

この例外の原因となる可能性のあるアイデアはありますか?

xmlファイルを読み取るために使用しているコードは次のとおりです。

String policyFile = filename;
    try {
        String overRide = System.getProperty("TEST_POLICY_FILE");
        if (overRide != null) {
            policyFile = overRide;
        }

        //          URL urlToPolicyFile = new URL(policyFile);
        //          InputStream is = urlToPolicyFile.openStream();
        //InputStream is = getClass().getClassLoader().getResourceAsStream(policyFile);
        // get XML Parser instance
        DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
        factory.setIgnoringComments(true);
        factory.setValidating(false);
        DocumentBuilder builder = factory.newDocumentBuilder();
        builder.setEntityResolver(VacEntityResolver.getInstance());
        InputSource inputSource = new InputSource(policyFile);
        // parse input file
        Document policyDocument = builder.parse(inputSource);
        Builder policyBuilder = new Builder();

        // load decl-policies file into cache
        visitDeclarativePolicies(policyDocument, policyBuilder);
        m_myPolicyCache = policyBuilder.getPolicyCache();
    } catch (SAXException e) {
        throw new InvalidPolicyFileException(policyFile);
    } catch (ParserConfigurationException e) {
        throw new InvalidPolicyFileException(policyFile);
    } catch (IOException e) {
        throw new InvalidPolicyFileException(policyFile);
    }

この線、

Document policyDocument = builder.parse(inputSource);

エラーをスローしているものです

この問題に関する興味深い事実の1つは、実稼働環境でのみ発生していることです。同じXmlファイルは、私の開発環境でもテスト環境でも問題を引き起こしていません。ファイルを共有していないことをお詫びします。これはファイルです。共有しないでください。しかし、同じ入力ファイルが私の開発環境で問題を引き起こしていません。

'R'である文字0x52の例外をスローしているため、この問題は私には奇妙に思えます。

4

3 に答える 3

0

通常は、より多くの入力を与える方が良いです(たとえば、その動作を示す最小化されたバージョンの入力を投稿するなど)が、与えたものから、小文字のrと大文字のRが予想される可能性があります(これは有効だと思いますが、厳密な構文チェッカーは無効としてマークします)

【以下の質問情報追加編集】

開発/本番の違いの疑いはOSの違いです。お使いのマシンはUnixと本番Windowsですか、それともその逆ですか?そのような場合、OSがファイルを作成および読み取る方法が、取得するコンテンツに影響を与える可能性があり、解析が異なる可能性があります。

于 2012-12-20T08:10:47.933 に答える
0

Unicode:0x52は大文字のRです。なぜこのエラーが発生するのかわかりません。実行しようとしているコード、またはこのエラーがスローされているデータのサンプルを投稿していただけますか?

http://www.utf8-zeichentabelle.de/unicode-utf8-table.pl?names=-&utf8=0x

于 2012-12-20T08:11:49.810 に答える
0

「R」が無効な文字になると私が考えることができる唯一の状況は、「高サロゲート」の直後です。しかし、私たちに推測させるのではなく、より多くの情報を提供していただく必要があります。

私の経験から言うと、XML が有効であると「100% 確実」であることは、パーサーがそうでないと言う場合、問題の真相を突き止めるための良い出発点ではありません。

于 2012-12-20T08:34:56.203 に答える