使用 JAXB(Java API for XML Binding)解决现实世界问题的 7 个步骤





0/5 (0投票)
本文将讨论现实世界中的一个问题,然后我们将看到如何使用 JAXB 来解决它。
引言
在本文中,我们将探讨一个现实世界中的问题,然后看看如何使用 JAXB 来解决它。请点击以下链接,并观看我在 Java 设计模式、J2EE、Hibernate、Struts 2、Spring 和 Web 服务 上的其他视频。
问题
对于大多数经理来说,维护软件应用程序的质量是一项重大挑战。如果质量本身就是一项要求,那么实施涉及将质量工具与持续集成环境集成的重大质量解决方案将会很有用。这是“质量至上”的方法。但许多项目可能无法获得这种优势,经理们可能会想知道如何在不投入大量时间的情况下确保项目质量,同时又确保它不会被忽视。同时,质量证明总是很有用的。

使用 Findbugs 进行质量检查
随着我越来越多地从事 Java/JEE 技术工作,我将向您介绍一个针对这些技术的解决方案,但同样的方法也可以在 Microsoft 技术上实现。
Findbugs 是一个用于执行 Java 代码分析的优秀工具,它会列出代码中可能导致功能、性能未达标以及代码可维护性问题的各种问题。
因此,Java/JEE 世界中大多数以质量为驱动的应用程序都使用它来进行代码分析。
Findbugs 的优势在于它可以生成多种格式的输出,例如 XML、HTML 等。
那么问题是什么?
Findbugs 可以运行分析并生成报告,但挑战在于如何查看代码质量随时间的变化,即质量是下降了还是提高了。
如果我们能够读取 XML 并持久化一些重要的分析结果,如高优先级 bug、项目名称以及分析日期,那么就可以使用这些结果来生成报告,以指示代码质量的行为。
有很多种方法可以实现这一点,但由于我的文章重点是 JAXB,我将使用 JAXB 来实现解决方案。
建议解决方案

上图展示了使用 Findbugs 的解决方案,对源代码进行分析,并将分析输出以 XML 的形式存储。我们将其命名为 findbugs.xml。
现在,使用 JAXB,我们将 XML 绑定到内容对象。
分析相关的关键字段,如高优先级 bug、项目名称和时间戳,将存储在数据库中,一旦持久化,就可以用来提供报告,显示代码质量的整体行为。
在本例中,我们将看到如何使用 JAXB 绑定 XML 的值,然后创建一个可以检索 XML 值的小应用程序。
为什么选择 JAXB?
JAXB 将 XML 与相应的内容对象进行绑定,这正是我们上面例子所需的功能。我们也可以使用 JAXP,但那样的话解析的复杂性会增加额外的开销,因此我们选择了 JAXB。
实施解决方案
第 1 步:为 findbugs 编写 XSD。我们将创建一个映射到 findbugs.xml 的 xsd。xsd 的一个简单快照如图所示。详细的 xsd 已附上。

第 2 步:打开 Eclipse 并创建一个 Java 项目。

将项目命名为 FindbugsJAXB
。

第 3 步:在项目中创建一个名为 XML 的文件夹,并将分析后生成的 findbugs.xml 复制到其中。要了解如何生成该文件,请参考以下链接。

同样,创建一个名为 xsd 的文件夹,并将我们在第 1 步中创建的 xsd 复制到其中。
第 4 步:打开命令提示符,转到上面创建的 xsd 文件夹。执行以下 xjc 命令
xjc –p package xsdname
for e.g. xjc –p com.questpond.generatedClasses findbugs.xsd
上述命令将生成内容对象类。将它们复制到 Eclipse 项目的 src 文件夹中。

第 5 步:创建一个 Main
类,并编写以下 unmarshall
方法。
public BugCollection unmarshal( Class docClass, InputStream inputStream )
throws JAXBException {
String packageName = docClass.getPackage().getName();
JAXBContext jc = JAXBContext.newInstance( packageName );
Unmarshaller u = jc.createUnmarshaller();
BugCollection doc= (BugCollection) u.unmarshal( inputStream );
return doc;
}
第 6 步:在 Main
类的 main 方法中编写以下代码。
public static void main(String args[]){
Main obj = new Main();
try {
BugCollection bugs = obj.unmarshal(BugCollection.class,
new FileInputStream( new File("F:/JAXBFindbug/FindBugsJAXB/xml/findbugs.xml")));
FindBugsSummary summary =bugs.getFindBugsSummary();
Integer priority1=summary.getPriority1();
Integer priority2 =summary.getPriority2();
Integer priority3=summary.getPriority3();
String timestamp =summary.getTimestamp();
String projectName=bugs.getProject().getProjectName();
System.out.println("Project name : "+projectName);
System.out.println("High Impact Bugs:"+priority1);
System.out.println("Medium Impact Bugs: "+priority2);
System.out.println("Low Impact Bugs: "+priority3);
System.out.println("Time when analysis was done"+timestamp);
System.out.println();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (JAXBException e) {
e.printStackTrace();
}
}
在上面的代码中,我们通过向 unmarshall
函数提供 XML 的路径来解组我们的 XML。
第 7 步:执行上述代码后,我们将得到显示项目名称、bug 和时间戳的输出。

上述读取的值可以使用 JDBC 连接持久化到数据库中,并通过提供开始日期和结束日期从数据库中提取报告,以显示代码质量行为的图表。
Microsoft 世界的应用是什么?
FxCorp 是 Microsoft 世界中与 Java 世界中的 Findbugs 类似的 कोड 质量工具。
同样的应用也可以通过使用 FxCorp 来实现对 Microsoft 世界中源代码的分析。
我们还可以通过集成 FXCorp 和 Findbugs 来为 Microsoft 和 Java 建立一个统一的中心点,这样我们就可以随时分析应用程序的代码质量,而无需考虑技术。

结论
JAXB 广泛用于 Web 服务中 XML 和内容对象的编组和解组。除了这种用途,JAXB 还可以用于许多其他需要将 XML 绑定以进行处理或持久化的场景。
它易于使用和灵活性是在处理 XML 处理时的主要优势。