科技行者

行者学院 转型私董会 科技行者专题报道 网红大战科技行者

知识库

知识库 安全导航

至顶网软件频道Java SE6新特性: XML API 与Web服务7

Java SE6新特性: XML API 与Web服务7

  • 扫一扫
    分享文章到微信

  • 扫一扫
    关注官方公众号
    至顶头条

文章主要介绍 Java SE 6 在 API 库方面的部分新特性,通过一些例子和讲解,帮助开发者在编程实践当中更好的运用 Java SE 6,提高开发效率。

作者:沈羽 来源:IT专家网 2008年5月9日

关键字: API XML Java SE 6 java

  • 评论
  • 分享微博
  • 分享邮件
 Java class 和 XML 文件的绑定

  从上一段关于 Web 服务的叙述中,我们能够发现开发和部署 Web 服务的过程中存在多次 Java 对象和 XML 文件转化的过程。比如开发和部署服务的时候,将一个 Web Service EndPoint 发布成为一个 WSDL,或者使用服务的时候,将一个 WSDL 文件转换成一组 Java 对象。所有的转换,都是通过工具自动完成的。这里存在一些问题,Java 对象的类型转换成 XML 元素是需要符合一定的标准,还是随意转换呢?如果按照标准转换,那么这个标准是什么样子的?比如 Java 中的 int 类型是应该变成 呢,还是 。如 表 2 列出,JSR222- Java Architecture for XML Binding (JAXB) 2.0 标准为这些问题给出了一个规范的解答。

  首先示范一个简单的例子,将根据一个 XML 文件的 schema,转换成 Java 对象。还是以 清单 6 中的数据文件为依据。构造一个 XML schema 文件,如 清单 11 所示。要运行这个例子,首先需要下载一个 JAXB Reference Implementation jar(下载请参见 参考资源),并将该 jar 文件加入到 classpath 中。

  清单 11. 用于绑定的 workcontactinfo.xsd 文件

     

<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<xsd:element name="workcontactinfo" type="workcontactinfo" />
<xsd:complexType name="workcontactinfo">
<xsd:sequence>
<xsd:element ref="Location" maxOccurs="1" minOccurs="1" />
<xsd:element ref="Postal" maxOccurs="1" minOccurs="1" />
<xsd:element ref="tel" maxOccurs="1" minOccurs="1" />
<xsd:element ref="Appellation" maxOccurs="1" minOccurs="1" />
</xsd:sequence>
</xsd:complexType>
<xsd:element name="tel" type="tel" />
<xsd:complexType name="tel">
<xsd:sequence>
<xsd:element ref="fix" maxOccurs="1" minOccurs="1" />
<xsd:element ref="mobile" maxOccurs="1" minOccurs="1" />
</xsd:sequence>
</xsd:complexType>
<xsd:element name="Location" type="xsd:string" />
<xsd:element name="Postal" type="xsd:string" />
<xsd:element name="Appellation" type="xsd:string" />
<xsd:element name="fix" type="xsd:string" />
<xsd:element name="mobile" type="xsd:string" />
</xsd:schema>

  运行命令 xjc workcontactinfo.xsd。将会在当前目录下生成一个 generated 子目录。

  运行命令 javac generated\*.java,编译所有生成的 Java 文件。

  操作生成的 Java 对象。清单 12 给出了一个操作生成的 java 对象的例子。要注意,一定要先将 JAXB Reference Implementation jar 放到 classpath 中。

  清单 12. 调用生成的 Java 对象

  

import generated.*;

import java.io.FileOutputStream;

import javax.xml.bind.JAXBContext;
import javax.xml.bind.Marshaller;

public class JAXBTest {

    public static void main(String[] args) {
        try {

            JAXBContext jContext = JAXBContext.newInstance("generated");

            ObjectFactory factory = new ObjectFactory();

            Workcontactinfo contactinfo = (Workcontactinfo) (factory
                .createWorkcontactinfo());

            contactinfo.setAppellation("Mr. Wang");

            contactinfo.setLocation("Shanghai-shuion-333");

            contactinfo.setPostal("200020");

             Tel tel = (Tel) (factory.createTel());
            tel.setFix("123456");
            tel.setMobile("1376666666");

            contactinfo.setTel(tel);
            Marshaller marshaller = jContext.createMarshaller();

            marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT,
                Boolean.TRUE);

            marshaller.marshal(contactinfo, new FileOutputStream(
                "workcontactinfo1.xml"));

            System.out.println("java tree converted into xml & filed");
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

运行这个程序,就能生成一个 XML 数据文件,如 清单 13。

  清单 13. XML 数据文件

  

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<workcontactinfo>
    <Location>Shanghai-shuion-333</Location>
    <Postal>200020</Postal>
    <tel>
        <fix>123456</fix>
        <mobile>1376666666</mobile>
    </tel>
    <Appellation>Mr. Wang</Appellation>
</workcontactinfo>
  

  回顾一下 Web 服务的 WSDL 文件,如 图 5 所示,是一个符合 W3C XMLSchema 规范的 schema 文件,以及整个过程中生成的 Java 类,我们应该能更好的理解 Web 服务开发,部署,使用的全过程。首先 JDK 6 提供的工具 apt 根据 Web Service EndPoint 中相关的注释生成一些与 WSDL schema 绑定的 Java 类。察看这些类可以发现,它们与 JAXB 例子中 generated 目录下生成的 Java 文件十分相似。接着通过 HTTP 服务将这个 WSDL schema 文件发布出来。然后通过 wsimport 工具,生成一个 Web 服务的客户运行时代理,相当于 清单 12 的功能。最终 Web 服务的用户程序同运行时代理交互,该代理生成并传递形式如 清单 13 的 XML 数据文件。图 10 结合 表 2 给出了 Web 服务开发到使用整个周期的工作流和涉及到的 JDK 包。

  图 10. Web 服务开发部署流程中 XML 技术的应用

  图 10. Web 服务开发部署流程中 XML 技术的应用

  总结

  比较前一个版本的 JDK,新版本对 XML 处理技术进行了扩展。包括新加入的 StAX 和 JAXB。基于这些新的 XML 数据处理技术,JDK 6 对 Web 服务的支持也得到了大大的增强。这些增强体现在引入了一些注释和 API,增加了更多的工具,可以自动化大部分开发和部署的工作。对于 XML 应用开发者来说,有更多更有力地技术可以选用。对于 Web 服务提供者来说,开发工具更为强大,开发流程更为简化,工作效率得到提高。而对于 Web 服务的使用者,更多的底层细节被屏蔽。可以说,新版 JDK 在对 XML 相关应用开发上的支持,较前一个版本有了很大提升。

 
    • 评论
    • 分享微博
    • 分享邮件
    邮件订阅

    如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。

    重磅专题
    往期文章
    最新文章