1 1.1 lukem # java.schema -- Java Object Schema 2 1.1.1.4 tron # $OpenLDAP$ 3 1.1 lukem ## This work is part of OpenLDAP Software <http://www.openldap.org/>. 4 1.1 lukem ## 5 1.1.1.10 christos ## Copyright 1998-2024 The OpenLDAP Foundation. 6 1.1 lukem ## All rights reserved. 7 1.1 lukem ## 8 1.1 lukem ## Redistribution and use in source and binary forms, with or without 9 1.1 lukem ## modification, are permitted only as authorized by the OpenLDAP 10 1.1 lukem ## Public License. 11 1.1 lukem ## 12 1.1 lukem ## A copy of this license is available in the file LICENSE in the 13 1.1 lukem ## top-level directory of the distribution or, alternatively, at 14 1.1 lukem ## <http://www.OpenLDAP.org/license.html>. 15 1.1 lukem # 16 1.1 lukem # Java Object Schema (defined in RFC 2713) 17 1.1 lukem # depends upon core.schema 18 1.1 lukem # 19 1.1 lukem 20 1.1 lukem # Network Working Group V. Ryan 21 1.1 lukem # Request for Comments: 2713 S. Seligman 22 1.1 lukem # Category: Informational R. Lee 23 1.1 lukem # Sun Microsystems, Inc. 24 1.1 lukem # October 1999 25 1.1 lukem # 26 1.1 lukem # 27 1.1 lukem # Schema for Representing Java(tm) Objects in an LDAP Directory 28 1.1 lukem # 29 1.1 lukem # Status of this Memo 30 1.1 lukem # 31 1.1 lukem # This memo provides information for the Internet community. It does 32 1.1 lukem # not specify an Internet standard of any kind. Distribution of this 33 1.1 lukem # memo is unlimited. 34 1.1 lukem # 35 1.1 lukem # Copyright Notice 36 1.1 lukem # 37 1.1 lukem # Copyright (C) The Internet Society (1999). All Rights Reserved. 38 1.1 lukem # 39 1.1 lukem # Abstract 40 1.1 lukem # 41 1.1 lukem # This document defines the schema for representing Java(tm) objects in 42 1.1 lukem # an LDAP directory [LDAPv3]. It defines schema elements to represent 43 1.1 lukem # a Java serialized object [Serial], a Java marshalled object [RMI], a 44 1.1 lukem # Java remote object [RMI], and a JNDI reference [JNDI]. 45 1.1 lukem # 46 1.1 lukem 47 1.1 lukem # [trimmed] 48 1.1 lukem 49 1.1 lukem # 3 Attribute Type Definitions 50 1.1 lukem # 51 1.1 lukem # The following attribute types are defined in this document: 52 1.1 lukem # 53 1.1 lukem # javaClassName 54 1.1 lukem # javaClassNames 55 1.1 lukem # javaCodebase 56 1.1 lukem # javaSerializedData 57 1.1 lukem # javaFactory 58 1.1 lukem # javaReferenceAddress 59 1.1 lukem # javaDoc 60 1.1 lukem # 61 1.1 lukem # 3.1 javaClassName 62 1.1 lukem # 63 1.1 lukem # This attribute stores the fully qualified name of the Java object's 64 1.1 lukem # "distinguished" class or interface (for example, "java.lang.String"). 65 1.1 lukem # It is a single-valued attribute. This attribute's syntax is ' 66 1.1 lukem # Directory String' and its case is significant. 67 1.1 lukem # 68 1.1 lukem # ( 1.3.6.1.4.1.42.2.27.4.1.6 69 1.1 lukem # NAME 'javaClassName' 70 1.1 lukem # DESC 'Fully qualified name of distinguished Java class or 71 1.1 lukem # interface' 72 1.1 lukem # EQUALITY caseExactMatch 73 1.1 lukem # SYNTAX 1.3.6.1.4.1.1466.115.121.1.15 74 1.1 lukem # SINGLE-VALUE 75 1.1 lukem # ) 76 1.1 lukem # 77 1.1 lukem attributetype ( 1.3.6.1.4.1.42.2.27.4.1.6 78 1.1 lukem NAME 'javaClassName' 79 1.1 lukem DESC 'Fully qualified name of distinguished Java class or interface' 80 1.1 lukem EQUALITY caseExactMatch 81 1.1 lukem SYNTAX 1.3.6.1.4.1.1466.115.121.1.15 82 1.1 lukem SINGLE-VALUE ) 83 1.1 lukem 84 1.1 lukem # 3.2 javaCodebase 85 1.1 lukem # 86 1.1 lukem # This attribute stores the Java class definition's locations. It 87 1.1 lukem # specifies the locations from which to load the class definition for 88 1.1 lukem # the class specified by the javaClassName attribute. Each value of 89 1.1 lukem # the attribute contains an ordered list of URLs, separated by spaces. 90 1.1 lukem # For example, a value of "url1 url2 url3" means that the three 91 1.1 lukem # (possibly interdependent) URLs (url1, url2, and url3) form the 92 1.1 lukem # codebase for loading in the Java class definition. 93 1.1 lukem # 94 1.1 lukem # If the javaCodebase attribute contains more than one value, each 95 1.1 lukem # value is an independent codebase. That is, there is no relationship 96 1.1 lukem # between the URLs in one value and those in another; each value can be 97 1.1 lukem # viewed as an alternate source for loading the Java class definition. 98 1.1 lukem # See [Java] for information regarding class loading. 99 1.1 lukem # 100 1.1 lukem # This attribute's syntax is 'IA5 String' and its case is significant. 101 1.1 lukem # 102 1.1 lukem # ( 1.3.6.1.4.1.42.2.27.4.1.7 103 1.1 lukem # NAME 'javaCodebase' 104 1.1 lukem # DESC 'URL(s) specifying the location of class definition' 105 1.1 lukem # EQUALITY caseExactIA5Match 106 1.1 lukem # SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 107 1.1 lukem # ) 108 1.1 lukem # 109 1.1 lukem attributetype ( 1.3.6.1.4.1.42.2.27.4.1.7 110 1.1 lukem NAME 'javaCodebase' 111 1.1 lukem DESC 'URL(s) specifying the location of class definition' 112 1.1 lukem EQUALITY caseExactIA5Match 113 1.1 lukem SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 ) 114 1.1 lukem 115 1.1 lukem # 3.3 javaClassNames 116 1.1 lukem # 117 1.1 lukem # This attribute stores the Java object's fully qualified class or 118 1.1 lukem # interface names (for example, "java.lang.String"). It is a 119 1.1 lukem # multivalued attribute. When more than one value is present, each is 120 1.1 lukem # the name of a class or interface, or ancestor class or interface, of 121 1.1 lukem # this object. 122 1.1 lukem # 123 1.1 lukem # This attribute's syntax is 'Directory String' and its case is 124 1.1 lukem # significant. 125 1.1 lukem # 126 1.1 lukem # ( 1.3.6.1.4.1.42.2.27.4.1.13 127 1.1 lukem # NAME 'javaClassNames' 128 1.1 lukem # DESC 'Fully qualified Java class or interface name' 129 1.1 lukem # EQUALITY caseExactMatch 130 1.1 lukem # SYNTAX 1.3.6.1.4.1.1466.115.121.1.15 131 1.1 lukem # ) 132 1.1 lukem # 133 1.1 lukem # 134 1.1 lukem attributetype ( 1.3.6.1.4.1.42.2.27.4.1.13 135 1.1 lukem NAME 'javaClassNames' 136 1.1 lukem DESC 'Fully qualified Java class or interface name' 137 1.1 lukem EQUALITY caseExactMatch 138 1.1 lukem SYNTAX 1.3.6.1.4.1.1466.115.121.1.15 ) 139 1.1 lukem 140 1.1 lukem # 3.4 javaSerializedData 141 1.1 lukem # 142 1.1 lukem # This attribute stores the serialized form of a Java object. The 143 1.1 lukem # serialized form is described in [Serial]. 144 1.1 lukem # 145 1.1 lukem # This attribute's syntax is 'Octet String'. 146 1.1 lukem # 147 1.1 lukem # ( 1.3.6.1.4.1.42.2.27.4.1.8 148 1.1 lukem # NAME 'javaSerializedData 149 1.1 lukem # DESC 'Serialized form of a Java object' 150 1.1 lukem # SYNTAX 1.3.6.1.4.1.1466.115.121.1.40 151 1.1 lukem # SINGLE-VALUE 152 1.1 lukem # ) 153 1.1 lukem # 154 1.1 lukem attributetype ( 1.3.6.1.4.1.42.2.27.4.1.8 155 1.1 lukem NAME 'javaSerializedData' 156 1.1 lukem DESC 'Serialized form of a Java object' 157 1.1 lukem SYNTAX 1.3.6.1.4.1.1466.115.121.1.40 158 1.1 lukem SINGLE-VALUE ) 159 1.1 lukem 160 1.1 lukem # 3.5 javaFactory 161 1.1 lukem # 162 1.1 lukem # This attribute stores the fully qualified class name of the object 163 1.1 lukem # factory (for example, "com.wiz.jndi.WizObjectFactory") that can be 164 1.1 lukem # used to create an instance of the object identified by the 165 1.1 lukem # javaClassName attribute. 166 1.1 lukem # 167 1.1 lukem # This attribute's syntax is 'Directory String' and its case is 168 1.1 lukem # significant. 169 1.1 lukem # 170 1.1 lukem # ( 1.3.6.1.4.1.42.2.27.4.1.10 171 1.1 lukem # NAME 'javaFactory' 172 1.1 lukem # DESC 'Fully qualified Java class name of a JNDI object factory' 173 1.1 lukem # EQUALITY caseExactMatch 174 1.1 lukem # SYNTAX 1.3.6.1.4.1.1466.115.121.1.15 175 1.1 lukem # SINGLE-VALUE 176 1.1 lukem # ) 177 1.1 lukem # 178 1.1 lukem attributetype ( 1.3.6.1.4.1.42.2.27.4.1.10 179 1.1 lukem NAME 'javaFactory' 180 1.1 lukem DESC 'Fully qualified Java class name of a JNDI object factory' 181 1.1 lukem EQUALITY caseExactMatch 182 1.1 lukem SYNTAX 1.3.6.1.4.1.1466.115.121.1.15 183 1.1 lukem SINGLE-VALUE ) 184 1.1 lukem 185 1.1 lukem # 3.6 javaReferenceAddress 186 1.1 lukem # 187 1.1 lukem # This attribute represents the sequence of addresses of a JNDI 188 1.1 lukem # reference. Each of its values represents one address, a Java object 189 1.1 lukem # of type javax.naming.RefAddr. Its value is a concatenation of the 190 1.1 lukem # address type and address contents, preceded by a sequence number (the 191 1.1 lukem # order of addresses in a JNDI reference is significant). For example: 192 1.1 lukem # 193 1.1 lukem # #0#TypeA#ValA 194 1.1 lukem # #1#TypeB#ValB 195 1.1 lukem # #2#TypeC##rO0ABXNyABpq... 196 1.1 lukem # 197 1.1 lukem # In more detail, the value is encoded as follows: 198 1.1 lukem # 199 1.1 lukem # The delimiter is the first character of the value. For readability 200 1.1 lukem # the character '#' is recommended when it is not otherwise used 201 1.1 lukem # anywhere in the value, but any character may be used subject to 202 1.1 lukem # restrictions given below. 203 1.1 lukem # 204 1.1 lukem # The first delimiter is followed by the sequence number. The sequence 205 1.1 lukem # number of an address is its position in the JNDI reference, with the 206 1.1 lukem # first address being numbered 0. It is represented by its shortest 207 1.1 lukem # string form, in decimal notation. 208 1.1 lukem # 209 1.1 lukem # The sequence number is followed by a delimiter, then by the address 210 1.1 lukem # type, and then by another delimiter. If the address is of Java class 211 1.1 lukem # javax.naming.StringRefAddr, then this delimiter is followed by the 212 1.1 lukem # value of the address contents (which is a string). Otherwise, this 213 1.1 lukem # delimiter is followed immediately by another delimiter, and then by 214 1.1 lukem # the Base64 encoding of the serialized form of the entire address. 215 1.1 lukem # 216 1.1 lukem # The delimiter may be any character other than a digit or a character 217 1.1 lukem # contained in the address type. In addition, if the address contents 218 1.1 lukem # is a string, the delimiter may not be the first character of that 219 1.1 lukem # string. 220 1.1 lukem # 221 1.1 lukem # This attribute's syntax is 'Directory String' and its case is 222 1.1 lukem # significant. It can contain multiple values. 223 1.1 lukem # 224 1.1 lukem # ( 1.3.6.1.4.1.42.2.27.4.1.11 225 1.1 lukem # NAME 'javaReferenceAddress' 226 1.1 lukem # DESC 'Addresses associated with a JNDI Reference' 227 1.1 lukem # EQUALITY caseExactMatch 228 1.1 lukem # SYNTAX 1.3.6.1.4.1.1466.115.121.1.15 229 1.1 lukem # ) 230 1.1 lukem # 231 1.1 lukem attributetype ( 1.3.6.1.4.1.42.2.27.4.1.11 232 1.1 lukem NAME 'javaReferenceAddress' 233 1.1 lukem DESC 'Addresses associated with a JNDI Reference' 234 1.1 lukem EQUALITY caseExactMatch 235 1.1 lukem SYNTAX 1.3.6.1.4.1.1466.115.121.1.15 ) 236 1.1 lukem 237 1.1 lukem # 3.7 javaDoc 238 1.1 lukem # 239 1.1 lukem # This attribute stores a pointer to the Java documentation for the 240 1.1 lukem # class. It's value is a URL. For example, the following URL points to 241 1.1 lukem # the specification of the java.lang.String class: 242 1.1 lukem # http://java.sun.com/products/jdk/1.2/docs/api/java/lang/String.html 243 1.1 lukem # 244 1.1 lukem # This attribute's syntax is 'IA5 String' and its case is significant. 245 1.1 lukem # 246 1.1 lukem # ( 1.3.6.1.4.1.42.2.27.4.1.12 247 1.1 lukem # NAME 'javaDoc' 248 1.1 lukem # DESC 'The Java documentation for the class' 249 1.1 lukem # EQUALITY caseExactIA5Match 250 1.1 lukem # SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 251 1.1 lukem # ) 252 1.1 lukem # 253 1.1 lukem attributetype ( 1.3.6.1.4.1.42.2.27.4.1.12 254 1.1 lukem NAME 'javaDoc' 255 1.1 lukem DESC 'The Java documentation for the class' 256 1.1 lukem EQUALITY caseExactIA5Match 257 1.1 lukem SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 ) 258 1.1 lukem 259 1.1 lukem # 4 Object Class Definitions 260 1.1 lukem # 261 1.1 lukem # The following object classes are defined in this document: 262 1.1 lukem # 263 1.1 lukem # javaContainer 264 1.1 lukem # javaObject 265 1.1 lukem # javaSerializedObject 266 1.1 lukem # javaMarshalledObject 267 1.1 lukem # javaNamingReference 268 1.1 lukem # 269 1.1 lukem # 4.1 javaContainer 270 1.1 lukem # 271 1.1 lukem # This structural object class represents a container for a Java 272 1.1 lukem # object. 273 1.1 lukem # 274 1.1 lukem # ( 1.3.6.1.4.1.42.2.27.4.2.1 275 1.1 lukem # NAME 'javaContainer' 276 1.1 lukem # DESC 'Container for a Java object' 277 1.1 lukem # SUP top 278 1.1 lukem # STRUCTURAL 279 1.1 lukem # MUST ( cn ) 280 1.1 lukem # ) 281 1.1 lukem # 282 1.1 lukem objectclass ( 1.3.6.1.4.1.42.2.27.4.2.1 283 1.1 lukem NAME 'javaContainer' 284 1.1 lukem DESC 'Container for a Java object' 285 1.1 lukem SUP top 286 1.1 lukem STRUCTURAL 287 1.1 lukem MUST cn ) 288 1.1 lukem 289 1.1 lukem # 4.2 javaObject 290 1.1 lukem # 291 1.1 lukem # This abstract object class represents a Java object. A javaObject 292 1.1 lukem # cannot exist in the directory; only auxiliary or structural 293 1.1 lukem # subclasses of it can exist in the directory. 294 1.1 lukem # 295 1.1 lukem # ( 1.3.6.1.4.1.42.2.27.4.2.4 296 1.1 lukem # NAME 'javaObject' 297 1.1 lukem # DESC 'Java object representation' 298 1.1 lukem # SUP top 299 1.1 lukem # ABSTRACT 300 1.1 lukem # MUST ( javaClassName ) 301 1.1 lukem # MAY ( javaClassNames $ 302 1.1 lukem # javaCodebase $ 303 1.1 lukem # javaDoc $ 304 1.1 lukem # description ) 305 1.1 lukem # ) 306 1.1 lukem # 307 1.1 lukem objectclass ( 1.3.6.1.4.1.42.2.27.4.2.4 308 1.1 lukem NAME 'javaObject' 309 1.1 lukem DESC 'Java object representation' 310 1.1 lukem SUP top 311 1.1 lukem ABSTRACT 312 1.1 lukem MUST javaClassName 313 1.1 lukem MAY ( javaClassNames $ javaCodebase $ 314 1.1 lukem javaDoc $ description ) ) 315 1.1 lukem 316 1.1 lukem # 4.3 javaSerializedObject 317 1.1 lukem # 318 1.1 lukem # This auxiliary object class represents a Java serialized object. It 319 1.1 lukem # must be mixed in with a structural object class. 320 1.1 lukem # 321 1.1 lukem # ( 1.3.6.1.4.1.42.2.27.4.2.5 322 1.1 lukem # NAME 'javaSerializedObject' 323 1.1 lukem # DESC 'Java serialized object' 324 1.1 lukem # SUP javaObject 325 1.1 lukem # AUXILIARY 326 1.1 lukem # MUST ( javaSerializedData ) 327 1.1 lukem # ) 328 1.1 lukem # 329 1.1 lukem objectclass ( 1.3.6.1.4.1.42.2.27.4.2.5 330 1.1 lukem NAME 'javaSerializedObject' 331 1.1 lukem DESC 'Java serialized object' 332 1.1 lukem SUP javaObject 333 1.1 lukem AUXILIARY 334 1.1 lukem MUST javaSerializedData ) 335 1.1 lukem 336 1.1 lukem # 4.4 javaMarshalledObject 337 1.1 lukem # 338 1.1 lukem # This auxiliary object class represents a Java marshalled object. It 339 1.1 lukem # must be mixed in with a structural object class. 340 1.1 lukem # 341 1.1 lukem # ( 1.3.6.1.4.1.42.2.27.4.2.8 342 1.1 lukem # NAME 'javaMarshalledObject' 343 1.1 lukem # DESC 'Java marshalled object' 344 1.1 lukem # SUP javaObject 345 1.1 lukem # AUXILIARY 346 1.1 lukem # MUST ( javaSerializedData ) 347 1.1 lukem # ) 348 1.1 lukem # 349 1.1 lukem objectclass ( 1.3.6.1.4.1.42.2.27.4.2.8 350 1.1 lukem NAME 'javaMarshalledObject' 351 1.1 lukem DESC 'Java marshalled object' 352 1.1 lukem SUP javaObject 353 1.1 lukem AUXILIARY 354 1.1 lukem MUST javaSerializedData ) 355 1.1 lukem 356 1.1 lukem # 4.5 javaNamingReference 357 1.1 lukem # 358 1.1 lukem # This auxiliary object class represents a JNDI reference. It must be 359 1.1 lukem # mixed in with a structural object class. 360 1.1 lukem # 361 1.1 lukem # ( 1.3.6.1.4.1.42.2.27.4.2.7 362 1.1 lukem # NAME 'javaNamingReference' 363 1.1 lukem # DESC 'JNDI reference' 364 1.1 lukem # SUP javaObject 365 1.1 lukem # AUXILIARY 366 1.1 lukem # MAY ( javaReferenceAddress $ 367 1.1 lukem # javaFactory ) 368 1.1 lukem # ) 369 1.1 lukem # 370 1.1 lukem objectclass ( 1.3.6.1.4.1.42.2.27.4.2.7 371 1.1 lukem NAME 'javaNamingReference' 372 1.1 lukem DESC 'JNDI reference' 373 1.1 lukem SUP javaObject 374 1.1 lukem AUXILIARY 375 1.1 lukem MAY ( javaReferenceAddress $ javaFactory ) ) 376 1.1 lukem 377 1.1 lukem # Full Copyright Statement 378 1.1 lukem # 379 1.1 lukem # Copyright (C) The Internet Society (1999). All Rights Reserved. 380 1.1 lukem # 381 1.1 lukem # This document and translations of it may be copied and furnished to 382 1.1 lukem # others, and derivative works that comment on or otherwise explain it 383 1.1 lukem # or assist in its implementation may be prepared, copied, published 384 1.1 lukem # and distributed, in whole or in part, without restriction of any 385 1.1 lukem # kind, provided that the above copyright notice and this paragraph are 386 1.1 lukem # included on all such copies and derivative works. However, this 387 1.1 lukem # document itself may not be modified in any way, such as by removing 388 1.1 lukem # the copyright notice or references to the Internet Society or other 389 1.1 lukem # Internet organizations, except as needed for the purpose of 390 1.1 lukem # developing Internet standards in which case the procedures for 391 1.1 lukem # copyrights defined in the Internet Standards process must be 392 1.1 lukem # followed, or as required to translate it into languages other than 393 1.1 lukem # English. 394 1.1 lukem # 395 1.1 lukem # The limited permissions granted above are perpetual and will not be 396 1.1 lukem # revoked by the Internet Society or its successors or assigns. 397 1.1 lukem # 398 1.1 lukem # This document and the information contained herein is provided on an 399 1.1 lukem # "AS IS" basis and THE INTERNET SOCIETY AND THE INTERNET ENGINEERING 400 1.1 lukem # TASK FORCE DISCLAIMS ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING 401 1.1 lukem # BUT NOT LIMITED TO ANY WARRANTY THAT THE USE OF THE INFORMATION 402 1.1 lukem # HEREIN WILL NOT INFRINGE ANY RIGHTS OR ANY IMPLIED WARRANTIES OF 403 1.1 lukem # MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. 404