2016-05-27 9 views
0

Ich bin neu in Apache Kamel. Und ich möchte eine einfache Aufgabe mit Apache Kamel machen. Ich habe json Daten über diese URL http://localhost:8080/users/. Es gibt JSON-Daten von meinem Restdienst. Aber ich möchte diese JSON-Daten holen und sie mit Apache Cam auf POJO entpacken und einige Daten in die txt-Datei schreiben. Aber meine App startet und hört dann nicht auf.Unmarshaling (JSON) in Apache Kamel

Hier ist meine JSON-Daten auf http://localhost:8080/users/

[{"id":1,"login":"admin","password":"admin","passwordAgain":null,"email":"[email protected]","firstName":"Admin","lastName":"Adminovich","birthday":"2010-10-10","role":{"id":1,"name":"admin"}}, 
 
{"id":5,"login":"Snow123","password":"1111","passwordAgain":null,"email":"[email protected]","firstName":"John","lastName":"Snow","birthday":"2010-10-10","role":{"id":2,"name":"user"}}]

spring.xml

<beans xmlns="http://www.springframework.org/schema/beans" 
 
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
 
     xmlns:camel="http://camel.apache.org/schema/spring" 
 
     xsi:schemaLocation=" 
 
      http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd 
 
      http://camel.apache.org/schema/spring http://camel.apache.org/schema/spring/camel-spring.xsd"> 
 
    
 

 
    <bean id="MyRouteBuilder" class="MyRouteBuilder" init-method="restart"> 
 

 
    </bean> 
 

 
    <camelContext xmlns="http://camel.apache.org/schema/spring"> 
 

 
     <routeBuilder ref="MyRouteBuilder"/> 
 

 
    </camelContext> 
 

 
</beans>

MyRouteBuilder

import Mapping.User; 
 
import Mapping.Users; 
 
import org.apache.camel.Exchange; 
 
import org.apache.camel.Processor; 
 
import org.apache.camel.builder.RouteBuilder; 
 
import org.apache.camel.main.Main; 
 
import org.apache.camel.component.restlet.RestletConstants; 
 
import org.apache.camel.model.dataformat.JsonLibrary; 
 
import org.restlet.Response; 
 
import org.restlet.data.MediaType; 
 
import org.restlet.data.Status; 
 

 

 

 
public class MyRouteBuilder extends RouteBuilder { 
 

 
    private String routePort = null; 
 
    private String routeAnswer = null; 
 

 
    public void restart() { 
 
     String start = "Route Property Placeholder Example started on port" + " 8080" + "!"; 
 
     System.out.println(start); 
 
    } 
 

 
    public void configure() throws Exception { 
 
     from("timer:foo?repeatCount=1").to("http://10.10.34.145:8080/users/").unmarshal().json(JsonLibrary.Jackson, Users.class).log("STARTED!") 
 
       .process(new Processor() { 
 
        public void process (Exchange exchange) throws Exception { 
 
         Users usersList = exchange.getIn().getBody(Users.class); 
 
         exchange.getIn().setBody(usersList.usersList); 
 
         System.out.println(usersList.usersList.size()); 
 
        } 
 
       }).to("file:///home/name/username/Desktop/camel.txt").stop(); 
 

 
    } 
 
}

Benutzer

package Mapping; 
 

 
import com.google.gson.FieldNamingStrategy; 
 

 
import java.lang.reflect.Field; 
 

 
public class User { 
 

 
    public User() { 
 

 
    } 
 

 
    private int id; 
 
    private String login; 
 
    private String password; 
 
    private String passwordAgain; 
 
    private String email; 
 
    private String firstName; 
 
    private String lastName; 
 
    private String birthday; 
 

 
    public void setId(int id) { 
 
     this.id = id; 
 
    } 
 

 
    public void setLogin(String login) { 
 
     this.login = login; 
 
    } 
 

 
    public void setPassword(String password) { 
 
     this.password = password; 
 
    } 
 

 
    public void setPasswordAgain(String passwordAgain) { 
 
     this.passwordAgain = passwordAgain; 
 
    } 
 

 
    public void setEmail(String email) { 
 
     this.email = email; 
 
    } 
 

 
    public void setFirstName(String firstName) { 
 
     this.firstName = firstName; 
 
    } 
 

 
    public void setLastName(String lastName) { 
 
     this.lastName = lastName; 
 
    } 
 

 
    public void setBirthday(String birthday) { 
 
     this.birthday = birthday; 
 
    } 
 

 
    public void setRole(String role) { 
 
     this.role = role; 
 
    } 
 

 
    public int getId() { 
 
     return id; 
 
    } 
 

 
    public String getLogin() { 
 
     return login; 
 
    } 
 

 
    public String getPassword() { 
 
     return password; 
 
    } 
 

 
    public String getPasswordAgain() { 
 
     return passwordAgain; 
 
    } 
 

 
    public String getEmail() { 
 
     return email; 
 
    } 
 

 
    public String getFirsteName() { 
 
     return firstName; 
 
    } 
 

 
    public String getLastName() { 
 
     return lastName; 
 
    } 
 

 
    public String getBirthday() { 
 
     return birthday; 
 
    } 
 

 
    public String getRole() { 
 
     return role; 
 
    } 
 

 
    private String role; 
 

 
}

Benutzer

package Mapping; 
 

 
import java.util.ArrayList; 
 
import java.util.List; 
 
public class Users { 
 

 
    public List<User> usersList = new ArrayList<User>(); 
 
}
Haupt

import org.apache.camel.main.Main; 
 

 
public class MainClass { 
 

 
    public static void main(String[] args) { 
 
     Main main = new Main(); 
 
     main.enableHangupSupport(); 
 

 
     MyRouteBuilder rb = new MyRouteBuilder(); 
 
     main.addRouteBuilder(rb); 
 
     try { 
 
      main.run(args); 
 
     } catch (Exception e) { 
 
      e.printStackTrace(); 
 
     } 
 
    } 
 

 
}

+0

Was meinst du, hört nicht auf? Haben Sie Fehler? Was passiert, wenn Sie die Route fahren? –

+0

App hört nicht auf. Und ich habe keine Laufzeitfehler. – oo000

Antwort

0

In meinem Fall habe ich JsonData auf Java-Objekt umgewandelt und eine benutzerdefinierte CSV-Datei mit folgenden Abhängigkeiten erstellt.

  • jackson-Mapper-asl
  • jackson-Core-asl

Sie können einfache Textdatei oder CSV erstellen, was auch immer es ist. Das ist mein Weg:

from("couchdb:http://localhost:5984/order") 
      .startupOrder(1) 
      .process(new JsonToCsvProcessor()) 
      .to("file:/home/r2/Desktop/ofBizFile?fileExist=append&fileName=orders-${date:now:dd-MM-yyyy}.csv"); 

Das ist mein Prozessor, wo ich JsonString zu ObjectMapper für Pojo bin vorbei:

{ 

public void process(Exchange exchange)throws Exception{ 
    String jsonString = exchange.getIn().getBody(String.class); 
    exchange.getOut().setBody(convertJsonToCSV(jsonString).toString()); 
     } 

public StringBuilder convertJsonToCSV(String jsonStringArgs){ 

StringBuilder csvFile = new StringBuilder(); 
//Here customize data format using append() 
.  
. 
return csvFile; 
    } 

} 

Wenn Sie nicht wissen, wie um diesen Link zu verwenden ObjectMapper wird Ihnen helfen . https://www.youtube.com/watch?v=02X6U81MdJ0&t=1s