• 検索結果がありません。

JavaとVisual Basicを使ったWebサービスの実装

N/A
N/A
Protected

Academic year: 2021

シェア "JavaとVisual Basicを使ったWebサービスの実装"

Copied!
27
0
0

読み込み中.... (全文を見る)

全文

(1)

JavaとVisual Basicを使ったWebサービスの実装

平成13年11月5日

日立ソフトウェアエンジニアリング株式会社

研究部 技師

俊也

moto@sag.hitachi-sk.co.jp

http://www.hitachi-sk.co.jp/

(2)

Webサービスとは?

Webブラウザ

マウスクリックで

Webサーバ

サービスを利用

従来のWebコンピューティング

新しいWebコンピューティング

SOAPクライアント

Webサーバ

プログラムから サービスを呼び出し Webサービス Webサービスを提供する プログラムで自動回答

Webサービス化

(3)

Webサービスの意義

SOAPの登場

・MicrosoftとIBMの歴史的合意

・新しい分散コンピューティングの時代へ

Webサービス夜明け前

・複数のWebシステムのエレガントな連携

・コアテクノロジーは、SOAP, UDDI, WSDL

・EJBコンポーネントの流通(流用)の可能性

携帯Javaももちろん重要

Javaから卒業する時が来た!

Javaが育んだ新技術が次の時代を支える!

(4)

Assam Commerce Server

の概要

インターネットを利用した商品販売サービスや会員

制サービスなどを構築するのに必要なコンポーネン

トを提供するECサイト構築のためのサーバ・パッ

ケージ。

豊富なフロントエンド機能、運用管理を強力にサ

ポートするバックエンド機能にクレジット、銀行振込、

コンビニエンスストアの店頭収納など多くの決済手

段をサポート。

インターネットを活用した新しい顧客との接点を効

率良く築くことができる、Eコマース業務の完成形。

(5)

Assam Commerce Server

の構成

コンシューマ

コンシューマ

コンシューマ

プレゼンテーション

プレゼンテーション

フロントコンポーネント

フロントコンポーネント

商品カタログ

・カテゴリ分類/検索

・商品検索

会員管理

ショッピングカート

クーポン(ポイント)

カスタマーレビュー

バックオフィスコンポーネント

バックオフィスコンポーネント

XMLによる データ交換 XML XMLにによるよる データ交換 データ交換

決済サービス

決済サービス

発注サービス

発注サービス

・ ・CyberCashCyberCash ・ ・SEJSEJ

ショップHOME

テンプレート

カタログテンプレート

入会テンプレート

ログイン(認証)

テンプレート

ショッピングカート

テンプレート

カスタマーレビュー

テンプレート

納期問合せ

テンプレート

納期問合せ

業者向機能

オーダー管理

発注

集計機能

決済

・クレジットカード ・店頭収納(コンビニ) ・銀行振込

メール配信

Ariba連携機能 B2B B2C

法人企業

法人企業

B2C B2B

法人会員機能

マーケットプレース マーケットプレース 連携サービス 連携サービス ・

Ariba BuyerAriba Buyer B2B

(6)

商品検索

@Buy24 ポータル

(7)

「翻訳の王様」を検索

@buy24 検索結果

(8)

パイロットシステムの構成

Webサービスを提供するサーバ

Sun Enterprise 250, Solaris 8 IBM WebSphere 3.5.4

IBM HTTP Server (Apache 1.3.12 ) Apache SOAP 2.2 rpcrouter の部分がWebサービスを 実装しているコンポーネント SearchForSoapクラス ・searchメソッド ・searchItemメソッ ド @Buy24-Softwareオンラインショピングサイト (Assam Commerce Server 4.00)

商品検索クラス

Windows 2000

Visual Basicアプリケーション Microsoft SOAP Toolkit 2.0 Windows 2000 Javaアプリケーション Apache SOAP 2.2

SOAP

SOAP

DB

(9)

Javaクライアントの画面

(10)
(11)
(12)
(13)

MS SOAP Toolkit 2.0のしかけ

COM

WSDL

WSML

ASP

WSDLGEN

入力

生成

既存のCOM(DLL)

IIS

ツール

MSSOAP.SoapClient

(Webサービス)

COM

クライアント

(VB6.0)

COM

MSSOAP.SoapServer

(14)

高レベルAPIと低レベルAPI

SOAP Toolkit 2.0における2種類の実装

■ 高レベルAPI

・ WSDLに基づきWebサービスにアクセス

・ 数ステップのコードを記述

→ SOAP仕様の知識不要。

・ 対応できないSOAPメッセージあり

■ 低レベルAPI

・ WSDLは使用しない

・ SOAPメッセージを順次解析するコードを記述

→ コード記述量大。SOAP仕様の知識必須。

・ ほとんどのSOAPメッセージに対応可

→ 構造体の配列 etc.

(15)

VB6で記述したダミーWebサービス

Option Explicit

Public Function search(ByVal keyword As String) As String()

Dim retStr(9) As String

Dim i As Integer

For i = 0 To 9

retStr(i) = keyword + CStr(i)

Next i

search = retStr

End Function

ダミーの検索結果

サービスのインタフェース

COM

ビルドして、ActiveXコントロール(COM DLL)化

(WSDLGENを使うためにはCOMが必要)

search.Search1

(16)

自動生成したWSDL(1/3)

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

<!-- Generated 08/21/01 by Microsoft SOAP Toolkit WSDL File Generator, Version 1.02.813.0 --> <definitions name ='Search' targetNamespace = 'http://tempuri.org/wsdl/'

xmlns:wsdlns='http://tempuri.org/wsdl/' xmlns:typens='http://tempuri.org/type' xmlns:soap='http://schemas.xmlsoap.org/wsdl/soap/' xmlns:xsd='http://www.w3.org/2001/XMLSchema' xmlns:stk='http://schemas.microsoft.com/soap-toolkit/wsdl-extension' xmlns='http://schemas.xmlsoap.org/wsdl/'> <types> <schema targetNamespace='http://tempuri.org/type' xmlns='http://www.w3.org/2001/XMLSchema' xmlns:SOAP-ENC='http://schemas.xmlsoap.org/soap/encoding/' xmlns:wsdl='http://schemas.xmlsoap.org/wsdl/' elementFormDefault='qualified'>

<complexType name ='ArrayOfstring'> <complexContent>

<restriction base='SOAP-ENC:Array'>

ネームスペースが

http://tempuri.org/∼

(17)

自動生成したWSDL(2/3)

</restriction> </complexContent> </complexType> </schema> </types> <message name='Search1.search'>

<part name='keyword' type='xsd:string'/> </message>

<message name='Search1.searchResponse'>

<part name='Result' type='typens:ArrayOfstring'/> </message>

<portType name='Search1SoapPort'>

<operation name='search' parameterOrder='keyword'> <input message='wsdlns:Search1.search' />

<output message='wsdlns:Search1.searchResponse' /> </operation>

</portType>

<binding name='Search1SoapBinding' type='wsdlns:Search1SoapPort' >

引数の名前と型

(18)

<soap:binding style='rpc' transport='http://schemas.xmlsoap.org/soap/http' /> <operation name='search' >

<soap:operation soapAction='http://tempuri.org/action/Search1.search' /> <input>

<soap:body use='encoded' namespace='http://tempuri.org/message/'

encodingStyle='http://schemas.xmlsoap.org/soap/encoding/' /> </input>

<output>

<soap:body use='encoded' namespace='http://tempuri.org/message/'

encodingStyle='http://schemas.xmlsoap.org/soap/encoding/' /> </output>

</operation> </binding>

<service name='Search' >

<port name='Search1SoapPort' binding='wsdlns:Search1SoapBinding' > <soap:address location='http://localhost/Search/Search.ASP' /> </port> </service>

自動生成したWSDL(3/3)

サービスの名称

SOAPリスナのロケーション

ポートの名称(WSMLと対応をとる)

このネームスペースは、Apache SOAP接続時は変更要

(19)

自動生成したWSML

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

<!-- Generated 08/21/01 by Microsoft SOAP Toolkit WSDL File Generator, Version 1.02.813.0 -->

<servicemapping name='Search'> <service name='Search'>

<using PROGID='search.Search1' cachable='0' ID='Search1Object' /> <port name='Search1SoapPort'>

<operation name='search'>

<execute uses='Search1Object' method='search' dispID='1610809344'> <parameter callIndex='1' name='keyword' elementName='keyword' /> <parameter callIndex='-1' name='retval' elementName='Result' /> </execute> </operation> </port> </service> </servicemapping>

ポートの名称

COM呼び出しのインタフェース

(Apache SOAPサーバでは不要)

COMの指定

COM

既存のCOM

search.Search1

(20)

Apache SOAPとMS SOAPの接続

Apache

Apache

SOAP

rpc

router

SearchForItem

クラス

MSSOAP.SoapClient

COM

クライアント

(VB6.0)

SOAP

/HTTP

HTTP

クライアント

(Java)

WSDL

DD.xml

(21)

Apache SOAPサーバへ接続するコード

Dim ogSOAP As SoapClient Set ogSOAP = New SoapClient On Error Resume Next

Call ogSOAP.mssoapinit("http://miffy.tir.hitachi-sk.co.jp/soap/wsdl/Search.wsdl", "Search", "Search1SoapPort")

If Err <> 0 Then

MsgBox "mssoapinit = " & Err.Description, , "initialization failed" Exit Sub

End If

Dim strDup() As String

strDup = ogSOAP.search(SearchForm.GetKeyword()) If Err <> 0 Then

MsgBox "search = " & Err.Description, , "search failed" Exit Sub End If

Webサービスメソッドの呼び出し

WSDLの解析

(Visual Basic 6.0)

※ 同一のコードで、MS SOAPサーバへも接続可能

(22)

Apache SOAPサーバ側の修正

■ WSDLファイル中のnamespace指定の変更

http://tempuri.org/message/’ → ‘urn:acs:search’

DD.XMLの記述に合わせる

■ DD.XMLファイルでdeserializerの登録

<keyword>翻訳の王様</keyword>

<isd:mappings>

<isd:map

encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"

xmlns:x="" qname="x:keyword"

xml2JavaClassName="org.apache.soap.encoding.soapenc.StringDeserial

izer"/>

</isd:mappings>

(23)

VBクライアントからのリクエスト

デフォルト(tempuri.org)のままでは、

サーバ側が理解不能

(24)
(25)

御参考

.NET SOAPプロキシ(1/2)

WSDL

ツール

C♯(VB.NETも可)

WSDL

SOAPプロキシソースコード

using System.Diagnostics; using System.Xml.Serialization; using System; using System.Web.Services.Protocols; using System.Web.Services; [System.Web.Services.WebServiceBindingAttribute(Name="Search1SoapBinding", Namespace="http://tempuri.org/wsdl/")]

public class Search : System.Web.Services.Protocols.SoapHttpClientProtocol { [System.Diagnostics.DebuggerStepThroughAttribute()]

public Search() {

this.Url = " miffy.tir.hitachi-sk.co.jp /soap/servlet/rpcrouter"; }

(26)

.NET SOAPプロキシ(1/2)

[System.Diagnostics.DebuggerStepThroughAttribute()]

[System.Web.Services.Protocols.SoapRpcMethodAttribute("http://tempuri.org/action/Search 1.search", RequestNamespace="urn:acs:search", ResponseNamespace="urn:acs:search")]

[return: System.Xml.Serialization.SoapElementAttribute("Result")] public string[] search(string keyword) {

object[] results = this.Invoke("search", new object[] { keyword}); return ((string[])(results[0])); }

(非同期呼び出しメソッドは省略)

object[] retItems;

Search foo = new Search ();

retItems = foo.search(“翻訳の王様”);

C♯

(27)

まとめ

現実には、WSDLが使えない場合が多い

・ Javaクライアントは、WSDLを使えない

・ WSDLGENは、WSDL中に構造体の配列を記述できない

→ MS SOAPでも、低レベルAPIを使用せざるおえない

MS SOAP Toolkitは、 .NETへ移行

・ ASP.NETは、.NETのサーバサイドテクノロジ

→ サーバがMS製品でなければ使えない

→ セッション、トランザクションが扱える

・ .NET FrameworkでSOAPを扱う

→ System.Web.Services.Protcols.SoapXXXX

→ ‘属性‘でSOAPメッセージの一部を変更可能

※ 記載されている会社名、製品名は各社の登録商標または商標です。

参照

関連したドキュメント

自分で作る!オリジナルメッセージカード対象商品

スライダは、Microchip アプリケーション ライブラリ で入手できる mTouch のフレームワークとライブラリ を使って実装できます。 また

FSIS が実施する HACCP の検証には、基本的検証と HACCP 運用に関する検証から構 成されている。基本的検証では、危害分析などの

Description of good(s); HS tariff classification number. 産品ごとの品番(必要に応じ)、包装の記号・番号、包装の個数・種類、品

(3) 貨物の性質、形状、機能、品質、用途その他の特徴を記載した書類 商品説明書、設計図面等. (4)

61類~63類の繊維製品に縫糸( HS52.04 、 54.01 、 55.08 の縫糸又は HS54.02

化学品を危険有害性の種類と程度に より分類、その情報が一目でわかる ようなラベル表示と、 MSDS 提供を実 施するシステム。. GHS

○炭素とイオン成分は、Q の Mass を用いて構成比を算出 ○金属成分は、PF の Mass