這個工程上oracle-7-jdk
,icedtea-7-jdk
上Gentoo linux kernel: 4.3.3-gentoo
奇怪convertBodyTo行爲:駱駝:在不同的系統
.marshal().json(JsonLibrary.Jackson)
.setBody().jsonpath("$.listing")
.process(new Processor(){
@Override
public void process(Exchange ex){
LinkedHashMap<String, Object> map = (LinkedHashMap)ex.getIn().getBody();
map.put("_id", (Integer)map.get("id"));
map.remove("id");
}
})
.marshal().json(JsonLibrary.Jackson)
.convertBodyTo(String.class)
.to("mongodb:mongoBean?database=myDB&collection=myCol&operation=save");
同樣的東西不會對Ubuntu 14.4
下openjdk-7-jre
工作這個東西不起作用或者:
.marshal().json(JsonLibrary.Jackson)
.setBody().jsonpath("$.listing")
.process(new Processor(){
@Override
public void process(Exchange ex){
LinkedHashMap<String, Object> map = (LinkedHashMap)ex.getIn().getBody();
map.put("_id", (Integer)map.get("id"));
map.remove("id");
}
})
.marshal().json(JsonLibrary.Jackson)
.convertBodyTo(String.class)
.bean(org.bson.Document.class, "parse(${body})")
.to("mongodb:mongoBean?database=myDB&collection=myCol&operation=save");
考慮在保存到Mongo之前,我已經添加了.bean(org.bson.Document.class,"parse(${body})")
。
是什麼原因?
UPDATE 1
使用駱駝2.16.1
,沒有容器。
第一代碼塊拋出:
Caused by: org.apache.camel.InvalidPayloadException: No body available of type: com.mongodb.DBObject but has value: {"city":"Los Angeles","distance":null,....
第二個代碼塊拋出:
Caused by: org.apache.camel.NoTypeConversionAvailableException: No type converter available to convert from type: org.bson.Document to the required type: com.mongodb.DBObject
更新2
最終爲我的作品的解決辦法是:
.marshal().json(JsonLibrary.Jackson)
.setBody().jsonpath("$.listing")
.process(new Processor(){
@Override
public void process(Exchange ex){
LinkedHashMap<String, Object> map = (LinkedHashMap)ex.getIn().getBody();
map.put("_id", (Integer)map.get("id"));
map.remove("id");
Iterator<String> i = map.keySet().iterator();
while(i.hasNext()){
String key = i.next();
if(map.get(key) instanceof java.math.BigDecimal){
map.put(key, map.get(key).toString());
}
}
}
})
.convertBodyTo(com.mongodb.DBObject.class)
.to("mongodb:mongoBean?database=airbnb&collection=appartments&operation=save");
,因爲我收到No type converter available
的java.math.BigDecimal
;
更新3
有多個環境之間沒有什麼區別。我假設mvn exec:java
工作,但uberjar在maven-shade-plugin
的幫助下組裝並不是因爲組件啓動和(可能)類型轉換器註冊的一些差異。
是什麼例外?你在'oracle-7-jdk','icedtea-7-jdk'上試過了你的第二個代碼塊嗎?你使用的是什麼版本的駱駝?在哪個容器? – raulk
對不起,把更新。 – Archer