バージョン 4.2.5
 —  プログラミングガイド  —

インターネットおよび XML アクセス用のステートメント

このドキュメントでは、インターネットおよび XML にアクセスするためのステートメントの機能概要、メインフレーム環境でこれらのステートメントを使用するための全般的な前提条件、制限事項、およびその他の参照情報について説明します。 これらのステートメントを最大限に活用するには、通信規格に関する深い知識が必要です。

次のトピックについて説明します。


使用可能なステートメント

次の Natural ステートメントを使用して、インターネットおよび XML ドキュメントにアクセスできます。

REQUEST DOCUMENT

機能

このステートメントを使用すると、ハイパーテキスト転送プロトコル(HTTP)、および z/OS の場合のみ Hypertext Transfer Protocol Secure(HTTPS)を使用して、与えられた Uniform Resource Identifier(URI)または Uniform Resource Locator(URL)を持つ Web 上のドキュメントにアクセスできます。URI および URL は、Web サイトのインターネットアドレスまたはイントラネットアドレスです。

REQUEST DOCUMENT では HTTP クライアントを Natural ステートメントレベルに実装します。これにより、アプリケーションはイントラネットまたはインターネット上の任意の HTTP サーバーにアクセスできます。 このステートメントにはオペランドのセットがあり、このオペランドを使用してユーザーアプリケーションの要件に沿った HTTP 要求を作成できます。 例えば、送信オペランドを使用すると、ユーザー定義 HTTP ヘッダー、フォームデータ、またはドキュメント全体を HTTP サーバーに送信できます。 受信オペランドを使用すると、サーバーからドキュメントを取得したり、サーバーから返された HTTP ヘッダーブロック全体を表示したり、専用のヘッダーの値を戻したりできます。バイナリフォーマットオペランドを使用すると、gif ファイルなどのバイナリオブジェクトを HTTP サーバーと交換できます。 基本認証用として、ユーザー ID やパスワードのオペランドを指定できます。 このオペランドの内容は、HTTP 標準に従って回線上を base64 エンコーディングを使用して送信されます。

Natural では次の要求メソッドがサポートされています。

要求メソッドは、通常、実行される REQUEST DOCUMENT ステートメントにコーディングされているオペランドに基づいて、自動的に評価されます。 ただし、あらかじめ設定されている要求メソッドは、要求メソッドヘッダーをユーザーが明示的に指定することによって上書きできます。

REQUEST DOCUMENT ステートメントを使用したデータ転送では、通常、コードページ変換は呼び出されません。 送信データ/受信データを特定のコードページでエンコードする場合は、REQUEST DOCUMENT ステートメントの DATA ALL 節/RETURN PAGE 節を使用して指定できます。

HTTP サーバーを持つ EBCDIC ベースのメインフレームは、ほとんどが UTF-8 または ISO-8859-1 でエンコードされたデータを使用しています。このようなメインフレームとのデータ交換を簡略化するため、このステートメントでは ENCODED 節を使用して、送受信ドキュメントデータを暗黙的または自動的に変換できます。

技術的な実装

REQUEST DOCUMENT ステートメントの実装は、主に次の 2 階層で構成されています。

Natural for Mainframes では HTTP プロトコルバージョン 1.0 のみがサポートされています。つまり、サーバーへの固定接続は維持されません。 事実上、すべての企業のネットワークプロセスでは、クライアントからインターネットにアクセスするとき、プロキシサーバーを経由します。このため、Natural は、プロキシサーバーおよびプロキシサーバーの処理対象となるポートに適した設定を使用して構成できるようになっています。 また、プロキシサーバーを経由せずに直接アクセスする、ローカルドメイン名の接尾辞(イントラネットサイト)も指定できます。 「適用可能な Natural パラメータの概要」も参照してください。

プロキシサーバーは、クライアント(ユーザー)とインターネットの間に配置され、クライアントからの要求を受信して宛先サーバーに転送したり、返されたドキュメントをキャッシュしてクライアントに転送したりします。 プロキシサーバーの利点として、キャッシュ処理によってパフォーマンスが向上すること、およびセキュリティの問題の回避に役立つこと(ほとんどのプロキシサーバーがファイアウォールとしても機能する)を挙げることができます。

次の例は、REQUEST DOCUMENT ステートメントを使用して、外部に保管されているドキュメントにアクセスする方法を示しています。

REQUEST DOCUMENT FROM
"http://bolsap1:5555/invoke/sap.demo/handle_RFC_XML_POST" 
WITH 
USER #User PASSWORD #Password
DATA
NAME 'XMLData' VALUE #Queryxml
NAME 'repServerName' VALUE 'NT2'
RETURN 
PAGE #Resultxml
RESPONSE #rc 

構文

REQUEST DOCUMENT ステートメントの構文と詳細なアプリケーションヒントについては、『ステートメント』ドキュメントを参照してください。

REQUEST DOCUMENT のプラットフォームサポート

REQUEST DOCUMENT ステートメントは、次のメインフレームプラットフォームでサポートされます。

* 後述の「openUTM での XML 関連ステートメントのサポートに対する前提条件」も参照してください。

また、このステートメントは Natural でサポートされているすべての OpenSystems プラットフォームで使用できます。

PARSE XML

機能

PARSE XML ステートメントを使用すると、Natural プログラム内で XML ドキュメントを解析できるようになります。

PARSE XML ステートメントではフル XML パーサを Natural に統合します。これにより、Natural アプリケーションで XML ドキュメントを解析できるようになり、コンテンツの処理が容易になります。 PARSE XML ステートメントでは処理ループを開き、解析プロセス中にリストのイベントのいずれかが発生するたびに、それぞれのドキュメントのパス、解析された要素の名前と値、およびいくつかのパーサステータスシステム変数を返します。

技術的な実装

XML ドキュメント解析の一般的な戦略またはモデルは次のとおりです。

Natural for Mainframes での PARSE XML ステートメントの実装は SAX メソッドに基づいており、(オープンソース)SAX パーサ EXPAT のバージョン 2.0.0 のメインフレームポートを使用しています。

解析処理は、対象ドキュメントの UTF-16 エンコードイメージに対して内部的に行われます。つまり、配信されたドキュメントのエンコーディングが違う場合は、UTF-16 への変換が内部的に実行されてから解析が開始されます。 例えば、TP 環境のスレッドサイズを評価する場合は、Natural をインストールときにこのことを考慮する必要があります。

解析するドキュメントのエンコーディングは自動的に確認されます。

  1. ドキュメントのエンコーディングを示す BOM(バイトオーダーマーク)が確認されます。

  2. BOM が見つからない場合、ASCII、EBCDIC、または UTF-16(BE または LE、つまりビッグエンディアンまたはリトルエンディアン)が確認されます。

  3. エンコーディングが EBCDIC または ASCII の場合は、エンコーディングの処理命令が検索されます。

    エンコーディングが不明の場合は、該当するエラーメッセージが発行され、解析プロセスは終了します。 内部的に、パーサは UTF-16BE で動作するため、解析されるドキュメントは必ずこのエンコーディングに変換されてから EXPAT パーサに渡されます。

  4. エンコーディングが PI(処理命令)の場合は、次のデフォルトが適用されます。

解析プロセス自体は、2 段階で構成されます。

注意:
技術的な理由により、Natural for Mainframes ではネスト構造の解析ループはサポートされていません。

XML の空白文字と事前定義されたエンティティの処理

Natural バージョン 4.2.5 以降、解析対象文字列に空白文字または事前定義された XML エンティティが含まれていた場合に、文字データの解析でブレイクまたはループパスが発生することはありません。 バージョン 4.2.5 より前の Natural で問題になっていましたが、解決されました。 Natural バージョン 4.2.5 では、文字データの解析は Natural for Windows、UNIX、および Linux と互換性があります。

次のサンプルプログラムの出力は、バージョン 4.2.5 とそれより前のバージョンとの違いを示します。

DEFINE DATA                                                    
LOCAL                                                          
1 PAGE    (A)   DYNAMIC                                        
1 #PATH   (A200)                                               
1 #NAME   (A) DYNAMIC                                          
1 #VALUE  (A40)                                                
1 #CMX    (A) DYNAMIC                                          
1 #CMP    (A) DYNAMIC                                          
END-DEFINE                                                     
FORMAT PS=60 LS=80                                             
COMPRESS ' A<B ' H'0D0D' ' B<C' INTO #CMX LEAVING NO     
MOVE ALL  #CMX TO #CMP UNTIL 16                                
COMPRESS                                                       
'<?xml version="1.0" ?>'                                       
'<character-data-sample>'                                      
'<string_with_whitespace_and_predefined_entity>' #CMX          
'</string_with_whitespace_and_predefined_entity>'              
'</character-data-sample>'                                     
 INTO PAGE LEAVING NO                                          
PARSE XML PAGE INTO PATH #PATH NAME #NAME VALUE #VALUE       
PRINT #PATH /   'NA='  #NAME / 'VA=' #VALUE
LOOP                                          
END     

Natural バージョン 4.2.5 より前でプログラムが実行された場合の出力:

Page      1                                                  08-11-04  14:39:51
                                                                               
character-data-sample                                                          
NA= character-data-sample                                                      
VA=                                                                            
character-data-sample/string_with_whitespace_and_predefined_entity             
NA= string_with_whitespace_and_predefined_entity                               
VA=                                                                            
character-data-sample/string_with_whitespace_and_predefined_entity/$           
NA=                                                                            
VA=  A                                                                         
character-data-sample/string_with_whitespace_and_predefined_entity/$           
NA=                                                                            
VA= <                                                                          
character-data-sample/string_with_whitespace_and_predefined_entity/$           
NA=                                                                            
VA= B                                                                          
character-data-sample/string_with_whitespace_and_predefined_entity/$           
NA=                                                                            
VA= ?                                                                          
character-data-sample/string_with_whitespace_and_predefined_entity/$           
NA=                                                                            
VA= ?                                                                          
NA=                                                                    
VA= B                                                                  
character-data-sample/string_with_whitespace_and_predefined_entity/$   
NA=                                                                    
VA= ?                                                                  
character-data-sample/string_with_whitespace_and_predefined_entity/$   
NA=                                                                    
VA= ?                                                                  
character-data-sample/string_with_whitespace_and_predefined_entity/$   
NA=                                                                    
VA=  B                                                                 
character-data-sample/string_with_whitespace_and_predefined_entity/$   
NA=                                                                    
VA= <                                                                  
character-data-sample/string_with_whitespace_and_predefined_entity/$   
NA=                                                                    
VA= C                                                                  
character-data-sample/string_with_whitespace_and_predefined_entity//   
NA= string_with_whitespace_and_predefined_entity                       
VA=                                                                    
character-data-sample//                                                
NA= character-data-sample                                              
VA=                                                                    
MORE

Natural バージョン 4.2.5(以降)でプログラムが実行された場合の出力:

Page      1                                                  08-11-04  13:41:34
                                                                               
character-data-sample                                                          
NA= character-data-sample                                                      
VA=                                                                            
character-data-sample/string_with_whitespace_and_predefined_entity             
NA= string_with_whitespace_and_predefined_entity                               
VA=                                                                            
character-data-sample/string_with_whitespace_and_predefined_entity/$           
NA=                                                                            
VA=  A<B?? B<C                                                                 
character-data-sample/string_with_whitespace_and_predefined_entity//           
NA= string_with_whitespace_and_predefined_entity                               
VA=                                                                            
character-data-sample//                                                        
NA= character-data-sample                                                      
VA=                                                                            

                                                                        
MORE                                                                             

構文

PARSE XML ステートメントの構文と詳細なアプリケーションヒントについては、『ステートメント』ドキュメントを参照してください。

PARSE XML のプラットフォームサポート

PARSE XML ステートメントは、次のメインフレームプラットフォームでサポートされます。

* 後述の「IMS/TM に関する制限事項」を参照してください。

** 後述の「openUTM での XML 関連ステートメントのサポートに対する前提条件」も参照してください。

また、このステートメントは Natural でサポートされているすべての OpenSystems プラットフォームで使用できます。

Top of page

全般的な前提条件

このセクションでは、Natural ステートメント REQUEST DOCUMENT および PARSE XML を使用する場合に適用される前提条件について説明します。

インストールの前提条件

Natural ステートメント REQUEST DOCUMENT および PARSE XML の使用を有効にするには、『インストール』ドキュメントの「REQUEST DOCUMENT および PARSE XML ステートメントサポートのインストール」で説明されているインストール手順を実行する必要があります。

REQUEST DOCUMENT および PARSE XML は、少なくとも内部的には必ずデータのエンコーディングを変換する必要があるため、Natural の稼働にはアクティブな ICU サポートが必要です。 このため、ICU ライブラリをインストールする必要があります。

REQUEST DOCUMENT または PARSE XML を使用する予定の場合は、次の前提条件を満たす必要があります。

プロファイル設定

適用可能な Natural パラメータの概要

次の表に、ステートメント REQUEST DOCUMENT および PARSE XML のサポートを有効化および無効化するか、またはサポートに影響を及ぼす、Natural プロファイルパラメータおよびセッションパラメータの概要を示します。

パラメータ 目的
XML この Natural プロファイルパラメータまたは対応するパラメータマクロ NTXML とそのキーワードサブパラメータは、ステートメント REQUEST DOCUMENT および PARSE XML の有効化/無効化に使用されます。

また、NTXMLXML のキーワードサブパラメータを使用して設定できるさまざまなオプションがあります。この例として、ステートメント REQUEST DOCUMENT および PARSE XML のサポートの有効化/無効化の個別指定、デフォルトコードページの名前、(イントラネット)プロキシサーバーの URL、プロキシのポート番号、(イントラネット)SSL プロキシサーバーの URL とポート番号、アドレスを直接指定するローカルドメインの名前を挙げることができます。

XML プロファイルパラメータを使用する前提条件として、プロファイルパラメータ CFICUON に設定する必要があります。

CFICU この Natural プロファイルパラメータまたは対応するパラメータマクロ NTCFICU とそのキーワードサブパラメータは、Unicode およびコードページサポートを有効にするために使用します。
CP この Natural プロファイルパラメータでは、Natural データおよび Natural ソースのデフォルトのコードページを定義します。
CPCVERR この Natural プロファイルおよびセッションパラメータでは、変換時に発生した変換エラーが Natural エラーにつながるかどうかを指定します。

有効化/無効化

Start of instruction setステートメント REQUEST DOCUMENT および PARSE XML のサポートを現在のセッションで有効にするには

  1. 両ステートメントをともに有効にするには、Natural プロファイルパラメータ XMLON に設定します。 システムコマンド GLOBALS を使用するか、Natural の起動時にこのパラメータを動的に指定します。

    または:
    サポートを個別に設定するには、XML/NTXML の該当するキーワードサブパラメータのみ ON に設定します。

    RDOC - REQUEST DOCUMENT サポートの有効化

    PARSE - PARSE XML サポートの有効化

  2. インストールプラットフォームがインターネットファイアウォールの背後にある場合、またはインターネットトラフィックがプロキシサーバー経由でルーティングされる場合は、プロキシおよびプロキシポートに関する XML/NTXMLキーワードサブパラメータをそれに合わせて指定する必要があります。

Start of instruction setステートメント REQUEST DOCUMENT および PARSE XML のサポートをすべてのセッションについて有効にするには

Start of instruction setステートメント REQUEST DOCUMENT および PARSE XML のサポートを無効にするには

詳細については、『パラメータリファレンス』ドキュメントの「XML - PARSE XML および REQUEST DOCUMENT ステートメントの有効化」も参照してください。

Unicode サポート

Start of instruction setUnicode サポートを有効にするには

プロファイルパラメータ CFICU のキーワードサブパラメータに設定できるさまざまなオプションの詳細については、『パラメータリファレンス』ドキュメントの「CFICU - Unicode とコードページのサポート」を参照してください。

Unicode とコードページのサポート』ドキュメントの「Natural プログラミング言語の Unicode とコードページのサポート」の「ステートメント」に記載されている、PARSE XML および REQUEST DOCUMENT に関連する説明も参照してください。

Top of page

z/OS 環境での REQUEST DOCUMENT ステートメントの HTTPS サポート

HTTPS の概要

HTTPS は Hypertext Transfer Protocol Secure の略で、HTTP と TCP/IP プロトコルスタックとの間の追加セキュリティ層です。

階層 プロトコル
アプリケーション層 HTTP(S)
セキュリティ層 TLS/SSL
トランスポート層 TCP
ネットワーク層 IP

HTTPS は、インターネット経由での安全なデータ通信を目的として、暗号化と通信パートナー認証を実現するために導入されました。

HTTPS URI スキームは、HTTP 通信がセキュリティ保護されることを示すために使用されます。 データの暗号化には、SSL(Secure Socket Layer)プロトコルまたはその後継である TLS(Transport Layer Security)が使用されます。 そのため認証は、通信パートナーの身元を保証する証明書の交換によって行われます。

ただし、ほとんどの HTTPS 通信において、サーバーが一方的に証明書を使用してクライアントの認証を受けます。 クライアント証明書を使用したクライアント認証はほとんど行われません。

SSL 通信はいくつかの段階を経て確立されます。

HTTPS プロトコルでは、標準的な HTTP ポート番号とは違うポート番号を使用します。 HTTP が通常ポート 80 を使用するのに対し、HTTPS のデフォルトポート番号は 443 です。

LAN(ローカルエリアネットワーク)に接続されているクライアントからインターネットへの HTTP アクセスは、通常、プロキシと呼ばれる特別な HTTP サーバーを経由して処理されます。 プロキシは LAN からインターネットへの出入口であり、セキュリティポリシーを実行し、キャッシュ、検証ルーチン、およびフィルタ機能を提供し、ファイアウォールとして機能します。 HTTPS でセキュリティ保護されたインターネットアクセスのほとんどが、リモートサーバーとの接続を管理する、専用のプロキシサーバー経由で実行されます。 このようなプロキシは "SSL プロキシ" とも呼ばれています。

証明書は、証明書の所有者や発行者に関する情報、セッションキーデータの暗号化に使用する公開キー、有効期限、デジタル署名など、さまざまな情報項目が含まれたバイナリドキュメントです。 HTTPS サーバーによって提示される証明書は、通常、証明書チェーン全体で最も下のリンクです。 このような証明書チェーンは、公開キーインフラストラクチャ(PKI)と呼ばれます。 このようなチェーンの最上位にある証明書は、ルート証明書と呼ばれます。 ルート証明書は、一般に、認証機関(CA)と呼ばれる特別な組織によって発行されます。 CA によって発行および署名されたルート証明書も、CA(ルート)証明書と呼ばれます。 詳細については、HTTP 開発者用のマニュアルおよびインターネットで公開されているその他の情報源を参照してください。

AT-TLS を使用した HTTPS

Natural REQUEST DOCUMENT ステートメントの HTTPS サポートは、z/OS の通信サーバーコンポーネント AT-TLS(Application Transparent-Transport Layer Security)がベースです。

AT-TLS は、TLS/SSL 暗号化をソケットアプリケーションの構成可能サービスとして提供します。 この機能は TCP/IP プロトコルスタックの上に追加層として実現され、SSL 機能をソケットアプリケーションに対するほとんどあるいは完全な透過(トランスペアレント)モードで利用します。 AT-TLS には 3 つの動作モードが用意されています。 『z/OS Communications Server, IP Programmer’s Guide and Reference. Version 1, Release 9』(IBM マニュアル SC31-8787-09)の第 15 章を参照してください。

3 つのモードは次のとおりです。

Natural for Mainframes では Controlling モードを使用して、HTTPS 要求に対してのみセキュリティ保護されたモードをオンにし、HTTP 要求は暗号化しません。

z/OS での証明書の管理

z/OS では、AT-TLS で使用される証明書を 2 通りの方法で管理できます。 証明書は、z/OS UNIX ファイルシステム内の RACF キーリングまたはキーデータベースに格納されます。 どちらの方法が実際に適用されるかは、Natural HTTPS クライアントが使用する z/OS TCP/IP スタックの AT-TLS Policy Agent Configuration ファイルに定義されています。

IBM では、z/OS システムデリバリーごとに、一般的に使用される CA ルート証明書のセットを配布しています。 サーバー証明書の保持にキーリングを使用する予定の場合は、配布されたルート証明書をシステム管理者が手動でインポートする必要があります。 有効期限が切れたルート証明書の新しい置き換えが IBM から配布された場合は、影響を受けるすべてのキーリングを更新する必要があります。

キーデータベースはキーリングとは異なり、新たに作成されるとルート証明書の最新セットが自動的に格納されます。 ただし、キーデータベースを使用する場合も、ルート証明書の最新セットを常に維持することが必要です。

Natural HTTPS クライアントによって使用される証明書は、信頼済みとフラグされることが必要です。 証明書が公開キーインフラストラクチャの一部の場合は、対応する CA ルート証明書が信頼済みとフラグされることが必要です。

RACF キーリングの使用

RACF では、デジタル証明者はいわゆるキーリングに格納されます。 キーリングとそれが格納される証明書の作成と管理には、RACF コマンド RACDCERT が使用されます。

z/OS Security Server RACF Security Administrator’s Guide』(IBM マニュアル SA22-7683-11)および『z/OS Security Server RACF Command Language Reference』(IBM マニュアル SA22-7687-11)を参照してください。

キーデータベースの使用

RACF の代わりとして、z/OS UNIX サービスファイルシステムに存在するキーデータベースに証明書を格納できます。 キーデータベースの作成と管理には、GSKKYMAN ユーティリティを使用する必要があります。

z/OS Cryptographic Services PKI Services Guide and Reference』(IBM マニュアル SA22-7693-10)を参照してください。

Top of page

IMS/TM に関する制限事項

IMS/TM 環境で Natural ステートメント REQUEST DOCUMENT および PARSE XML を使用する場合は、以下の制限事項が適用されます。

詳細については、ステートメントの説明の対応する注意点を参照してください。

Top of page

openUTM での XML 関連ステートメントのサポートに対する前提条件

I/O の発生するアクティブな PARSE ループでは、UTM ファンクションコール PGWT を使用する必要があります。 これは以下のことを意味します。

  1. UTM アプリケーションは、複数のタスクで開始する必要があります。そうでない場合、UTM エラー K319 が発生し、ダンプが生成されます。

  2. PGWT 条件を KDCDEF に定義する必要があります。

    1. PGWT コール中の入力メッセージに対する最大待機時間(秒)を定義します。

      例:

      MAX PGWTTIME=60
    2. PGWT コールに対する最大の UTM タスク数を定義します。

      例:

      MAX TASKS-IN-PGWT=1
    3. PGWT は、TAC-PRIORITIES 命令または TACCLASS コンセプトのどちらかを使用して制御できます。

      • TAC-PRIORITIES 命令を使用した PGWT の制御

        例:

        DEFAULT TAC TYPE=D,PROGRAM=NATUTM,. . . . . . .
        TAC NAT,ADMIN=NO,TIME=(0,0),PGWT=YES,TACCLASS=1
        TAC-PRIORITIES DIAL-PRIO=EQ
      • TACCLASS コンセプトを使用した PGWT の制御

        例:

        DEFAULT TAC TYPE=D,PROGRAM=NATUTM,. . . . . . .
        TAC NAT,ADMIN=NO,TIME=(0,0),TACCLASS=1
        TAC NAT1,ADMIN=NO,TIME=(0,0),TACCLASS=2
        TACCLASS 1,TASKS=2
        TACCLASS 2,TASKS=1,PGWT=YES
  3. パラメータマクロ NURENT のサブパラメータ ILCS は、ILCS=CRTE に設定する必要があります。

Top of page

サンプルプログラム

次のサンプルプログラムは、ステートメント REQUEST DOCUMENT および PARSE XML の使用方法を示します。

これ以外のサンプルプログラムは、各ステートメントの説明の末尾と Natural ライブラリ SYSEXV に用意されています。

DEFINE DATA                                            
LOCAL                                                  
1 #FROM   (A) DYNAMIC                                  
1 #HEADER (A) DYNAMIC                                  
1 #PAGE   (A) DYNAMIC                                  
1 #RC     (I4)                                         
1 #COL    (N8)                                         
1 #COL1   (I4)                                         
1 #COL2   (I4)                                         
1 #COL3   (I4)                                         
1 #LOC    (A30)                                        
1 #CP     (A) DYNAMIC                                  
1 #PATH   (A) DYNAMIC                                  
1 #NAME   (A) DYNAMIC                                  
1 #VALUE  (A) DYNAMIC                                  
1 #RTERR  (I4)                                         
END-DEFINE                                             
*                                                      
ASSIGN #FROM = 'HTTP://SI15.HQ.SAG/autos6.xml'         
**                                                     
REQUEST DOCUMENT FROM #FROM                               
RETURN                                                    
HEADER ALL #HEADER                                        
PAGE #PAGE    ENCODED    FOR TYPES 'TEXT/XML'             
 CODEPAGE ' '                                             
RESPONSE #RC                                              
GIVING #RTERR                                             
**                                                        
IF #RC NE 200 /* TEST FOR HTTP RESPONSE 200 = 'OK'        
WRITE 'HTTP RESPONSE' #RC 'RECEIVED'                      
ESCAPE ROUTINE                                            
END-IF                                                    
EJECT                                                     
PRINT #HEADER                                             
/ '_'(79)                                                 
PRINT #PAGE                                               
/ '_'(79)                                                 
/ '_'(79)                                                 
ASSIGN #CP = *CODEPAGE                                    
EXAMINE #PAGE FOR 'encoding' GIVING POSITION  #COL1
 IF #COL1 GT 0                                               
   EXAMINE #PAGE FOR '?>' GIVING POSITION #COL3              
   IF #COL3 GT #COL1                                         
     EXAMINE #PAGE FOR 'ISO-8859-1' GIVING POSITION #COL2    
   END-IF                                                    
   IF #COL2 GT #COL1 AND #COL2 LT  #COL3                     
     EXAMINE #PAGE FOR 'ISO-8859-1' REPLACE #CP              
   END-IF                                                    
 END-IF                                                      
PRINT #PAGE                                                  
/ '_'(79)                                                    
EJECT                                                        
PARSE XML #PAGE INTO PATH #PATH NAME #NAME VALUE #VALUE      
 PRINT #PATH / 'NAME=' #NAME / 'VALUE=' #VALUE / '_'(79)      
END-PARSE                                                    
END

注意:
上記のプログラムでアクセスされている URL はイントラネットサイトのアドレスを指しており、インターネットからはアクセスできません。

サンプルプログラムの出力:

HTTP/1.1 200 OK?Date: Thu, 10 Aug 2006 16:26:22 GMT?Server: Apache/1.3.19 (
BS2000)?Last-Modified: Thu, 27 Jul 2006 16:44:42 GMT?ETag: "2602c-111-44c8ed7a"
?Accept-Ranges: bytes?Content-Length: 273?Connection: close?Content-Type: text/
xml??
_______________________________________________________________________________
<?xml version="1.0" encoding="ISO-8859-1" ?><autos>?<make></make>?<make>Ford</
make>?<model>Thunderbird</model>?<make>Merceds-Benz</make><model>S400</model><
make>BWM</make><model version="latest">330I</model>?<make><label><company>
Mercedes</company></label></make>?</autos>?
_______________________________________________________________________________
<?xml version="1.0" encoding="IBM01140" ?><autos>?<make></make>?<make>Ford</
make>?<model>Thunderbird</model>?<make>Merceds-Benz</make><model>S400</model><
make>BWM</make><model version="latest">330I</model>?<make><label><company>
Mercedes</company></label></make>?</autos>?
_______________________________________________________________________________

MORE

autos
Name= autos
Value=
_______________________________________________________________________________
autos/$
Name=
Value= ?
_______________________________________________________________________________
autos/make
Name= make
Value=
_______________________________________________________________________________
autos/make//
Name= make
Value=
_______________________________________________________________________________
autos/$
Name=
Value= ?
_______________________________________________________________________________
autos/make
Name= make
Value=
VVVV
Name= autos
Value=
_______________________________________________________________________________
autos/$
Name=
Value= ?
_______________________________________________________________________________
autos/make
Name= make
Value=
_______________________________________________________________________________

Top of page

よくある質問

コードページサポートを有効にする必要があるのはなぜですか。

メインフレーム上の Natural に関するドキュメントに「"Natural ICU ハンドラを Natural ニュークリアスにリンクする必要があります"」との記載があります。

PARSE XML ステートメント

コードページサポートが必要となります。これは、メインフレームプラットフォームでは、(すでに UTF-16 でエンコードされている場合を除き、)解析されるドキュメントは常に内部的に UTF-16 に変換されるためです。 ほとんどの場合、ドキュメントは UTF-16 ではなく、変換が実行されます。 詳細については、PARSE XML ステートメントの説明および『Unicode およびコードページのサポート』ドキュメントの PARSE XML の説明を参照してください。

REQUEST DOCUMENT ステートメント

受信 HTTP ヘッダーの解釈と送信 HTTP ヘッダーの変換には、ICU ライブラリが必要です。 通常、受信ヘッダーは ISO 8859-1 でエンコードされており、メインフレームの場合は常に Natural デフォルトコードページに変換することが必要です(システム変数 *CODEPAGE も参照)。PC の場合、変換は必ずしも必要ではありません。

XML のキーワードサブパラメータ(RDP、RDNOP など)の使用方法を教えてください。

PC の場合、REQUEST DOCUMENT ステートメントは Internet Explorer を実行し、そこに定義されている設定を使用します。

メインフレームの場合は、すべての要求が経由してルーティングされる必要のある(イントラネット)プロキシサーバーの URL は、NTXML/XML のキーワードサブパラメータ RDP を使用して指定する必要があります。 キーワードサブパラメータ RDNOP を使用すると、プロキシサーバーを経由しない、直接アドレス指定するローカルドメイン(複数可)を定義できます。

サイトのプロキシサーバー、ポート番号、および HTTP サーバーの確認方法を教えてください。

サイトのプロキシサーバー、ポート番号、および HTTP サーバーについては、ネットワーク管理者に確認することが必要です。

サイトに定義されているプロキシサーバーは、ブラウザでも確認できます。

例えば、Internet Explorer では[ツール]>[インターネット オプション]>[接続]>[LAN の設定]>[詳細設定]で確認できます。

また、Web で検索するとこのような情報を確認できるツールが見つかることがあります。 例(テストはしていません):http://www.sharewareconnection.com/titles/proxy-settings.htm

TCP/IP または HTTP の問題と、Natural の問題とを区別する方法を教えてください。

HTTP レスポンスコード

HTTP レスポンスは、RESPONSE 節を介して operand16 に返されます。 『ステートメント』ドキュメントの「レスポンス番号の概要 - HTTP/HTTPS 要求」に説明があります。

TCP/IP エラー

これらのエラーの範囲は 8300 番以降です。

特に、エラー NAT8304 では、失敗した HTTP 要求の詳細がわかります。

TCP/IP エラー番号はインストールされている環境によって異なることがあるため、NAT8304 によって返されるテキストが最も参考になります。

追加情報

メインフレームから Web サイトに Natural なしでアクセスできるかどうかを確認する方法を教えてください。

問題が Natural インストールに関連しているのか、より一般的な問題なのかを切り分けるには、TSO から PING を実行します。

例えば、TSO コマンドシェルに次のコマンドを入力します。

TSO PING www.google.com

次のような結果が返されます。

CS V1R9: Pinging host WWW.GOOGLE.COM (66.249.91.99)
Ping #1 response took 0.018 seconds.

次に、Natural セッション内で、後述の小さいプログラムを使用してこの Web サイトへのアクセスをテストできます。

例えば、次のコマンドで Natural を起動します。

NATvr CFICU=ON 
XML=(ON,RDOC=ON,PARSE=ON,RDP='HTTPPROX.HQ.SAG',RDPPORT=8080,RDNOP='*.EUR.AD.SAG;
*.HQ.SAG;*.SOFTWAREAG.COM')

vr は、Natural のリリースおよびバージョン番号を表します。

これらの値は、弊社の内部環境と保存されたプロファイルのものです。 キーワードサブパラメータ RDPRDPPORT、および RDNOP の設定をネットワーク管理者に確認するか、ブラウザ(Internet Explorer)に定義されている値を試すことが必要です。

次の処理を実行します。

DEFINE DATA LOCAL 
1 #RESULTXML (A) DYNAMIC 
1 #RC (I4) 
END-DEFINE 
REQUEST DOCUMENT FROM "HTTP://WWW.GOOGLE.DE" 
RETURN HEADER ALL #HEADER RESPONSE #RC 
WRITE #RC 
WRITE #HEADER (AL=79) 
END

NAT2TCP が正しくロードされているかどうか確認したいのですが。

SYSPROD ユーティリティで確認できます。

SYSPROD で、Natural 製品に対する SCサブコンポーネントの表示)コマンドを入力します。 インストールされているサブコンポーネントのリストをスクロールしていくと、Nat Request Document のエントリ(Product ID .... TCP)が見つかります。

メッセージ「unsupported coding」が表示されます。

よくあるユーザーエラーです。XML ドキュメントは、暗黙的または明示的に、あるコードページから別のコードページに、例えば ISO-8859-1 からシステム変数 *CODEPAGE に指定されていたコードページに変換されます。 ただし、ドキュメントのエンコーディング PI encoding="ISO-8859-1" が、変換されたエンコーディングに合わせて調整されていません。 この場合、パーサは解析するドキュメントの最初の文字でエラーになり、終了します。

REQUEST DOCUMENT で Natural エラー NAT3411 が発生しないようにする方法を教えてください。

セッションパラメータ CPCVERROFF に設定します。

自己署名入りの証明書を使用できますか。

自己署名証明書は、OpenSSL の SDK を使用して、テストを目的としてイントラネットサーバーで使用できます。 キーデータベースまたは RACF キーリングにインポートした自己署名証明書は、信頼済みとフラグする必要があります。

証明書の管理に適している方法はどちらですか。

RACF キーリングのアプローチには、キーデータベースに比べてはるかに多くの作業が必要となります。 キーリングは HTTPS サーバーにアクセスするユーザーごとに作成する必要がある一方、キーデータベースは複数のユーザーで共有できます。

TCP/IP を AT-TLS 用に構成する方法を教えてください。

次のように進めます。

  1. TCP/IP コンフィグレーションファイルで、TCPCONFIG ステートメントにオプション TTLS を設定します。

  2. AT-TLS Policy Agent を構成および開始します。 このエージェントは、接続が SSL かどうかを確認するため、TCP/IP によって新しい TCP 接続のたびに呼び出されます。

  3. AT-TLS ルールを含む Policy Agent ファイルを作成します。 Policy Agent ファイルには、どの接続が SSL かを規定するルールが含まれます。

z/OS Communications Server: IP Configuration Guide』の第 18 章「Application Transparent Transport Layer Security (AT-TLS) data protection」も参照してください。

Sample Policy Agent ファイルには、すべての送信接続がアプリケーション制御の TLS として定義されています。 ルールがアプリケーション制御であるため、これにより Natural REQUEST DOCUMENT サポート以外の TCP/IP アプリケーションが影響されることはありません。 つまり、アプリケーションが接続ステータスを SSL に設定できます。 アプリケーションは、このステータスを設定しない限り、影響を受けません。 一方、Policy Agent ファイルでは、アプリケーション制御の SSL 接続を特定のポート、ユーザー、またはアドレススペースに制限することもできます。 サンプルでは、証明書データベースが HFS ファイル / u/admin/CERT.kdb に存在することが想定されています。

TTLSRule                          ConnRule01~1
{
  LocalAddrSetRef                 addr1
  RemoteAddrSetRef                addr1
  LocalPortRangeRef               portR1
  Direction                       Outbound
  Priority                        255
  TTLSGroupActionRef              gAct1~AllUsersAsClient
  TTLSEnvironmentActionRef        eAct1~AllUsersAsClient
  TTLSConnectionActionRef         cAct1~AllUsersAsClient
} 
TTLSGroupAction                   gAct1~AllUsersAsClient
{ 
  TTLSEnabled                     On
  Trace                           6
} 
TTLSEnvironmentAction             eAct1~AllUsersAsClient
{ 
  HandshakeRole                   Client
  EnvironmentUserInstance         0
  TTLSKeyringParmsRef             keyR1
} 
TTLSConnectionAction              cAct1~AllUsersAsClient
{ 
  HandshakeRole                   Client
  TTLSCipherParmsRef              cipher1~AT-TLS__Silver
  TTLSConnectionAdvancedParmsRef  cAdv1~AllUsersAsClient
  Trace                           0
} 
TTLSConnectionAdvancedParms       cAdv1~AllUsersAsClient
{ 
  ApplicationControlled           On
} 
TTLSKeyringParms                  keyR1
{ 
  Keyring                         /u/admin/CERT.kdb
  KeyringStashFile                /u/admin/CERT.sth
} 
TTLSCipherParms                   cipher1~AT-TLS__Silver
{
  V3CipherSuites                  TLS_RSA_WITH_DES_CBC_SHA
  V3CipherSuites                  TLS_RSA_WITH_3DES_EDE_CBC_SHA
  V3CipherSuites                  TLS_RSA_WITH_AES_128_CBC_SHA
} 
IpAddrSet                         addr1
{ 
  Prefix                          0.0.0.0/0
} 
PortRange                         portR1
{ 
  Port                            1024-65535
}

AT-TLS の構成を確認する方法を教えてください。

Policy-Agent ジョブ出力 JESMSGLG で次を確認します。

EZZ8771I PAGENT CONFIG POLICY PROCESSING COMPLETE FOR <your TCP/IP address space>: TTLS

このメッセージは、初期化に成功したことを示しています。

Policy-Agent ジョブ出力 JESMSGLG で次を確認します。

EZZ8438I PAGENT POLICY DEFINITIONS CONTAIN ERRORS FOR <your TCP/IP address space>: TTLS

このメッセージは、コンフィグレーションファイルにエラーがあることを示しています。 詳細については、syslog.log ファイルを参照してください。

コンフィグレーションルールはクライアントも対象となりますか。

syslog.log で次を確認します。

EZD1281I TTLS Map   CONNID: 00002909 LOCAL: 10.20.91.61..1751 REMOTE: 10.20.91.117..443 
JOBNAME: KSP USERID: KSP TYPE: OutBound STATUS: Appl Control RULE: ConnRule01 
ACTIONS: gAct1 eAct1 AllUsersAsClient

上記のエントリは、ポート 443 へのユーザー KSP による接続がアプリケーション制御であることを示しています。

問題の特定に関して他に情報はありませんか。

z/OS V1R8.0 Comm Svr: IP Diagnosis Guide: 3.23』の第 29 章「Diagnosing Application Transparent Transport Layer Security (AT-TLS)」も参照してください。

ポリシーエージェントトレースに切り替える方法を教えてください。

Comm Svr: IP Configuration Reference』の第 20 章「Syslog deamon and Comm Svr」および『IP Configuration Guide』の第 1.5.1 項「Configuring the syslog daemon (syslogd)」を参照してください。

接続確立時のエラー

ポリシーエージェントトレースで、リターンコード RC および対応する GSK_ ファンクション名を探します。

System SSL Programming」の第 12.1 項「SSL Function Return Codes」の RC の説明を参照してください。

trace=255 の場合のサンプルトレース:

EZD1281I TTLS Map   CONNID: 00002909 LOCAL: 10.20.91.61..1751 REMOTE: 10.20.91.117..443 JOBNAME: KSP USERID: KSP TYPE: OutBound STATUS: A
EZD1283I TTLS Event GRPID: 00000003 ENVID: 00000000 CONNID: 00002909  RC:    0 Connection Init 
EZD1282I TTLS Start GRPID: 00000003 ENVID: 00000002 CONNID: 00002909 Initial Handshake ACTIONS: gAct1 eAct1 AllUsersAsClient HS-Client   
EZD1284I TTLS Flow  GRPID: 00000003 ENVID: 00000002 CONNID: 00002909  RC:    0 Call GSK_SECURE_SOCKET_OPEN - 7EE4F718 
EZD1284I TTLS Flow  GRPID: 00000003 ENVID: 00000002 CONNID: 00002909  RC:    0 Set GSK_SESSION_TYPE -  CLIENT 
EZD1284I TTLS Flow  GRPID: 00000003 ENVID: 00000002 CONNID: 00002909  RC:    0 Set GSK_V3_CIPHER_SPECS -  090A2F 
EZD1284I TTLS Flow  GRPID: 00000003 ENVID: 00000002 CONNID: 00002909  RC:    0 Set GSK_FD - 00002909 
EZD1284I TTLS Flow  GRPID: 00000003 ENVID: 00000002 CONNID: 00002909  RC:    0 Set GSK_USER_DATA - 7EEE9B50 
EZD1284I TTLS Flow  GRPID: 00000003 ENVID: 00000002 CONNID: 00002909  RC:  435 Call GSK_SECURE_SOCKET_INIT - 7EE4F718 
EZD1283I TTLS Event GRPID: 00000003 ENVID: 00000002 CONNID: 00002909  RC:  435 Initial Handshake 00000000 7EEE8118  
EZD1286I TTLS Error GRPID: 00000003 ENVID: 00000002 CONNID: 00002909 JOBNAME: KSP USERID: KSP RULE: ConnRule01  RC:  435 Initial Handshake
EZD1283I TTLS Event GRPID: 00000003 ENVID: 00000002 CONNID: 00002909  RC:    0 Connection Close 00000000 7EEE8118 

Top of page

参照情報

役立つリソースのリストを以下に示します。

訓練コース

Software AG のコーポレートユニバーシティでは、このテーマの特別訓練コースを用意しています。 コーポレートユニバーシティの訓練コースについては、http://servline24.softwareag.com/public/ の ServLine24 を参照してください。

また、お近くの地域におけるオンサイトの特別訓練コースについて、担当地域の Software AG にお問い合わせください。

有効なリンク

役立つリンクを以下に示します。

Top of page