Web import javax jws Web Service public class
復習:Webサービスの構築開始 import javax. jws. *; @Web. Service public class Hello { public String say. Hello( String name ) { return “Hello, ” + name; } }
自動生成(wsgenツール) javac hello/Hello. java wsgen -cp. hello. Hello hello. jaxws 以下に say. Hello. java, say. Hello. Response. java say. Hello. class say. Hello. Response. class (Hello. Service. wsdl, Hello. Service. Types. xsd)
クライアントプログラムの準備 自動生成ツール wsimport Hello. Service. wsdl または wsimport http: //localhost/Service? wsdl Hello. class, Hello. Service. class, Object. Factory. class Say. Hello. class, Say. Hello. Response. class
生成されたクラスの正体は? ツール javap (単純な逆アセンブラ) javap Hello interface Hello javap Hello. Service class extends javax. xml. ws. Service javap say. Hello class say. Hello javap say. Hello. Response class say. Hello. Response
クライアントプログラムの作成 public class Hello. Client { public static void main ( String[] args ) { Hello. Service service = new Hello. Service(); Hello hello = service. get. Hello. Port(); String message =hello. say. Hello( "Tatsuo" ); System. out. printf ( message ); }
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>
SOAPMessageの例(Hello) <SOAP-ENV: Envelope xmlns: SOAP-ENV= "http: //schemas. xmlsoap. org/soap/envelope/ "> <SOAP-ENV: Body> <say. Hello> <arg 0>Tomoharu</arg 0> </say. Hello> </SOAP-ENV: Body> </SOAP-ENV: Envelope>
SOAPMessageの例(Hello) <SOAP-ENV: Envelope xmlns: SOAP-ENV= "http: //schemas. xmlsoap. org/soap/envelope/ "> <SOAP-ENV: Body> <say. Hello. Response> <return>Hello, Tomoharu</return> </say. Hello. Response> </SOAP-ENV: Body>
Java SE 6 : javax. xml. soap SOAPMessage クラス SOAPのメッセージを表す(送受信とも) get. SOAPHeader(), get. SOAPBody(), add. Attachment(), get. Attachment() など、メッセージ操作のメソッド群 SOAPConnection クラス 通信を実行 call() メソッド SOAPMessage response = sc. call( SOAPMessage request, Object url );
Java SE 6 : javax. xml. soap いずれもFactoryのパターンで利用 Message. Factory mf = Message. Factory. new. Instance(); SOAPMessage request = mf. create. Message( new Mime. Headers(), new File. Input. Stream( source ) ); SOAPConnection. Factory scf = SOAPConnection. Factory. new. Instance() SOAPConnection connection = scf. create. Connection();
サンプルソース(1) import java. io. *; import javax. xml. soap. *; public class SOAPTest { public static void main( String[] args ) { String url = "http: //localhost: 8080/Hello. Service/hello"; String source = "hello. xml";
サンプルソース(2) Message. Factory mf = Message. Factory. new. Instance(); SOAPMessage request = mf. create. Message( new Mime. Headers(), new File. Input. Stream( source ) );
サンプルソース(3) SOAPConnection. Factory scf = SOAPConnection. Factory. new. Instance(); SOAPConnection connection = scf. create. Connection(); SOAPMessage response = connection. call( request, url ); response. write. To( System. out ); }
- Slides: 28