設定の手引き

6 ACMS Cloudで利用する各種通信プロトコルの概要(JX手順)

6.1 概要

JX手順が提供する機能の概要を解説します。
ACMS Cloudの概要の他、JX手順のプロトコルの詳細について学びたい場合は、以下のリンクをご参照ください。
https://community.dal.co.jp/s/article/protocol-jx

6.1.1 特徴

ACMS CloudではJX手順によるクライアントおよびサーバー双方でのメッセージ交換について、JEDICOS-XMLが定めたC-S型メッセージ交換モデル(2003年度版および2004年度版)のフェーズ1に則ったSOAP-RPC方式のプロトコルを実装しています。

6.1.2 仕様

JX手順ではインターネット経由でクライアントからサーバーへ接続し、ビジネスドキュメントのアップロードやダウンロードを行います。処理の起点はクライアント側であり、クライアントからサーバーへの接続によって処理が開始されます。

JX手順で定義されたクライアント側送信メソッドは以下のとおりです。

メソッド説明

PutDocument

1ビジネスドキュメントをサーバーに送信する機能

GetDocument

サーバーにある自分宛の未取得ビジネスドキュメントのうち、古いものから1つ取得する機能

ConfirmDocument

取得したビジネスドキュメントの識別IDをサーバーに通知し、取得したことを通知する機能

6.1.3 ビジネスシーケンス

ACMS CloudのJX手順では、以下の仕様に準拠したビジネスドキュメントメッセージや、相互に合意した任意の形式のメッセージを交換します。

  • インターネットEDI普及推進協議会(JiEDIA)が管理する汎用版JX手順
  • 流通BMSが管理する流通BMS標準仕様のJX手順

ビジネスシーケンスは以下のとおりです。

■ビジネスシーケンス(送信)
■ビジネスシーケンス(受信)

6.1.4 ビジネスメッセージ

商品マスタ情報や発注データなど、ビジネスドキュメントをコンテンツにもつメッセージです。

メッセージフォーマットについては、使用するビジネスドキュメント形式の規定に従います

6.1.5 メッセージ構造

PutDocument/GetDocument/ConfirmDocumentの3つのメソッドは、それぞれHTTPリクエストとHTTPレスポンス毎に以下の6つのメッセージが定義されています。

・ PutDocumentResponseメッセージ
・ PutDocumentメッセージ(ビジネスドキュメントを含む)
・ GetDocumentメッセージ
・ GetDocumentResponseメッセージ(ビジネスドキュメントを含む)
・ ConfirmDocumentメッセージ
・ ConfirmDocumentResponseメッセージ

メッセージの構成は以下のようになります。

6.1.5.1 SOAPヘッダー

SOAPヘッダーに含まれるMessageHeader要素について説明します。

MessageHeaderの要素説明

From

メッセージ送信元URI

To

メッセージ送信先URI

MessageId

メッセージの一意性を保持するための識別子

Timestamp

メッセージを作成した世界協定時(UTC)による日時

OptionalFormatType(*)

GetDocumentメッセージの際、取得対象となるビジネス文書の形式を限定するためのフォーマットタイプを指定 (オプション)

OptionalDocumentType(*)

GetDocumentメッセージの際、取得対象となるビジネス文書の種別を限定するためのフォーマットタイプを指定 (オプション)

(*) OptionalFormatType要素、OptionalDocumentType要素の使用上の注意(2007年度版にて追加)

  • OptionalFormatType要素、OptionalDocumentType要素の両方を指定するか、両方を省略するかのどちらかである。片方だけの指定は認めない。
  • GetDocumentの場合にのみ有効となる。GetDocument以外のリクエストメッセージおよび、レスポンスメッセージの場合には、これらの要素を無視し、機能上に影響しないものとする。
  • 両方を省略した場合のGetDocumentは、ビジネス文書の形式と種別を指定しないGetDocument仕様となる。すなわち自企業宛のすべてのビジネス文書が対象となる。

6.1.5.2 SOAPボディ

SOAPボディには6つのメッセージ毎に固有の要素があります。

下記にそれぞれのメッセージに含まれる要素を示します。

(1)PutDocument要素

PutDocumentメッセージのSOAPボディに含まれるPutDocument要素を下記に示します。

PutDocumentの要素説明

MessageId

送信ビジネスドキュメントの一意性を保持するための識別子

重複送信検出に用いる

Data

Base64エンコードされた送信ビジネスドキュメント

SenderId

ビジネスドキュメント送信企業の識別子

ReceiverId

ビジネスドキュメント受信企業の識別子

FormatType

ビジネスドキュメントの形式 (FormatTypeを参照)

DocumentType

ビジネスドキュメントの種別 (DocumentTypeを参照)

CompressType

ビジネスドキュメントの圧縮・解凍形式 (CompressTypeを参照)

(2)PutDocumentResponse要素

PutDocumentResponseメッセージのSOAPボディに含まれるPutDocumentResponse要素を下記に示します。

PutDocumentResponseの要素説明

PutDocumentResult

PutDocumentメソッドの結果。trueかfalseのどちらかを指定する。

サーバー側はビジネスドキュメントを正常に受信できた場合trueを返す。同じMessageIdにより重複受信を検知した場合はfalseを返す。

(3)GetDocument要素

GetDocumentメッセージのSOAPボディに含まれるGetDocument要素を下記に示します。

GetDocumentの要素説明

ReceiverId

ビジネスドキュメント受信企業の識別子

(4)GetDocumentResponse要素

GetDocumentResponseメッセージのSOAPボディに含まれるGetDocumentResponse要素を下記に示します。

GetDocumentResponseの要素説明

GetDocumentResult

GetDocumentメソッドの結果。trueかfalseのどちらかを指定する。

サーバー側はビジネスドキュメントが存在して送信できた場合trueを返す。ビジネスドキュメントが存在しない場合はfalseを返す。

MessageId

受信ビジネスドキュメントの一意性を保持するための識別子

クライアントがビジネスドキュメントを正常に受信できたことをサーバーに通知するために、この識別子を受信確定通知で用いる。

Data

Base64エンコードされた受信ビジネスドキュメント

SenderId

ビジネスドキュメント送信企業の識別子

ReceiverId

ビジネスドキュメント受信企業の識別子

FormatType

ビジネスドキュメントの形式 (FormatTypeを参照)

DocumentType

ビジネスドキュメントの種別 (DocumentTypeを参照)

CompressType

ビジネスドキュメントの圧縮・解凍形式 (CompressTypeを参照)

(5)ConfirmDocument要素

ConfirmDocumentメッセージのSOAPボディに含まれるConfirmDocument要素を下記に示します。

ConfirmDocumentの要素説明

MessageId

GetDocumentメソッドで取得したビジネスドキュメントのMessageId

SenderId

ビジネスドキュメント送信企業の識別子

ReceiverId

ビジネスドキュメント受信企業の識別子

(6)ConfirmDocumentResponse要素

ConfirmDocumentResponseメッセージのSOAPボディに含まれるConfirmDocumentResponse要素を下記に示します。

ConfirmDocumentResponseの要素説明

ConfirmDocumentResult

ConfirmDocumentメソッドの結果trueかfalseのどちらかを指定する。サーバー側は正常に受信確定した場合、trueを返す。

同じMessageIdが重複して通知された場合はfalseを返す。

6.1.5.3 SOAPボディに含まれる共通要素の値

SOAPボディに含まれる共通要素の値を下記に示します。

(1)FormatType要素

通信相手と取り決めたビジネス文書の形式です。

例えば、流通ビジネスメッセージ標準形式では”SecondGenEDI”が利用されます。

(2)DocmentType要素

通信相手と取り決めたビジネス文書の種別です。

例えば、以下のような種別を指定します。

DocumentTypeの値メッセージ名Buyer方向Seller

Order

発注

Return Notification

返品

Shipment Notification

出荷伝票

Package Shipment Notification

出荷梱包(紐付)

Non-associated Package Shipment Notification

出荷梱包(紐なし)

Receiving Notification

受領伝票

Invoice

請求

Payment

支払

Price Tag

値札

Fresh Order

生鮮発注

Fresh Shipment Notification

生鮮出荷

Fresh Receiving Notification

生鮮受領

Fresh Return Notification

生鮮返品

Picking List

集計表作成

(3)CompressType要素

ビジネス文書の圧縮形式です。

MIMEメディアタイプの値圧縮形式説明

application/java-archiver

JAR

JavaArchiver形式

application/x-tar

Tar

TapeArchiver形式

application/zip

ZIP

Zigzag In line Package形式

application/gzip

GZIP

GNU ZIP形式

6.1.6 通信エラー

JX手順の通信エラーは下記に示すとおりHTTP通信および、JX手順それぞれの階層でエラーが発生する可能性があります。

エラー発生階層エラー検出タイミング

HTTP通信

HTTPプロトコル通信でのエラー

JX手順

SOAP Envelope解析時のエラー

(クライアントの送信データ内容の不備)

6.1.6.1 HTTP通信階層でのエラー

HTTPでは、サーバーの応答としてステータスコードが返されます。

下記に代表的なHTTP通信エラーのステータスコードを示します。

HTTP Status Code原因

401

認証に失敗(クライアントの設定不備)

404

接続先のURLに誤りがある(クライアントの設定不備)

500

サーバーで何等かのエラーが発生

503

サーバーが一時的に利用できない

6.1.6.2 JX手順階層でのエラー

JX手順では、SOAP Envelope解析時のエラー通知手段としてSOAP Faultを使用します。

サーバーは処理中にSOAPエラーが発生した場合、HTTPステータスコード500をクライアントに返します。そのレスポンスのBody要素には処理エラーを示すFault要素をもつSOAPメッセージが含まれます。

6.2 仕様

ACMS CloudにおけるJX手順の実装仕様および、SOAP-RPCメッセージの組み立てと交換の仕様について説明します。

6.2.1 サポート機能/未サポート機能

ACMS CloudのJX手順がサポートする機能と未サポートとする機能は以下の通りです。

6.2.1.1 サポート機能

  • クライアント – サーバー型通信
  • 信頼性保証
  • 重複破棄
  • セキュリティ(伝送の暗号化:盗聴防止)
  • 認証(Basic認証、SSL/TLSサーバー認証、SSL/TLSクライアント認証)

6.2.1.2 未サポート機能

  • JEDICOS拡張要素であるexceptionInfoによるエラー詳細通知機能
  • C-S-C型推奨規約におけるMessageId引き継ぎ機能
  • 電子署名

6.2.2 JX手順メッセージ交換

ACMS Cloudにおける、送信メッセージの作成方法と受信メッセージの検証方法について記述します。

6.2.2.1 通信プロトコル

ACMS CloudではSOAP-RPCメッセージの送受信を行うために、HTTP/1.1を使用します。また、SSL/TLSとの結合により、HTTPSによる暗号化通信および、サーバー認証、クライアント認証を行えます。

6.2.2.2 HTTPヘッダー

通信設定や送信メッセージの内容にかかわらず設定されるHTTPヘッダーは以下の通りです。

項目名(field-name)値(field-value)

Content-Type

text/xml; charset=UTF-8

SOAPAction

“http://www.dsri.jp/edi-bp/2004/jedicos-xml/client-server/${メソッド名}”

Content-Length

${ビジネスメッセージのサイズ}

Connection

keep-alive

クライアント:持続接続を行う場合で、かつ受信の場合に設定します。

サーバー:keep-aliveを設定することはありません。


close

クライアント:送信、または持続接続を行わない場合に設定します。

サーバー:サーバーでは常にcloseを設定します。

Date

${メッセージ送信時の日時(GMT表記)}

6.2.2.3 SOAP-RPCメッセージの作成

データベースに登録されている情報を元にSOAP-RPCメッセージを作成します。作成するメッセージのエンコード方式は「UTF-8」です。

6.2.2.4 SOAP-RPCメッセージの検証

受信したSOAP-RPCメッセージからSOAPエンベロープを抜き出し、XML Parserを用いて検証、キー項目の取得を行います。

検査対象のSOAP-RPCメッセージはエンコード方式「UTF-8」で作成されている必要があります。

検証内容は以下の通りです。

  • SOAPエンベロープをXML Parserで構造チェックを行い、不正形式の場合には検証エラーとします。
  • SOAPエンベロープの項目内容をチェックし、不正の場合は検証エラーとします。

(必須項目、設定されている値と設定値のマッチング)

6.2.2.5 SOAP-RPCメッセージのパッケージング/アンパッケージング

ACMS CloudのJX手順メッセージ交換におけるSOAP-RPCメッセージのパッケージングとアンパッケージングの仕様を記述します。

(1)パッケージング
ビジネスドキュメント、またはその他ファイルをBase64形式にエンコードしてSOAPエンベロープにパッケージングします。

(2)アンパッケージング
SOAP-RPCメッセージに含まれるSOAPエンベロープからビジネスドキュメント、その他ファイルを取り出し、Base64形式からデコードしてアンパッケージングします。

6.2.3 同期通信

クライアントからサーバーに対して送信する1つのメッセージと、それに対する1つの応答メッセージの交換が行われます。メッセージに対する応答メッセージの正常送受信によりビジネスメッセージの送受信が正常終了となります。

6.2.3.1 JX手順クライアントでのPutDocumentメッセージ送信

JX手順クライアントでPutDocumentメッセージを送信した場合の処理について説明します。

■正常ケース
ダイアグラム

低い精度で自動的に生成された説明
  1. 相手先にPutDocumentメッセージを送信します。
  2. PutDocumentResponse(result=true)メッセージを受信します。
  3. 検証結果が正常の場合、正常時終了処理を登録します。
■異常ケース
ダイアグラム

中程度の精度で自動的に生成された説明
  1. 相手先にPutDocumentメッセージを送信します。
  2. SOAP Fault またはHTTPエラーを受信します。

6.2.3.2 JX手順クライアントでのGetDocumentメッセージ送信

JX手順クライアントでGetDocumentメッセージを送信した場合の処理について説明します。

■正常ケース(受信データあり)
グラフィカル ユーザー インターフェイス

中程度の精度で自動的に生成された説明
  1. 相手先にGetDocumentメッセージを送信します。
  2. GetDocumentResponse(result=true)メッセージを受信し、発信受信の子タスク(受信データ)を登録します。
  3. 相手先にConfirmDocumentメッセージを送信します。
  4. 正常時終了処理を登録します。
  5. ConfirmDocumentResponse(result=true)メッセージを受信します。
■正常ケース(受信データなし)
  1. 相手先にGetDocumentメッセージを送信します。
  2. GetDocumentResponse(result=false)メッセージを受信します。
  3. 論理ファイルの「受信ファイル無し」と終了処理の起動の設定により処理が変わります。
    • 受信ファイル無しが「リトライする」の場合
      • リトライを行い、リトライオーバーとなった時点でタスクが終了します。
    • 受信ファイル無しが「正常終了」するで、終了処理の起動が「起動しない」の場合
      • 正常終了処理の登録を行いません。
    • 受信ファイル無しが「正常終了」するで、終了処理の起動が「起動する」の場合
      • 正常終了処理を登録します。
■異常ケース
  1. 相手先にGetDocumentメッセージを送信します。
  2. SOAP Fault またはHTTPエラーを受信します。

  1. 相手先にGetDocumentメッセージを送信します。
  2. GetDocumentResponse(result=true)メッセージを受信し、発信受信の子タスク(受信データ)を登録します。
  3. 相手先にConfirmDocumentメッセージを送信します。
  4. 子タスクの正常時終了処理を登録します。
  5. SOAP Fault またはHTTPエラーを受信します。
  6. リトライを行い、リトライオーバーとなった場合にはタスクが終了します。

6.2.3.3 JX手順サーバーでのPutDocumentメッセージ受信

JX手順サーバーでPutDocumentメッセージを受信した場合の処理について説明します。

■正常ケース
  1. PutDocumentメッセージを受信します。
  2. 検証結果が正常の場合、受信データを登録します。
  3. 正常時終了処理を登録します。
  4. 相手先にPutDocumentResponse(result=true)メッセージを送信します。
■異常ケース

  1. PutDocumentメッセージを受信します。
  2. エラーが発生した場合、相手先にSOAP Fault(HTTP Response=500)、またはHTTPエラーを送信します。

6.2.3.4 JX手順サーバーでのGetDocumentメッセージ受信

JX手順サーバーでGetDocumentメッセージを受信した場合の処理について説明します。

■正常ケース(送信データあり)

  1. GetDocumentメッセージを受信します。
  2. 検証結果が正常の場合、相手先にGetDocumentResponse(result=true)メッセージを送信します。
  3. ConfirmDocumentメッセージを受信します。
  4. 検証結果が正常の場合、正常時終了処理を登録します。
  5. 相手先にConfirmDocumentResponse(result=true)メッセージを送信します。
■正常ケース(送信データなし)

  1. GetDocumentメッセージを受信します。
  2. 検証結果が正常、かつ送信データがない場合、相手先にGetDocumentResponse(result=false)メッセージを送信します。
■異常ケース(GetDocument)

  1. GetDocumentメッセージを受信します。
  2. エラーが発生した場合、相手先にSOAP Fault(HTTP Response=500)、またはHTTPエラーを送信します。
■異常ケース(ConfirmDocument)

  1. GetDocumentメッセージを受信します。
  2. 検証結果が正常の場合、相手先にGetDocumentResponse(result=true)メッセージを送信します。
  3. ConfirmDocumentメッセージを受信します。
  4. エラーが発生した場合、相手先にSOAP Fault(HTTP Response=500)、またはHTTPエラーを送信します。

6.2.4 配送保証

JX手順では、配送保証として以下の機能を実装しています。

6.2.4.1 損失防止

JX手順は通信経路上の異常により、送信されたデータが受信側に到達しなかった場合に、それを検知して再度データを送信します。

■送信(クライアント)

クライアント側はPutDocumentメッセージでビジネスドキュメントを送信後、一定時間PutDocumentResponseメッセージが返ってこない場合には、PutDocumentメッセージを再送信します。

再送信はクライアントが定める間隔、回数でリトライを繰り返し、それでも送信できない場合はリトライオーバーとなります。

■受信(クライアント)

クライアント側はGetDocumentメッセージでビジネスドキュメントの受信要求後、一定時間GetDocumentResponseメッセージが返ってこない場合に、GetDocumentメッセージを再送信します。

再送信はクライアントが定める間隔、回数でリトライを繰り返し、それでも送信できない場合はリトライオーバーとなります。

6.2.4.2 重複破棄

JX手順は先発のビジネスドキュメントと再送したビジネスドキュメントの両方が受信側システムに到達した場合に、受信側のアプリケーションに同じビジネスドキュメントを渡しません。

■受信(サーバー)

クライアント側はPutDocumentメッセージでビジネスドキュメントを送信後、一定時間PutDocumentResponseメッセージが返ってこない場合にPutDocumentメッセージを再送信します。

サーバー側は1回目のPutDocumentでビジネスドキュメントをすでに受信済みのため、2回目の受信ビジネスドキュメントを破棄し、PutDocumentResponse=falseを返します。

ビジネスドキュメントのチェックにはMessageIdを使用します。

クライアント側はPutDocumentResponse=falseをすでに送信済みとみなし、該当ビジネスドキュメントを送信済みにします。

■送信(サーバー)

クライアント側はConfirmDocumentメッセージでビジネスドキュメントの受信要求後、一定時間HttpResponseが返ってこない場合にConfirmDocumentメッセージを再送信します。

サーバー側は1回目のConfirmDocumentでビジネスメッセージをすでに送信済みのため、ConfirmDocumentResponseでConfirmDocumentResponse=falseを返します。

クライアント側はConfirmDocumentResponseがfalseの場合は、受信確定通知済みとみなし、ConfirmDocumentResponseが正常時と同様の処理を行います。

6.2.5 連結送信

JX手順サーバーでは、ドキュメント種別指定あり(2007年度版運用)のGetDocumentを受信した場合にのみ、複数の通信タスクを1つのファイルとして送信することができます。

連結送信は複数ファイルを単純連結する機能であり、CSV形式などファイルの結合が可能な場合に使用します。

ファイルの形式がXML形式や ZIP 圧縮形式などの場合、そのまま連結すると不正な形式で送信され、通信相手先で予期せぬ障害を招く可能性があります。通信相手先とのデータ形式をご確認いただきご使用下さい。また、連結送信が行われた場合、送信するGetDocumentResponseメッセージのCompressType要素は空になります。

TOP