如果已知专有名称,JNDI InitialLdapContext
类允许我在一行中检索LDAP条目的属性:
Attributes attributes = ctx.getAttributes(entryDN);
但是,这不包括操作属性,例如entryCSN,modifyTimestamp等。当然,总是可以指定使用字符串数组获取哪些属性:
Attributes attributes = ctx.getAttributes(entryDN, new String[] {"entryCSN"});
但是只返回指定的属性。
我尝试过但不适合我的事情:
通过ctx.search()
我知道我可以通过搜索获得所有属性(参见here),但我不想a)如果我已经知道dn和b)执行整个Ldap查询以便繁琐地处理搜索结果集。
仅针对操作属性
执行第二次查询当然我只能进行第二次查询,但是我想保存额外的行程并将第二个属性添加到第一个这样的:
Attributes attributes = ctx.getAttributes(entryDN);
attributes.put(ctx.getAttributes(entryDN, new String[] {"entryCSN"}).get("entryCSN"));
会产生NoSuchElementException
。堆栈跟踪:
Exception thrown: java.util.NoSuchElementException: Vector Enumeration
at java.util.Vector$1.nextElement(Vector.java:352)
at javax.naming.directory.BasicAttribute$ValuesEnumImpl.nextElement(BasicAttribute.java:537)
列出字符串数组中的所有属性
由于返回的Ldap条目可能是不同的对象类,因此具有不同的属性,我认为没有实际的方法可以做到这一点。
有人知道如何在一次旅行中获得正常属性和操作属性吗?
答案 0 :(得分:3)
在LDAP RFC中定义的属性有2个魔术值: “*”表示所有用户属性。 “+”表示所有操作属性。
以下代码应该有效:
private void getImagePathsFromDB() {
for (int i = 0; i<imgeURLdb.getallImageInformation().size();i++){
ImageUploadBean img = new ImageUploadBean();
img.setImagePath(imgeURLdb.getallImageInformation().get(i).getImagePath());
img.setFlowid(imgeURLdb.getallImageInformation().get(i).getFlowid());
String imagePath = img.getImagePath();
String imageFlowid = img.getFlowid();
Log.i("imageuploadfile"," image path ----> "+imagePath+" flow id ----> "+imageFlowid);
RequestFuture<JSONObject> future = RequestFuture.newFuture();
JSONObject jsonObject = new JSONObject();
try {
jsonObject.put("file",new File(imagePath));
} catch (JSONException e) {
e.printStackTrace();
}
JsonObjectRequest request = new JsonObjectRequest(Constants.MediaUpload, jsonObject, future, future);
//requestQueue.add(request);
RequestQueue requestQueue = Volley.newRequestQueue(this);
requestQueue.add(request);
try {
JSONObject response = future.get(10, TimeUnit.SECONDS);// Blocks for at most 10 seconds.
String imageURL = response.getString("");
Log.i("imageuploadfile",imageURL+"");
} catch (InterruptedException e) {
// Exception handling
} catch (ExecutionException e) {
// Exception handling
} catch (TimeoutException e) {
e.printStackTrace();
} catch (JSONException e) {
e.printStackTrace();
}
}
}