Flex Gateway新着情報
Governance新着情報
Monitoring API ManagerXML Module の Validate schema 操作は、入力コンテンツが指定した XSD スキーマに準拠していることを検証します。操作では、カンマ (,
) を区切り文字として使用して多数のスキーマを参照できます。
デフォルトではこの操作はメッセージペイロードレベルで入力ドキュメントを検索しますが、独自の入力を指定することもできます。
Validation Module の All スコープ内で Validate schema 操作を使用できます。
次の例では、スクリプトが含まれる XML スキーマを検証します。
Studio で、Validate schema 操作をフローにドラッグします。
[Schemas (スキーマ)] 項目で、カンマを使用してファイル名を区切ってスキーマファイルを追加します (例: schema1.xsd, schema2.xsd
)。
[Flow Reference] コンポーネントを [Validate schema] 操作の右にドラッグします。
[Flow name (ファイル名)] を processValidDocument
に設定します。
設定 XML エディターでは、<xml-module:validate-schema>
設定は次のように記述されます。
<flow name="process">
<xml-module:validate-schema schemas="schema1.xsd, schema2.xsd" />
<flow-ref name="processValidDocument" />
</flow>
xml
次の例では、独自の入力を行って Validate schema 操作を設定します。
Studio で、File Read 操作をフローにドラッグします。
設定画面で、[File Path (ファイルパス)] を document.xml
に設定します。
[Advanced (詳細)] タブで、[Target Variable (対象変数)] を xmlDoc
に設定します。
XML Module の [Validate schema] 操作を [Read] 操作の右にドラッグします。
[Schemas (スキーマ)] 項目で、スキーマを追加し、カンマを使用してそれらの名前を区切ります (例: schema1.xsd, schema2.xsd
)。
[Content (コンテンツ)] 項目を検証する XML コンテンツに設定します (例: #[vars.xmlDoc]
)。
[Flow Reference] コンポーネントを [Validate schema] 操作の右にドラッグします。
[Flow name (ファイル名)] を processValidDocument
に設定します。
設定 XML エディターでは、<xml-module:validate-schema>
および <xml-module:content>
設定は次のように記述されます。
<flow name="process">
<file:read path="document.xml" target="xmlDoc" />
<xml-module:validate-schema schemas="schema1.xsd, schema2.xsd">
<xml-module:content>#[vars.xmlDoc]</xml-module:content>
</xml:module:validate-schema>
<flow-ref name="processValidDocument" />
</flow>
xml
検証に成功した場合はフローの次の操作に進みます。ただし、検証に失敗すると、XML-MODULE:SCHEMA_NOT_HONOURED
エラーが発生します。
検証に失敗する理由は複数あるため、エラーの説明にはメッセージのリストが含まれます。各メッセージには、次のような構造の SchemaViolation
オブジェクトが含まれます。
{
lineNumber: Number,
columnNumber: Number,
description: String
}
yaml
次の例では、Validate schema 操作と Error Handler コンポーネントの XML-MODULE:SCHEMA_NOT_HONOURED
エラーを設定します。
Studio で Try スコープコンポーネントをフローにドラッグします。
XML Module の [Validate schema] 操作を [Try] スコープコンポーネントにドラッグします。
[Schemas (スキーマ)] 項目で、スキーマを追加します (例: schema.xsd
)。
フローで、[Error handling (エラー処理)] 矢印をクリックして、[error-handling (エラー処理)] セクションを展開します。
[On Error Propagate] コンポーネントを [Error handling (エラー処理)] セクションにドラッグします。
[Type (種別)] 項目をこの On-Error 戦略によって処理される Mule エラーに設定します (例: XML-MODULE:SCHEMA_NOT_HONOURED
)。
[Enable Notifications (通知を有効化)] および [Log Exception (例外を記録)] 項目をオフにします。
[For Each] スコープコンポーネントを [On Error Propagate] コンポーネントにドラッグして各 errorMessage.payload
を反復処理します。
[Collection (コレクション)] 項目を、ペイロードを各部分に分割する式に設定します (例: #[error.errorMessage.payload]
)。
[Logger] コンポーネントを [For Each] スコープコンポーネントにドラッグして、XML Module エラーを記録します。
[Message (メッセージ)] 項目を、メッセージを記述する SchemaViolation
オブジェクトが含まれる式に設定します (例: #['At line: $(payload.lineNumber), column: $(payload.columnNumber) → $(payload.description)']
)。
変更を保存します。
Package Explorer でプロジェクト名をクリックし、[Run (実行)] > [Run As (別のユーザーとして実行)] > [Mule Application (Mule アプリケーション)] をクリックします。
コンソールビューに移動して、ロガーメッセージを読み取ります。
ERROR 2018-02-16 14:35:45,722 [[MuleRuntime].cpuIntensive.01: [SchemaValidationTestCase#extractErrorsUsingExpressions].extractErrorsFromException.CPU_INTENSIVE @411e886b] org.mule.runtime.core.internal.processor.LoggerMessageProcessor: At line: -1, column: -1 -> cvc-complex-type.2.4.a: Invalid content was found starting with element 'fail'. One of '{used}' is expected.
設定 XML エディターでは、<on-error-propagate type="XML-MODULE:SCHEMA_NOT_HONOURED">
設定は次のように記述されます。
<flow name="extractErrorsFromException">
<try>
<xml-module:validate-schema schemas="schema.xsd" />
<error-handler>
<on-error-propagate type="XML-MODULE:SCHEMA_NOT_HONOURED">
<foreach collection="#[error.errorMessage.payload]">
<logger level="ERROR" message="#['At line: $(payload.lineNumber), column: $(payload.columnNumber) -> $(payload.description)']" />
</foreach>
</on-error-propagate>
</error-handler>
</try>
</flow>
xml
次の例では、Validate schema 操作の [Schema contents (スキーマコンテンツ)] 項目を設定します。スキーマテキストをこの項目に入力して、スキーマ検証を実行します。
スキーマコンテンツを追加するには、スキーマとスキーマコンテンツの両方ではなくいずれかのみを指定します。[Schemas (スキーマ)] 項目でファイルをアップロードするか、または [Schema contents (スキーマコンテンツ)] 項目で直接スキーマテキストコンテンツを手動で追加することができます。 |
Studio で、フローから Validate schema 操作を選択します。
Validate schema 操作の設定画面で、[Schema contents (スキーマコンテンツ)] を [Edit inline (インライン編集)] に設定します。
プラス記号をクリックして、スキーマ名とテキストを追加します。
[Schema content (スキーマコンテンツ)] ウィンドウの [Schema name (スキーマ名)] 項目に、schema1.xsd
などのスキーマ名を入力します。
[Schema text (スキーマテキスト)] 項目に、次のようなスキーマテキストコンテンツを入力します。
<?xml version = "1.0"?>
<xs:schema xmlns:xs = "http://www.w3.org/2001/XMLSchema">
<xs:element name = 'class'>
<xs:complexType>
<xs:sequence>
<xs:element name = 'student' type = 'StudentType' minOccurs = '0'
maxOccurs = 'unbounded' />
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:complexType name = "StudentType">
<xs:sequence>
<xs:element name = "firstname" type = "xs:string"/>
<xs:element name = "lastname" type = "xs:string"/>
<xs:element name = "nickname" type = "xs:string"/>
<xs:element name = "marks" type = "xs:positiveInteger"/>
</xs:sequence>
<xs:attribute name = 'rollno' type = 'xs:positiveInteger'/>
</xs:complexType>
</xs:schema>
xml
[Finish (完了)] をクリックします。