Return-Path: Delivered-To: apmail-db-jdo-dev-archive@www.apache.org Received: (qmail 31596 invoked from network); 8 Mar 2006 00:15:56 -0000 Received: from hermes.apache.org (HELO mail.apache.org) (209.237.227.199) by minotaur.apache.org with SMTP; 8 Mar 2006 00:15:56 -0000 Received: (qmail 23281 invoked by uid 500); 8 Mar 2006 00:15:56 -0000 Mailing-List: contact jdo-dev-help@db.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: jdo-dev@db.apache.org Delivered-To: mailing list jdo-dev@db.apache.org Received: (qmail 23270 invoked by uid 99); 8 Mar 2006 00:15:56 -0000 Received: from asf.osuosl.org (HELO asf.osuosl.org) (140.211.166.49) by apache.org (qpsmtpd/0.29) with ESMTP; Tue, 07 Mar 2006 16:15:56 -0800 X-ASF-Spam-Status: No, hits=0.0 required=10.0 tests=HTML_MESSAGE,UNPARSEABLE_RELAY X-Spam-Check-By: apache.org Received-SPF: pass (asf.osuosl.org: local policy) Received: from [192.18.98.36] (HELO brmea-mail-4.sun.com) (192.18.98.36) by apache.org (qpsmtpd/0.29) with ESMTP; Tue, 07 Mar 2006 16:15:53 -0800 Received: from fe-amer-01.sun.com ([192.18.108.175]) by brmea-mail-4.sun.com (8.12.10/8.12.9) with ESMTP id k280FWuf010317 for ; Tue, 7 Mar 2006 17:15:33 -0700 (MST) Received: from conversion-daemon.mail-amer.sun.com by mail-amer.sun.com (Sun Java System Messaging Server 6.2-4.02 (built Sep 9 2005)) id <0IVS009017HYNY00@mail-amer.sun.com> (original mail from Craig.Russell@Sun.COM) for jdo-dev@db.apache.org; Tue, 07 Mar 2006 17:15:32 -0700 (MST) Received: from [192.168.0.10] (c-24-6-172-77.hsd1.ca.comcast.net [24.6.172.77]) by mail-amer.sun.com (Sun Java System Messaging Server 6.2-4.02 (built Sep 9 2005)) with ESMTPSA id <0IVS005UV8PSX400@mail-amer.sun.com> for jdo-dev@db.apache.org; Tue, 07 Mar 2006 17:15:32 -0700 (MST) Date: Tue, 07 Mar 2006 15:54:44 -0800 From: Craig L Russell Subject: Bug in JPOX parser NPE in constructor (CollectionMetaData.java:96) Sender: Craig.Russell@Sun.COM To: Apache JDO project Message-id: <71DF07FC-7210-430B-8A60-EB2A0E94DAC0@Sun.COM> MIME-version: 1.0 X-Mailer: Apple Mail (2.746.2) Content-type: multipart/signed; protocol="application/pkcs7-signature"; boundary=Apple-Mail-58-259728338; micalg=sha1 X-Virus-Checked: Checked by ClamAV on apache.org X-Spam-Rating: minotaur.apache.org 1.6.2 0/1000/N --Apple-Mail-58-259728338 Content-Type: multipart/alternative; boundary=Apple-Mail-57-259727053 --Apple-Mail-57-259727053 Content-Transfer-Encoding: 7bit Content-Type: text/plain; charset=US-ASCII; delsp=yes; format=flowed Hi, I think I've found the problem with the NPE in parsing the company package.jdo in which we define a . While constructing the collection metadata, we try to get the package name. The top of the stack contains the property in which the collection element is defined. Property extends field so we look for the class metadata to get the package metadata. But the field metadata doesn't know that it can be in an interface; it only knows about being in a class or embedded metadata. An interface does know its package, so it's possible for the interface metadata to return the package, but an interface is an AbstractClass whereas the getClassMetadata method returns ClassMetadata. Possibilities: you could redefine getClassMetadata to return AbstractClassMetadata or have InterfaceMetadata inherit ClassMetadata. Also, looking at the JPOX implementation of startElement and it appears that it's not supported for an element "property" to be part of element "class". Shouldn't there be an else if (parent instanceof ClassMetaData) clause here? // New property for this interface else if (qName.equals("property")) { MetaData parent = getStack(); if (parent instanceof InterfaceMetaData) { InterfaceMetaData intmd = (InterfaceMetaData)parent; PropertyMetaData propmd = newPropertyObject(intmd, attrs); intmd.addProperty(propmd); pushStack(propmd); } else if (parent instanceof EmbeddedMetaData) { EmbeddedMetaData emd = (EmbeddedMetaData)parent; PropertyMetaData propmd = newPropertyObject(emd, attrs); emd.addProperty(propmd); pushStack(propmd); } Hope this helps. Craig Craig Russell Architect, Sun Java Enterprise System http://java.sun.com/products/jdo 408 276-5638 mailto:Craig.Russell@sun.com P.S. A good JDO? O, Gasp! --Apple-Mail-57-259727053 Content-Transfer-Encoding: quoted-printable Content-Type: text/html; charset=ISO-8859-1
Hi,

I think = I've found the problem with the NPE in parsing the company package.jdo = in which we define a <package...> <interface...> = <property...> <collection...>.

While constructing the = collection metadata, we try to get the package name. The top of the = stack contains the property in which the collection element is defined. = Property extends field so we look for the class metadata to get the = package metadata. But the field metadata doesn't know that it can be in = an interface; it only knows about being in a class or embedded metadata. = An interface does know its package, so it's possible for the interface = metadata to return the package, but an interface is an AbstractClass = whereas the getClassMetadata method returns ClassMetadata. = Possibilities: you could redefine getClassMetadata to return = AbstractClassMetadata or have InterfaceMetadata inherit = ClassMetadata.

Also,=A0looking at the JPOX implementation of = startElement and it appears that it's not supported for an element = "property" to be part of element "class". Shouldn't there be an else if = (parent instanceof ClassMetaData) clause here?

=A0= =A0 =A0=A0 =A0// New property = for this interface
=A0 =A0 =A0 =A0 = else = if = (qName.equals("property"))
=A0 =A0 =A0 =A0 = {
=A0 =A0 =A0 =A0 =A0 = =A0 MetaData parent =3D getStack();
=A0= =A0 =A0 =A0 =A0 =A0 if = (parent instanceof = InterfaceMetaData)
=A0 =A0 =A0 =A0 =A0 = =A0 {
=A0 =A0 =A0 =A0 =A0 = =A0 =A0 =A0 InterfaceMetaData intmd =3D = (InterfaceMetaData)parent;
=A0 =A0 =A0 =A0 =A0 = =A0 =A0 =A0 PropertyMetaData propmd =3D newPropertyObject(intmd, = attrs);
=A0 =A0 =A0 =A0 =A0 = =A0 =A0 =A0 intmd.addProperty(propmd);
=A0= =A0 =A0 =A0 =A0 =A0 =A0 =A0 pushStack(propmd);
=A0 =A0 =A0 =A0 =A0 = =A0 }
=A0 =A0 =A0 =A0 =A0 = =A0 else = if (parent = instanceof = EmbeddedMetaData)
=A0 =A0 =A0 =A0 =A0 = =A0 {
=A0 =A0 =A0 =A0 =A0 = =A0 =A0 =A0 EmbeddedMetaData emd =3D = (EmbeddedMetaData)parent;
=A0 =A0 =A0 =A0 =A0 = =A0 =A0 =A0 PropertyMetaData propmd =3D newPropertyObject(emd, = attrs);
=A0 =A0 =A0 =A0 =A0 = =A0 =A0 =A0 emd.addProperty(propmd);
=A0= =A0 =A0 =A0 =A0 =A0 =A0 =A0 pushStack(propmd);
=A0 =A0 =A0 =A0 =A0 = =A0 }

Hope this = helps.

Craig

=

Craig Russell

Architect, Sun Java = Enterprise System http://java.sun.com/products/jdo=

408 = 276-5638 mailto:Craig.Russell@sun.com

P.S. A = good JDO? O, Gasp!


= --Apple-Mail-57-259727053-- --Apple-Mail-58-259728338 Content-Transfer-Encoding: base64 Content-Type: application/pkcs7-signature; name=smime.p7s Content-Disposition: attachment; filename=smime.p7s MIAGCSqGSIb3DQEHAqCAMIACAQExCzAJBgUrDgMCGgUAMIAGCSqGSIb3DQEHAQAAoIIGUDCCAwkw ggJyoAMCAQICEB7Y7fLHmKoeHTUdbtYrvpAwDQYJKoZIhvcNAQEEBQAwYjELMAkGA1UEBhMCWkEx JTAjBgNVBAoTHFRoYXd0ZSBDb25zdWx0aW5nIChQdHkpIEx0ZC4xLDAqBgNVBAMTI1RoYXd0ZSBQ ZXJzb25hbCBGcmVlbWFpbCBJc3N1aW5nIENBMB4XDTA1MTIxNTIxNDc0NFoXDTA2MTIxNTIxNDc0 NFowbDEQMA4GA1UEBBMHUnVzc2VsbDEUMBIGA1UEKhMLQ3JhaWcgTGFpcmQxHDAaBgNVBAMTE0Ny YWlnIExhaXJkIFJ1c3NlbGwxJDAiBgkqhkiG9w0BCQEWFUNyYWlnLlJ1c3NlbGxAU3VuLkNPTTCC ASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMXXgEAm88nu8cFbxXSWqTq+GaYpCx/0QSom 8kBbVxpJIURuO4ErLDupeXu6y9+5e7ZKLbeSQE5xbfYPcQR/IhqmYKy5YqRcuzPXREBj2zKEkZph pNXWpHgMdx9W8dq0Cu2i9Ux/S6c2MuEHrP6gfGGll+b/mzLoO280QHTuE4pcpKntRnwZdGxQ/5l8 IL+eLP+jpJAbYW9C+KNKofZtS6V6R0uzlqTOsEdZvwxZQ4mmPgHoz1+Gjwme/PC5sKvF09MaJDiI pj9SvZ4CTCgcDZV78J086YwlVbMC0VQotjhu1p42lr8CS33IXLz3OWNrDETCAepah/Dgw2ZZApQ9 9L0CAwEAAaMyMDAwIAYDVR0RBBkwF4EVQ3JhaWcuUnVzc2VsbEBTdW4uQ09NMAwGA1UdEwEB/wQC MAAwDQYJKoZIhvcNAQEEBQADgYEAKdIkgAWCg2Bi7ocnstfJA4iymTRI2/L4oQx9zvllM9bNJ2cR cecJIx3HuoHbhPvemh1GExEPgHU+dXSxDmD0BEmPnhSReKCURyslnbMphPZ5kR6USzQFrRa+v0ii J+SBO9VQYTQWT+xEjmRLM76MfkBFw3IOC9CUkRoYZ88pOoUwggM/MIICqKADAgECAgENMA0GCSqG SIb3DQEBBQUAMIHRMQswCQYDVQQGEwJaQTEVMBMGA1UECBMMV2VzdGVybiBDYXBlMRIwEAYDVQQH EwlDYXBlIFRvd24xGjAYBgNVBAoTEVRoYXd0ZSBDb25zdWx0aW5nMSgwJgYDVQQLEx9DZXJ0aWZp Y2F0aW9uIFNlcnZpY2VzIERpdmlzaW9uMSQwIgYDVQQDExtUaGF3dGUgUGVyc29uYWwgRnJlZW1h aWwgQ0ExKzApBgkqhkiG9w0BCQEWHHBlcnNvbmFsLWZyZWVtYWlsQHRoYXd0ZS5jb20wHhcNMDMw NzE3MDAwMDAwWhcNMTMwNzE2MjM1OTU5WjBiMQswCQYDVQQGEwJaQTElMCMGA1UEChMcVGhhd3Rl IENvbnN1bHRpbmcgKFB0eSkgTHRkLjEsMCoGA1UEAxMjVGhhd3RlIFBlcnNvbmFsIEZyZWVtYWls IElzc3VpbmcgQ0EwgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAMSmPFVzVftOucqZWh5owHUE cJ3f6f+jHuy9zfVb8hp2vX8MOmHyv1HOAdTlUAow1wJjWiyJFXCO3cnwK4Vaqj9xVsuvPAsH5/Ef kTYkKhPPK9Xzgnc9A74r/rsYPge/QIACZNenprufZdHFKlSFD0gEf6e20TxhBEAeZBlyYLf7AgMB AAGjgZQwgZEwEgYDVR0TAQH/BAgwBgEB/wIBADBDBgNVHR8EPDA6MDigNqA0hjJodHRwOi8vY3Js LnRoYXd0ZS5jb20vVGhhd3RlUGVyc29uYWxGcmVlbWFpbENBLmNybDALBgNVHQ8EBAMCAQYwKQYD VR0RBCIwIKQeMBwxGjAYBgNVBAMTEVByaXZhdGVMYWJlbDItMTM4MA0GCSqGSIb3DQEBBQUAA4GB AEiM0VCD6gsuzA2jZqxnD3+vrL7CF6FDlpSdf0whuPg2H6otnzYvwPQcUCCTcDz9reFhYsPZOhl+ hLGZGwDFGguCdJ4lUJRix9sncVcljd2pnDmOjCBPZV+V2vf3h9bGCE6u9uo05RAaWzVNd+NWIXiC 3CEZNd4ksdMdRv9dX2VPMYIDEDCCAwwCAQEwdjBiMQswCQYDVQQGEwJaQTElMCMGA1UEChMcVGhh d3RlIENvbnN1bHRpbmcgKFB0eSkgTHRkLjEsMCoGA1UEAxMjVGhhd3RlIFBlcnNvbmFsIEZyZWVt YWlsIElzc3VpbmcgQ0ECEB7Y7fLHmKoeHTUdbtYrvpAwCQYFKw4DAhoFAKCCAW8wGAYJKoZIhvcN AQkDMQsGCSqGSIb3DQEHATAcBgkqhkiG9w0BCQUxDxcNMDYwMzA3MjM1NDQ1WjAjBgkqhkiG9w0B CQQxFgQUzrvab3W/bU1BhTLQ2U6ILhy+9yowgYUGCSsGAQQBgjcQBDF4MHYwYjELMAkGA1UEBhMC WkExJTAjBgNVBAoTHFRoYXd0ZSBDb25zdWx0aW5nIChQdHkpIEx0ZC4xLDAqBgNVBAMTI1RoYXd0 ZSBQZXJzb25hbCBGcmVlbWFpbCBJc3N1aW5nIENBAhAe2O3yx5iqHh01HW7WK76QMIGHBgsqhkiG 9w0BCRACCzF4oHYwYjELMAkGA1UEBhMCWkExJTAjBgNVBAoTHFRoYXd0ZSBDb25zdWx0aW5nIChQ dHkpIEx0ZC4xLDAqBgNVBAMTI1RoYXd0ZSBQZXJzb25hbCBGcmVlbWFpbCBJc3N1aW5nIENBAhAe 2O3yx5iqHh01HW7WK76QMA0GCSqGSIb3DQEBAQUABIIBAFsGlD6YSjpwYszdAyF2eBXXAFipOFDl adp4vutlKJ1zLxA94uKamsKlOBCRSYqB+ngcvj4I19rMOoU0w0BebEuGKiZaOOggz0Zkey1O7VXy XecB++4BRSDYDanU6fuJCVaYMLAUPirtEMeHIygJyhMq02dgCvsIa9ua5tM8nDFg1Qi/tPglVtci RlbVUrbl8q+UsNnn2SXMfohpdFmZZOqDmxNgzfDSXrPFI8VkYeJZRhbvke7dSG/L0akWiVNWvldP Oa7wnNWwDyERInaL4NCAh2SWz+M1q+d5QU3+VeSs0Sv38/9W86iGQWCnqeqvhiApXymDV24Uiq4j k5rXdAoAAAAAAAA= --Apple-Mail-58-259728338--