Đối với người mới bắt đầu, câu lệnh ở trên sẽ không được biên dịch. Tôi đã chỉ ra cho tôi một câu hỏi khác rằng có lỗi trong tài liệu Apache Camel MongoDB hiện tại và setHeader
dòng trên nên đọc:
.setHeader(MongoDbConstants.CRITERIA, constant(Filters.eq("name", "Raul Kripalani"))
Cách mà tôi kết thúc việc này là tạo một Expression
ẩn danh :
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}'");
}
}
Lưu ý bổ sung:Tôi không nghĩ ra câu lệnh trả lại đó trong Expression
. Tôi đã gặp phải lỗi nhập và vì vậy tôi đã xem một Expression
khác của Apache Camel các triển khai có trong thư viện Camel đã được trả về và tôi đã tìm thấy mệnh đề trả lại đó.