4.5.3 サービス定義から生成したクライアントスタブの使用例
クライアントスタブの使用例を次に示します。
この例で呼び出すSPP.NETのサービスメソッドの情報は次のとおりです。
-
サービスグループ名:SVGRP1
-
サービス定義名称:GYOUMU1
-
呼び出すサービスメソッド名(サービス名):GETDATA1
-
入力用カスタムレコードクラス名:in_data
-
出力用カスタムレコードクラス名:out_data
なお,コメント中の(1),(2)などは「4.5.2 クライアントスタブの使用方法」の説明の番号に対応しています。
- 〈この項の構成〉
(1) サービス定義の定義例(C#の場合)
(a) サービス定義の定義例(業務1のサービス定義)
#include "mydata.h" /* 業務1のサービス定義 */ interface GYOUMU1 { GETDATA1(in_data, out_data); GETDATA2(in_data, out_data2); }
(b) データ型定義の定義例(mydata.h)
struct in_data { long i_basho[3]; long i_kakaku; }; struct out_data { char o_name[20]; char o_basho[16]; long o_kakaku; char o_inf[80]; }; struct out_data2 { int o_count; struct data { char o_name[20]; char o_basho[16]; long o_kakaku; char o_inf[80]; } data_t[100]; };
(2) カスタムレコードクラスの出力例(C#の場合,in_data.cs)
using Hitachi.OpenTP1.Common; namespace MyCompany { public class in_data : RecordImpl { public in_data() : base("default") { … } public in_data(string recordName) : base(recordName) { … } … private int[] _i_basho; public int[] i_basho { get { return _i_basho; } set { _i_basho = value; } } private int _i_kakaku = 0; public int i_kakaku { get { return _i_kakaku; } set { _i_kakaku = value; } } … } }
(3) クライアントスタブの使用例(SPP.NET,C#の場合)
using System; using Hitachi.OpenTP1; using Hitachi.OpenTP1.Server; namespace MyCompany { public class CallerSample2Impl : SPPBase, ICallerSample2 { private GYOUMU1Stub server = null; … public override void InitializeSPP() { // (1) クライアントスタブの生成 server = new GYOUMU1Stub("SVGRP1"); } public override void FinalizeSPP() { server = null; } [TP1RpcMethod] public string CallGETDATA1() { string ret; try { // (2) 入力用カスタムレコードの生成 in_data inRecord = new in_data(); // (2) 出力用カスタムレコードの生成 out_data outRecord = new out_data(); inRecord.i_basho[0] = 56; // (3) 入力データの設定 inRecord.i_basho[1] = 43; // (3) 入力データの設定 inRecord.i_basho[2] = 18; // (3) 入力データの設定 // (4) 同期応答型RPCに設定 server.Flags = TP1ServerFlags.DCNOFLAGS; // (5) GETDATA1を呼び出す server.GETDATA1(inRecord, outRecord); // (6) 応答データの取り出し ret = outRecord.o_name.Trim(); return ret; } catch (TP1UserException exp) { // GETDATA1()からユーザ例外がスローされた } catch (TP1RemoteException exp) { // GETDATA1()で予期しない例外発生 } catch (TP1ServerException exp) { // OpenTP1(クラスライブラリ)が検知したエラー } catch (TP1Exception exp) { // その他OpenTP1が検知したエラー } catch (Exception exp) { // 予期しない例外 } } } }
(4) クライアントスタブの使用例(SPP.NET,J#の場合)
package MyCompany; import System.*; import Hitachi.OpenTP1.*; import Hitachi.OpenTP1.Server.*; public class CallerSample2Impl extends SPPBase implements ICallerSample2 { private GYOUMU1Stub server = null; … public void InitializeSPP() throws TP1ServerException { // (1) クライアントスタブの生成 server = new GYOUMU1Stub("SVGRP1"); } public void FinalizeSPP() { server = null; } /** @attribute TP1RpcMethod() */ public String CallGETDATA1() { String ret; try { // (2) 入力用カスタムレコードの生成 in_data inRecord = new in_data(); // (2) 出力用カスタムレコードの生成 out_data outRecord = new out_data(); inRecord.get_i_basho()[0] = 56; // (3) 入力データの設定 inRecord.get_i_basho()[1] = 43; // (3) 入力データの設定 inRecord.get_i_basho()[2] = 18; // (3) 入力データの設定 // (4) 同期応答型RPCに設定 server.set_Flags(TP1ServerFlags.DCNOFLAGS); // (5) GETDATA1を呼び出す server.GETDATA1(inRecord, outRecord); // (6) 応答データの取り出し ret = outRecord.get_o_name().trim(); return ret; } catch (TP1UserException exp) { // GETDATA1()からユーザ例外がスローされた } catch (TP1RemoteException exp) { // GETDATA1()で予期しない例外発生 } catch (TP1ServerException exp) { // OpenTP1(クラスライブラリ)が検知したエラー } catch (TP1Exception exp) { // その他OpenTP1が検知したエラー } catch (System.Exception exp) { // 予期しない例外 } } }
(5) クライアントスタブの使用例(SPP.NET,Visual Basicの場合)
Imports System Imports Hitachi.OpenTP1 Imports Hitachi.OpenTP1.Server Namespace MyCompany Public Class CallerSample2Impl Inherits SPPBase Implements ICallerSample2 Private server As GYOUMU1Stub … Public Overrides Sub InitializeSPP() ' (1) クライアントスタブの生成 server = New GYOUMU1Stub("SVGRP1") End Sub Public Overrides Sub FinalizeSPP() server = Nothing End Sub <TP1RpcMethod()> _ Public Function CallGETDATA1 () As String _ Implements ICallerSample2.CallGETDATA1 Try Dim ret As String ' (2) 入力用カスタムレコードの生成 Dim inRecord As in_data = New in_data() ' (2) 出力用カスタムレコードの生成 Dim outRecord As out_data = New out_data() inRecord.i_basho(0) = 56 ' (3) 入力データの設定 inRecord.i_basho(1) = 43 ' (3) 入力データの設定 inRecord.i_basho(2) = 18 ' (3) 入力データの設定 ' (4) 同期応答型RPCに設定 server.Flags = TP1ServerFlags.DCNOFLAGS ' (5) GETDATA1を呼び出す server.GETDATA1(inRecord, outRecord) ' (6) 応答データの取り出し ret = outRecord.o_name.Trim() Catch exp As TP1UserException ' GETDATA1()からユーザ例外がスローされた Catch exp As TP1RemoteException ' GETDATA1()で予期しない例外発生 Catch exp As TP1ServerException ' OpenTP1(クラスライブラリ)が検知したエラー Catch exp As TP1Exception ' その他OpenTP1が検知したエラー Catch exp As Exception ' 予期しない例外 End Try End Function End Class End Namespace
(6) クライアントスタブの使用例(SUP.NET,C#の場合)
using System; using Hitachi.OpenTP1; using Hitachi.OpenTP1.Server; namespace MyCompany { public class Caller2Sample { … public static void Main(string[] args) { try { // (1) クライアントスタブの生成 GYOUMU1Stub server = new GYOUMU1Stub("SVGRP1"); Rpc.Open(); // RPCオープン Adm.Complete(); // SUP.NET開始処理完了通知 // (2) 入力用カスタムレコードの生成 in_data inRecord = new in_data(); // (2) 出力用カスタムレコードの生成 out_data outRecord = new out_data(); inRecord.i_basho[0] = 56; // (3) 入力データの設定 inRecord.i_basho[1] = 43; // (3) 入力データの設定 inRecord.i_basho[2] = 18; // (3) 入力データの設定 // (4) 同期応答型RPCに設定 server.Flags = TP1ServerFlags.DCNOFLAGS; // (5)GETDATA1を呼び出す server.GETDATA1(inRecord, outRecord); // (6) 応答データの取り出し string name = outRecord.o_name.Trim(); Rpc.Close(); // RPCクローズ } catch (TP1UserException exp) { // GETDATA1()からユーザ例外がスローされた } catch (TP1RemoteException exp) { // GETDATA1()で予期しない例外発生 } catch (TP1ServerException exp) { // OpenTP1(クラスライブラリ)が検知したエラー } catch (TP1Exception exp) { // その他OpenTP1が検知したエラー } catch (Exception exp) { // 予期しない例外 } } } }
(7) クライアントスタブの使用例(SUP.NET,J#の場合)
package MyCompany; import System.*; import Hitachi.OpenTP1.*; import Hitachi.OpenTP1.Server.*; public class Caller2Sample { … public static void main(String[] args) { try { String name; // (1) クライアントスタブの生成 GYOUMU1Stub server = new GYOUMU1Stub("SVGRP1"); Rpc.Open(); // RPCオープン Adm.Complete(); // SUP.NET開始処理完了通知 // (2) 入力用カスタムレコードの生成 in_data inRecord = new in_data(); // (2) 出力用カスタムレコードの生成 out_data outRecord = new out_data(); inRecord.get_i_basho()[0] = 56; // (3) 入力データの設定 inRecord.get_i_basho()[1] = 43; // (3) 入力データの設定 inRecord.get_i_basho()[2] = 18; // (3) 入力データの設定 // (4) 同期応答型RPCに設定 server.set_Flags(TP1ServerFlags.DCNOFLAGS); // (5) GETDATA1を呼び出す server.GETDATA1(inRecord, outRecord); // (6) 応答データの取り出し name = outRecord.get_o_name().trim(); Rpc.Close(); // RPCクローズ } catch (TP1UserException exp) { // GETDATA1()からユーザ例外がスローされた } catch (TP1RemoteException exp) { // GETDATA1()で予期しない例外発生 } catch (TP1ServerException exp) { // OpenTP1(クラスライブラリ)が検知したエラー } catch (TP1Exception exp) { // その他OpenTP1が検知したエラー } catch (Exception exp) { // 予期しない例外 } } }
(8) クライアントスタブの使用例(SUP.NET,Visual Basicの場合)
Imports System Imports Hitachi.OpenTP1 Imports Hitachi.OpenTP1.Server Namespace MyCompany Public Class Caller2Sample … Public Shared Sub Main(ByVal args() As String) Dim name As String Dim inRecord As in_data Dim outRecord As out_data Try ' (1) クライアントスタブの生成 Dim server As GYOUMU1Stub = _ New GYOUMU1Stub("SVGRP1") Rpc.Open() ' RPCオープン Adm.Complete() ' SUP.NET開始処理完了通知 ' (2) 入力用カスタムレコードの生成 inRecord = New in_data() ' (2) 出力用カスタムレコードの生成 outRecord = New out_data() inRecord.i_basho(0) = 56 ' (3) 入力データの設定 inRecord.i_basho(1) = 43 ' (3) 入力データの設定 inRecord.i_basho(2) = 18 ' (3) 入力データの設定 ' (4) 同期応答型RPCに設定 server.Flags = TP1ServerFlags.DCNOFLAGS ' (5) GETDATA1を呼び出す server.GETDATA1(inRecord, outRecord) ' (6) 応答データの取り出し name = outRecord.o_name.Trim() Rpc.Close() ' RPCクローズ Catch exp As TP1UserException ' GETDATA1()からユーザ例外がスローされた Catch exp As TP1RemoteException ' GETDATA1()で予期しない例外発生 Catch exp As TP1ServerException ' OpenTP1(クラスライブラリ)が検知したエラー Catch exp As TP1Exception ' その他OpenTP1が検知したエラー Catch exp As Exception ' 予期しない例外 End Try End Sub End Class End Namespace