応用Java (Java/XML)

Download Report

Transcript 応用Java (Java/XML)

第13回 2007年7月20日




「XMLパーサ」-- Java でXMLを処理
javax.xml.stream パッケージのパーサ
SAX(Simple API for XML) のパーサ
DOM(Document Object Model)のパーサ
パーサの応用 :
検索,フィルタ的な処理 、視覚化
パーサの上位のサービス
XPath , XSLT
スキーマ言語と妥当性の検証
JAXB( Javaとスキーマとの変換)
XPath (6/15)
XSLT (6/22)
 名前空間(Namespace) (6/22)
 XML文書の妥当性の検証(6/29)
XML Schema
 JAXB (7/6, 7/13)
 SOAP, Webサービ(7/20)
 試験(7/27)






SOAPメッセージ
javax.xml.soap パッケージ
SOAPとWebサービス
SOAPとWSDL
(Web Service Definition Language)

ツール schemagen
schemagen persen/*.java

サンプルでは
person.Person.java , person.Name.java




package person;
package jp.ac.wakhok.tatsuo;
クラスを分類する仕組み
階層を持つ「住所」のようなもの
Name

複数の Name クラスが登場
. --+-- Name.java (パッケージなし)
|
+-- person --+-- Name.java( パッケージあり)

混乱なく区別するために(パッケージ名から)
Name name = new Name();
person.Name name = new person.Name();

常にカレントディレクトリ(.) でOK
vi Name.java
javac Name.java
java Name

パッケージ=ディレクトリを意識
cd person
vi Name.java
cd ..
javac person/Name.java
java person.Name



パッケージ=ディレクトリをたどるスタ
ート地点を指定
通常はカレント ( . ) が基本
複数の場所を指定も可能
CLASSPATH=.:/usr/java/lib:../..
(Windows では区切り文字は ; になる)
パーサ(最下層の字句解析) SAX, DOM
javax.xml.stream
 一般的なXML処理
検索(XPath)、変換(XSLT), JAXB
 スキーマ言語( W3C XML Schema)
 メッセージの交換(SOAP)
 Webサービスなど

XMLの形式でメッセージを交換
 中立なデータ形式(事実上の標準)
システム、言語、アプリケーション非依存
http://www.w3.org/2000/xp/Group/
 メッセージが「構造」を持つ
データ構造の定義は XML Schema で
処理の呼び出しも表現(JAX-RPC)

SOAP(Simple Object Access Protocol)
登場当時の認識
 現在では広範囲の応用範囲を支える基礎
技術
「SOAP は SOAP」

<SOAP-ENV:Envelope
xmlns:SOAP-ENV=
“ http://schemas.xmlsoap.org/soap/envelope/”>
<SOAP-ENV:Header>
</SOAP-ENV:Header>
<SOAP-ENV:Body>
<mymessage> Hello </mymessage>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
<SOAP-ENV:Envelope
xmlns:SOA-ENV
="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:xsi="http://www.w3.org/1999/XMLSchema-instance"
xmlns:xsd="http://www.w3.org/1999/XMLSchema">
<SOAP-ENV:Body>
<ns1:doGoogleSearch
xmlns:ns1="urn:GoogleSearch“
SOAP-ENV:encodingStyle=
"http://schemas.xmlsoap.org/soap/encoding/">
<key xsi:type="xsd:string">
8NfcnBhQFHL4QZbU3pX21B7NVhVZ+R+a</key>
<q xsi:type="xsd:string">Tatsuo Ueda</q>

Google Web Service の定義(WSDL)から
<message name="doSpellingSuggestion">
<part name="key" type="xsd:string"/>
<part name="phrase“ type="xsd:string"/>
</message>
メソッドの呼び出しを表現
<message
name="doSpellingSuggestionResponse">
<part name="return“ type="xsd:string"/>
</message>
メソッドの返り値を表現
<operation name="doSpellingSuggestion">
<input message="typens:doSpellingSuggestion"/>
<output
message="typens:doSpellingSuggestionResponse"/>
</operation>
xsd:string -> Java の Stringクラス
String result
= doSpellingSuggestion( String key, String phrase );
複雑な型は Schema で定義可能
(Javaのクラスに対応)

<xsd:complexType name="ResultElement">
<xsd:all>
<xsd:element name="URL“ type="xsd:string"/>
<xsd:element name="title" type="xsd:string"/>
:
</xsd:all>
</xsd:complexType>


SOAPMessage クラス
SOAPのメッセージを表す(送受信とも)
getSOAPHeader(), getSOAPBody(),
addAttachment(), getAttachment()
など、メッセージ操作のメソッド群
SOAPConnection クラス
通信を実行 call() メソッド
SOAPMessage response
= sc.call( SOAPMessage request, Object url );

SOAPMessage, SOAPConnection
いずれもFactoryのパターンで利用
MessageFactory mf
= MessageFactory.newInstance();
SOAPMessage request
= mf.createMessage( new MimeHeaders(),
new FileInputStream( source ) );
SOAPConnectionFactory scf
= SOAPConnectionFactory.newInstance()
SOAPConnection connection = scf.createConnection();




簡単なオンラインの試験(実習室、LMS)
登場した用語とその意味(用途、存在理由)
「パーサ」「XPath」「XSLT」「SOAP」
「スキーマ言語」「妥当性」
Javaの処理とパッケージ
javax.xml.stream, javax.xml.stream.events
javax.xml.binding, javax.xml.namespace
どんな用途で、どんなクラスがあったか?
試験+13回の課題提出で評価