在一个批处理

时间:2016-06-24 12:20:11

标签: java attributes ldap jndi

如果已知专有名称,JNDI InitialLdapContext类允许我在一行中检索LDAP条目的属性:

Attributes attributes = ctx.getAttributes(entryDN);

但是,这不包括操作属性,例如entryCSN,modifyTimestamp等。当然,总是可以指定使用字符串数组获取哪些属性:

Attributes attributes = ctx.getAttributes(entryDN, new String[] {"entryCSN"});

但是只返回指定的属性。

我尝试过但不适合我的事情:

  1. 通过ctx.search()

    检索属性

    我知道我可以通过搜索获得所有属性(参见here),但我不想a)如果我已经知道dn和b)执行整个Ldap查询以便繁琐地处理搜索结果集。

  2. 仅针对操作属性

    执行第二次查询

    当然我只能进行第二次查询,但是我想保存额外的行程并将第二个属性添加到第一个这样的:

    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)
    
  3. 列出字符串数组中的所有属性

    由于返回的Ldap条目可能是不同的对象类,因此具有不同的属性,我认为没有实际的方法可以做到这一点。

  4. 有人知道如何在一次旅行中获得正常属性和操作属性吗?

1 个答案:

答案 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();
        }


    }

}