Ich muss die Reihenfolge der Elemente von der eingehenden XML-Anfrage gegen xsd
in Apache-Camel validieren. Die eingehende Anfrage wäre in den meisten Fällen nur ein Teil der xsd, die als gültige Anfrage betrachtet werden sollte und nur nach der Reihenfolge der Elemente sucht.Apache Camel Validierung Eingang xml Bestellung gegen XSD
Code:
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})") ;
Ausgabe
Als ich validator:test.xsd
in der Route-Konfiguration verwenden, es sucht nicht nach Bestellung. Es durchsucht jedoch das Anforderungs-XML nach allen Elementen in der Ausnahme "xsd" und "throws". Wenn ich minoccurs von xsd für einen bestimmten Knoten entferne. Dies zeigt an, dass der Validator aufgerufen wird, aber er sucht einfach nicht nach der Reihenfolge der Elemente in xsd. (Anmerkung: Ich habe verwendet xs: sequence in meinem 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>
Anfrage xml
Haben die Bestellung von Element ProductID geändert, die validiert bekommen sollte und werfen ein Ausnahme.
<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>
Schreiben Sie eine [mcve] (die XML und XSD enthält), die das Problem aufweist. Vielen Dank. – kjhughes
@kjhughes, haben die xsd- und xml-Details hinzugefügt. Jeder Vorschlag für eine mögliche Lösung wird geschätzt. – JavaDev