xsd
に対して受信XMLリクエストの要素の順序をapache-Camelに検証する必要があります。ほとんどの場合、着信要求はxsdの一部にすぎません。これは有効な要求とみなされ、要素の順序付けを探します。Apache Camel入力xmlをXSDに対して検証する
コード:
router.rest("/testing").id("ENDPOINT-TESTING").post().type(xyz.class).outType(xyz.class).consumes(MIME_TYPE).produces(MIME_TYPE).skipBindingOnErrorCode(true).to("direct:xyz");
router.from("direct:xyz").routeId("handle-xyz-request").to("validator:test.xsd").process("validationProcessor")
.bean(xyzService.class, "processXYZ(${body})") ;
問題
私はルート設定でvalidator:test.xsd
を使用すると、注文を探していません。ただし、要求xmlをスキャンしてxsdのすべての要素が存在するかどうかを調べ、例外をスローします。特定のノードのxsdからminoccurを削除すると。これはバリデーターが呼び出されたことを示しますが、xsdの要素の順序付けは検索されません。 (注:私は、xs使用している:私のXSDでシーケンスを)
XSD
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<xs:schema attributeFormDefault="unqualified"
elementFormDefault="qualified" version="1.0"
xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="y-ML">
<xs:complexType>
<xs:sequence>
<xs:element name="Header" minOccurs="1">
<xs:complexType>
<xs:sequence>
<xs:element name="Product">
<xs:complexType>
<xs:sequence>
<xs:element name="Supplier">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:maxLength value="12" />
</xs:restriction>
</xs:simpleType>
</xs:element>
<xs:element type="xs:string" name="ID" />
<xs:element type="xs:string" name="EID" />
<xs:element name="ProductID">
<xs:complexType>
<xs:simpleContent>
<xs:extension base="xs:string">
<xs:attribute type="xs:string" name="type" />
</xs:extension>
</xs:simpleContent>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="Provisioning" minOccurs="0">
<xs:complexType>
<xs:sequence>
<xs:element name="ServiceFlag" maxOccurs="unbounded"
minOccurs="0">
<xs:complexType>
<xs:sequence>
<xs:element type="xs:string" name="Service" />
<xs:element type="xs:string" name="FlagValue" />
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element type="xs:string" name="Brand" />
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
<xs:attribute type="xs:float" name="version" />
</xs:complexType>
</xs:element>
</xs:schema>
要求XML
は持っているが、検証とスローを取得すべき要素のProductIDの順序を変更しました例外。
<y-ML version="1.0">
<Header>
<Product>
<ProductID type="PID">658932145</ProductID>
<Supplier>Samsung</Supplier>
<ID>213517</ID>
<EID>SEDT7888125</EID>
</Product>
</Header>
</y-ML>
問題を示す[mcve](XMLとXSDを含む)を投稿してください。ありがとう。 – kjhughes
@kjhughes、xsdとxmlの詳細を追加しました。可能な解決策に関する提案は高く評価されます。 – JavaDev