Skip to main content

Notice: this Wiki will be going read only early in 2024 and edits will no longer be possible. Please see: https://gitlab.eclipse.org/eclipsefdn/helpdesk/-/wikis/Wiki-shutdown-plan for the plan.

Jump to: navigation, search

Difference between revisions of "Stardust/Knowledge Base/Integration/Camel/Json File To Structured Data"

Line 9: Line 9:
  
 
#Create a RAD project and create a model like shown below.  
 
#Create a RAD project and create a model like shown below.  
#Create a class as shown in the&nbsp;<u>DataToJSON class Code</u> section.
+
#Create a class as shown in the&nbsp;<u>DataToJSON class Code</u> section.  
 
#Download jackson-core-asl-1.9.10.jar and jackson-mapper-asl-1.9.10.jar and put it in WEB-INF/lib of the RAD project.  
 
#Download jackson-core-asl-1.9.10.jar and jackson-mapper-asl-1.9.10.jar and put it in WEB-INF/lib of the RAD project.  
 
#Build the project, deploy the model.  
 
#Build the project, deploy the model.  
Line 24: Line 24:
 
<br>  
 
<br>  
  
To achieve this we will be using IPP's Camel Trigger to monitor the arrival of the file.&nbsp;We will also use Camel Application Type to route the request to the required beans (in this case DataToJSON).
+
To achieve this we will be using IPP's Camel Trigger to monitor the arrival of the file.&nbsp;We will also use Camel Application Type to route the request to the required beans (in this case dataToJSON).  
 
+
The aim to use Camel Application Type is to provide flexibility to the solution currently we are routing to beans, but using Camel Aplication Type we can route to other Camel/IPP supported endpoints as per need.  
+
  
 +
The aim to use Camel Application Type is to provide flexibility to the solution (currently we are routing to beans, but using Camel Aplication Type we can route to other Camel/IPP supported endpoints as per need).
  
 +
<br>
  
 
Define Receive Incoming File Camel Trigger as shown in the image below.  
 
Define Receive Incoming File Camel Trigger as shown in the image below.  

Revision as of 06:27, 16 August 2013

Requirements

  1. Need to write a process which should be triggered when a file arrives at a particular folder.
  2. It should pick the file content (which happens to contain JSON Strings).
  3. Need to convert the JSON string into IPP Data Structure and present it to users for editing the IPP data.
  4. Once edited, need to convert the IPP data back to JSON string.

Steps:

  1. Create a RAD project and create a model like shown below.
  2. Create a class as shown in the DataToJSON class Code section.
  3. Download jackson-core-asl-1.9.10.jar and jackson-mapper-asl-1.9.10.jar and put it in WEB-INF/lib of the RAD project.
  4. Build the project, deploy the model.
  5. Place a file with itxt as extension in the designated folder which is being monitored by Camel Trigger (in this case its C:\temp). You can define the trigger as per your need and can change the file extension to monitor of folder to monitor.

File Content is:

{"Name":"Tanmoy Roy","EmpID":"1002345","DoJ":1376332200000,"Salary":54433.0,
"Phones":[{"Home":"11111111","Mobile":"111111111","Office":"33333333333"},
{"Home":"2222222","Mobile":"2222222","Office":"34444444"}],
"dependents":[{"Name":"T1","Relation":"TR1","Age":21},
{"Name":"T2","Relation":"TR2","Age":43}]}


To achieve this we will be using IPP's Camel Trigger to monitor the arrival of the file. We will also use Camel Application Type to route the request to the required beans (in this case dataToJSON).

The aim to use Camel Application Type is to provide flexibility to the solution (currently we are routing to beans, but using Camel Aplication Type we can route to other Camel/IPP supported endpoints as per need).


Define Receive Incoming File Camel Trigger as shown in the image below.


ModelJSON.JPG


Define 2 Camel Producer Application (FileTOObject and convertToJSON in this case) using that we will convert JSON to Object and back. Associate these to activities Convert File into IPP Data and Convert Data To JSON.

From Applications, choose Camel Producer Application and in its General Tab define the bean like:

<bean id="dataToJSON" class="com.sungard.cm.invo.ipp.training.DataToJSON"/>

and it is Producer Route Tab define route like (for Convert File into IPP Data)

<to uri="bean:dataToJSON?method=readBack"/>

This will call the readBack() method of the bean dataToJSON, which is reading from JSON string and converting it into an IPP data type (Map) called Employee. and for (Convert Data To JSON)

<to uri="bean:dataToJSON?method=enrich"/>

This will call the enrich() method of the bean dataToJSON, which is reading from IPP Data called Employee and converting it to JSON string.

DataToJSON class Code:
package com.sungard.cm.invo.ipp.training;
import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.ListIterator;
import java.util.Map;
 
import org.codehaus.jackson.JsonGenerationException;
import org.codehaus.jackson.map.JsonMappingException;
import org.codehaus.jackson.map.ObjectMapper;
import org.codehaus.jackson.type.TypeReference;
 
import com.google.gson.Gson;
 
//import com.google.gson.Gson;
public class DataToJSON<E> {
 
	public String enrich(Map data) {
		System.out.println("Incoming Data value: "+data);
		//Gson gson = new Gson();
		ObjectMapper objectMapper = new ObjectMapper();
 
		String returnData = null;
		try {
			returnData = objectMapper.writeValueAsString(data);
		} catch (JsonGenerationException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (JsonMappingException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		System.out.println("JSON value: "+returnData );
		return returnData;
	}
 
	public Map<String, Object> readBack(String data) {
 
            System.out.println("Incoming JSON Data value: "+data);
            //Gson gson = new Gson();
            ObjectMapper objectMapper = new ObjectMapper();
 
            Map <String, Object>employee = new HashMap<String, Object>();
            try {
                  employee = objectMapper.readValue(data, new TypeReference<Map<String, Object>>() {});
            } catch (JsonGenerationException e) {
                  // TODO Auto-generated catch block
                  e.printStackTrace();
            } catch (JsonMappingException e) {
                  // TODO Auto-generated catch block
                  e.printStackTrace();
            } catch (IOException e) {
                  // TODO Auto-generated catch block
                  e.printStackTrace();
            }
            System.out.println("MAP value: "+employee );
            return employee;
    }
}

Results:

As soon as the file is placed the process gets started and You will see it as below after completing Display File Contents activity:

JSONToObject.JPG Next activity screen will present the data for read/write, make changes to it and complete the activity.

EditObject.JPG You will get JSON String out of edited data as shown below:

{"Phones":[{"Home":"11111111","Mobile":"111111111","Office":"33333333333"},
{"Home":"2222222","Mobile":"2222222","Office":"34444444"},
{"Home":"6666666","Mobile":"6666666","Office":"66666666"}],
"Name":"Tanmoy Roy","dependents":[{"Name":"T1","Relation":"TR1","Age":21},
{"Name":"T2","Relation":"TR2","Age":43},
{"Name":"T3","Relation":"TR3","Age":56}],
"EmpID":"1002345","DoJ":1376332200000,"Salary":54433.0}

ObjectToJSON.JPG

Artifacts:

Please get the required artifacts from here

Back to the top