防止代码抛出XML异常

时间:2013-05-21 06:05:53

标签: java xml exception-handling

在下面的代码中:

try{
....
}

    catch(Exception e)
    {
            logger.error("Exception caught in method: \n");
            logger.error(e.getMessage());
            String fault = "<Fault><FaultCode>" + e.getClass().getName() + "</FaultCode><FaultDescription>" + e.getMessage() + "</FaultDescription></Fault>";
            return XmlObject.Factory.parse(fault);
    }

, 有没有办法使用不会抛出任何异常或需要任何异常处理的代码将“fault”字符串转换为XML对象?

基本上,我们需要在成功和fauilure场景中返回XML对象,而不使用任何throws子句的方法。这就是原因,我们已经删除了主流中可能发生的所有特定异常情况,例如来自catch的ParserConfiguration,IOExceptoin,XmlException等,并保留了泛型和硬编码的字符串,它将收集所需的故障信息并作为XML对象传回。但是,即使使用这种最小编码,也有可能在parse()方法中发生XmlException。任何其他方式,例如从errorConfig文件读取或创建单独的XML对象都会带来更多异常需要处理。

那么,只想知道它是否有可能开发出这样的代码,即一个返回XML的无异常catch块?或者,如果有人可以推荐任何其他方法也没关系。

仅供参考:主要代码基本上转换XML或通过附加更多标签来丰富它并将其返回。

希望我已经说清楚了。

1 个答案:

答案 0 :(得分:1)

如果解析器无法解析XML(并以异常中止),那么您将从何处获取XML对象?

如果您认为在您的操作流程中没有任何XML异常可以真正发生(编译器当然无法保证),那么就假设,捕获异常,记录一个“oops,应该永远不会发生”,重新抛出RuntimeException并且不再担心它(它永远不会发生,对吧?)

String fault = "<Fault><FaultCode>" + e.getClass().getName() + 
  "</FaultCode> <FaultDescription>" + e.getMessage() 
   + "</FaultDescription></Fault>";
return XmlObject.Factory.parse(fault);

我认为(如果该错误消息不需要转义),您可以确定这永远不会失败。这样就符合上述模式。

我不知道这是否是“check-exception-free”,但是您可以放弃XML字符串并重新解析它并以编程方式构造DOM。

  DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
  Document doc = dbf.newDocumentBuilder().newDocument();
  Element rootElement = doc.createElement("fault");
  // etc ...
  

我不知道这是否是“免费检查”,

看着Javadocs:没有。各种配置异常。 : - (