Sebagai permulaan, pernyataan di atas tidak akan dikompilasi. Itu ditunjukkan kepada saya dalam pertanyaan lain bahwa ada kesalahan dalam dokumentasi Apache Camel MongoDB saat ini dan bahwa setHeader
baris di atas seharusnya berbunyi:
.setHeader(MongoDbConstants.CRITERIA, constant(Filters.eq("name", "Raul Kripalani"))
Cara saya akhirnya melakukan ini adalah dengan membuat Expression
anonim :
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}'");
}
}
Catatan tambahan:Saya tidak menemukan pernyataan pengembalian itu di Expression
. Saya mengalami kesalahan ketik, jadi saya melihat apa lagi Expression
Unta Apache implementasi yang disertakan dalam perpustakaan Camel kembali, dan saya menemukan klausa pengembalian itu.