61
Java Web Service Java Web Service 2004 2004 Matt Matt

Java Web Service 2004Matt. 2 Outline Web Service Concept Web Service Concept Web Service and JavaWeb Service and Java XML XML XML Parsing XML Parsing

Embed Size (px)

Citation preview

Page 1: Java Web Service 2004Matt. 2 Outline Web Service Concept Web Service Concept Web Service and JavaWeb Service and Java XML XML XML Parsing XML Parsing

Java Web ServiceJava Web Service

20042004

MattMatt

Page 2: Java Web Service 2004Matt. 2 Outline Web Service Concept Web Service Concept Web Service and JavaWeb Service and Java XML XML XML Parsing XML Parsing

22

OutlineOutline

Web Service ConceptWeb Service Concept• Web Service and JavaWeb Service and Java

XMLXML XML ParsingXML Parsing JAXBJAXB SOAPSOAP WSDLWSDL JAX-RPCJAX-RPC SAAJSAAJ UDDIUDDI JAXRJAXR

Page 3: Java Web Service 2004Matt. 2 Outline Web Service Concept Web Service Concept Web Service and JavaWeb Service and Java XML XML XML Parsing XML Parsing

33

Web Service Web Service 特點特點 誇程式語言平台誇程式語言平台

• 底層的運作底層的運作 (( 資料的傳輸及服務的呼叫資料的傳輸及服務的呼叫 )) 皆以皆以 XMLXML作作為為 locallocal 和和 remoteremote溝通及互動的表達語言溝通及互動的表達語言

• SOAPSOAP 以以 XMLXML為基礎並架構在為基礎並架構在 HTTPHTTP之上之上• SOAPSOAP 是以文字為基礎的通訊協定是以文字為基礎的通訊協定

Loosely couplingLoosely coupling• Web Services Description LanguageWeb Services Description Language• 動態地呼叫與使用動態地呼叫與使用Web ServiceWeb Service 所提供的服務所提供的服務

動態服務的取得動態服務的取得• UDDIUDDI

Page 4: Java Web Service 2004Matt. 2 Outline Web Service Concept Web Service Concept Web Service and JavaWeb Service and Java XML XML XML Parsing XML Parsing

44

Web Service Web Service 特點特點 提供同步與非同步的運算模式提供同步與非同步的運算模式

• 可以和可以和 Message ServerMessage Server整合整合• IBM MQ Server, MS MSMQIBM MQ Server, MS MSMQ

透通防火牆的保護透通防火牆的保護• HTTPHTTP

Page 5: Java Web Service 2004Matt. 2 Outline Web Service Concept Web Service Concept Web Service and JavaWeb Service and Java XML XML XML Parsing XML Parsing

55

Service-Oriented ArchitectureService-Oriented Architecture

Service providerService provider

Service requesterService requester

Service brokerService broker

XML, SOAP, WSDL, UDDIXML, SOAP, WSDL, UDDI

broker

provider requester

Page 6: Java Web Service 2004Matt. 2 Outline Web Service Concept Web Service Concept Web Service and JavaWeb Service and Java XML XML XML Parsing XML Parsing

66

Java Web ServiceJava Web Service

Java WSDP (Web Service Developer Pack)Java WSDP (Web Service Developer Pack)

Document-oriented packageDocument-oriented package• JAXP (Java API for XML Processing)JAXP (Java API for XML Processing)• JAXB (Java Architecture for XML Binding)JAXB (Java Architecture for XML Binding)• SAAJ (SOAP with Attachment API for Java)SAAJ (SOAP with Attachment API for Java)

Procedure-oriented packageProcedure-oriented package• JAX-PRC (Java API for XML-based RPC)JAX-PRC (Java API for XML-based RPC)• JAXR (Java API for XML Registries)JAXR (Java API for XML Registries)

Page 7: Java Web Service 2004Matt. 2 Outline Web Service Concept Web Service Concept Web Service and JavaWeb Service and Java XML XML XML Parsing XML Parsing

77

JAXP (Java API for XML Processing)JAXP (Java API for XML Processing)

剖析與存取剖析與存取 XMLXML文件的文件的 APIAPI• DOMDOM• SAXSAX

文件轉換文件轉換• 如轉成如轉成 HTMLHTML以顯示在網頁上以顯示在網頁上

Page 8: Java Web Service 2004Matt. 2 Outline Web Service Concept Web Service Concept Web Service and JavaWeb Service and Java XML XML XML Parsing XML Parsing

88

JAXB (Java Architecture for XML Binding)JAXB (Java Architecture for XML Binding)

將將 XML SchemaXML Schema轉成轉成 JavaJava類別的技術類別的技術

以便可以使用以便可以使用 JavaJava類別和類別和 XMLXML文件進行互動,文件進行互動,以使在進行剖析與處理以使在進行剖析與處理 XMLXML文件時變得更簡單及文件時變得更簡單及自然自然

Page 9: Java Web Service 2004Matt. 2 Outline Web Service Concept Web Service Concept Web Service and JavaWeb Service and Java XML XML XML Parsing XML Parsing

99

JAX-RPC (Java API fro XML-based RPC)JAX-RPC (Java API fro XML-based RPC)

JavaJava的使用者可以利用的使用者可以利用 JAX-RPCJAX-RPC呼叫呼叫 ServerServer的的某一程序某一程序

所有底層的運作都必須基於所有底層的運作都必須基於 SOAPSOAP協定,這些部協定,這些部份皆已經被份皆已經被 JAX-RPCJAX-RPC自動處理完畢了自動處理完畢了

Page 10: Java Web Service 2004Matt. 2 Outline Web Service Concept Web Service Concept Web Service and JavaWeb Service and Java XML XML XML Parsing XML Parsing

1010

JAXR (Java API for XML Registries)JAXR (Java API for XML Registries)

Web ServiceWeb Service利用利用 JAXRJAXR將其所提供的服務註冊將其所提供的服務註冊到到 UDDI ServerUDDI Server中,而客戶則可以利用中,而客戶則可以利用 JAXRJAXR到到註冊註冊 ServerServer中找尋所需的服務中找尋所需的服務

Page 11: Java Web Service 2004Matt. 2 Outline Web Service Concept Web Service Concept Web Service and JavaWeb Service and Java XML XML XML Parsing XML Parsing

1111

SAAJ (SOAP with Attachments API for SAAJ (SOAP with Attachments API for Java)Java)

透過透過 SAAJSAAJ的使用,可以提供非同步運算的的使用,可以提供非同步運算的Web Web ServicesServices

讓讓 ClientClient 和和 ServerServer之間藉由之間藉由【【 messagemessage】】來來做溝通,做溝通, ClientClient可以不用保持在等待回應的狀態,可以不用保持在等待回應的狀態,可先做其他的工作可先做其他的工作

Page 12: Java Web Service 2004Matt. 2 Outline Web Service Concept Web Service Concept Web Service and JavaWeb Service and Java XML XML XML Parsing XML Parsing

1212

Example Example

Registries

ProviderRequester

1. 註冊服務(JAXR)

2. 查詢服務(JAXR)

3. 下載相關資料(JAXR)

4. 下載 WSDL 文件5.request(JAX-RPC)

6.response(JAX-RPC)

Page 13: Java Web Service 2004Matt. 2 Outline Web Service Concept Web Service Concept Web Service and JavaWeb Service and Java XML XML XML Parsing XML Parsing

1313

OutlineOutline

Web Service ConceptWeb Service Concept• Web Service and JavaWeb Service and Java

XMLXML XML ParsingXML Parsing JAXBJAXB SOAPSOAP WSDLWSDL JAX-RPCJAX-RPC SAAJSAAJ UDDIUDDI JAXRJAXR

Page 14: Java Web Service 2004Matt. 2 Outline Web Service Concept Web Service Concept Web Service and JavaWeb Service and Java XML XML XML Parsing XML Parsing

1414

XMLXML

eXtensible Markup LanguageeXtensible Markup Language

XML SchemaXML Schema

Page 15: Java Web Service 2004Matt. 2 Outline Web Service Concept Web Service Concept Web Service and JavaWeb Service and Java XML XML XML Parsing XML Parsing

1515

OutlineOutline

Web Service ConceptWeb Service Concept• Web Service and JavaWeb Service and Java

XMLXML XML ParsingXML Parsing JAXBJAXB SOAPSOAP WSDLWSDL JAX-RPCJAX-RPC SAAJSAAJ UDDIUDDI JAXRJAXR

Page 16: Java Web Service 2004Matt. 2 Outline Web Service Concept Web Service Concept Web Service and JavaWeb Service and Java XML XML XML Parsing XML Parsing

1616

XML ParsingXML Parsing

XML ParsingXML Parsing 及文件轉換的功能由及文件轉換的功能由 JAXP (Java API for JAXP (Java API for XML Processing)XML Processing) 所提供所提供

XML ParsingXML Parsing 模型有兩程模型有兩程• DOM (Document Object Model)DOM (Document Object Model)• SAX (Simple API for XML)SAX (Simple API for XML)

SAXSAX• Event-drivenEvent-driven• SerialSerial的方式取得的方式取得 XMLXML資料資料

DOMDOM• 利用標籤間具有階層性的關係,在記憶體中以樹狀結構的方式重利用標籤間具有階層性的關係,在記憶體中以樹狀結構的方式重

現現 XMLXML文件文件• 利用利用 traversaltraversal的演算法即可擷取的演算法即可擷取 XMLXML文件中的資料,可以文件中的資料,可以

ransomransom 的方式存取的方式存取 treetree 上任一節點的資料上任一節點的資料

Page 17: Java Web Service 2004Matt. 2 Outline Web Service Concept Web Service Concept Web Service and JavaWeb Service and Java XML XML XML Parsing XML Parsing

1717

Used to create a SAX Parser

Handles document events: start tag, end tag,

etc.

Handles Parser Errors

Handles DTDs and Entities

SAXSAX

Page 18: Java Web Service 2004Matt. 2 Outline Web Service Concept Web Service Concept Web Service and JavaWeb Service and Java XML XML XML Parsing XML Parsing

1818

import java.io.*;import org.xml.sax.*;import org.xml.sax.helpers.DefaultHandler;import javax.xml.parsers.SAXParserFactory;import javax.xml.parsers.SAXParser;import javax.xml.parsers.ParserConfigurationException;

public class BookListApp { public static void main(String[] args){ try{ // 取得 SAXParserFactory 之物件實體 SAXParserFactory factory = SAXParserFactory.newInstance(); factory.setValidating(true); // 取得 JAXP 所預設之 SAX 剖析器 SAXParser parser = factory.newSAXParser(); // 取得 Handler 程式之物件實體, BookList_Handler 程式已經繼承 DefaultHandler 類別 // 下列用法是採用物件導向的多形特性。 DefaultHandler handler = new BookList_Handler(); // 設定 XML 文件檔名與 Handler 程式,並開始進行剖析的工作 parser.parse(args[0], handler);

Page 19: Java Web Service 2004Matt. 2 Outline Web Service Concept Web Service Concept Web Service and JavaWeb Service and Java XML XML XML Parsing XML Parsing

1919

}catch (SAXParseException e1){ System.out.println(" 發生錯誤行數 : " + e1.getLineNumber()); System.out.println(" 錯誤訊息 : " + e1.getMessage()); }catch (ParserConfigurationException e2){ System.out.println(e2); }catch(Exception e3){ System.out.println(e3); } }}

Page 20: Java Web Service 2004Matt. 2 Outline Web Service Concept Web Service Concept Web Service and JavaWeb Service and Java XML XML XML Parsing XML Parsing

2020

/**這個 Handler 物件就是用來和 SAX 剖析器進行互動之用*/import org.xml.sax.*;import org.xml.sax.helpers.DefaultHandler;

public class BookList_Handler extends DefaultHandler{

// 暫存 XML 資料的字串變數 StringBuffer txtBuf = null; /** 文件相關的事件處理函數 */ public void startDocument() throws SAXException{ System.out.println(" 開始剖析文件的工作 "); } public void endDocument() throws SAXException{ System.out.println(" 結束剖析文件的工作 "); }

Page 21: Java Web Service 2004Matt. 2 Outline Web Service Concept Web Service Concept Web Service and JavaWeb Service and Java XML XML XML Parsing XML Parsing

2121

/** 元素相關的事件處理函數 */ public void startElement(String nameSpace, String sName, String qName, Attributes atts) throws SAXException{ // 列印上一個 XML 資料 displayText(); // 顯示標籤的名字 String name = sName; if (name.equals("")) name = qName; System.out.println(" 開始剖析元素 :" + name); // 取得該元素的所有屬性 if (atts != null){ for (int i = 0; i < atts.getLength(); i++){ // 取得元素的名稱 String aName = atts.getLocalName(i); if (aName.equals("")) aName = atts.getQName(i);

Page 22: Java Web Service 2004Matt. 2 Outline Web Service Concept Web Service Concept Web Service and JavaWeb Service and Java XML XML XML Parsing XML Parsing

2222

System.out.println(" 元素 :" + name + " 的屬性 :" + aName + " 為 :" + atts.getValue(i));

} } } public void endElement(String nameSpace, String sName,

String qName) throws SAXException{ // 列印上一個 XML 資料 displayText(); // 顯示標籤的名字 String name = sName; if (name.equals("")) name = qName; System.out.println(" 結束剖析元素 :" + name); } /** 文字事件相關的處理函數 */

Page 23: Java Web Service 2004Matt. 2 Outline Web Service Concept Web Service Concept Web Service and JavaWeb Service and Java XML XML XML Parsing XML Parsing

2323

public void characters(char[] buf, int offset, int len) throws SAXException{

String str = new String(buf, offset, len); // 合併 XML 資料 if (txtBuf == null) txtBuf = new StringBuffer(str); else txtBuf.append(str); } /* public void ignorableWhitespace(char buf[],

int offset, int len) throws SAXException{ System.out.println(" 忽略資料 "); } */ /** 印出 XML 資料 */ public void displayText(){ if (txtBuf == null) return;

Page 24: Java Web Service 2004Matt. 2 Outline Web Service Concept Web Service Concept Web Service and JavaWeb Service and Java XML XML XML Parsing XML Parsing

2424

System.out.println(" 解析出來的文字 :->" + txtBuf + "<-"); txtBuf = null; } /** 其它有用的成員函數 */ public void setDocumentLocator(Locator local){ System.out.println("system ID:" + local.getSystemId()); System.out.println("public identifier:" + local.getPublicId()); } public void processingInstruction(String appName,

String data) throws SAXException{ System.out.println(" 應用程式名稱 :" +

appName + ", 初始參數 :" + data); }}

Page 25: Java Web Service 2004Matt. 2 Outline Web Service Concept Web Service Concept Web Service and JavaWeb Service and Java XML XML XML Parsing XML Parsing

2525

DOMDOM

DOM Parser DOM TreeXML File

API

Application

Page 26: Java Web Service 2004Matt. 2 Outline Web Service Concept Web Service Concept Web Service and JavaWeb Service and Java XML XML XML Parsing XML Parsing

2626

/**本程式是用來取得 DOM 剖析器之物件實體 .*/import java.io.*;

// 與 DOM 剖析器相關的類別import javax.xml.parsers.DocumentBuilder;import javax.xml.parsers.DocumentBuilderFactory;import javax.xml.parsers.FactoryConfigurationError;import javax.xml.parsers.ParserConfigurationException;

// 剖析過程中所會引發的例外事件 ( 和 SAX 剖析器共用 )import org.xml.sax.SAXException;import org.xml.sax.SAXParseException;

// 與 DOM 相關的例外事件import org.w3c.dom.Document;import org.w3c.dom.DOMException;

import org.w3c.dom.Node;import org.w3c.dom.NodeList;

Page 27: Java Web Service 2004Matt. 2 Outline Web Service Concept Web Service Concept Web Service and JavaWeb Service and Java XML XML XML Parsing XML Parsing

2727

public class BookListDOMApp {public class BookListDOMApp { public static void main(String[] args){ try{ // 取得 DocumentBuilderFactory 之物件實體 DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); // 設定判斷有效性 factory.setValidating(true); // 設定判斷命名空間 factory.setNamespaceAware(true); // 設定是否忽略註解 factory.setIgnoringComments(true); // 設定是否忽略空白 factory.setIgnoringElementContentWhitespace(true); // 設定是否要展開實體參考 factory.setExpandEntityReferences(true);

Page 28: Java Web Service 2004Matt. 2 Outline Web Service Concept Web Service Concept Web Service and JavaWeb Service and Java XML XML XML Parsing XML Parsing

2828

// 將 CDATA 結點轉換成 Text 結點 factory.setCoalescing(true); // 取得 DOM 剖析器 DocumentBuilder builder = factory.newDocumentBuilder(); // 委託剖析例外事件 builder.setErrorHandler(new BookListDOM_ErrorHandler()); // 建立 DOM 樹狀結構 Document document = builder.parse(new File(args[0])); // 取得根結點 Node node = document.getDocumentElement(); // 取得根結點的所有子元素 NodeList nodeList = node.getChildNodes(); for (int i = 0; i < nodeList.getLength(); i++) { Node node2 = nodeList.item(i);

Page 29: Java Web Service 2004Matt. 2 Outline Web Service Concept Web Service Concept Web Service and JavaWeb Service and Java XML XML XML Parsing XML Parsing

2929

System.out.println("----------------- 分割線 ---------------------"); System.out.println("getNodeName():" + node2.getNodeName()); System.out.println("getNodeValue():" + node2.getNodeValue()); System.out.println("getNodeType():" + node2.getNodeType()); System.out.println("getAttributes():" + node2.getAttributes()); } }catch (SAXParseException e1){ System.out.println(" 發生錯誤行數 : " + e1.getLineNumber()); System.out.println(" 錯誤訊息 : " + e1.getMessage()); }catch (ParserConfigurationException e2){ System.out.println(e2); }catch(Exception e3){ System.out.println(e3); } }}

Page 30: Java Web Service 2004Matt. 2 Outline Web Service Concept Web Service Concept Web Service and JavaWeb Service and Java XML XML XML Parsing XML Parsing

3030

import java.io.*;import javax.xml.parsers.*;import org.xml.sax.*;import org.w3c.dom.*;

public class BookListDOMRecursiveBookListDOMRecursive {

public static void main(String[] args){ new BookListDOMRecursive(args[0]); }

public BookListDOMRecursive(String fileName){ try{ // 取得 DocumentBuilderFactory 之物件實體 DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); // 設定判斷有效性 factory.setValidating(false); // 設定判斷命名空間 factory.setNamespaceAware(true);

Page 31: Java Web Service 2004Matt. 2 Outline Web Service Concept Web Service Concept Web Service and JavaWeb Service and Java XML XML XML Parsing XML Parsing

3131

// 設定是否忽略註解 factory.setIgnoringComments(true); // 設定是否忽略空白 factory.setIgnoringElementContentWhitespace(true); // 設定是否要展開實體參考 factory.setExpandEntityReferences(true); // 將 CDATA 結點轉換成 Text 結點 factory.setCoalescing(true); // 取得 DOM 剖析器 DocumentBuilder builder = factory.newDocumentBuilder(); // 建立 DOM 樹狀結構 Document document = builder.parse(new File(fileName)); // 取得根結點 Node node = document.getDocumentElement(); // 執行巡行 XML 文件的功能 recursiveXML(node, 0);

Page 32: Java Web Service 2004Matt. 2 Outline Web Service Concept Web Service Concept Web Service and JavaWeb Service and Java XML XML XML Parsing XML Parsing

3232

}catch (SAXParseException e1){ System.out.println(" 發生錯誤行數 : " + e1.getLineNumber()); System.out.println(" 錯誤訊息 : " + e1.getMessage()); }catch (ParserConfigurationException e2){ System.out.println(e2); }catch(Exception e3){ System.out.println(e3); } } // 遞迴函數 , 用以巡行整份 XML 文件 public void recursiveXML(Node node, int esc){ // 列印空白區隔字元 for (int k = 0; k < esc; k++) System.out.print(" "); if (node.getNodeType() == 1) { // 元素為標籤 (Element) 型態 // 列印標題名稱 System.out.print("Element: " + node.getNodeName() + "\n");

Page 33: Java Web Service 2004Matt. 2 Outline Web Service Concept Web Service Concept Web Service and JavaWeb Service and Java XML XML XML Parsing XML Parsing

3333

// 取得結點的所有子元素 NodeList nodeList = node.getChildNodes(); // 進入遞迴過程 for (int i = 0; i < nodeList.getLength(); i++) { recursiveXML(nodeList.item(i), esc + 4); } } else if (node.getNodeType() == 3) { // 元素為一般文字型態 // 列印文字內容 System.out.print("Text: " + node.getNodeValue() + "\n"); } } }

Page 34: Java Web Service 2004Matt. 2 Outline Web Service Concept Web Service Concept Web Service and JavaWeb Service and Java XML XML XML Parsing XML Parsing

3434

OutlineOutline

Web Service ConceptWeb Service Concept• Web Service and JavaWeb Service and Java

XMLXML XML ParsingXML Parsing JAXBJAXB SOAPSOAP WSDLWSDL JAX-RPCJAX-RPC SAAJSAAJ UDDIUDDI JAXRJAXR

Page 35: Java Web Service 2004Matt. 2 Outline Web Service Concept Web Service Concept Web Service and JavaWeb Service and Java XML XML XML Parsing XML Parsing

3535

JAXBJAXB :: XMLXML文件的物件化文件的物件化

Page 36: Java Web Service 2004Matt. 2 Outline Web Service Concept Web Service Concept Web Service and JavaWeb Service and Java XML XML XML Parsing XML Parsing

3636

JAXBJAXB機制是由以下三大類別所組成機制是由以下三大類別所組成• javax.xml.bindjavax.xml.bind• javax.xml.bind.utiljavax.xml.bind.util• javax.xml.bind.helperjavax.xml.bind.helper

Marshal• object ->xml

Unmarshal• xml ->object

Page 37: Java Web Service 2004Matt. 2 Outline Web Service Concept Web Service Concept Web Service and JavaWeb Service and Java XML XML XML Parsing XML Parsing

3737

ExampleExample

recommandBook.xmlrecommandBook.xml recommandBook.xsdrecommandBook.xsd

xjc recommandBook.xsdxjc recommandBook.xsd 產生產生 generated\...generated\...

若要修改若要修改 recommandBook.xmlrecommandBook.xml 檔檔• 利用利用 unmarshallerunmarshaller 物件把物件把 XMLXML轉換成轉換成 content content

treetree• 修改修改• MarshallerMarshaller 物件做正向編組物件做正向編組• 另存新檔另存新檔 .xml.xml

Page 38: Java Web Service 2004Matt. 2 Outline Web Service Concept Web Service Concept Web Service and JavaWeb Service and Java XML XML XML Parsing XML Parsing

3838

import java.io.*;import java.util.*;import javax.xml.bind.*;import javax.xml.bind.util.*;import generated.*;

public class RBookModifier { public RBookModifier(){ try { // 取得 JAXBContext 物件 , 並設定 Java 套件名稱 JAXBContext jc = JAXBContext.newInstance("generated"); // 取得提供 Unmarshal 功能的物件 Unmarshaller um = jc.createUnmarshaller(); // 指定欲 Unmarshal 的 XML 文件 , 及取得 XML 根元素 RecommandBook rb = (RecommandBook)um.unmarshal(new

FileInputStream("tempBook.xml")); // 取得 ProductsType 子元素 ProductsType rt = rb.getProducts();

Page 39: Java Web Service 2004Matt. 2 Outline Web Service Concept Web Service Concept Web Service and JavaWeb Service and Java XML XML XML Parsing XML Parsing

3939

// 取得 MainProductType 子元素 MainProductType mpt = rt.getMainProduct(); // 更改主約產品保險額度 mpt.setMpCoverage(200); // 更改主約產品保險費率 mpt.setMpFee((double)2000); // 取得驗證內容樹的物件 javax.xml.bind.Validator vt = jc.createValidator(); // 設定欲驗證之內容樹根元素 boolean b = vt.validateRoot(rb); if (b) System.out.println(" 符合有效性 "); Marshaller m = jc.createMarshaller(); m.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT,Boolean.TRUE); m.marshal(rb, new FileWriter("tempBook.xml"));;

Page 40: Java Web Service 2004Matt. 2 Outline Web Service Concept Web Service Concept Web Service and JavaWeb Service and Java XML XML XML Parsing XML Parsing

4040

}catch (Exception e){ System.out.println("Err: " + e); } } public static void main(String[] args){ new RBookModifier(); }}

Page 41: Java Web Service 2004Matt. 2 Outline Web Service Concept Web Service Concept Web Service and JavaWeb Service and Java XML XML XML Parsing XML Parsing

4141

OutlineOutline

Web Service ConceptWeb Service Concept• Web Service and JavaWeb Service and Java

XMLXML XML ParsingXML Parsing JAXBJAXB SOAPSOAP WSDLWSDL JAX-RPCJAX-RPC SAAJSAAJ UDDIUDDI JAXRJAXR

Page 42: Java Web Service 2004Matt. 2 Outline Web Service Concept Web Service Concept Web Service and JavaWeb Service and Java XML XML XML Parsing XML Parsing

4242

SOAPSOAP

SOAPSOAP被看做是實作被看做是實作 RPCRPC機制的通訊協定,也是機制的通訊協定,也是• Object remote procedure callObject remote procedure call• MessagingMessaging• xml transformxml transform

SOAP messageSOAP message包括包括• SOAP envelopeSOAP envelope• SOAP encoding rulesSOAP encoding rules• SOAP RPC representationSOAP RPC representation

SOAP message

HTTP protocol

XML content

TCP/IP protocol

Page 43: Java Web Service 2004Matt. 2 Outline Web Service Concept Web Service Concept Web Service and JavaWeb Service and Java XML XML XML Parsing XML Parsing

4343

OutlineOutline

Web Service ConceptWeb Service Concept• Web Service and JavaWeb Service and Java

XMLXML XML ParsingXML Parsing JAXBJAXB SOAPSOAP WSDLWSDL JAX-RPCJAX-RPC SAAJSAAJ UDDIUDDI JAXRJAXR

Page 44: Java Web Service 2004Matt. 2 Outline Web Service Concept Web Service Concept Web Service and JavaWeb Service and Java XML XML XML Parsing XML Parsing

4444

WSDLWSDL

WSDLWSDL只是說明存取某一服務的通訊協只是說明存取某一服務的通訊協定,定, function namefunction name,參數型態等資訊,參數型態等資訊

W3CW3C 對對 SOASOA架構的規範,描述服務的完整資訊架構的規範,描述服務的完整資訊包括包括• AgreementAgreement• RelationshipRelationship• detaildetail

Page 45: Java Web Service 2004Matt. 2 Outline Web Service Concept Web Service Concept Web Service and JavaWeb Service and Java XML XML XML Parsing XML Parsing

4545

business

service

composition

orchestration

presentation

policy

Implementation description

Interfacedescription

WSDL

Page 46: Java Web Service 2004Matt. 2 Outline Web Service Concept Web Service Concept Web Service and JavaWeb Service and Java XML XML XML Parsing XML Parsing

4646

WSDL SpecWSDL Spec

六個元素六個元素• ServicesServices• PortPort• TypesTypes• MessageMessage• PortTypePortType• BindingBinding

ImplementationDescription

InterfaceDescription

Page 47: Java Web Service 2004Matt. 2 Outline Web Service Concept Web Service Concept Web Service and JavaWeb Service and Java XML XML XML Parsing XML Parsing

4747

TypesTypes

執行訊息交換時新增的資料型態執行訊息交換時新增的資料型態 XML SchemaXML Schema

<types><types>

<myNewType/><myNewType/>

</types></types>

Page 48: Java Web Service 2004Matt. 2 Outline Web Service Concept Web Service Concept Web Service and JavaWeb Service and Java XML XML XML Parsing XML Parsing

4848

MessageMessage

那些資訊需要傳輸那些資訊需要傳輸

Page 49: Java Web Service 2004Matt. 2 Outline Web Service Concept Web Service Concept Web Service and JavaWeb Service and Java XML XML XML Parsing XML Parsing

4949

PortTypePortType

定義定義Web ServiceWeb Service傳送接收的作業傳送接收的作業• Function nameFunction name• ParameterParameter

Page 50: Java Web Service 2004Matt. 2 Outline Web Service Concept Web Service Concept Web Service and JavaWeb Service and Java XML XML XML Parsing XML Parsing

5050

BindingBinding

SOAP BindingSOAP Binding HTTP Get/Post BindingHTTP Get/Post Binding MIME BindingMIME Binding

Page 51: Java Web Service 2004Matt. 2 Outline Web Service Concept Web Service Concept Web Service and JavaWeb Service and Java XML XML XML Parsing XML Parsing

5151

PortPort

提供提供Web ServiceWeb Service的端點位置的端點位置

Page 52: Java Web Service 2004Matt. 2 Outline Web Service Concept Web Service Concept Web Service and JavaWeb Service and Java XML XML XML Parsing XML Parsing

5252

ServiceService

可利用可利用 ServiceService把所有把所有 portport包起來包起來

Page 53: Java Web Service 2004Matt. 2 Outline Web Service Concept Web Service Concept Web Service and JavaWeb Service and Java XML XML XML Parsing XML Parsing

5353

OutlineOutline

Web Service ConceptWeb Service Concept• Web Service and JavaWeb Service and Java

XMLXML XML ParsingXML Parsing JAXBJAXB SOAPSOAP WSDLWSDL JAX-RPCJAX-RPC SAAJSAAJ UDDIUDDI JAXRJAXR

Page 54: Java Web Service 2004Matt. 2 Outline Web Service Concept Web Service Concept Web Service and JavaWeb Service and Java XML XML XML Parsing XML Parsing

5454

JAX-RPCJAX-RPC

以以 JAX-RPCJAX-RPC來實作來實作Web ServiceWeb Service中的中的 SOAPSOAP 及及WSDLWSDL機制機制

JAX-RPC runtimeJAX-RPC runtime指的就是應用程式伺服器指的就是應用程式伺服器

Page 55: Java Web Service 2004Matt. 2 Outline Web Service Concept Web Service Concept Web Service and JavaWeb Service and Java XML XML XML Parsing XML Parsing

5555

Static StubStatic Stubpackage freejavaman;

import javax.xml.rpc.Stub;

public class HelloWorld_RPC_Client {

public static void main(String[] args) { try { // 取得 Stub 介面 Stub stub = (Stub)(new MyHelloWorld_Impl().

getHelloWorld_RPC_InterfacePort()); // 強制轉換成伺服端介面 HelloWorld_RPC_Interface hello = (HelloWorld_RPC_Interface)stub; // 使用 WEB Service 服務 System.out.println(hello.sayHello("FreeJavaMan")); } catch (Exception e) { System.out.println(e); } }}

Page 56: Java Web Service 2004Matt. 2 Outline Web Service Concept Web Service Concept Web Service and JavaWeb Service and Java XML XML XML Parsing XML Parsing

5656

Dynamic StubDynamic Stubpackage freejavaman;

import java.net.URL;import javax.xml.rpc.Service;import javax.xml.rpc.JAXRPCException;import javax.xml.namespace.QName;import javax.xml.rpc.ServiceFactory;

public class HelloWorld_Proxy_Client {

public static void main(String[] args) { try { String UrlString = "http://localhost:8080/myWS/hello?WSDL"; String nameSpaceUri = "http://com.test/wsdl/MyHelloWorld"; String serviceName = "MyHelloWorld"; String portName = "HelloWorld_RPC_InterfacePort";

URL helloWsdlUrl = new URL(UrlString); // 取得對映至伺服端的 Service 物件 ServiceFactory serviceFactory = ServiceFactory.newInstance();

Page 57: Java Web Service 2004Matt. 2 Outline Web Service Concept Web Service Concept Web Service and JavaWeb Service and Java XML XML XML Parsing XML Parsing

5757

Dynamic StubDynamic StubService helloService = serviceFactory.createService(helloWsdlUrl, new QName(nameSpaceUri, serviceName)); // 取得遠端服務介面 HelloWorld_RPC_Interface myProxy = (HelloWorld_RPC_Interface) helloService.getPort(new QName(nameSpaceUri, portName), freejavaman.HelloWorld_RPC_Interface.class);

System.out.println(myProxy.sayHello(" Allan")); } catch (Exception e) { System.out.println(e); } } }

Page 58: Java Web Service 2004Matt. 2 Outline Web Service Concept Web Service Concept Web Service and JavaWeb Service and Java XML XML XML Parsing XML Parsing

5858

Dynamic Invocation Interface (DII)Dynamic Invocation Interface (DII)package freejavaman;

import javax.xml.rpc.Call;import javax.xml.rpc.Service;import javax.xml.rpc.JAXRPCException;import javax.xml.namespace.QName;import javax.xml.rpc.ServiceFactory;import javax.xml.rpc.ParameterMode;

public class HelloWorld_Dynamic_Client {

private static String endpoint = "http://127.0.0.1:8080/myWS/hello"; private static String qnameService = "MyHelloWorld"; private static String qnamePort = "HelloWorld_RPC_InterfacePort"; private static String BODY_NAMESPACE_VALUE =

"http://com.test/wsdl/MyHelloWorld"; private static String ENCODING_STYLE_PROPERTY =

"javax.xml.rpc.encodingstyle.namespace.uri"; private static String NS_XSD = "http://www.w3.org/2001/XMLSchema";

Page 59: Java Web Service 2004Matt. 2 Outline Web Service Concept Web Service Concept Web Service and JavaWeb Service and Java XML XML XML Parsing XML Parsing

5959

Dynamic Invocation Interface (DII)Dynamic Invocation Interface (DII)private static String URI_ENCODING =

"http://schemas.xmlsoap.org/soap/encoding/";

public static void main(String[] args) { try { // 取得伺服器上的 Service ServiceFactory factory = ServiceFactory.newInstance(); Service service = factory.createService(new QName(qnameService)); QName port = new QName(qnamePort); Call call = service.createCall(port); call.setTargetEndpointAddress(endpoint); // 設定遠端呼叫之基本參數值 call.setProperty(Call.SOAPACTION_USE_PROPERTY, new Boolean(true)); call.setProperty(Call.SOAPACTION_URI_PROPERTY, ""); call.setProperty(ENCODING_STYLE_PROPERTY, URI_ENCODING);

Page 60: Java Web Service 2004Matt. 2 Outline Web Service Concept Web Service Concept Web Service and JavaWeb Service and Java XML XML XML Parsing XML Parsing

6060

Dynamic Invocation Interface (DII)Dynamic Invocation Interface (DII) // 設定回傳型態 QName QNAME_TYPE_STRING = new QName(NS_XSD, "string"); call.setReturnType(QNAME_TYPE_STRING); // 設定 WEB Service 函數名稱 call.setOperationName(new QName(BODY_NAMESPACE_VALUE, "sayHello")); call.addParameter("String_1", QNAME_TYPE_STRING, ParameterMode.IN); // 呼叫遠端函數 String[] params = { " Everybody" }; String result = (String)call.invoke(params); // 顯示執行結果 System.out.println(result);

} catch (Exception e) { System.out.println(e); } }}

Page 61: Java Web Service 2004Matt. 2 Outline Web Service Concept Web Service Concept Web Service and JavaWeb Service and Java XML XML XML Parsing XML Parsing

6161

OutlineOutline

Web Service ConceptWeb Service Concept• Web Service and JavaWeb Service and Java

XMLXML XML ParsingXML Parsing JAXBJAXB SOAPSOAP WSDLWSDL JAX-RPCJAX-RPC SAAJSAAJ UDDIUDDI JAXRJAXR