corner imagecorner image
IDEPlatformPluginsDocs & SupportCommunityPartners

使用 JAXB 将 WSDL 绑定到 Java

使用 Java Architecture for XML Binding API (JAXB),可以轻松地访问以 Java 编程语言编写的应用程序中的 XML 文档。本文档演示 NetBeans IDE 如何为 JAXB 提供工具支持,其主要方式是借助一个将各种类型的 XML 文档转变为 Java 类的向导。我们将首先通过给定的 WSDL 文件生成 Java 类,然后再对这些类执行一些操作。

在本教程中,您将具体学习以下两方面的知识:

  • 如何使用 IDE 中的向导将 XML 文档的架构绑定到表示该架构的一组 Java 类。
  • 如何利用 IDE 所提供的各种工具来快速、有效地使用生成的 Java 类。

有关 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.9 和 7.1

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

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

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

基于 XML 文档生成 Java 对象

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

  1. 选择“文件”>“新建项目”。在“类别”下选择 "Java"。在“项目”下,选择“Java 应用程序”,然后单击“下一步”。
  2. 在“项目名称”中,输入 JseSimpleClientReport,然后单击“完成”。在“项目”窗口中,将显示 JseSimpleClientReport 项目。
  3. 在“项目”窗口中,右键单击 JseSimpleClientReport 节点,然后选择“新建”>“其他”> "XML" >“JAXB 绑定”。然后,单击“下一步”。将显示“新建 JAXB 绑定”向导。
    JAXB 向导

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

    • 绑定名称。指定新的 JAXB 绑定的名称,该名称将用于标识此绑定。
    • 项目。显示当前项目的名称。
    • 架构文件。要使用的文件既可以是本地的,也可以是可在线获取的。
    • 架构类型。支持以下类型的 XML 文档:
      • XML 架构
      • Relax NG
      • Relax NG Compact
      • XML DTD
      • WSDL
    • 包名。指定要在其中生成 Java 对象的包。
    • 编译器选项。有许多编译器选项可用,具体请参见《The Java EE 5 Tutorial》(《Java EE 5 教程》)中的此处所述。但是,只有以下选项与 JAXB 向导有关,您可以使用向导中的复选框对其进行设置:
      • nv。不执行严格的输入架构验证。缺省情况下,严格的源架构验证是在处理之前执行的。请注意,这并不意味着绑定编译器将不执行任何验证,而仅表示将执行较为宽松的验证。
      • readOnly。强制编译器将生成的 Java 源文件标记为只读。缺省情况下,编译器不会对其生成的 Java 源文件进行写保护。
      • npa。禁止在 **/package-info.java 中生成包级标注。使用此开关将导致生成的代码将这些标注包含在其他的生成类中。
      • verbose。生成最详细的编译器输出,如进度信息和警告。
      • quiet。禁止编译器输出,如进度信息和警告。
    • 使用扩展。缺省情况下,编译器将严格强制执行 JAXB 规范的“兼容性”一章中概述的规则。在缺省(严格)模式下,您也只能使用规范中定义的绑定定制。通过使用此选项,您可以使用 JAXB 供应商扩展。
    • 使用绑定文件。用于导入和编辑一个或多个 JAXB 绑定定制文件。
    • 使用目录文件。用于导入和编辑 OASIS 目录文件。
  4. 在“绑定名称”中键入 CreditReport
  5. 在“架构文件”的下面,选择“从本地文件系统中选择”。单击“浏览”,然后浏览至本教程开头下载的 WSDL 文件。
  6. 在“架构类型”下拉列表中,选择 "WSDL"(如果 IDE 没有自动选择此选项)。您现在应该看到下面的屏幕:

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

    已填好的 JAXB 向导
  7. 单击“完成”。

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

检查 JAXB 向导输出

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

  1. 如同在生成项目时 IDE 重新生成其他工件一样,它也会在 build 文件夹中生成 Java 对象。打开“文件”窗口,然后便可以浏览至生成的 Java 对象所在的位置。从 NetBeans IDE 6.7 开始,这些 Java 对象还将显示在“项目”窗口中的“生成的源”节点下面。
    显示生成的 Java 对象的“项目和文件”视图
  2. “项目”窗口还将显示一个包含 WSDL 文件的新节点,如下所示。请注意,您可以右键单击 "CreditReport" 节点,然后重新打开向导,以便更改之前指定的设置。
    �?�示“更改 JAXB 选项�?的 "CreditReport" 上下文�?��?�

    另请注意,对于 JDK 5,向导已将 JAXB 库放在应用程序的类路径中。对于 JDK 6,由于 JDK 本身提供了 JAXB 库,因此将不在“库”节点中添加任何新节点。

  3. 如果您更改了向导中的设置,则可以按如下所示重新生成 Java 对象:
    �?�示“�?新生�?? Java 代�?�?选项的“JAXB 绑定�?上下文�?��?�
  4. 右键单击 WSDL 文件,然后选择“打开”。文档在编辑器中打开。

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

使用 Java 对象

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

  1. 打开“新建 Java 应用程序”向导所生成的 Main 类。在 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 代码模板。另一个相关的代码模板为 "jaxbu",它表示 "JAXB Unmarshalling"。

  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. 运行应用程序(右键单击项目节点,然后选择“运行”)。“输出”窗口将显示以下内容:
    客户端报告输出


另请参见

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

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