Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Exception saving product with custom attribute #735

Closed
e-iceman opened this issue Feb 20, 2014 · 3 comments
Closed

Exception saving product with custom attribute #735

e-iceman opened this issue Feb 20, 2014 · 3 comments

Comments

@e-iceman
Copy link
Contributor

We have a ProductImplTransform class that adds the following to the productAttribute field:

@AdminPresentationMapFields(mapDisplayFields = {
            @AdminPresentationMapField(fieldName = "tagLine", fieldPresentation = @AdminPresentation(fieldType = SupportedFieldType.HTML_BASIC, ..., friendlyName = "Tagline", largeEntry = true))})
protected Map<String, ProductAttribute> productAttributes

This worked fine on version 3.0.5-GA but when we tried upgrading to 3.0.9-GA we are now getting the following exception on update:

java.lang.IllegalArgumentException: Can not set java.lang.Long field org.broadleafcommerce.core.catalog.domain.ProductAttributeImpl.id to java.lang.String
    at sun.reflect.UnsafeFieldAccessorImpl.throwSetIllegalArgumentException(UnsafeFieldAccessorImpl.java:164)
    at sun.reflect.UnsafeFieldAccessorImpl.throwSetIllegalArgumentException(UnsafeFieldAccessorImpl.java:168)
    at sun.reflect.UnsafeFieldAccessorImpl.ensureObj(UnsafeFieldAccessorImpl.java:55)
    at sun.reflect.UnsafeObjectFieldAccessorImpl.get(UnsafeObjectFieldAccessorImpl.java:36)
    at java.lang.reflect.Field.get(Field.java:379)
    at org.hibernate.property.DirectPropertyAccessor$DirectGetter.get(DirectPropertyAccessor.java:59)
    at org.hibernate.tuple.entity.AbstractEntityTuplizer.getIdentifier(AbstractEntityTuplizer.java:344)
    at org.hibernate.persister.entity.AbstractEntityPersister.getIdentifier(AbstractEntityPersister.java:4491)
    at org.hibernate.event.internal.DefaultMergeEventListener.onMerge(DefaultMergeEventListener.java:129)
    at org.hibernate.internal.SessionImpl.fireMerge(SessionImpl.java:913)
    at org.hibernate.internal.SessionImpl.merge(SessionImpl.java:895)
    at org.hibernate.engine.spi.CascadingAction$6.cascade(CascadingAction.java:288)
    at org.hibernate.engine.internal.Cascade.cascadeToOne(Cascade.java:387)
    at org.hibernate.engine.internal.Cascade.cascadeAssociation(Cascade.java:330)
    at org.hibernate.engine.internal.Cascade.cascadeProperty(Cascade.java:208)
    at org.hibernate.engine.internal.Cascade.cascadeCollectionElements(Cascade.java:416)
    at org.hibernate.engine.internal.Cascade.cascadeCollection(Cascade.java:357)
    at org.hibernate.engine.internal.Cascade.cascadeAssociation(Cascade.java:333)
    at org.hibernate.engine.internal.Cascade.cascadeProperty(Cascade.java:208)
    at org.hibernate.engine.internal.Cascade.cascade(Cascade.java:165)
    at org.hibernate.event.internal.DefaultMergeEventListener.cascadeOnMerge(DefaultMergeEventListener.java:439)
    at org.hibernate.event.internal.DefaultMergeEventListener.entityIsPersistent(DefaultMergeEventListener.java:183)
    at org.hibernate.event.internal.DefaultMergeEventListener.onMerge(DefaultMergeEventListener.java:157)
    at org.hibernate.event.internal.DefaultMergeEventListener.onMerge(DefaultMergeEventListener.java:76)
    at org.hibernate.internal.SessionImpl.fireMerge(SessionImpl.java:903)
    at org.hibernate.internal.SessionImpl.merge(SessionImpl.java:887)
    at org.hibernate.internal.SessionImpl.merge(SessionImpl.java:891)
    at org.hibernate.ejb.AbstractEntityManagerImpl.merge(AbstractEntityManagerImpl.java:889)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:606)
    at org.springframework.orm.jpa.ExtendedEntityManagerCreator$ExtendedEntityManagerInvocationHandler.invoke(ExtendedEntityManagerCreator.java:366)
    at com.sun.proxy.$Proxy138.merge(Unknown Source)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:606)
    at org.springframework.orm.jpa.SharedEntityManagerCreator$SharedEntityManagerInvocationHandler.invoke(SharedEntityManagerCreator.java:241)
    at com.sun.proxy.$Proxy138.merge(Unknown Source)
    at org.broadleafcommerce.openadmin.server.dao.DynamicEntityDaoImpl.merge(DynamicEntityDaoImpl.java:139)

If we modify the fieldType = SupportedFieldType.STRING it doesn't error. So it appears to have something to do with the HTML_BASIC field type, But I am at a loss on how to track this down any further.

@e-iceman
Copy link
Contributor Author

I managed to track this down to the addition of the HTMLFieldPersistenceProvider. It doesn't support ValueAssignable requested values like the MapFieldPersistenceProvider which was processing these values in the previous version.

@bpolster
Copy link
Member

bpolster commented Mar 9, 2014

@jefffischer @apazzolini Please investigate for inclusion in next patch.

@apazzolini
Copy link

@e-iceman this is resolved and available in 3.0.11-SNAPSHOT.

@apazzolini apazzolini added this to the 3.0.11-GA milestone Mar 10, 2014
phillipuniverse added a commit that referenced this issue Jul 18, 2017
…e support and ensure all Spring configuration is included in default wildcard patterns.

Originally from merging pull request #735.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

5 participants