使用 JAXB 将 WSDL 绑定到 Java

使用 Java Architecture for XML Binding API (JAXB),可以轻松地访问以 Java 编程语言编写的应用程序中的 XML 文档。JAXB 是使用 SAX 或 DOM 解析器访问 XML 文档中数据的替代方法。在使用 JAXB 访问 XML 文档时,先将 XML 文档的方案绑定到表示该方案的一组 Java 类。然后,将 XML 文档取消编组。对文档取消编组意味着创建表示文档内容和组织的内容对象的树。

还可以使用 JAXB 构建 XML 文档。要使用 JAXB 构建 XML 文档,请先为要构建的 XML 文档绑定方案。然后,创建内容树。最后,将内容树编组到 XML 文档中。

下图来自用于 XML 绑定 API 的 Java 体系结构,它显示了用于从 Java 应用程序中访问和构建 XML 文档的过程。

显示用于访问或从 Java 创建 XML 的 JAXB 进程的图

本教程向您演示用于 JAXB 的 NetBeans IDE 工具支持。在本教程中,您将具体学习以下三方面的知识:

  • 如何使用 IDE 中的向导将 XML 文档的方案绑定到表示该方案的一组 Java 类以及如何对该文档取消编组。
  • 如何在应用程序代码中使用 JAXB 生成的类。
  • 如何将 Java 代码编组到 XML 方案文档中。

有关 JAXB 体系结构以及整个 JAXB 的详细信息,请参见 Java Web 服务教程中的第 2 章 XML 方案与 Java 类之间的绑定以及第 3 章使用 JAXB

目录

此页上的内容适用于 NetBeans IDE 7.2、7.3 和 7.4

要学习本教程,您需要具备以下软件和资源。

软件或资源 要求的版本
NetBeans IDE Java EE 下载包
Java 开发工具包 (JDK) 版本 7 或版本 6
本教程中使用的 WSDL 文件 CreditReportSimple.wsdl

Tomcat 和 GlassFish Server 都可以随同 NetBeans IDE 的 Web 和 Java EE 分发一起安装。此外,也可以访问 GlassFish Server 下载页Apache Tomcat 下载页

基于 XML 文档生成 Java 对象

本练习的目的旨在创建一个项目,并基于 XML 文档生成 Java 对象。

  1. 下载 CreditReportSimple.wsdl 并将其保存到所选位置。
  2. 选择 "File"(文件)> "New Project"(新建项目)。在 "Categories"(类别)下,选择 "Java"。在 "Projects"(项目)下,选择 "Java Application"(Java 应用程序),然后单击 "Next"(下一步)。
  3. 在 "Project Name"(项目名称)中输入 JseSimpleClientReport,然后单击 "Finish"(完成)。在 "Projects"(项目)窗口中,将显示 JseSimpleClientReport 项目。
  4. 在 "Projects"(项目)窗口中,右键单击 JseSimpleClientReport 节点,然后选择 "New"(新建)> "Other"(其他)> "XML" > "JAXB Binding"(JAXB 绑定)。然后,单击 "Next"(下一步)。此时将显示新建 JAXB 绑定向导。
    JAXB 向导

    以上向导中的设置具有如下用途:

    • Binding Name(绑定名称)。指定新 JAXB 绑定的名称,该名称将用于标识绑定。
    • Project(项目)。显示当前项目的名称。
    • Schema File(方案文件)。要处理的文件可以本地提供,也可以联机提供。
    • Schema Type(方案类型)。支持以下 XML 方案语言:
      • XML Schema(XML 方案)
      • Relax NG(释放 NG) - 简单的 XML 方案语言。XML 语法
      • Relax NG Compact(释放 NG 压缩) - 简单的 XML 方案语言。非 XML 语法
      • XML DTD - XML 方案的早期替代方法
      • WSDL - Web 服务定义语言。用于定义基于 SOAP 的 Web 服务的 XML 方案语言。
    • Package Name(包名)。指定 Java 对象将生成到的包。
    • Compiler Options(编译器选项)。有多个编译器选项可用,如 Java EE 7 教程中的此处所述。但是,只有以下选项与 JAXB 向导有关,您可以使用向导中的复选框对其进行设置:
      • nv。不执行严格的输入方案验证。默认情况下,严格的源方案验证是在处理之前执行的。请注意,这并不意味着绑定编译器将不执行任何验证,而仅表示将执行较为宽松的验证。
      • readOnly(只读)。强制编译器将生成的 Java 源代码标记为只读。默认情况下,编译器不会对其生成的 Java 源文件进行写保护。
      • npa。禁止将包级别标注生成到 **/package-info.java 中。使用此开关将导致生成的代码将这些标注包含在其他的生成类中。
      • verbose(详细)。生成最多的编译器输出,例如进度信息和警告。
      • quiet(无提示)。禁止编译器输出,例如进度信息和警告。
    • Use Extension(使用扩展)。默认情况下,编译器严格强制执行在 JAXB 规范的“兼容性”章节中概述的规则。在默认(严格)模式下,您也只能使用规范中定义的绑定定制。通过使用此选项,您可以使用 JAXB 供应商扩展。
    • Use Binding File(使用绑定文件)。可用于导入和编辑一个或多个 JAXB 绑定定制文件。
    • Use Catalog File(使用目录文件)。可用于导入和编辑 OASIS 目录文件。
  5. 在 "Binding Name"(绑定名称)中键入 CreditReport
  6. 在 "Schema File"(方案文件)的下面,选择 "From Local File System"(从本地文件系统中选择)。单击 "Browse"(浏览),然后浏览至本教程开头下载的 WSDL 文件。
  7. 在 "Schema Type"(方案类型)下拉列表中,选择 "WSDL"(如果 IDE 没有自动选择此选项)。

    注:可能会出现一个警告,表明 WSDL 方案支持仅是试验性的,需要使用 -wsdl 选项来激活它。忽略此警告。

  8. 在 "Package Name"(包名)中键入 org.netbeans.j2ee.wsdl.creditreport。您现在应该看到下面的屏幕: 已填充的 JAXB 向导
  9. 单击 "Finish"(完成)。

IDE 将基于给定的 XML 文档生成 Java 对象。在下一节中,我们将在 IDE 中检查 Java 对象。

检查 JAXB 向导输出

本练习的目的旨在帮助我们熟悉 NetBeans IDE 中用于处理 JAXB 向导输出的工具。

  1. 如同在构建项目时 IDE 重新构建其他工件一样,它也会在 build 文件夹中构建 Java 对象。打开 "File"(文件)窗口,然后便可以浏览至生成的 Java 对象所在的位置。这些 Java 对象还将显示在 "Projects"(项目)窗口中的 "Generated Sources"(生成的源)节点下面。
    显示生成的 Java 对象的项目和文件视图
  2. "Projects"(项目)窗口还将显示一个包含 WSDL 文件的新节点,如下所示。请注意,您可以右键单击 "CreditReport" 节点,然后重新打开向导,以便更改之前指定的设置。
    显示
  3. 如果您更改了向导中的设置,则可以按如下所示重新生成 Java 对象:
    显示

  4. 右键单击 WSDL 文件,然后选择 "Open"(打开)。文档在编辑器中打开。

现在,您已了解 IDE 为 XML 文档生成了哪些内容,接下来我们将使用一些熟悉的工具来对生成的 Java 对象执行一些有意义的操作。

将 Java 代码编组到 XML 方案中

本练习的目的旨在对 IDE 所生成的文件和代码执行一些有意义的操作。您将在生成的某个 Java 对象中设置一些值,然后将该对象编组到 IDE 的 "Output"(输出)窗口中显示的 XML 方案文档中。

  1. 打开新建 Java 应用程序向导所生成的 Main 类。默认情况下,此类根据项目命名为 JseSimpleClientReport.java。在 main 方法主体中声明 CreditReport,它是生成的一个根 JAXB 类:
    public static void main(String[] args) {
    CreditReport cr = new CreditReport();
    }
  2. 随即出现一个警告图标。悬停在它上面,将打开一个工具提示,告知您 IDE 无法找到类 CreditReport。左键单击警告图标,然后选择 IDE 的选项以添加导入语句。
  3. main 方法主体中,键入 "cr"。IDE 会为 JAXB 工件提供相关的代码完成功能(在某些系统上您可能需要按 Ctrl-Space 组合键):
    代码完成选项
  4. 为 JAXB 类设置一些值,例如以下内容(为 java.math.BigInteger 添加一条导入语句):
        cr.setFirstName("Butros Butros");
    cr.setLastName("Gali");
    cr.setDob("1930/05/30");
    cr.setScore("900");
    cr.setSsn("123-45-6789");

    cr.setLatestAddress1("2500 Some Ave");
    cr.setLatestAddress2("Suite 5000");
    cr.setCity("New York");
    cr.setState("New York");
    cr.setCountry("USA");
    cr.setPostalCode("NY 12345-6789");

    cr.setCurrency("USD");
    cr.setLiability(BigInteger.valueOf(2000000));
    cr.setLiquidAssests(BigInteger.valueOf(3000000));
    cr.setImmovableAssests(BigInteger.valueOf(5000000));
  5. main 方法主体中插入值下面,键入字母 "jaxbm"。这些字母表示 "JAXB Marshalling"。您现在应该看到下面的屏幕:
    编辑器中的代码片段,显示有红色下划线的 jaxbm

    出现红色下划线的原因是,您键入的字符不能构成属于 Java 编程语言组成部分的单词。这些字母所构成的是将在下一步使用的 NetBeans 代码模板。

    NetBeans 还提供用于 JAXB 取消编组的代码模板。其缩写为 "jaxbu"。

  6. 按 "Tab" 键。

    将展开 "jaxbm" 字符,并显示以下代码片段:

    try {
    javax.xml.bind.JAXBContext jaxbCtx = javax.xml.bind.JAXBContext.newInstance(cr.getClass().getPackage().getName());
    javax.xml.bind.Marshaller marshaller = jaxbCtx.createMarshaller();
    marshaller.setProperty(javax.xml.bind.Marshaller.JAXB_ENCODING, "UTF-8"); //NOI18N
    marshaller.setProperty(javax.xml.bind.Marshaller.JAXB_FORMATTED_OUTPUT, Boolean.TRUE);
    marshaller.marshal(cr, System.out);
    } catch (javax.xml.bind.JAXBException ex) {
    // XXXTODO Handle exception
    java.util.logging.Logger.getLogger("global").log(java.util.logging.Level.SEVERE, null, ex); //NOI18N
    }

    警告:代码模板扩展要求非常精确。不能添加一个空格,然后单击标签,或者错误地键入短语,将其更正,然后单击标签,等等。您只能正确无误地键入短语,然后单击标签。如果键入错误,请删除之前键入的短语,然后键入整个短语。

  7. 运行应用程序(右键单击项目节点,然后选择 "Run"(运行))。"Output"(输出)窗口将显示以下内容:
    客户端报告输出


另请参见

有关使用 NetBeans IDE 开发 Java EE 应用程序的更多信息,请参见以下资源:

要发送意见和建议、获得支持以及随时了解 NetBeans IDE Java EE 开发功能的最新开发情况,请加入 邮件列表

get support for the NetBeans

Support


By use of this website, you agree to the NetBeans Policies and Terms of Use. © 2015, Oracle Corporation and/or its affiliates. Sponsored by Oracle logo