corner imagecorner image
IDEPlatformPluginsDocs & SupportCommunityPartners

使用 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 的详细信息,请参见《The Java Web Services Tutorial》(《Java Web 服务教程》)中的第 2 章 "Binding between XML Schema and Java Classes"(“XML 架构与 Java 类之间的绑定”)以及第 3 章 "Using JAXB"(“使用 JAXB”)。

目录

本页上的内容适用于 NetBeans IDE 6.7 及更高版本

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

软件或资源 要求的版本
NetBeans IDE Java EE 下载包
Java Development Kit (JDK) 版本 7 或版本 6
警告:NetBeans IDE 6.9 需要 JDK 6
本教程中使用的 WSDL 文件 CreditReportSimple.wsdl

Tomcat 和 GlassFish 服务器都可以随同 NetBeans IDE 的 Web 和 Java EE 分发一起安装。此外,也可以访问 GlassFish 服务器下载页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"(下一步)。将显示 "New JAXB Binding"(新建 JAXB 绑定)向导。
    JAXB 向导

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

    • Binding Name(绑定名称)。指定新的 JAXB 绑定的名称,该名称将用于标识此绑定。
    • Project(项目)。显示当前项目的名称。
    • Schema File(架构文件)。要使用的文件既可以是本地的,也可以是可在线获取的。
    • Schema Type(架构类型)。支持以下 XML 架构语言:
    • Package Name(包名)。指定要在其中生成 Java 对象的包。
    • Compiler Options(编译器选项)。有许多编译器选项可用,具体请参见《The Java EE 5 Tutorial》(《Java EE 5 教程》)中的此处所述。但是,只有以下选项与 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 对象的 "Projects"(项目)和 "Files"(文件)视图
  2. "Projects"(项目)窗口还将显示一个包含 WSDL 文件的新节点,如下所示。请注意,您可以右键单击 "CreditReport" 节点,然后重新打开向导,以便更改之前指定的设置。
    显示 "Change JAXB Options"(更改 JAXB 选项)的 "CreditReport" 上下文菜单
  3. 如果您更改了向导中的设置,则可以按如下所示重新生成 Java 对象:
    显示 "Regenerate Java Code"(重新生成 Java 代码)选项的 "JAXB Binding"(JAXB 绑定)上下文菜单

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

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

将 Java 代码编组到 XML 架构中

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

  1. 打开 "New Java Application"(新建 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 开发功能的最新开发情况,请加入 邮件列表