在下面的代码中:
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或通过附加更多标签来丰富它并将其返回。
希望我已经说清楚了。
答案 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:没有。各种配置异常。 : - (