我已经创建了一个数据服务GetDepartmentData服务,如下所示:
<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
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. 
 </description>
<call-query href="GetDeptQuery">
<with-param name="dept_id" query-param="dept_id"/>
</call-query>
</operation>
</data>
我创建了一个WSDl Endpoint&#34; MyEP &#34;对于数据服务,我创建了ESB来调用这个数据服务,并且我想在CSV文件中编写响应。以下是相同的代码:
<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>
我收到以下日志消息和错误:
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
答案 0 :(得分:0)
在datamapper介体之前,您必须更改有效负载,使其仅包含Department节点。您可以按如下方式使用rich mediator。
*-----------------------------------------------------------*
| var1 record1 | var1 record2 | var1 record3 | var1 record4 |
| var2 record1 | var2 record2 | var2 record3 | var2 record4 |
| var3 record1 | var3 record2 | var3 record3 | var3 record4 |
*-----------------------------------------------------------*
答案 1 :(得分: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;
};
答案 2 :(得分:0)
我的输入文件示例(xml)
{
"$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"
}
}
}
我的输出文件示例(csv)
id_dept,名称,位置 1,DEP1,LOC1
我的InputSchema
{
"$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"
} ]
}
我的OutputSchema
JSP
答案 3 :(得分:0)
它的工作!!
@ Ernesto非常感谢你的帮助.. 我改变了我的dmc如下,它工作得很好..
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;
};
输出:
110.0,PRODUCTION SUPPORT,MONTEREY, CA
110.0,DOCUMENTATION,WEXFORD, PA
110.0,ABC,wer