国产精品电影_久久视频免费_欧美日韩国产激情_成年人视频免费在线播放_日本久久亚洲电影_久久都是精品_66av99_九色精品美女在线_蜜臀a∨国产成人精品_冲田杏梨av在线_欧美精品在线一区二区三区_麻豆mv在线看

通過Java編程處理XML服務定義

開發 后端
Java技術為SOA設計和實現提供了經過優化的解決方案。通過使用簡單的基于XML文件的服務配置,您可以輕松地在網絡中移動客戶機數據。客戶機可以查看并修改這些數據,然后使用這些數據更新服務。本文中的服務由ISP提供,但是任何提供商都可以使用這種方法。

自助服務趨勢

對于大多數服務提供商來說,自助服務正在發展為一種趨勢 — 特別是那些資金緊張的 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 思想。

#p#

將服務定義 XML 文檔傳輸給使用 Java 技術的客戶機

Java 技術為 XML 數據處理提供了一些真正強大的工具(請參見側欄 Java 技術和 XML)。如果將 清單 1 中的內容看作是給定數據集的基于 XML 的呈現,那么您還可以使用其他方式進行呈現。構成 清單 1 基本內容的原始數據一般保存在數據庫中。因此,您如何將這些數據打包成 XML?

清單 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 數據。

#p#

接收數據的 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();

通過一個有限循環 while (true),您可以確定期望的到來數據項的數量。該代碼將一直執行循環,直到接收到***一個數據項,此時將拋出一個異常(ArrayIndexOutOfBoundsException)。您必須使用這種異常機制,除非客戶機已經了解期望的數據項數量。

從 InputStream 對象接收的 XML 數據被保存在 ArrayList 類的一個對象中。該類對于此類應用程序非常有用。完成類定義之后,ArrayList 具有一個特定的容量,總是匹配底層列表的大小。 在添加元素時,ArrayList 對象的容量將自動擴展。因此,您無需擔心會超過數組的極限,因為該類將為您處理這一問題。

此時,客戶機具有 清單 1 中數據的副本。客戶機現在可以將帶寬元素修改為所需的值,然后反向執行文件傳輸過程,從客戶機發送到服務器。通過將 XML 文件 從服務器移動到客戶機,客戶機實際上使用了這一服務。更新后的數據被發送回服務器以完成事務。當然,服務提供商必須驗證傳入的數據并提供所需的帶寬更改。

本文描述的這種模式首先將一個 XML 文件通過網絡傳輸到客戶機。客戶機將文件數據作為流進行接收,然后將其解析為一個內存駐留對象。客戶機隨后對內存駐留對象進行更改,然后反向執行傳輸過程,將對象發回到服務器。

還存在一種服務,其中 XML 數據被完整無缺地從服務器傳輸到客戶機。這種場景中,客戶機使用某種形式的文件傳輸協議(例如 FTP)獲得完整的文件副本。由于文件傳輸是一種標準技術,這里不作過多介紹,您只需了解客戶機將下載 清單 1 中服務配置數據的一個文件副本。此時,客戶機需要解析并修改文件,然后傳輸回服務器,這種模式的工作原理是什么?

#p#

一種基于 XML 文件的 Java 機制

客戶機現在將服務配置文件的副本保存在磁盤中。必須對該文件進行解析以提取 XML 數據。讓人意外的是,這實現起來有些難度,對于較大的文件尤其如此。解決問題的關鍵是使用合適的解析工具。本文中使用的工具是 dom4j,該工具允許您將 XML 數據解析為一個 Java 對象。您還可以使用一個基于 Simple API for XML (SAX) 的解析器,但是 SAX 是一種較低級的技術。您將看到,dom4j 工具僅需要很少的工作即可完成解析。清單 6 引用自本文附帶的 ProcessEventXml.java 文件,展示了使用 dom4j 解析文件所需的主要元素。

清單 6. dom4j 處理 XML 數據

try
{
handler.treeWalk(handler.parse(new File(argv[0])));
}
catch (Throwable t)
{
t.printStackTrace();
}
}

public Document parse(File url)
throws DocumentException
{
SAXReader reader = new SAXReader();
Document document = reader.read(url);
return document;
}

public void treeWalk(Document document)
throws Exception
{
treeWalk(document.getRootElement());
}

基本上只需要兩種方法:parse() 和 treeWalk()。當我運行經過編譯的類時,我獲得了如 清單 7 所示的輸出。如果您希望親自運行代碼,請確保下載、安裝 dom4j 副本,并添加到 CLASSPATH 中(***一步就是將相應的 JAR 文件添加到您的 CLASSPATH 變量中)。然后,編譯 ProcessEventXml.java 文件并使用以下命令運行程序:

java ProcessEventXml ServiceDefinition.xml

清單 7. 使用 dom4j 處理 XML 文件

java ProcessEventXml ServiceDefinition.xml
Josephine Bloggs Internet 1mbps 1Gbyte 95

正如您看到的,僅需少量工作即可整潔地顯示 XML 數據。這些工作都是由 dom4j 處理的。事實上,大部分工作是通過 treeWalk() 方法完成的,這是一種只有到達文件末尾才進行調用的遞歸式方法。這里向您展示了 dom4j 的一個功能:在內存中進行處理。需要注意的是,該技術不適合用于特別大型的 XML 文件,特別是如果您的 Java 設備非常小的話。然而,在本文的例子中,XML 數據集非常小,因此使用這個功能不會產生問題。

您的基于文件的客戶機現在已經成功訪問了 XML 數據。客戶機可以根據需要修改數據并編寫新的 XML 文件。然后將其傳輸回服務器進行處理。像上文一樣,客戶機在這一過程中使用了該服務。

【編輯推薦】

  1. 在ASP.NET中使用Treeview控件和XML
  2. 用XML和XSL來生成動態頁面
  3. 如何利用Scala簡化XML處理
責任編輯:楊鵬飛 來源: IBM
相關推薦

2015-03-18 09:21:53

編程Java死鎖

2010-09-28 14:27:35

SQL定義Xml

2009-08-05 16:32:25

Smooks 1.2框

2011-07-05 10:20:38

java

2013-06-08 12:49:03

Android開發XML定義菜單

2011-03-21 09:16:52

2011-07-25 16:31:51

iOS XML 文件

2009-02-26 13:35:10

XMLSAXParserJDOM

2009-01-03 14:39:00

ibmdwXML

2009-09-09 18:00:55

C# XML編程

2009-09-09 18:20:29

C# XML編程

2013-04-07 10:01:26

Java異常處理

2013-04-01 14:35:10

Android開發Android自定義x

2009-02-05 17:28:01

ScalaFriendFeedXML

2009-06-22 14:26:12

ScalaXML對象

2009-01-18 11:45:16

PHPXML網站編程

2009-08-25 11:10:20

C#編程實現顯示XML

2013-06-08 17:35:46

Android開發移動開發XML自定義菜單

2009-01-03 14:54:40

ibmdwXML

2009-02-10 09:23:03

DOM模型MSXML
點贊
收藏

51CTO技術棧公眾號

欧美大奶子在线| 性刺激的欧美三级视频| 国产精品三级| 色噜噜亚洲精品中文字幕| 手机av免费在线| 亚洲综合一二区| 97视频在线| 久久久久久久综合色一本| av女优在线播放| 国产一区中文字幕| 伊人久久大香线蕉综合75| 日韩二区三区四区| 日韩精品资源| 蜜桃精品在线观看| 水蜜桃一区二区三区| 六月丁香综合| 亚洲精品第一区二区三区| 首页国产欧美久久| 亚洲精品欧美精品| 狠狠色2019综合网| 成人一级生活片| 久久综合九色综合97婷婷女人| 男人添女荫道口喷水视频| 成人av网站在线观看| 尤物av无码色av无码| 久久蜜桃av一区精品变态类天堂 | 日本日本精品二区免费| 性高湖久久久久久久久| 日韩欧美在线观看强乱免费| 奇米四色…亚洲| 国产一区二区三区播放| 91免费小视频| av电影免费| 日本高清不卡aⅴ免费网站| 亚洲搞黄视频| 欧美精品一区二区高清在线观看 | 国产免费黄色一级片| 久久婷婷国产综合精品青草| 日本成人免费网站| 日韩欧美在线视频日韩欧美在线视频 | 欧美日本不卡| 亚洲欧美日韩另类精品一区二区三区 | 亚洲高清av| 波多野结衣三级在线| 99re热这里只有精品视频| 秋霞在线观看av| 91精品国产91热久久久做人人| 粉嫩一区二区三区| 欧美一级淫片aaaaaaa视频| 中文字幕av亚洲精品一部二部| 久久99精品国产99久久| 国产成人免费视频网站| 啊啊啊射了视频网站| 欧美亚一区二区| 欧美大片1688网站| 国产精品劲爆视频| 日韩av电影一区| 国产精品欧美激情在线观看| 精品美女国产在线| 国产精品专区免费| 国产精品久久久久久久久借妻| 手机精品视频在线观看| 精品久久久久久无码国产| 在线中文字幕一区二区| 日韩欧国产精品一区综合无码| 国产日韩中文字幕在线| 国产在线一区二区综合免费视频| www.97.| 亚洲国产美女久久久久| 波多野结衣在线播放一区| 91免费网站视频| 亚洲国产va精品久久久不卡综合| 日韩av影片| 亚洲精品日韩激情在线电影| av一区二区不卡| 免费看美女视频在线网站| 久久免费精品日本久久中文字幕| 久久精品首页| 在线看片黄色| 久久精品国产v日韩v亚洲| 日韩一级在线| 日本夜爽爽一二区| 日韩一区二区三区国产| 欧美高清不卡| 性生活免费在线观看| 亚洲成人黄色网址| 香蕉久久网站| 久久国产色av免费观看| 精品国产乱码久久久久久久久| 一区二区三区韩国免费中文网站| 中文字幕中文字幕99| 在线亚洲免费视频| 你懂的一区二区三区| 亚洲熟妇av一区二区三区漫画| 日韩一级黄色大片| 亚洲91中文字幕无线码三区| 中文字幕在线导航| 在线观看欧美视频| 天堂va蜜桃一区二区三区| 超碰在线中文| 久久久亚洲精选| 成人国产在线观看| av午夜在线观看| 国产专区一区二区三区| 亚洲第一精品在线| 日本韩国欧美超级黄在线观看| 18禁裸男晨勃露j毛免费观看| 日韩精品一区二区三区四区视频| 亚洲色图网站| 国产美女特级嫩嫩嫩bbb片| 久久夜色精品国产| 国产精一品亚洲二区在线视频| 在线黄色网页| 麻豆亚洲一区| 欧美精品精品一区| 亚洲日韩视频| caoporn国产精品免费视频 | 精品久久不卡| 99re99| 午夜精品久久久久久久99热浪潮| 免费在线看污| 2020国产精品视频| 国产精品国产三级国产aⅴ中文| 四虎影视国产精品| 免费在线a视频| 北条麻妃在线一区二区| 国产精品99久久久久久有的能看 | 欧美free嫩15| 91精品国产毛片武则天| 亚洲精品一区中文| 激情婷婷丁香| 怡红院精品视频| 欧美 日韩 国产一区二区在线视频 | 欧美精品一区二区三区一线天视频 | 91免费版在线看| 超碰在线网址| 久久久久久亚洲精品不卡4k岛国 | 欧美调教femdomvk| 亚洲深深色噜噜狠狠爱网站| 中文在线资源在线| 国产精品久久久久久久久久99 | 国产一区二区三区免费在线| 精品成在人线av无码免费看| 日韩在线播放av| 91麻豆.com| 欧亚精品一区| 在线亚洲电影| 国产伦精品一区二区| 欧美一级理论片| 国内国产精品久久| 懂色av色香蕉一区二区蜜桃| 无遮挡又爽又刺激的视频 | 国产精品对白刺激| 欧美日韩国产综合新一区| 免费网站成人| 亚洲看片网站| 一区二区成人av| 99久久综合国产精品| 中文字幕一区二区三区日韩精品| 亚洲污视频在线观看| 欧美中文字幕在线观看| 亚洲第一狼人社区| 国产精品人人爽人人做我的可爱| 99thz桃花论族在线播放| 国产欧美久久久久| 51精品在线观看| 一本到三区不卡视频| 久久精品成人| 欧美日韩不卡| 91人成在线| 国产女主播一区二区| 日韩av网址在线| 国产欧美精品区一区二区三区| av在线不卡免费观看| 伊人精品影院| 日本免费一级视频| 91欧美精品成人综合在线观看| 91精品国产全国免费观看| 成人av高清在线| 欧美日韩国产一区二区三区不卡| 二区三区四区高清视频在线观看| 男女h黄动漫啪啪无遮挡软件| 欧美另类暴力丝袜| 欧美色偷偷大香| 91香蕉国产在线观看软件| 99热国内精品| 欧亚一区二区| 污网站在线看| 97在线国产视频| 国产在线不卡精品| 亚洲天堂av高清| 亚洲成人免费在线| 国产精品一区二区男女羞羞无遮挡 | 欧美日韩午夜视频在线观看| 精品一区二区三区在线播放视频| 在这里有精品| 中文国产字幕在线观看| 羞羞在线视频| 亚洲一区二区三区在线观看视频 | 免费观看亚洲视频大全|