网站主页   操作系统    网络工程    服务器    网页制作    数据库    程序开发    网络安全    办公软件   
讲座日期: 本周六下午1点30分 抢座
讲座地点: 北大青鸟马甸校区
主讲老师: 王老师 金牌讲师
讲座主题: 网络安全
讲座内容: 检测、防御、黑客信息,如何过滤不安全的网站,如何防御黑客的进攻。
订座电话: 010-82011432/33
  您当前位置:主页 > 网络学院 > 程序开发 > JAVA教程 >

通过Java编程处理XML 服务SOA




很多大型软件供应商还在开发各自的 SOA 产品。因此,SOA 领域目前综合了各种技术,包括 Java Business Integration (JBI)、Intelligent Event Processing 和 Business Process Execution Language (BPEL) 服务器。因此,在将各种技术融入到一个解决方案之前,想要从 SOA 中受益的用户组织很可能需要进行大量投资。通过对 SOA 布置如此高的复杂性,行业提前为实现供应商定位铺好了道路,即使 SOA 其中的一项承诺是实现基于标准、面向组件、独立于供应商的计算。在开始代价高昂的迁移过程前,用户组织能够获得一些实用的 SOA 使用体验吗?

    为回答这个问题,本文通过简单的 XML 和一些 Java 代码演示了几个重要的 SOA 原理。本文并不打算介绍 SOA 领域中的所有内容;相反,我们只介绍其中的一些关键部分。例如,您可以考虑使用 RSS 发布 XML 服务定义。但是,在本文的例子中,传输机制使用的是 Java 工具。

    Java 技术和 XML

    Java 技术和 XML 几乎成为了同义词。实际上,我通过 IBM 工具对整篇文章应用了 XML 格式。尽管 XML 取得了显而易见的巨大成功,仍需注意 XML 是一种相当笨拙的技术,例如 和 标签会增加大量带宽并在通过网络传输数据时处理系统开销。然而,忽略这种特性,XML 确实提供了一些强大的处理工具。这些工具(本文将探讨其中的两种)基本上解决了数据表示和解析问题(后者长久以来一直难以解决)。现在,通过使用 XML 工具,各种技术级别的程序员都可以实现专业的标准化解析。

    Java 技术为 XML 数据处理提供了一些真正强大的工具(请参见侧栏 Java 技术和 XML)。如果将 清单 1 中的内容看作是给定数据集的基于 XML 的呈现,那么您还可以使用其他方式进行呈现。构成 清单 1 基本内容的原始数据一般保存在数据库中。因此,您如何将这些数据打包成 XML?

    这种聚焦式方法的优点就是用户组织中的 Java 开发人员可以使用其中的理念构建自己的简单的试验性 SOA。这种试验模式有助于组织实现 SOA 的商业效益。后者包含对业务服务建模,例如计算服务、用户自助服务、更好的自动化服务和更具响应性的服务。您可以将上述的迁移作为一个独立试验实现,与现有业务流程并行运作。

    用户组织不需要进行大型投资就可实现一个试验性质的 SOA。通过这种方式,陈述特定于组织的 SOA 需求时可以脱离任何供应商实现。实际上,某些较小的用户组织可以继续使用他们的试验性 SOA 模式,只在后期迁移到软件供应商提供的大型商用解决方案。

    自助服务趋势

    对于大多数服务提供商来说,自助服务正在发展为一种趋势 — 特别是那些资金紧张的 ISP。因此,如果您需要更多带宽(进行下载或玩在线游戏),您可以登录到提供商的 Web 站点并通过 Web 页面自动升级与提供商的连接。让我们看一个具体的例子:清单 1 展示了一个简单的基于 XML 的用户服务配置文件。

    清单 1. 一个简单的基于 XML 的服务描述

    < ServiceInstance>

    < Customer>Josephine Bloggs< /Customer>

    < Package>Internet< /Package>

    < Bandwidth>1mbps< /Bandwidth>

    < DownloadLimit>1Gbyte< /DownloadLimit>

    < Uptime>95< /Uptime>

    < /ServiceInstance>

    代码解释了这个用户 XML 服务模型。该模型包括:

    一个服务实例

    客户名字

    服务包的名称

    已配置的带宽量

    每月允许的下载限度

    提供商正常运行时间保证

    无疑,服务定义可以比此处的例子复杂很多。其他内容可能包括客户地址、账单明细、往返延迟、加密和服务信用信息等。重点是,越来越多的提供商提供如 清单 1 所示的 Web 访问细节。某种程度上讲,这种尝试可以减少支持电话的花销和发生频度。有趣的是,这种基于 Web 的服务可以使用户觉得为他们提供服务的是较为先进的提供商。这实现了双赢的局面,因为客户可以更好地访问他们的服务数据,而提供商可以销售无需他们插手的服务包。授权的用户可以修改如 清单 1 所示的一些服务参数 — 例如,配置的带宽。随之修改的是用户每月的订购费用。

    因此,清单 1 中的代码形成了基于 XML 的服务模型的基础。通过简单地与在线表单进行交互,用户可以修改可写的服务元素(例如带宽)。通过在线表单进行的修改将被记录,然后反映到可由用户配置文件修改的后端服务中。这是一种实现自助服务的标准方法。

    然而,您将要了解的是另一种更加松散耦合的自助服务 — 使用这种服务,用户可以通过在网络中传输 清单 1 中的 XML 内容修改数据。在这种场景中,所传输的 XML 内容可通过一个 Java 客户机进行修改,后者可运行在台式机、笔记本电脑、甚至某种资源受限的设备上(例如手机),然后将数据发回给网络服务提供商。这种机制超越了基本的 HTML 页面模型并采纳了 SOA 思想。

    将服务定义 XML 文档传输给使用 Java 技术的客户机

    清单 2 中的内容摘取自本文附带的 Java 文件 encodeXML.java.(相关文件可从 下载 部分获得)。encodeXML.java 类对 XMLEncoder 类的对象进行了实例化。如您所见,这个对象随后在当前目录中创建了名为 xmldata.xml 的文件。下一步是将 XML 数据值插入到文件中,这可以通过调用一连串的 writeObject() 方法实现(清单 2 对此进行了说明)。显然,在生产环境中,清单 2 中硬编码的文本字符串将来自数据库这样的持久性存储。无论何种情况,可以看到 XML 数据文件的创建非常简单。

    清单 2. 使用 XML 格式编码数据

    XMLEncoder e = new XMLEncoder(

    new BufferedOutputStream(

    new FileOutputStream("xmldata.xml")));

    e.writeObject("Josephine Bloggs");

    e.writeObject("Internet");

    e.writeObject("1mbps");

    e.writeObject("Gbyte");

    e.writeObject("295");

    e.close();


    执行 清单 2 中的程序后,程序的执行目录中将出现一个名为 xmldata.xml 的文件。清单 3 解释了新创建文件包含的内容。

    清单 3. 生成的 XML 数据

    < ?xml version="1.0" encoding="UTF-8"?>

    < java version="1.5.0_06" class="java.beans.XMLDecoder">

    < string>Josephine Bloggs< /string>

    < string>Internet< /string>

    < string>1mbps< /string>

    < string>Gbyte< /string>

    < string>295< /string>

    < /java>


    您可以通过网络将 清单 3 中的文件传输给等待状态中的客户机 — 使用 Java 技术即可创建。清单 4 展示了一个简单的例子。

    清单 4. 跨越网络传输文件

    byte[] bytes = new byte[BUFFER_SIZE];

    FileInputStream inputFile = null;

    try

    {

    File file = new File("xmldata.xml");

    if (file.exists())

    {

    inputFile = new FileInputStream(file);

    int ch = inputFile.read(bytes, 0, BUFFER_SIZE);

    while (ch != -1)

    {

    output.write(bytes, 0, ch);

    ch = inputFile.read(bytes, 0, BUFFER_SIZE);

    }

    }

    清单 4 中的代码创建了一个长度缓冲区 BUFFER_SIZE。 BUFFER_SIZE 常量的值可以是 1024 或更高。通过调用 inputFile.read() 方法将输入文件(xmldata.xml)的内容读取到缓冲区中。进行缓冲之后,output.write() 方法将文件数据写入到 OutputStream 对象的套接字中。最后一步将数据通过网络发送到等待中的客户机中。这些功能居然只需要这么少的代码!

    接下来,您需要使客户机处理传入的 XML 数据。

    接收数据的 Java 客户机获得 XML 内容(并不是 XML 文件)

    客户机如何接收 XML 数据?同样,对于 Java 技术来说这只是小事一桩。数据接收通过一个套接字对象完成。清单 5 展示的代码将接收传入的数据并将数据推入到 ArrayList 类的对象中。

    客户机现在必须解决两个与所接收数据项的数量有关的问题。由于这是一个松散耦合的场景,您必须假定客户机并不清楚服务配置文件(即 清单 1 中的代码)中包含了多少 XML 数据项。因此,您必须确定一些方法来接收和处理精确的数据项数量。第二个问题比较容易解决,就是如何保存处理过的数据。您将看到,清单 5 同时解决了这两个问题。

    清单 5. 提取嵌入的 XML 数据

    XMLDecoder d = new XMLDecoder(input);

    try

    {

    while (true)

    ArrayList< Object[]> rowList = new ArrayList< Object[]>();

    {

    String dataItem = (String)d.readObject();

    System.out.println("XML decoded data: " + dataItem);

    rowList.add(dataItem);

    }

    }

    }

    catch (Exception exc)

    {

    if (exc instanceof ArrayIndexOutOfBoundsException)

    {

    // No more records to process

    System.out.println("Parsed all XML records - " +

    "threw exception. Number of rows: " + rowList.size());

    }

    }

    d.close(); 


    
[1]  

上一篇:漫步云端 Java开发者的新选择  
下一篇:java用hibernate向anywhere9中插入一百万条记录
相关信息:

·北京电脑培训总校 甲骨文Java专利权被谷歌安卓侵犯 ·Java开发经验收藏 北大青鸟华腾中心
·关于java多线程的总结 北大青鸟华腾教育 ·北大青鸟华腾教育 Java:逆转字符串
·javascript设定延时 ·SUN:java的涅槃与革命
·java用hibernate向anywhere9中插入一百万条记录 ·漫步云端 Java开发者的新选择
·Java程序中解决数据库超时与死锁 ·Javascript教程:PopUp对象

Copyright © 2004-2015 北大青鸟马甸校区 北京北方华腾技术培训中心 版权所有
学校地址:北三环中路马甸桥东北角商房大厦(国美电器)626
招生热线:010-82011433/32 京公网安备110102004704  京ICP备05043413号 京公网安备110102004704