2016-09-07 3 views
0

スキーマ検証を使用してXSDでXMLを検証しています。 デバッグモードで実行している間は、スキーマの検証後も続行できません。 私は以下のスニペットを過ぎました。スキーマ検証後に次のステップを進める方法

<flow name="xmlwithxsdofdbFlow"> 
    <poll doc:name="Poll"> 
    <fixed-frequency-scheduler frequency="10000"/> 
    <db:select config-ref="Generic_Database_Configuration" doc:name="Database"> 
     <db:parameterized-query> 
     <![CDATA[select * from tblcustomer where batch='N';]]> 
     </db:parameterized-query> 
    </db:select> 
    </poll> 
    <dw:transform-message doc:name="Transform Message"> 
    <dw:set-payload><![CDATA[%dw 1.0 
%output application/java 
--- 
payload map 
{ 
    id : $.Id, 
    customerid : $.Customerid, 
    address : $.Address, 
    dob : $.Dob, 
    firstname : $.Firstname, 
    lastname : $.LastName, 
    middlename : $.Middlename, 
    phoneno : $.Phoneno, 
    batch : $.Batch, 
    recorddate : $.RecordDate 

}]]> 
    </dw:set-payload> 
    </dw:transform-message> 
    <mulexml:object-to-xml-transformer doc:name="Object to XML"/> 
    <logger message="#[payload]" level="INFO" doc:name="Logger"/> 
    <mulexml:schema-validation-filter 
     schemaLocations="customer_validation.xsd" 
     returnResult="false" doc:name="Schema Validation"/> 
    <logger message="#[payload]" level="INFO" doc:name="Logger"/> 

これはXSDファイルです:

<?xml version="1.0" encoding="UTF-8"?> 
    <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" attributeFormDefault="unqualified"> 
    <!-- XML Schema Generated from XML Document on --> 
    <!-- Fri Sep 02 2016 15:02:35 GMT+0530 (India Standard Time) --> 
    <!-- with XmlGrid.net Free Online Service http://xmlgrid.net --> 
    <xs:element name="Customer_schema_validation"> 
    <xs:complexType> 
     <xs:sequence> 
     <xs:element name="CustomerData" maxOccurs="unbounded"> 
      <xs:complexType> 
      <xs:sequence> 
       <xs:element name="Id" type="xs:int"></xs:element> 
       <xs:element name="Customerid" type="xs:string"></xs:element> 
       <xs:element name="Address" type="xs:string" nillable="false"></xs:element> 
       <xs:element name="Dob" type="xs:date"></xs:element> 
       <xs:element name="Firstname" type="xs:string"></xs:element> 
       <xs:element name="LastName" type="xs:string"></xs:element> 
       <xs:element name="Middlename" type="xs:string"></xs:element> 
       <xs:element name="Phoneno" type="xs:string"></xs:element> 
       <xs:element name="Batch" type="xs:string"></xs:element> 
       <xs:element name="RecordDate" type="xs:date"></xs:element> 
      </xs:sequence> 
      </xs:complexType> 
     </xs:element> 
     </xs:sequence> 
    </xs:complexType> 
    </xs:element> 
</xs:schema> 
+0

スニペットを貼り付けるのを忘れているかもしれません。また、あなたの質問は明確ではありませんか? – AnupamBhusari

+0

xmlフローが利用可能になりました。ありがとうございました。 – venkat

+0

ありがとうございました。また、customer_validation.xsdを共有することもできます。その前に、オブジェクトツーXMLトランスフォーマーは、データウェイブでこれを変更する必要はありません。 '%output application/xml' – AnupamBhusari

答えて

1

コードから生成されたXMLが有効ではありません。あなたはデータウィークスクリプトを変更する必要があります。これは正常に動作しています

<file:connector name="File" autoDelete="true" streaming="true" validateConnections="true" doc:name="File"/> 
    <mulexml:schema-validation-filter schemaLocations="customer_validation.xsd" returnResult="false" name="Schema_Validation" 
     doc:name="Schema Validation" /> 

    <flow name="testFlow"> 
     <file:inbound-endpoint path="tmp" connector-ref="File" responseTimeout="10000" doc:name="File" mimeType="application/json"/> 
     <dw:transform-message metadata:id="aef6cf8e-4db2-4e6e-9838-81f7aedff827" doc:name="Transform Message"> 
      <dw:input-payload mimeType="application/json"/> 
      <dw:set-payload><![CDATA[%dw 1.0 
%output application/xml 
--- 
{ 
    Customer_schema_validation: { 
     (payload map ((payload01 , indexOfPayload01) -> { 
      CustomerData: { 
       Id: payload01.Id, 
       Customerid: payload01.Customerid, 
       Address: payload01.Address, 
       Dob: payload01.Dob, 
       Firstname: payload01.Firstname, 
       LastName: payload01.LastName, 
       Middlename: payload01.Middlename, 
       Phoneno: payload01.Phoneno, 
       Batch: payload01.Batch, 
       RecordDate: payload01.RecordDate 
      } 
     })) 
    } 
}]]></dw:set-payload> 
     </dw:transform-message> 
     <logger message="#[message.payloadAs(java.lang.String)]" level="INFO" doc:name="Logger"/> 
     <message-filter onUnaccepted="error_invalid_data" doc:name="Message"> 
      <mulexml:schema-validation-filter schemaLocations="customer_validation.xsd" returnResult="false"/> 
     </message-filter> 

    <logger message="#[payload]" level="INFO" doc:name="Logger"/> 

    </flow> 

    <flow name="error_invalid_data" > 
     <logger message="ERROR: MESSAGE PAYLOAD: #[message.payload]" level="INFO" doc:name="Logger" /> 
    </flow> 

これは、生成されたファイルが有効でないときにエラーフローへのルーティングメッセージです。

これが役に立ちます。

+0

@ 6340408また、あなたのコードでテストしました。適切なxmlが生成されたとき。答えに記載されているデータシートを使用してください。 – AnupamBhusari

+0

ありがとうございましたanupam、それは正常に動作しています。しかし、私のシナリオでは、dbからデータを取得していますが、そのアドレスフィールドにnull値が入っている可能性があります。 xml形式でxsdでマップを変換しました。 nillbale = falseと指定されたxsd addressカラム。私がアドレスを取得するたびに、例外を発生させる必要があります。私はすでにアドレスにnullのないデータを置いています。私はあなたの提案に従ってフローを実行しようとしましたが、error_invalid_dataのフローに行きます。どうすれば私に提案してください。 – venkat

+0

あなたがnullをチェックし、bank.likeと置き換えるためにデータウェイにput条件を渡したい場合、 'Address:payload01.Address when payload01.Address!= nullそうでなければ" "' – AnupamBhusari

関連する問題