2017-03-08 2 views
0

ich einen Datendienst GetDepartmentData Service erstellt haben, wie unten:WSO EI6-How eine Antwort von einem DSS in eine CSV-schreiben-Datei

<data enableBatchRequests="true" name="GetDepartmentDataService" transports="http https local"> 
    <config enableOData="false" id="LocalXEDS"> 
     <property name="carbon_datasource_name">LocalXEDB</property> 
    </config> 
    <query id="GetDeptQuery" useConfig="LocalXEDS"> 
     <sql>select dept_id,name,location from dept&#xd;where dept_id=?</sql> 
     <result element="Departments" rowName="Department"> 
     <element column="dept_id" name="dept_id" xsdType="string"/> 
     <element column="name" name="name" xsdType="string"/> 
     <element column="location" name="location" xsdType="string"/> 
     </result> 
     <param name="dept_id" sqlType="INTEGER"/> 
    </query> 
    <operation name="GetDepartment_Operation"> 
     <description> Returns the departments for the given department id.                  &#xd;         </description> 
     <call-query href="GetDeptQuery"> 
     <with-param name="dept_id" query-param="dept_id"/> 
     </call-query> 
    </operation> 
</data> 

ich eine WSDL-Endpunkt „MyEP“ erstellt haben, für die Daten Service und ich habe ESB erstellt, um diesen Datendienst aufzurufen, und ich möchte die Antwort in CSV-Datei schreiben. Unten ist der Code für gleiche:

<payloadFactory media-type="xml"> 
       <format> 
        <dat:GetDepartment_Operation xmlns:dat="http://ws.wso2.org/dataservice"> 
         <dat:dept_id>$1</dat:dept_id> 
        </dat:GetDepartment_Operation> 
       </format> 
       <args> 
        <arg evaluator="xml" expression="//soapenv:Envelope/soapenv:Body/dat:GetDepartment_Operation/dat:dept_id" xmlns:dat="http://ws.wso2.org/dataservice" xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"/> 
       </args> 
      </payloadFactory> 
      <call> 
       <endpoint key="myEP"/> 
      </call> 
      <log level="full"/> 
      <property name="transport.vfs.ReplyFileURI" scope="transport" type="STRING" value="file:///C:/Shilpa/sourcecode/FileConnector/Inbound?transport.vfs.Append=true"/> 
      <property name="transport.vfs.ReplyFileName" scope="transport" type="STRING" value="order.csv"/> 
      <property name="FORCE_SC_ACCEPTED" scope="axis2" type="STRING" value="true"/> 
      <property name="REST_URL_POSTFIX" scope="axis2" type="STRING" value=""/> 

      <property name="OUT_ONLY" scope="default" type="STRING" value="true"/> 
      <datamapper config="gov:datamapper/DBReadWritePSconfig.dmc" inputSchema="gov:datamapper/DBReadWritePSconfig_inputSchema.json" inputType="JSON" outputSchema="gov:datamapper/DBReadWritePSconfig_outputSchema.json" outputType="CSV"/> 
      <call> 
       <endpoint> 
        <address uri="vfs:file:///C:/Shilpa/sourcecode/FileConnector/Inbound/order.csv"/> 
       </endpoint> 
      </call> 

ich die unten Protokollmeldung und Störung erhalte:

 WARN - XMLInputReader Element name not found : axis2ns5:Departments 
[2017-03-08 21:00:36,240] [] ERROR - DataMapperMediator DataMapper mediator : mapping failed 
Input type is incorrect or Invalid element found in the message payload : axis2ns5:Departments 

Antwort

0

Vor dem DataMapper Mediator Sie die Nutzlast ändern muss, damit er nur den Knoten Abteilung enthält. Sie können den Anreicherungsvermittler wie folgt verwenden.

... 
<enrich> 
      <source xmlns:p="http://ws.wso2.org/dataservice" 
        clone="true" 
        xpath="$body//p:Departments/*[1]"/> 
      <target type="body"/> 
     </enrich> 
<datamapper config="gov:datamapper/DBReadWritePSconfig.dmc" inputSchema="gov:datamapper/DBReadWritePSconfig_inputSchema.json" inputType="JSON" outputSchema="gov:datamapper/DBReadWritePSconfig_outputSchema.json" outputType="CSV"/> 
... 
+0

Vielen Dank für Ihre Antwort Ernesto ... Ich habe versucht, Enrich Mediator, aber es ist immer noch die gleichen Fehler für die Abteilung jetzt. FEHLER - DataMapperMediator DataMapper Mediator: Zuordnung fehlgeschlagen Eingabetyp ist falsch oder ungültiges Element in der Nachrichtennutzlast gefunden: axis2ns5: Abteilung – Shilpa

+0

In diesem Fall müssen Sie mir Ihre Datamapping-Konfiguration zeigen, um das Szenario in meiner Umgebung zu reproduzieren. – Ernesto

+0

Hier ist meine Datenzuordnungskonfiguration in meiner Antwort. – Shilpa

0
map_S_Envelope_S_root = function(){ 
var outputroot={}; 

var count_i_Department = 0; 
outputroot = {}; 
outputroot.Departments = {}; 
outputroot.Departments.Department = {}; 

for(i_Department in inputsoapenv_Envelope.soapenv_Body.Departments.Department){ 
outputroot.Departments.Department.dept_id = inputsoapenv_Envelope.soapenv_Body.Departments.Department[i_Department].dept_id; 
outputroot.Departments.Department.name = inputsoapenv_Envelope.soapenv_Body.Departments.Department[i_Department].name; 
outputroot.Departments.Department.location = inputsoapenv_Envelope.soapenv_Body.Departments.Department[i_Department].location; 

count_i_Department++; 
} 
return outputroot; 
}; 
+0

in meinem Fall ist es map_S_Department_S_Departments = function() { var outputDepartments = {}; outputDepartments = {}; outputDepartments.Department = {}; outputDepartments.Department.dept_id = inputDepartment.dept_id; outputDepartments.Department.name = inputDepartment.name; outputDepartments.Department.location = inputDepartment.location; Rückgabe AusgangDepartments; }; – Ernesto

+0

Danke ... können Sie bitte die Ein- und Ausgabedateien teilen, die Sie für Data Mapper verwendet haben. – Shilpa

0

My Eingabedatei Beispiel (xml)

<?xml version="1.0" encoding="UTF-8"?> 
    <Department> 
     <dept_id>1</dept_id> 
     <name>dep1</name> 
     <location>loc1</location> 
    </Department> 

My Ausgabedatei Beispiel (CSV)

id_dept, Name, Ort 1, dep1, loc1

Mein InputSchema

{ 
    "$schema" : "http://wso2.org/json-schema/wso2-data-mapper-v5.0.0/schema#", 
    "id" : "http://wso2jsonschema.org", 
    "title" : "Department", 
    "type" : "object", 
    "properties" : { 
    "dept_id" : { 
     "id" : "http://wso2jsonschema.org/dept_id", 
     "type" : "number" 
    }, 
    "name" : { 
     "id" : "http://wso2jsonschema.org/name", 
     "type" : "string" 
    }, 
    "location" : { 
     "id" : "http://wso2jsonschema.org/location", 
     "type" : "string" 
    } 
    } 
} 

Mein OutputSchema

{ 
    "$schema" : "http://wso2.org/json-schema/wso2-data-mapper-v5.0.0/schema#", 
    "id" : "http://wso2jsonschema.org", 
    "title" : "Departments", 
    "type" : "object", 
    "properties" : { 
    "Department" : { 
     "id" : "http://wso2jsonschema.org/Department", 
     "type" : "object", 
     "properties" : { 
     "dept_id" : { 
      "id" : "http://wso2jsonschema.org/Department/dept_id", 
      "type" : "number" 
     }, 
     "name" : { 
      "id" : "http://wso2jsonschema.org/Department/name", 
      "type" : "string" 
     }, 
     "location" : { 
      "id" : "http://wso2jsonschema.org/Department/location", 
      "type" : "string" 
     } 
     } 
    } 
    }, 
    "namespaces" : [ { 
    "prefix" : "axis2ns4", 
    "url" : "http://ws.wso2.org/dataservice" 
    } ] 
} 
+0

Dank Ernesto, es funktioniert jetzt. Aber es funktioniert nur für einen Datensatz, wenn mehrere Datensätze abgerufen werden, schreibt es nur den letzten Datensatz in der CSV-Datei. – Shilpa

0

Seine Arbeit !!

@ Ernesto Vielen Dank für Ihre Hilfe .. Ich änderte meine dmc, wie unten und es funktioniert absolut in Ordnung ..

map_S_Departments_S_Departments = function(){ 
var outputDepartments={}; 

var count_i_Department = 0; 
outputDepartments = {}; 
outputDepartments.Department = []; 

for(i_Department in inputDepartments.Department){ 
outputDepartments.Department[count_i_Department] = {}; 
outputDepartments.Department[count_i_Department].dept_id = inputDepartments.Department[i_Department].dept_id; 
outputDepartments.Department[count_i_Department].name = inputDepartments.Department[i_Department].name; 
outputDepartments.Department[count_i_Department].location = inputDepartments.Department[i_Department].location; 

count_i_Department++; 
} 
return outputDepartments; 
}; 

Ausgang:

110.0,PRODUCTION SUPPORT,MONTEREY, CA 
110.0,DOCUMENTATION,WEXFORD, PA 
110.0,ABC,wer 
Verwandte Themen