簡體   English   中英

引起原因:org.xml.sax.SAXParseException:文件過早結束

[英]Caused by: org.xml.sax.SAXParseException: Premature end of file

我正在嘗試將一個簡單的XML文件轉換為CSV文件,當使用顯示輸出的在線工具時,該部分進行得很完美。

當我使用基於Java的集成軟件通過代碼運行文件時,會引發錯誤; 原因:org.xml.sax.SAXParseException:文件的結尾過早。

下面我包括了輸入XML,XSLT和輸出(我確定這里不需要顯示輸出)

我使用XML到CSV的示例作為參考,輸出效果很好,我刪除了一些不必要的元素/標簽,這些元素/標簽沒有改變期望的結果

輸入:

<?xml version="1.0" encoding="UTF-8"?>
<Results>
   <Row>
      <soldto>000999900</soldto>
      <namelong>long name of company</namelong>
      <postcode>po3stc0d3</postcode>
      <AltVendDesc>some company name</AltVendDesc>
      <prodcode>09060170</prodcode>
      <proddescription>productdescriptionhere</proddescription>
      <billingdoc>0099999990</billingdoc>
      <bdate>20190905</bdate>
      <invqty>12</invqty>
      <CustPrice>7.3700</CustPrice>
      <Gross_inc.batchcharge_>88.4400</Gross_inc.batchcharge_>
      <VenProdCode>AA1234</VenProdCode>
  </Row>
</Results>

碼:

<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0"  xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
        <?xml-stylesheet type="text/xsl"?>
            <xsl:output method="text"/>
            <xsl:variable name="delimiter" select="','"/>
        <xsl:template match="/">
                        <tr>
                            <th style="text-align:Left">soldto</th>
                                <xsl:value-of select="$delimiter"/>
                            <th style="text-align:Left">namelong</th>
                                <xsl:value-of select="$delimiter"/>
                            <th style="text-align:Left">postcode</th>
                                <xsl:value-of select="$delimiter"/>
                            <th style="text-align:Left">AltVendDesc</th>
                                <xsl:value-of select="$delimiter"/>
                            <th style="text-align:Left">prodcode</th>
                                <xsl:value-of select="$delimiter"/>
                            <th style="text-align:Left">proddescription</th>
                                <xsl:value-of select="$delimiter"/>
                            <th style="text-align:Left">billingdoc</th>
                                <xsl:value-of select="$delimiter"/>
                            <th style="text-align:Left">bdate</th>
                                <xsl:value-of select="$delimiter"/>
                            <th style="text-align:Left">invqty</th>
                                <xsl:value-of select="$delimiter"/>
                            <th style="text-align:Left">CustPrice</th>
                                <xsl:value-of select="$delimiter"/>
                            <th style="text-align:Left">Gross_inc.batchcharge_</th>
                                <xsl:value-of select="$delimiter"/>
                            <th style="text-align:Left">VenProdCode</th>
                                <xsl:text>&#xa;</xsl:text>
                        </tr>
                        <xsl:for-each select="Results/Row">
                            <tr>        
                                <td>              
                                    <xsl:value-of select="soldto"/>
                                    <xsl:value-of select="$delimiter"/>
                                </td>        
                                <td>            
                                    <xsl:value-of select="namelong"/>
                                    <xsl:value-of select="$delimiter"/>
                                </td>        
                                <td>            
                                    <xsl:value-of select="postcode"/>
                                    <xsl:value-of select="$delimiter"/>
                                </td>        
                                <td>            
                                    <xsl:value-of select="AltVendDesc"/>
                                    <xsl:value-of select="$delimiter"/>
                                </td>        
                                <td>            
                                    <xsl:value-of select="prodcode"/>
                                    <xsl:value-of select="$delimiter"/>
                                </td>   
                                <td>              
                                    <xsl:value-of select="proddescription"/>
                                    <xsl:value-of select="$delimiter"/>
                                </td>        
                                <td>            
                                    <xsl:value-of select="billingdoc"/>
                                    <xsl:value-of select="$delimiter"/>
                                </td>        
                                <td>            
                                    <xsl:value-of select="bdate"/>
                                    <xsl:value-of select="$delimiter"/>
                                </td>        
                                <td>            
                                    <xsl:value-of select="invqty"/>
                                    <xsl:value-of select="$delimiter"/>
                                </td>        
                                <td>            
                                    <xsl:value-of select="CustPrice"/>
                                    <xsl:value-of select="$delimiter"/>
                                </td> 
                                <td>              
                                    <xsl:value-of select="Gross_inc.batchcharge_"/>
                                    <xsl:value-of select="$delimiter"/>
                                </td> 
                                <td>              
                                    <xsl:value-of select="VenProdCode"/>        
                                </td> 
                                    <xsl:text>&#xa;</xsl:text>
                            </tr>
                        </xsl:for-each>
        </xsl:template>
    </xsl:stylesheet>

輸出為:

soldto,namelong,postcode,AltVendDesc,prodcode,proddescription,billingdoc,bdate,invqty,CustPrice,Gross_inc.batchcharge_,VenProdCode
000999900,long name of company,po3stc0d3,some company name,09060170,productdescriptionhere,0099999990,20190905,12,7.3700,88.4400,AA1234

堆棧跟蹤:

2019-09-06T10:39:35,584 DEBUG [Transform_customer_Data@Consume from database] [com.adaptris.core.StandardWorkflow] handling bad message
2019-09-06T10:39:35,585 DEBUG [Transform_customer_Data@Consume from database] [com.adaptris.core.FixedIntervalPoller] time to process [1] messages [8] ms
2019-09-06T10:39:55,587 DEBUG [Transform_customer_Data@Consume from database] [com.adaptris.core.StandardWorkflow] start processing msg [DefaultAdaptrisMessageImp[uniqueId=5225a706-fe60-433b-9b42-dccc1f5f4673,metadata=[]]]
2019-09-06T10:39:55,588 DEBUG [Transform_customer_Data@Consume from database] [com.adaptris.core.ServiceList] Executing doService on [XmlTransformService(Transform_Data)]
2019-09-06T10:39:55,589 DEBUG [Transform_customer_Data@Consume from database] [com.adaptris.core.transform.XmlTransformService] using URL [./XSLT/transform.XSLT]
2019-09-06T10:39:55,591 ERROR [Transform_customer_Data@Consume from database] [com.adaptris.core.StandardWorkflow] Exception from ServiceCollection
com.adaptris.core.ServiceException: failed to transform message
    at com.adaptris.core.transform.XmlTransformService.doTransform(XmlTransformService.java:190) ~[interlok-core.jar!/:3.9.0-RELEASE]
    at com.adaptris.core.transform.XmlTransformService.doService(XmlTransformService.java:127) ~[interlok-core.jar!/:3.9.0-RELEASE]
    at com.adaptris.core.ServiceList.applyServices(ServiceList.java:99) ~[interlok-core.jar!/:3.9.0-RELEASE]
    at com.adaptris.core.ServiceCollectionImp.doService(ServiceCollectionImp.java:198) ~[interlok-core.jar!/:3.9.0-RELEASE]
    at com.adaptris.core.StandardWorkflow.handleMessage(StandardWorkflow.java:90) [interlok-core.jar!/:3.9.0-RELEASE]
    at com.adaptris.core.StandardWorkflow.onAdaptrisMessage(StandardWorkflow.java:66) [interlok-core.jar!/:3.9.0-RELEASE]
    at com.adaptris.core.PollingTrigger.processMessages(PollingTrigger.java:91) [interlok-core.jar!/:3.9.0-RELEASE]
    at com.adaptris.core.PollerImp.processMessages(PollerImp.java:74) [interlok-core.jar!/:3.9.0-RELEASE]
    at com.adaptris.core.FixedIntervalPoller$PollerTask.run(FixedIntervalPoller.java:60) [interlok-core.jar!/:3.9.0-RELEASE]
    at java.util.concurrent.Executors$RunnableAdapter.call(Unknown Source) [?:1.8.0_211]
    at java.util.concurrent.FutureTask.runAndReset(Unknown Source) [?:1.8.0_211]
    at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$301(Unknown Source) [?:1.8.0_211]
    at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(Unknown Source) [?:1.8.0_211]
    at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source) [?:1.8.0_211]
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source) [?:1.8.0_211]
    at java.lang.Thread.run(Unknown Source) [?:1.8.0_211]
Caused by: org.xml.sax.SAXParseException: Premature end of file.
    at org.apache.xerces.parsers.DOMParser.parse(Unknown Source) ~[xercesImpl.jar!/:?]
    at org.apache.xerces.jaxp.DocumentBuilderImpl.parse(Unknown Source) ~[xercesImpl.jar!/:?]
    at com.adaptris.util.text.xml.XmlTransformer.createSource(XmlTransformer.java:161) ~[interlok-core.jar!/:3.9.0-RELEASE]
    at com.adaptris.util.text.xml.XmlTransformer.createSource(XmlTransformer.java:153) ~[interlok-core.jar!/:3.9.0-RELEASE]
    at com.adaptris.util.text.xml.XmlTransformer.transform(XmlTransformer.java:95) ~[interlok-core.jar!/:3.9.0-RELEASE]
    at com.adaptris.core.transform.XmlTransformService.doTransform(XmlTransformService.java:184) ~[interlok-core.jar!/:3.9.0-RELEASE]

就像我前面說的那樣很好,但是當通過使用Java的集成工具時,出現異常錯誤。

遺憾的是,無法更改輸入文件。

更新:嘗試發布我的代碼時,引號是錯誤,已被更新。

已添加堆棧跟蹤

修復它:問題是使用者沒有獲取文件,因此它實際上什么也沒做,而是試圖對其進行轉換。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM