2017-06-23 3 views
0

私はgrailsアプリケーションで単一のxmlファイルアップローダーを作成しています。 ApとApWithVendorの2種類のファイルがあります。私は自動的にファイルの種類を検出し、SAXParserを使用して正しいオブジェクトにXMLを変換したいと思います。条件チェックにjava例外を使用する

私が行ってきたことは、saxパーサがendElementメソッドを使って最初のApオブジェクト内でqNameの一致を見つけることができない場合に例外をスローすることです。私は例外をキャッチし、ApWithVendorオブジェクトを試します。

私の条件は、例外を使って条件をチェックすることなくこれを行うより良い方法ですか?

 try { 
      System.out.println("ApBatch"); 
      Batch<ApBatchEntry> batch = new ApBatchConverter().convertFromXML(new String(xmlDocument, StandardCharsets.UTF_8)); 

      byte[] xml = new ApBatchConverter().convertToXML(batch, true); 
      String xmlString = new String(xml, StandardCharsets.UTF_8); 
      System.out.println(xmlString); 

      errors = client.validateApBatch(batch); 
      if (!errors.isEmpty()) { 
       throw new BatchValidationException(errors); 
      } 

      return; 
     } catch (BatchConverterException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 

     try { 
      System.out.println("ApVendorBatch"); 
      Batch<ApWithVendorBatchEntry> batch = new ApWithVendorBatchConverter().convertFromXML(new String(xmlDocument, StandardCharsets.UTF_8)); 

      byte[] xml = new ApWithVendorBatchConverter().convertToXML(batch, true); 
      String xmlString = new String(xml, StandardCharsets.UTF_8); 
      System.out.println(xmlString); 

      errors = client.validateApWithVendorBatch(batch); 
      if (!errors.isEmpty()) { 
       throw new BatchValidationException(errors); 
      } 

      return; 
     } catch (BatchConverterException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 

答えて

1

あなたが常に特定のノードが欠落しているという事実上のXMLベースの意思決定にノードを反復処理することができます(または特定の値を持っているか、存在しています) 99%の状況でのメイクやフロー制御は悪い習慣とみなされます。

+0

私はそれが悪い習慣であることに同意します。私はその質問に私を導く最初から間違っているようでした。ありがとう、私はそのショットを与えるでしょう。 –

1

のコード例では、最初にXMLツリーオブジェクトにXML文字列を変換してみて、それがApWithVendor構造かどうかを決定するためにXPathを使用しています。私。構造体に "/ application/foo/vendor"のような要素があるかどうか確認してください。 決定したら、XMLツリーオブジェクトをオブジェクトに変換します。意思決定のための例外を使用して(DocumentBuilderDocumentクラスを参照してください)

-

関連する問題