2012-12-17 20 views
5

Dabbling mit WSO2 ESB Beispiel http://wso2.org/library/articles/2011/01/wso2-esb-example-file-processing aber ein Problem zu begegnen, wo, wenn eine einfache CSV-DateiWSO2 ESB Dateiverarbeitung Beispiel Smooks CSV Parser erste Zeile enthält Payload Namensraum

name0,value0 
name1,value1 
name2,value2 
name3,value3 

von Smooks analysiert wird unter Verwendung dieser Konfiguration

<smooks-resource-list xmlns="http://www.milyn.org/xsd/smooks-1.1.xsd" xmlns:csv="http://www.milyn.org/xsd/smooks/csv-1.1.xsd"> 
<csv:reader fields="name,value" /> 
</smooks-resource-list> 

führt zu weitgehend der richtigen Ausgabe, aber die erste Zeile enthält den Nutzlastnamespace, der nicht korrekt ist

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"> 
<soapenv:Body> 
    <text xmlns="http://ws.apache.org/commons/ns/payload">name0,value0 
name1,value1 
name2,value2 
name3,value3</text> 
</soapenv:Body> 
</soapenv:Envelope> 

Wenn also der Wert von first name0 gelesen wird, enthält er auch das, was ebenfalls falsch ist.

Smooks dann wandelt diese in

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"> 
<soapenv:Body> 
    <csv-set> 
     <csv-record number="1"> 
      <name>&lt;?xml version='1.0' encoding='utf-8'?>&lt;text xmlns="http://ws.apache.org/commons/ns/payload">name0</name> 
      <value>value0</value> 
     </csv-record> 
     <csv-record number="2"> 
      <name>name1</name> 
      <value>value1</value> 
     </csv-record> 
     <csv-record number="3"> 
      <name>name2</name> 
      <value>value2</value> 
     </csv-record> 
     <csv-record number="4"> 
      <name>name3</name> 
      <value>value3&lt;/text></value> 
     </csv-record> 
    </csv-set> 
</soapenv:Body> 
</soapenv:Envelope> 

So wird Smooks alle tun es gefragt wird, wie der Eingang den die zuletzt enthält? Jedoch wird die Anzahl der Elemente, die es versteht, als 4 gezählt, so dass es nicht so ist, als ob der CSV eine Kopfzeile hätte. Ich kann (bis zu einem gewissen Grad) auflösen, indem ich eine Kopfzeile einfüge, aber dann ist die Anzahl der Elemente falsch. Ich kann das Ende schließen, indem ich nur einen Wagenrücklauf auf der letzten Zeile von CSV einschließe.

Wie kann ich das beheben? Ich habe vor einem Jahr einen anderen Thread gefunden, der dieselbe Frage stellt, aber keine Antworten.

+1

Wenn Sie die Lösung für Ihre Frage gefunden haben, posten Sie sie bitte als Antwort und akzeptieren Sie sie. Es ist völlig in Ordnung, wenn Sie Ihre eigenen Fragen beantworten können. Auf diese Weise kann der Stackoverflow Ihre Frage als beantwortet registrieren, was nicht möglich ist, wenn Sie dies nur im Titel angeben. – joergl

Antwort

0

Ich habe das jetzt sortiert. In meinem Smooks-Tag

<smooks xmlns="http://ws.apache.org/ns/synapse" config-key="conf:/smooks-config.xml"> 
    <input type="text"/> 
    <output type="xml"/> 
</smooks> 

Ich hatte das erste Eingabeelement auf Xml gesetzt. Durch das Ändern in Text wurde das Problem gelöst. (Im GUI-Editor von WSO2 sind diese Elemente standardmäßig vorhanden, während sie im Tutorial nicht enthalten sind).

+0

Bitte setzen Sie die Antwort in die Antwort, nicht in die Frage. –