使用java异常进行条件检查

时间:2017-06-23 12:35:59

标签: java grails saxparser

我正在grails应用程序中创建一个xml文件上传器。有两种类型的文件,Ap和ApWithVendor。我想自动检测文件类型并使用SAXParser将xml转换为正确的对象。

当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();
        }

2 个答案:

答案 0 :(得分:1)

首先尝试将XML字符串转换为XML树对象,然后使用XPath来确定它是否是ApWithVendor结构。即检查是否有像&#34; / application / foo / vendor&#34;结构中的路径。 确定后,将XML树对象转换为对象。

答案 1 :(得分:1)

您总是可以迭代XML中的节点,并根据特定节点丢失(或存在 - 或具有特定值)的事实做出决定(请参阅DocumentBuilderDocument类)< / p>

在99%的情况下使用例外进行决策或流量控制被认为是不好的做法。