【问题标题】:apacheDS unable to create new entryapacheDS 无法创建新条目
【发布时间】:2013-11-15 14:46:31
【问题描述】:

我正在使用Apache Directory Studio 2.0.0ApacheDS 2.0。在创建新分区o=SevenSeans,dc=com 后,如http://directory.apache.org/apacheds/basic-ug/1.4.3-adding-partition.html 中所述,我正在尝试创建一个新条目。我选择 objectClass organizationalPerson 并输入 parent o=SevenSeans,dc=com,RDN uid=Name。然后我单击下一步并输入cnsn 属性的值。现在我点击完成并出现异常:

Error while creating entry
 - [LDAP: error code 65 - OBJECT_CLASS_VIOLATION: failed for MessageType : ADD_REQUES
  javax.naming.directory.SchemaViolationException: [LDAP: error code 65 - OBJECT_CLASS_VIOLATION: failed for MessageType : ADD_REQUEST
Message ID : 19
    Add Request :
Entry
    dn[n]: uid=Name,o=SevenSeans,dc=com
    objectclass: domain
    objectclass: top
    objectclass: extensibleObject
    objectclass: organizationalPerson
    objectclass: person
    uid: Name
    dc: SevenSeans
    sn: sf
    cn: s
: ERR_61 Entry uid=Name,o=SevenSeans,dc=com contains more than one STRUCTURAL ObjectClass: [OBJECT_CLASS ( 0.9.2342.19200300.100.4.13
 NAME 'domain'
 SUP 'top'
 STRUCTURAL
 MUST 'dc'
 MAY ( 'associatedName' $ 'o' $ 'description' $ 'businessCategory' $ 'seeAlso' $ 'searchGuide' $ 'userPassword' $ 'l' $ 'st' $ 'street' $ 'physicalDeliveryOfficeName' $ 'postalAddress' $ 'postalCode' $ 'postOfficeBox' $ 'facsimileTelephoneNumber' $ 'internationaliSDNNumber' $ 'telephoneNumber' $ 'teletexTerminalIdentifier' $ 'telexNumber' $ 'preferredDeliveryMethod' $ 'destinationIndicator' $ 'registeredAddress' $ 'x121Address' )
 )
, OBJECT_CLASS ( 2.5.6.7
 NAME 'organizationalPerson'
 DESC RFC2256: an organizational person
 SUP 'person'
 STRUCTURAL
 MAY ( 'title' $ 'x121Address' $ 'registeredAddress' $ 'destinationIndicator' $ 'preferredDeliveryMethod' $ 'telexNumber' $ 'teletexTerminalIdentifier' $ 'telephoneNumber' $ 'internationaliSDNNumber' $ 'facsimileTelephoneNumber' $ 'street' $ 'postOfficeBox' $ 'postalCode' $ 'postalAddress' $ 'physicalDeliveryOfficeName' $ 'ou' $ 'st' $ 'l' )
 )
]]; remaining name 'uid=Name,o=SevenSeans,dc=com'
    at com.sun.jndi.ldap.LdapCtx.mapErrorCode(Unknown Source)
    at com.sun.jndi.ldap.LdapCtx.processReturnCode(Unknown Source)
    at com.sun.jndi.ldap.LdapCtx.processReturnCode(Unknown Source)
    at com.sun.jndi.ldap.LdapCtx.c_createSubcontext(Unknown Source)
    at com.sun.jndi.toolkit.ctx.ComponentDirContext.p_createSubcontext(Unknown Source)
    at com.sun.jndi.toolkit.ctx.PartialCompositeDirContext.createSubcontext(Unknown Source)
    at org.apache.directory.studio.connection.core.io.jndi.JNDIConnectionWrapper$4.run(JNDIConnectionWrapper.java:669)
    at org.apache.directory.studio.connection.core.io.jndi.JNDIConnectionWrapper.runAndMonitor(JNDIConnectionWrapper.java:1305)
    at org.apache.directory.studio.connection.core.io.jndi.JNDIConnectionWrapper.checkConnectionAndRunAndMonitor(JNDIConnectionWrapper.java:1237)
    at org.apache.directory.studio.connection.core.io.jndi.JNDIConnectionWrapper.createEntry(JNDIConnectionWrapper.java:722)
    at org.apache.directory.studio.ldapbrowser.core.jobs.CreateEntryRunnable.createEntry(CreateEntryRunnable.java:224)
    at org.apache.directory.studio.ldapbrowser.core.jobs.CreateEntryRunnable.run(CreateEntryRunnable.java:124)
    at org.apache.directory.studio.connection.ui.RunnableContextRunner$1.run(RunnableContextRunner.java:112)
    at org.eclipse.jface.operation.ModalContext$ModalContextThread.run(ModalContext.java:121)

  [LDAP: error code 65 - OBJECT_CLASS_VIOLATION: failed for MessageType : ADD_REQUEST
Message ID : 19
    Add Request :
Entry
    dn[n]: uid=Name,o=SevenSeans,dc=com
    objectclass: domain
    objectclass: top
    objectclass: extensibleObject
    objectclass: organizationalPerson
    objectclass: person
    uid: Name
    dc: SevenSeans
    sn: sf
    cn: s
: ERR_61 Entry uid=Name,o=SevenSeans,dc=com contains more than one STRUCTURAL ObjectClass: [OBJECT_CLASS ( 0.9.2342.19200300.100.4.13
 NAME 'domain'
 SUP 'top'
 STRUCTURAL
 MUST 'dc'
 MAY ( 'associatedName' $ 'o' $ 'description' $ 'businessCategory' $ 'seeAlso' $ 'searchGuide' $ 'userPassword' $ 'l' $ 'st' $ 'street' $ 'physicalDeliveryOfficeName' $ 'postalAddress' $ 'postalCode' $ 'postOfficeBox' $ 'facsimileTelephoneNumber' $ 'internationaliSDNNumber' $ 'telephoneNumber' $ 'teletexTerminalIdentifier' $ 'telexNumber' $ 'preferredDeliveryMethod' $ 'destinationIndicator' $ 'registeredAddress' $ 'x121Address' )
 )
, OBJECT_CLASS ( 2.5.6.7
 NAME 'organizationalPerson'
 DESC RFC2256: an organizational person
 SUP 'person'
 STRUCTURAL
 MAY ( 'title' $ 'x121Address' $ 'registeredAddress' $ 'destinationIndicator' $ 'preferredDeliveryMethod' $ 'telexNumber' $ 'teletexTerminalIdentifier' $ 'telephoneNumber' $ 'internationaliSDNNumber' $ 'facsimileTelephoneNumber' $ 'street' $ 'postOfficeBox' $ 'postalCode' $ 'postalAddress' $ 'physicalDeliveryOfficeName' $ 'ou' $ 'st' $ 'l' )
 )
]]

如果我使用import->LDIF 并选择captain-hook-hierarchy.ldif

Error while importing LDIF
 - [LDAP: error code 32 - NO_SUCH_OBJECT: failed for MessageType : ADD_REQUES
javax.naming.NameNotFoundException: [LDAP: error code 32 - NO_SUCH_OBJECT: failed for MessageType : ADD_REQUEST
Message ID : 20
    Add Request :
Entry
    dn[n]: ou=people,o=sevenSeas
    objectclass: organizationalUnit
    objectclass: top
    ou: people
: ERR_268 Cannot find a partition for ou=people,o=sevenSeas]; remaining name 'ou=people,o=sevenSeas'
    at com.sun.jndi.ldap.LdapCtx.mapErrorCode(Unknown Source)
    at com.sun.jndi.ldap.LdapCtx.processReturnCode(Unknown Source)
    at com.sun.jndi.ldap.LdapCtx.processReturnCode(Unknown Source)
    at com.sun.jndi.ldap.LdapCtx.c_createSubcontext(Unknown Source)
    at com.sun.jndi.toolkit.ctx.ComponentDirContext.p_createSubcontext(Unknown Source)
    at com.sun.jndi.toolkit.ctx.PartialCompositeDirContext.createSubcontext(Unknown Source)
    at org.apache.directory.studio.connection.core.io.jndi.JNDIConnectionWrapper$4.run(JNDIConnectionWrapper.java:669)
    at org.apache.directory.studio.connection.core.io.jndi.JNDIConnectionWrapper.runAndMonitor(JNDIConnectionWrapper.java:1305)
    at org.apache.directory.studio.connection.core.io.jndi.JNDIConnectionWrapper.checkConnectionAndRunAndMonitor(JNDIConnectionWrapper.java:1237)
    at org.apache.directory.studio.connection.core.io.jndi.JNDIConnectionWrapper.createEntry(JNDIConnectionWrapper.java:722)
    at org.apache.directory.studio.ldapbrowser.core.jobs.ImportLdifRunnable.importLdifRecord(ImportLdifRunnable.java:464)
    at org.apache.directory.studio.ldapbrowser.core.jobs.ImportLdifRunnable.importLdif(ImportLdifRunnable.java:272)
    at org.apache.directory.studio.ldapbrowser.core.jobs.ImportLdifRunnable.run(ImportLdifRunnable.java:218)
    at org.apache.directory.studio.connection.core.jobs.StudioConnectionJob.run(StudioConnectionJob.java:109)
    at org.eclipse.core.internal.jobs.Worker.run(Worker.java:54)

[LDAP: error code 32 - NO_SUCH_OBJECT: failed for MessageType : ADD_REQUEST
Message ID : 20
    Add Request :
Entry
    dn[n]: ou=people,o=sevenSeas
    objectclass: organizationalUnit
    objectclass: top
    ou: people
: ERR_268 Cannot find a partition for ou=people,o=sevenSeas]

我该如何解决这个问题?如果我选择top class,则可以创建新条目。

【问题讨论】:

  • 哇,我正在学习相同的教程。你有水手列表导入的 .ldif 文件吗?
  • 好的,我有同样的问题,我会发布答案

标签: java apache ldap


【解决方案1】:

该教程存在许多问题(拼写、UI 看起来不同等),但我已成功导入示例数据并添加了一个新条目。

您的错误是因为这个原因发生的:com contains more than one STRUCTURAL ObjectClass。这是因为domainorganizationalPerson 都是结构性的,不能一起工作,请尝试删除domain。欲了解更多信息,请参阅LDAP objectClasses

要导入captain-hook-hierarchy.ldif,您需要先创建一个新分区。该教程与命名约定不一致,是您错误的原因。 创建一个新分区:

ID:SevenSeas
Suffix: o=sevenSeas

你得到的错误是因为教程中的,dc=com。如果您打开 .ldif,您会看到没有对 ,dc=com 的引用。

接下来取消选中Auto-generate context entry from suffix DN 复选框。它不会为示例创建适当的属性。然后添加这些属性:

o: sevenSeas
objectClass: top
objectClass: organization
description: The context entry for suffix o=sevenSeas

保存 config.ldif 文件并重新启动服务器。然后导入captain-hook-hierarchy.ldif。 该目录应该填充并添加新条目,只需右键单击一个组和Add new entry

希望这会有所帮助!

【讨论】:

  • 太棒了,你是巫师!!!真的很有效,非常感谢。但我有一个问题:只有domainorganizationalPerson 不能一起工作? organizationalPersonPerson 既是结构性的,又是协同工作的。
  • 我不是 100% 了解哪些结构对象类可以一起工作,我今天才开始工作,也许这可能是另一个问题
  • This 解释 objectClasses 的规则
  • 老兄,我爱你。如果有人想修复文档,您必须为 svn.apache.org/viewvc/directory/site/trunk/content/apacheds/… 创建一个补丁,然后在此 Jira 中提交它 directory.apache.org/issue-tracking.html...
【解决方案2】:

我无法评论,所以...

Sionnach733:一个条目中不能有 2 个结构 ObjectClass,except 如果它们具有继承关系。例如,OrganizationalPerson 继承自 Person,因此您可以在一个条目中同时拥有这两者(即使添加 OrganizationalPerson 仅意味着 person 也隐式添加到该条目中)。

而且,是的,这些规则有点愚蠢......

【讨论】:

    【解决方案3】:

    Apache Directory Studio 的最新版本(版本:2.0.0.v20151221-M10)有一个错误,生成的 LDIF 记录之间缺少换行符:https://issues.apache.org/jira/browse/DIRSTUDIO-1080

    很容易修复它,只需下载一个修复的新版本:https://builds.apache.org/job/dir-studio/

    【讨论】:

      【解决方案4】:

      我已经修复了教程(http://directory.staging.apache.org/apacheds/basic-ug/1.4.3-adding-partition.html 供任何想在http://directory.apache.org/apacheds/basic-ug/1.4.3-adding-partition.html 的真实站点上线之前查看更改的人使用 - 这需要几个小时)。

      感谢您的报告!创建一个带有拼写错误描述的 JIRA 会更方便(而且补丁更好!该网站是基于文本的(markdown),可在http://svn.apache.org/repos/asf/directory/site/trunk/content/ 上找到)

      【讨论】:

      • 嗨,我正在按照上面提供的链接使用 apache ldap api 创建一个新分区.....但到目前为止一直失败,总是收到此错误....LdapSchemaViolationException: ERR_219 Entry o= Sevenseas 没有 entryCsn 属性你能帮帮我吗......@Emmanuel
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多