JAXBを使用したXMLファイルの読み取りおよび書き込み中のorg.xml.sax.SAXParseExceptionの処理

小さな

次のようにJAXBを使用してXMLファイルを作成しています。

public final class Main
{
    private File file;
    private transient JAXBContext jaxb;
    List<Fruit>fruits;

    private void test()
    {
        try {
            jaxb=JAXBContext.newInstance(Fruits.class);
            file=new File(System.getenv("UPLOAD_LOCATION")+"\\xml_files\\fruits.xml");

            Marshaller marshaller = jaxb.createMarshaller();
            marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, Boolean.TRUE);
            marshaller.setProperty(Marshaller.JAXB_ENCODING, "UTF-8");
            marshaller.setProperty(Marshaller.JAXB_FRAGMENT, Boolean.FALSE);

            if(!file.exists()) {
                file.createNewFile();
                marshaller.marshal(new Fruits(new ArrayList<Fruit>()), file);
            }
            else {
                fruits=((Fruits) jaxb.createUnmarshaller().unmarshal(file)).getList();
            }

            for(Fruit fruit:fruits) {
                System.out.println(fruit.getId()+" : "+fruit.getName()+" : "+fruit.getPrice());
            }

        } catch (JAXBException ex) {
            Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex);
        } catch (IOException ex) {
            Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex);
        }/*catch (SAXParseException ex) {
            Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex);
        }*/
    }

    public static void main(String... args) {
        new Main().test();
    }
}

オブジェクトを追加するコードは除外されます。ただし、次のようなXMLファイルが生成されます。

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>

<fruits>
    <fruit id="1">
        <name>Mango</name>
        <price>100</price>
    </fruit>
    <fruit id="2">
        <name>Banana</name>
        <price>50</price>
    </fruit>
    <fruit id="3">
        <name>Pineapple</name>
        <price>80</price>
    </fruit>
</fruits>

このXMLファイルが、外部で変更される可能性があるなど、特定の理由で無効化された場合。

このファイルに複数の形式のXML形式が含まれている場合は、をスローしorg.xml.sax.SAXParseExceptionます。この例外がスローされた場合は、このファイルを再作成します。それ以外の場合は、XMLコンテンツを手動で変更して再構築しない限り、例外が継続的にスローされます。そのためには、この例外をキャッチする必要があります。

コンパイラは、この例外のキャッチを拒否します。catch切り取られたコードに示されているように、この例外の追加ブロックが試行されると、次のように文句を言います。

org.xml.sax.SAXParseException対応するtryステートメントの本文に例外がスローされることはありません

この例外がスローされた場合にファイルを再作成(古いファイルを削除)できるように、この例外を処理するにはどうすればよいですか?

XML要素を作成するクラス(FruitおよびFruits)は、この質問とはあまり関係がないため、ここでは示していません。

user3679868

SAXParseExceptionはチェックされた例外であり、メソッドunmarshal()宣言されていないため、キャッチできないのは正常です。

あなたが捕まえることができるもう一つの例外があります、それはjavax.xml.bind.UnmarshalExceptionです。この例外は拡張されるjavax.xml.bind.JAXBExceptionため、catchブロックをの前に配置する必要がありますJAXBException

メソッドのドキュメントでは、検証エラーが発生した場合、またはXMLからJavaへのバインディングを実行できない場合にスローさunmarshal()れるUnmarshalExceptionと記載されUnmarshallerています。

注:の実装で確認しましUnmarshaller
org.xml.sax.SAXExceptionが、発生すると、でラップされますjavax.xml.bind.UnmarshalException

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

org.xml.sax.SAXParseException:* VALID * XMLのファイルの途中終了

分類Dev

DOMの解析-org.xml.sax.SAXParseException

分類Dev

org.xml.sax.SAXParseExceptionを与えるJavaJaxBUnmarshallerファイルの早期終了

分類Dev

XML解析エラー:org.xml.sax.SAXParseException

分類Dev

大きくて単純なXMLファイルの同時SAX処理?

分類Dev

C#とaspの読み取りおよび書き込みxmlの使用

分類Dev

SAXとJavaを使用したXMLの生成

分類Dev

JSFでのXMLファイルの読み取りと書き込み

分類Dev

Petlを使用したXMLファイルの読み取り

分類Dev

データセットを使用してVisualBasic / C#で同じXMLファイルとの間で読み取りおよび書き込みを行う方法は?

分類Dev

xml解析でorg.xml.sax.SAXParseException例外に直面している

分類Dev

android sdkの更新中にエラーが発生しました(org.xml.sax.SAXParseException)

分類Dev

エラー:wikixmljを使用してxmlファイルを解析中にxml.sax.SAXParseException

分類Dev

VBAを介したXMLファイルの読み取り

分類Dev

GoおよびOpenCVを使用した画像のICCプロファイルの読み取り/書き込み

分類Dev

How to fix the error "org.xml.sax.SAXParseException / Content is not allowed in prolog"?

分類Dev

LINQを使用したXMLファイルからの読み取り

分類Dev

原因:org.xml.sax.SAXParseException:cvc-complex-type.2.4.c:要素 'jpa:repositories'の宣言が見つかりません

分類Dev

xmlファイルからのデータの書き込みと読み取り

分類Dev

入力xmlファイルからノード値を読み取り、他の出力xmlファイルに書き込みます

分類Dev

Qt / C ++:QDomを使用したXMLファイルへの書き込みに問題があります

分類Dev

デフォルトのsaxパーサーを使用しているときに巧妙に細工されたxmlによって乱用されるjaxb unmarshal?

分類Dev

Rを使用してXMLファイルを読み取り、いくつかのノードを選択して、別のXMLに書き戻します。

分類Dev

JUST Java 1.5(またはそれ以前)を使用したXMLの読み取りと書き込み

分類Dev

JBoss4からJBoss6に移行するEJB2プロジェクト。例外:org.xml.sax.SAXParseException; ファイルの早期終了

分類Dev

ファイルからのPerlの読み取りと、printおよびinderectハンドラーを使用した別のファイルへの書き込み

分類Dev

Spring MVCでJUnitテストを実行すると、次のようになります。org.xml.sax.SAXParseException; systemId:http://www.springframework.org/schema/mvc/spring-mvc.xsd

分類Dev

Unix および Linux ファイルの同時読み取り/書き込み処理

分類Dev

Pythonからの1つのプロセスを使用したHDF5およびMPIでの大きなファイルの書き込み/読み取り

Related 関連記事

  1. 1

    org.xml.sax.SAXParseException:* VALID * XMLのファイルの途中終了

  2. 2

    DOMの解析-org.xml.sax.SAXParseException

  3. 3

    org.xml.sax.SAXParseExceptionを与えるJavaJaxBUnmarshallerファイルの早期終了

  4. 4

    XML解析エラー:org.xml.sax.SAXParseException

  5. 5

    大きくて単純なXMLファイルの同時SAX処理?

  6. 6

    C#とaspの読み取りおよび書き込みxmlの使用

  7. 7

    SAXとJavaを使用したXMLの生成

  8. 8

    JSFでのXMLファイルの読み取りと書き込み

  9. 9

    Petlを使用したXMLファイルの読み取り

  10. 10

    データセットを使用してVisualBasic / C#で同じXMLファイルとの間で読み取りおよび書き込みを行う方法は?

  11. 11

    xml解析でorg.xml.sax.SAXParseException例外に直面している

  12. 12

    android sdkの更新中にエラーが発生しました(org.xml.sax.SAXParseException)

  13. 13

    エラー:wikixmljを使用してxmlファイルを解析中にxml.sax.SAXParseException

  14. 14

    VBAを介したXMLファイルの読み取り

  15. 15

    GoおよびOpenCVを使用した画像のICCプロファイルの読み取り/書き込み

  16. 16

    How to fix the error "org.xml.sax.SAXParseException / Content is not allowed in prolog"?

  17. 17

    LINQを使用したXMLファイルからの読み取り

  18. 18

    原因:org.xml.sax.SAXParseException:cvc-complex-type.2.4.c:要素 'jpa:repositories'の宣言が見つかりません

  19. 19

    xmlファイルからのデータの書き込みと読み取り

  20. 20

    入力xmlファイルからノード値を読み取り、他の出力xmlファイルに書き込みます

  21. 21

    Qt / C ++:QDomを使用したXMLファイルへの書き込みに問題があります

  22. 22

    デフォルトのsaxパーサーを使用しているときに巧妙に細工されたxmlによって乱用されるjaxb unmarshal?

  23. 23

    Rを使用してXMLファイルを読み取り、いくつかのノードを選択して、別のXMLに書き戻します。

  24. 24

    JUST Java 1.5(またはそれ以前)を使用したXMLの読み取りと書き込み

  25. 25

    JBoss4からJBoss6に移行するEJB2プロジェクト。例外:org.xml.sax.SAXParseException; ファイルの早期終了

  26. 26

    ファイルからのPerlの読み取りと、printおよびinderectハンドラーを使用した別のファイルへの書き込み

  27. 27

    Spring MVCでJUnitテストを実行すると、次のようになります。org.xml.sax.SAXParseException; systemId:http://www.springframework.org/schema/mvc/spring-mvc.xsd

  28. 28

    Unix および Linux ファイルの同時読み取り/書き込み処理

  29. 29

    Pythonからの1つのプロセスを使用したHDF5およびMPIでの大きなファイルの書き込み/読み取り

ホットタグ

アーカイブ