# Java Object Schema # $OpenLDAP$ # depends upon core.schema # Network Working Group V. Ryan # Request for Comments: 2713 S. Seligman # Category: Informational R. Lee # Sun Microsystems, Inc. # October 1999 # # # Schema for Representing Java(tm) Objects in an LDAP Directory # # Status of this Memo # # This memo provides information for the Internet community. It does # not specify an Internet standard of any kind. Distribution of this # memo is unlimited. # # Copyright Notice # # Copyright (C) The Internet Society (1999). All Rights Reserved. # # Abstract # # This document defines the schema for representing Java(tm) objects in # an LDAP directory [LDAPv3]. It defines schema elements to represent # a Java serialized object [Serial], a Java marshalled object [RMI], a # Java remote object [RMI], and a JNDI reference [JNDI]. # # [trimmed] # 3 Attribute Type Definitions # # The following attribute types are defined in this document: # # javaClassName # javaClassNames # javaCodebase # javaSerializedData # javaFactory # javaReferenceAddress # javaDoc # # 3.1 javaClassName # # This attribute stores the fully qualified name of the Java object's # "distinguished" class or interface (for example, "java.lang.String"). # It is a single-valued attribute. This attribute's syntax is ' # Directory String' and its case is significant. # # ( 1.3.6.1.4.1.42.2.27.4.1.6 # NAME 'javaClassName' # DESC 'Fully qualified name of distinguished Java class or # interface' # EQUALITY caseExactMatch # SYNTAX 1.3.6.1.4.1.1466.115.121.1.15 # SINGLE-VALUE # ) # attributetype ( 1.3.6.1.4.1.42.2.27.4.1.6 NAME 'javaClassName' DESC 'Fully qualified name of distinguished Java class or interface' EQUALITY caseExactMatch SYNTAX 1.3.6.1.4.1.1466.115.121.1.15 SINGLE-VALUE ) # 3.2 javaCodebase # # This attribute stores the Java class definition's locations. It # specifies the locations from which to load the class definition for # the class specified by the javaClassName attribute. Each value of # the attribute contains an ordered list of URLs, separated by spaces. # For example, a value of "url1 url2 url3" means that the three # (possibly interdependent) URLs (url1, url2, and url3) form the # codebase for loading in the Java class definition. # # If the javaCodebase attribute contains more than one value, each # value is an independent codebase. That is, there is no relationship # between the URLs in one value and those in another; each value can be # viewed as an alternate source for loading the Java class definition. # See [Java] for information regarding class loading. # # This attribute's syntax is 'IA5 String' and its case is significant. # # ( 1.3.6.1.4.1.42.2.27.4.1.7 # NAME 'javaCodebase' # DESC 'URL(s) specifying the location of class definition' # EQUALITY caseExactIA5Match # SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 # ) # attributetype ( 1.3.6.1.4.1.42.2.27.4.1.7 NAME 'javaCodebase' DESC 'URL(s) specifying the location of class definition' EQUALITY caseExactIA5Match SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 ) # 3.3 javaClassNames # # This attribute stores the Java object's fully qualified class or # interface names (for example, "java.lang.String"). It is a # multivalued attribute. When more than one value is present, each is # the name of a class or interface, or ancestor class or interface, of # this object. # # This attribute's syntax is 'Directory String' and its case is # significant. # # ( 1.3.6.1.4.1.42.2.27.4.1.13 # NAME 'javaClassNames' # DESC 'Fully qualified Java class or interface name' # EQUALITY caseExactMatch # SYNTAX 1.3.6.1.4.1.1466.115.121.1.15 # ) # # attributetype ( 1.3.6.1.4.1.42.2.27.4.1.13 NAME 'javaClassNames' DESC 'Fully qualified Java class or interface name' EQUALITY caseExactMatch SYNTAX 1.3.6.1.4.1.1466.115.121.1.15 ) # 3.4 javaSerializedData # # This attribute stores the serialized form of a Java object. The # serialized form is described in [Serial]. # # This attribute's syntax is 'Octet String'. # # ( 1.3.6.1.4.1.42.2.27.4.1.8 # NAME 'javaSerializedData # DESC 'Serialized form of a Java object' # SYNTAX 1.3.6.1.4.1.1466.115.121.1.40 # SINGLE-VALUE # ) # attributetype ( 1.3.6.1.4.1.42.2.27.4.1.8 NAME 'javaSerializedData' DESC 'Serialized form of a Java object' SYNTAX 1.3.6.1.4.1.1466.115.121.1.40 SINGLE-VALUE ) # 3.5 javaFactory # # This attribute stores the fully qualified class name of the object # factory (for example, "com.wiz.jndi.WizObjectFactory") that can be # used to create an instance of the object identified by the # javaClassName attribute. # # This attribute's syntax is 'Directory String' and its case is # significant. # # ( 1.3.6.1.4.1.42.2.27.4.1.10 # NAME 'javaFactory' # DESC 'Fully qualified Java class name of a JNDI object factory' # EQUALITY caseExactMatch # SYNTAX 1.3.6.1.4.1.1466.115.121.1.15 # SINGLE-VALUE # ) # attributetype ( 1.3.6.1.4.1.42.2.27.4.1.10 NAME 'javaFactory' DESC 'Fully qualified Java class name of a JNDI object factory' EQUALITY caseExactMatch SYNTAX 1.3.6.1.4.1.1466.115.121.1.15 SINGLE-VALUE ) # 3.6 javaReferenceAddress # # This attribute represents the sequence of addresses of a JNDI # reference. Each of its values represents one address, a Java object # of type javax.naming.RefAddr. Its value is a concatenation of the # address type and address contents, preceded by a sequence number (the # order of addresses in a JNDI reference is significant). For example: # # #0#TypeA#ValA # #1#TypeB#ValB # #2#TypeC##rO0ABXNyABpq... # # In more detail, the value is encoded as follows: # # The delimiter is the first character of the value. For readability # the character '#' is recommended when it is not otherwise used # anywhere in the value, but any character may be used subject to # restrictions given below. # # The first delimiter is followed by the sequence number. The sequence # number of an address is its position in the JNDI reference, with the # first address being numbered 0. It is represented by its shortest # string form, in decimal notation. # # The sequence number is followed by a delimiter, then by the address # type, and then by another delimiter. If the address is of Java class # javax.naming.StringRefAddr, then this delimiter is followed by the # value of the address contents (which is a string). Otherwise, this # delimiter is followed immediately by another delimiter, and then by # the Base64 encoding of the serialized form of the entire address. # # The delimiter may be any character other than a digit or a character # contained in the address type. In addition, if the address contents # is a string, the delimiter may not be the first character of that # string. # # This attribute's syntax is 'Directory String' and its case is # significant. It can contain multiple values. # # ( 1.3.6.1.4.1.42.2.27.4.1.11 # NAME 'javaReferenceAddress' # DESC 'Addresses associated with a JNDI Reference' # EQUALITY caseExactMatch # SYNTAX 1.3.6.1.4.1.1466.115.121.1.15 # ) # attributetype ( 1.3.6.1.4.1.42.2.27.4.1.11 NAME 'javaReferenceAddress' DESC 'Addresses associated with a JNDI Reference' EQUALITY caseExactMatch SYNTAX 1.3.6.1.4.1.1466.115.121.1.15 ) # 3.7 javaDoc # # This attribute stores a pointer to the Java documentation for the # class. It's value is a URL. For example, the following URL points to # the specification of the java.lang.String class: # http://java.sun.com/products/jdk/1.2/docs/api/java/lang/String.html # # This attribute's syntax is 'IA5 String' and its case is significant. # # ( 1.3.6.1.4.1.42.2.27.4.1.12 # NAME 'javaDoc' # DESC 'The Java documentation for the class' # EQUALITY caseExactIA5Match # SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 # ) # attributetype ( 1.3.6.1.4.1.42.2.27.4.1.12 NAME 'javaDoc' DESC 'The Java documentation for the class' EQUALITY caseExactIA5Match SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 ) # 4 Object Class Definitions # # The following object classes are defined in this document: # # javaContainer # javaObject # javaSerializedObject # javaMarshalledObject # javaNamingReference # # 4.1 javaContainer # # This structural object class represents a container for a Java # object. # # ( 1.3.6.1.4.1.42.2.27.4.2.1 # NAME 'javaContainer' # DESC 'Container for a Java object' # SUP top # STRUCTURAL # MUST ( cn ) # ) # objectclass ( 1.3.6.1.4.1.42.2.27.4.2.1 NAME 'javaContainer' DESC 'Container for a Java object' SUP top STRUCTURAL MUST cn ) # 4.2 javaObject # # This abstract object class represents a Java object. A javaObject # cannot exist in the directory; only auxiliary or structural # subclasses of it can exist in the directory. # # ( 1.3.6.1.4.1.42.2.27.4.2.4 # NAME 'javaObject' # DESC 'Java object representation' # SUP top # ABSTRACT # MUST ( javaClassName ) # MAY ( javaClassNames $ # javaCodebase $ # javaDoc $ # description ) # ) # objectclass ( 1.3.6.1.4.1.42.2.27.4.2.4 NAME 'javaObject' DESC 'Java object representation' SUP top ABSTRACT MUST javaClassName MAY ( javaClassNames $ javaCodebase $ javaDoc $ description ) ) # 4.3 javaSerializedObject # # This auxiliary object class represents a Java serialized object. It # must be mixed in with a structural object class. # # ( 1.3.6.1.4.1.42.2.27.4.2.5 # NAME 'javaSerializedObject' # DESC 'Java serialized object' # SUP javaObject # AUXILIARY # MUST ( javaSerializedData ) # ) # objectclass ( 1.3.6.1.4.1.42.2.27.4.2.5 NAME 'javaSerializedObject' DESC 'Java serialized object' SUP javaObject AUXILIARY MUST javaSerializedData ) # 4.4 javaMarshalledObject # # This auxiliary object class represents a Java marshalled object. It # must be mixed in with a structural object class. # # ( 1.3.6.1.4.1.42.2.27.4.2.8 # NAME 'javaMarshalledObject' # DESC 'Java marshalled object' # SUP javaObject # AUXILIARY # MUST ( javaSerializedData ) # ) # objectclass ( 1.3.6.1.4.1.42.2.27.4.2.8 NAME 'javaMarshalledObject' DESC 'Java marshalled object' SUP javaObject AUXILIARY MUST javaSerializedData ) # 4.5 javaNamingReference # # This auxiliary object class represents a JNDI reference. It must be # mixed in with a structural object class. # # ( 1.3.6.1.4.1.42.2.27.4.2.7 # NAME 'javaNamingReference' # DESC 'JNDI reference' # SUP javaObject # AUXILIARY # MAY ( javaReferenceAddress $ # javaFactory ) # ) # objectclass ( 1.3.6.1.4.1.42.2.27.4.2.7 NAME 'javaNamingReference' DESC 'JNDI reference' SUP javaObject AUXILIARY MAY ( javaReferenceAddress $ javaFactory ) ) # Full Copyright Statement # # Copyright (C) The Internet Society (1999). All Rights Reserved. # # This document and translations of it may be copied and furnished to # others, and derivative works that comment on or otherwise explain it # or assist in its implementation may be prepared, copied, published # and distributed, in whole or in part, without restriction of any # kind, provided that the above copyright notice and this paragraph are # included on all such copies and derivative works. However, this # document itself may not be modified in any way, such as by removing # the copyright notice or references to the Internet Society or other # Internet organizations, except as needed for the purpose of # developing Internet standards in which case the procedures for # copyrights defined in the Internet Standards process must be # followed, or as required to translate it into languages other than # English. # # The limited permissions granted above are perpetual and will not be # revoked by the Internet Society or its successors or assigns. # # This document and the information contained herein is provided on an # "AS IS" basis and THE INTERNET SOCIETY AND THE INTERNET ENGINEERING # TASK FORCE DISCLAIMS ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING # BUT NOT LIMITED TO ANY WARRANTY THAT THE USE OF THE INFORMATION # HEREIN WILL NOT INFRINGE ANY RIGHTS OR ANY IMPLIED WARRANTIES OF # MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.