शुरुआत के लिए, ऊपर दिया गया वह कथन संकलित नहीं होगा। यह मुझे एक अन्य प्रश्न में बताया गया था कि वर्तमान अपाचे कैमल मोंगोडीबी दस्तावेज में एक त्रुटि है और setHeader
ऊपर की पंक्ति पढ़नी चाहिए:
.setHeader(MongoDbConstants.CRITERIA, constant(Filters.eq("name", "Raul Kripalani"))
जिस तरह से मैंने इसे समाप्त किया वह एक अनाम Expression
creating बनाकर था :
import com.mongodb.client.model.Filters;
import com.mongodb.BasicDBObject;
import org.bson.conversions.Bson;
@Component
public class NotifyClientRoute extends RouteBuilder {
public static final String NOTIFY_CLIENT_URI = "direct:notifyClient";
@Override
public void configure() throws Exception {
from(NOTIFY_CLIENT_URI)
.log("Determining which client gets the deletion request next for DR request '${header.drRequestId}'.")
.setHeader(MongoDbConstants.CRITERIA, new Expression() {
@Override
public <T> T evaluate(Exchange exchange, Class<T> type) {
String drRequestId = exchange.getIn().getHeader("drRequestId", String.class);
Bson equalsClause = Filters.eq("drRequestId", drRequestId);
// Alternatively:
// Bson equalsClause = new BasicDBObject("drRequestId", new BasicDBObject("$eq", drRequestId));
return exchange.getContext().getTypeConverter().convertTo(type, equalsClause);
};
})
.to("mongodb:mongoClient?database=mydb&collection=mycollection&operation=findOneByQuery")
.log("Query returned: '${body}'");
}
}
अतिरिक्त नोट:मैं Expression
. में उस रिटर्न स्टेटमेंट के साथ नहीं आया था . मैं टाइप त्रुटियों में भाग रहा था, और इसलिए मैंने देखा कि एक और अपाचे ऊंट क्या है Expression
ऊंट पुस्तकालयों में शामिल कार्यान्वयन वापस आ रहे थे, और मुझे वह वापसी खंड मिला।