我在Apache Directory Studio中创建了一个服务器.我还创建了一个分区,并将一些条目插入到Java服务器中.现在我想以编程方式备份和恢复此数据和LDIF文件.我是LDAP新手.所以请告诉我一个详细的方法,使用java从我的服务器以编程方式导入和导入条目到LDIF.
现在我使用这种方法进行备份:
EntryCursor cursor = connection.search(new Dn("o=partition"), "(ObjectClass=*)", SearchScope.SUBTREE, "*", "+");
Charset charset = Charset.forName("UTF-8");
Path filePath = Paths.get("src/main/resources", "backup.ldif");
BufferedWriter writer = Files.newBufferedWriter(filePath, charset);
String st = "";
while (cursor.next()) {
Entry entry = cursor.get();
String ss = LdifUtils.convertToLdif(entry);
st += ss + "\n";
}
writer.write(st);
writer.close();
Run Code Online (Sandbox Code Playgroud)
为了恢复,我使用这个:
InputStream is = new FileInputStream(filepath);
LdifReader entries = new LdifReader(is);
for (LdifEntry ldifEntry : entries) {
Entry entry = ldifEntry.getEntry();
AddRequest addRequest = new AddRequestImpl();
addRequest.setEntry(entry);
addRequest.addControl(new ManageDsaITImpl()); …Run Code Online (Sandbox Code Playgroud) 我不得不想出一种方法来使用不需要的字符串(underscore_case)将数组键转换为camelCase.这必须以递归方式完成,因为我不知道将向该方法提供什么数组.
我想出了这个:
private function convertKeysToCamelCase($apiResponseArray)
{
$arr = [];
foreach ($apiResponseArray as $key => $value) {
if (preg_match('/_/', $key)) {
preg_match('/[^_]*/', $key, $m);
preg_match('/(_)([a-zA-Z]*)/', $key, $v);
$key = $m[0] . ucfirst($v[2]);
}
if (is_array($value))
$value = $this->convertKeysToCamelCase($value);
$arr[$key] = $value;
}
return $arr;
}
Run Code Online (Sandbox Code Playgroud)
它完成了这项工作,但我认为它可以做得更好,更简洁.多次调用preg_match然后连接看起来很奇怪.
你有没有办法整理这种方法?更重要的是,只需一次调用即可完成同样的操作preg_match吗?那会是什么样子?