Skip to main content

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [List Home]
[higgins-dev] Problem with RCPIdentitySelector

Hi all,

I am using RCPIdentitySelector from Higgins 1.1M5 branch (for EclipseCon demo). I have problems using this RCP application for creating self issued cards.

Environment I am using:
- Higgins 1.1M5
- Mac OS X 10.5.6 (I did change code to use native code only on windows platform ;-) Same behavior in Windows too...
- JDK 1.5.0 (Mac OS X default)


Procedure to reproduce the error:

1. Start RCP Identity Selector, create a new cardstore
2. Create a "New Card"
3. Edit e.g. givenname for a new value
4. Save the changes

You will get a ClassCastException in "PersonalCard.addClaims:" (see console output)

- loading properties from:/data/p/Higgins/dev/3rdParty/Eclipse-3.4.1/Eclipse.app/Contents/MacOS/crpps.properties
- org.eclipse.higgins.icard.plugin.internal.ICardPlugin started
org.eclipse.higgins.registry.plugin.internal.RegistryPlugin started
- org.eclipse.higgins.icard.registry.plugin.internal.RegistryPlugin started
- org.eclipse.higgins.icard.common.plugin.internal.Activator started
- defaults="{cardstore.password=passw0rd, cardstore.file=/Users/jhi/.higgins/.icard/cardstore.crds}"
- Create a new SecureStorageICardProvider
- Cardstore file: [/Users/jhi/.higgins/.icard/cardstore.crds]
- config="/Users/jhi/.higgins/.icard/org.eclipse.higgins.icard.provider.securestorage.ini"
- java.io.FileNotFoundException: /Users/jhi/.higgins/.icard/org.eclipse.higgins.icard.provider.securestorage.ini (No such file or directory)
- properties="{}"
- element.type=[class org.eclipse.higgins.icard.provider.securestorage.SecureStorageICardProvider:org.eclipse.higgins.icard.provider.securestorage.SecureStorageICardProvider@69094]
- saving cardstore in [/Users/jhi/.higgins/.icard/cardstore.crds]
- Reading SecureStore [/Users/jhi/.higgins/.icard/cardstore.crds]
- Decrypting SecureStorage [/Users/jhi/.higgins/.icard/cardstore.crds:changeit passwordCallback=javax.security.auth.callback.PasswordCallback@4e9cde]
- Decrypted SecureStorage [/Users/jhi/.higgins/.icard/cardstore.crds:changeit passwordCallback=javax.security.auth.callback.PasswordCallback@4e9cde]
- SyncFromStore: filename=/Users/jhi/.higgins/.icard/cardstore.crds
- RPPS service begin to work...
- -> CardlistView()
- Reading SecureStore [/Users/jhi/.higgins/.icard/cardstore.crds]
- Decrypting SecureStorage [/Users/jhi/.higgins/.icard/cardstore.crds:changeit passwordCallback=javax.security.auth.callback.PasswordCallback@4e9cde]
- Decrypted SecureStorage [/Users/jhi/.higgins/.icard/cardstore.crds:changeit passwordCallback=javax.security.auth.callback.PasswordCallback@4e9cde]
- SyncFromStore: filename=/Users/jhi/.higgins/.icard/cardstore.crds
- <- CardlistView()
- tablearea = Rectangle {0, 0, 0, 0}
- Table width is 0
- secondColumnWidth is 225
- localFirstColumnWidth is 100
- BorderWidth is 3
- constructor entered
- setFocus()
- create card
- resetCurrentWidgets
- buildUnselectedImage...imagesize = 16216
- Ignoring inform
- notifySelectionChanged
- notifySelectionChanged
- notifySelectionChanged(ICard) entered
- modify
- save card
- Set Claims type [First Name]
- Set Claims type [Last Name]
- Set Claims type [Street]
- Set Claims type [Locality (City)]
- Set Claims type [State or Province]
- Set Claims type [Postal Code]
- Set Claims type [Country/Region]
- Set Claims type [Phone Number]
- Set Claims type [Other Phone]
- Set Claims type [Mobile Phone]
- Set Claims type [Date of Birth]
- Set Claims type [Gender]
- Set Claims type [Web Page]
- Set Claims type [Email]
- Set Claims ValueFirst Name:Jochen
- Set Claims ValueLast Name:
- Set Claims ValueStreet:
- Set Claims ValueLocality (City):
- Set Claims ValueState or Province:
- Set Claims ValuePostal Code:
- Set Claims ValueCountry/Region:
- Set Claims ValuePhone Number:
- Set Claims ValueOther Phone:
- Set Claims ValueMobile Phone:
- Set Claims ValueDate of Birth:
- Set Claims ValueGender:
- Set Claims ValueWeb Page:
- Set Claims ValueEmail:
- org.eclipse.higgins.keystore.plugin.internal.KeyStorePlugin started
- Can't export card
java.lang.ClassCastException: org.eclipse.higgins.icard.common.ClaimValue
    at org.eclipse.higgins.icard.provider.cardspace.common.PersonalCard.addClaims(PersonalCard.java:544)
    at org.eclipse.higgins.icard.provider.cardspace.common.PersonalCard.toElement(PersonalCard.java:432)
    at org.eclipse.higgins.crpps.ui.EditComposite.saveChanges(EditComposite.java:1024)
    at org.eclipse.higgins.crpps.ui.EditComposite.access$4(EditComposite.java:917)
    at org.eclipse.higgins.crpps.ui.EditComposite$1.widgetSelected(EditComposite.java:221)
    at org.eclipse.swt.widgets.TypedListener.handleEvent(TypedListener.java:228)
    at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:84)
    at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1561)
    at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1585)
    at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1570)
    at org.eclipse.swt.widgets.Widget.notifyListeners(Widget.java:1360)
    at org.eclipse.swt.widgets.Display.runDeferredEvents(Display.java:3482)
    at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3068)
    at org.eclipse.ui.internal.Workbench.runEventLoop(Workbench.java:2384)
    at org.eclipse.ui.internal.Workbench.runUI(Workbench.java:2348)
    at org.eclipse.ui.internal.Workbench.access$4(Workbench.java:2200)
    at org.eclipse.ui.internal.Workbench$5.run(Workbench.java:495)
    at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:288)
    at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:490)
    at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:149)
    at org.eclipse.higgins.crpps.app.Application.run(Application.java:68)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    at java.lang.reflect.Method.invoke(Method.java:585)
    at org.eclipse.equinox.internal.app.EclipseAppContainer.callMethodWithException(EclipseAppContainer.java:574)
    at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:195)
    at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:110)
    at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:79)
    at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:386)
    at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:179)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    at java.lang.reflect.Method.invoke(Method.java:585)
    at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:549)
    at org.eclipse.equinox.launcher.Main.basicRun(Main.java:504)
    at org.eclipse.equinox.launcher.Main.run(Main.java:1236)
    at org.eclipse.equinox.launcher.Main.main(Main.java:1212)
- Error when creating new version of card [New Card 0]
org.eclipse.higgins.icard.CardException: Can't export card
    at org.eclipse.higgins.icard.provider.cardspace.common.PersonalCard.toElement(PersonalCard.java:438)
    at org.eclipse.higgins.crpps.ui.EditComposite.saveChanges(EditComposite.java:1024)
    at org.eclipse.higgins.crpps.ui.EditComposite.access$4(EditComposite.java:917)
    at org.eclipse.higgins.crpps.ui.EditComposite$1.widgetSelected(EditComposite.java:221)
    at org.eclipse.swt.widgets.TypedListener.handleEvent(TypedListener.java:228)
    at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:84)
    at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1561)
    at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1585)
    at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1570)
    at org.eclipse.swt.widgets.Widget.notifyListeners(Widget.java:1360)
    at org.eclipse.swt.widgets.Display.runDeferredEvents(Display.java:3482)
    at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3068)
    at org.eclipse.ui.internal.Workbench.runEventLoop(Workbench.java:2384)
    at org.eclipse.ui.internal.Workbench.runUI(Workbench.java:2348)
    at org.eclipse.ui.internal.Workbench.access$4(Workbench.java:2200)
    at org.eclipse.ui.internal.Workbench$5.run(Workbench.java:495)
    at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:288)
    at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:490)
    at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:149)
    at org.eclipse.higgins.crpps.app.Application.run(Application.java:68)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    at java.lang.reflect.Method.invoke(Method.java:585)
    at org.eclipse.equinox.internal.app.EclipseAppContainer.callMethodWithException(EclipseAppContainer.java:574)
    at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:195)
    at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:110)
    at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:79)
    at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:386)
    at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:179)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    at java.lang.reflect.Method.invoke(Method.java:585)
    at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:549)
    at org.eclipse.equinox.launcher.Main.basicRun(Main.java:504)
    at org.eclipse.equinox.launcher.Main.run(Main.java:1236)
    at org.eclipse.equinox.launcher.Main.main(Main.java:1212)
Caused by: java.lang.ClassCastException: org.eclipse.higgins.icard.common.ClaimValue
    at org.eclipse.higgins.icard.provider.cardspace.common.PersonalCard.addClaims(PersonalCard.java:544)
    at org.eclipse.higgins.icard.provider.cardspace.common.PersonalCard.toElement(PersonalCard.java:432)
    ... 37 more


I tried to fix the code:

    private void addClaims(Document doc, Element privateData) {
        // ...
            // ClassCastException:
            // String sValue = (dirtyClaimValueMap_.containsKey(sType)) ? ((String)dirtyClaimValueMap_.get(sType)) : "";
            // bugfix: getValue() from entry
            String sValue = (dirtyClaimValueMap_.containsKey(sType)) ? ((ClaimValue)dirtyClaimValueMap_.get(sType)).getValue() : "";

            Element claimValue = doc.createElementNS(CardContext.IC_NS, CardContext.IC_CLAIM_VALUE);
            claimValue.setAttribute("Uri", sType);
            claimList.appendChild(claimValue);
            Element value = doc.createElementNS(CardContext.IC_NS, CardContext.IC_VALUE);
            XMLUtils.setTextContent(value, sValue);
            claimValue.appendChild(value);
        }
    }

This will work only to save the card. Furthermore, the usage of the card will fail afterwards:

5. Select this created card, you will get again a ClassCastException in

PersonalCard.getClaim(String)

        if (claimValues_.containsKey(type))
            return (IClaim) claimValues_.get(type); // ==> ClassCastException, as object is of type String
        else
            return null;


I tried to debug furthermore. It seems that the serialization/deserialization within the code of EditComposite class does fail:

    private void saveChanges(boolean preexistingCard) {
        // ...
       
                // newCard does have an IClaim in dirtyClaimValueMap_
                PerspectiveCardStore.getSecureCardProvider().addCard(null,
                        newCard);
               
                // now the object "card" does NOT have any claimValues_, but instead dirtyClaimValueMap_ has
                // now a map of key=String, value=String
                // e.g. http://schemas.xmlsoap.org/ws/2005/05/identity/claims/givenname=Jochen
                // and NO IClaim object

                card = PerspectiveCardStore.getSecureCardProvider().getICardByID(null, iid);


Any idea whats wrong here?


Thanks for your help, Jochen


Back to the top