2016-09-07 19 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轉換器,只需在dataweave中更改此對象即可。 '%output application/xml' – AnupamBhusari

回答

1

從你的代碼生成的XML是無效的。你必須改變你的dataweave腳本。這是對我工作的罰款

<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> 

這是路由的messge生成的文件無效時出現錯誤流。

希望這會有所幫助。

+0

@ 6340408,還測試了你的代碼..它的工作正常。當正確的XML生成。只需使用答案中提到的數據織物即可。 – AnupamBhusari

+0

感謝anupam,它工作正常。但在我的情況下,我從數據庫獲取數據,在該地址字段可能爲空或值。我將其轉換爲xml格式,然後將其映射到xsd。在作爲nillbale = false給出的xsd地址列中。每當我得到的地址爲空時,都需要引發異常。我已經把地址中沒有空的數據,我試圖根據你的建議來運行流,但它會去error_invalid_data流。我該如何解決請告訴我。 – venkat

+0

如果你想在dataweave中傳遞put條件來檢查是否爲null並且用bank替換。如下所示:Address:payload01.Address when payload01.Address!= null otherwise「」' – AnupamBhusari