Hibernate StaleObjectStateException nach dem Upgrade auf 6.6.3: Zeile wurde durch eine andere Transaktion aktualisiert o
Posted: 05 Jan 2025, 17:07
Ich habe zwei PostgreSQL-Tabellen: eine für Produkt und eine weitere für Galeriebilder mit SEO-Details. Hier sind die Schemata:
In meiner Spring Boot-Anwendung habe ich zwei Hibernate ORM-Entitäten, die diese Tabellen darstellen. Unten sind ihre Definitionen:
TestProduct
TestProductGalleryImageSEO
Hier ist die Logik, nach der ich Galeriebilder für ein Produkt hinzufüge oder aktualisiere:
Dieser Code hat zuvor funktioniert. Nach dem Upgrade der Hibernate-Versionen schlägt jedoch genau dieser Code fehl, ohne dass Änderungen vorgenommen wurden.
Nach dem Upgrade von Hibernate von Version 6.3.1 auf 6.6.3 habe ich Ich erhalte die folgende Fehlermeldung:
Dieser Fehler tritt auf, wenn versucht wird, eine neue TestProductImageGallerySEO-Entität mit addNewEntity zu speichern. Hier ist die seoPayload
Zusätzlicher Kontext:
Wenn jemand wissen möchte, was BehemothORM und addNewEntity tun , das sind im Grunde unsere eigenen Bibliotheken, die wir verwenden, um den Entwicklungsprozess zu beschleunigen. Hier ist die Definition dieser beiden
BehemothORM ist eine Basisklasse mit gemeinsamen Feldern wie id und version
addNewEntity ist ein Wrapper um JpaRepository.save()
Fragen:
Bearbeiten
Wie von @M.Deinum angefordert, hier ist der vollständige Stacktrace
Außerdem finden Sie unten den Controller-Code, der die Funktion „modifyGalleryImages aufruft,
Bitte ignorieren Sie die Codes auf Bibliotheksebene, da diese bereits getestet wurden. Der Controller ruft die Methode „modifyGalleryImages“ auf, sobald eine Anfrage den Controller erreicht.
Code: Select all
create table if not exists test_product
(
id bigserial not null,
version bigserial not null,
name text not null,
sku varchar(50) not null,
primary key (id)
);
create table if not exists test_product_image_gallery_seo
(
id bigserial not null,
version bigserial not null,
product_id bigint not null,
image text not null,
alt_text text not null,
primary key (id),
constraint fk_product_id foreign key (product_id) references test_product (id),
constraint test_unique_seo unique (product_id, image)
);
TestProduct
Code: Select all
@Entity(name = "test_product")
@Table(name = "test_product")
public class TestProduct extends BehemothORM {
@Column(
name = ProductContract.NAME,
nullable = false,
unique = true,
columnDefinition = "TEXT"
)
private String name;
@Column(
name = ProductContract.SKU,
nullable = false,
unique = true,
columnDefinition = "VARCHAR"
)
private String sku;
@OneToMany(
mappedBy = "product",
fetch = FetchType.EAGER,
targetEntity = TestProductImageGallerySEO.class,
cascade = CascadeType.ALL,
orphanRemoval = true
)
private List imageGallerySEOList;
}
Code: Select all
@Entity(name = "test_product_gallery_image_seo")
@Table(
name = "test_product_gallery_image_seo",
uniqueConstraints = {
@UniqueConstraint(
name = "test_unique_seo",
columnNames = {
ProductImageGallerySEOContract.PRODUCT_ID,
ProductImageGallerySEOContract.IMAGE
}
)
}
)
public class TestProductImageGallerySEO extends BehemothORM {
@Column(
name = "image",
columnDefinition = "TEXT",
nullable = false
)
private String image;
@Column(
name = "alt_text",
columnDefinition = "TEXT",
nullable = false
)
private String altText;
@ToString.Exclude
@ManyToOne(
targetEntity = TestProduct.class,
fetch = FetchType.EAGER
)
@JoinColumn(
name = ProductImageGallerySEOContract.PRODUCT_ID,
columnDefinition = "BIGSERIAL",
nullable = false,
foreignKey = @ForeignKey(
name = "fk_product_id"
)
)
@GsonExclude
private TestProduct product;
@Transient
private boolean deleted = false;
}
Code: Select all
@Transactional()
public int modifyGalleryImages(@NotNull TestProductImageGallerySEOPayload seoPayload) {
// gets the current product as entity from database
TestProduct product = this.testProductDAOController.retrieveEntity(seoPayload.getProductId());
for (TestProductImageGallerySEO imageGallerySEO : seoPayload.getGallerySEOList())
{
imageGallerySEO.setProduct(product);
this.addNewEntity(imageGallerySEO);
}
return ActionCode.UPDATE_SUCCESS;
}
Nach dem Upgrade von Hibernate von Version 6.3.1 auf 6.6.3 habe ich Ich erhalte die folgende Fehlermeldung:
Code: Select all
org.hibernate.StaleObjectStateException: Row was updated or deleted by another transaction (or unsaved-value mapping was incorrect): [com.bloomscorp.loom.seo.orm.TestProductImageGallerySEO#0]
Code: Select all
{
"productId": 37503,
"gallerySEOList": [
{
"id": 0,
"version": 0,
"image": "uvw.jpg",
"altText": "",
"deleted": false
},
{
"id": 0,
"version": 0,
"image": "https://abc.jpg",
"altText": "",
"deleted": false
},
{
"id": 0,
"version": 0,
"image": "https://xyz.jpg",
"altText": "",
"deleted": false
}
]
}
Wenn jemand wissen möchte, was BehemothORM und addNewEntity tun , das sind im Grunde unsere eigenen Bibliotheken, die wir verwenden, um den Entwicklungsprozess zu beschleunigen. Hier ist die Definition dieser beiden
BehemothORM
Code: Select all
BehemothORM
addNewEntity
Code: Select all
addNewEntity
Fragen:
- Warum? Tritt dieser Fehler jetzt nach dem Upgrade von Hibernate auf?
- Wie kann ich diesen Fehler beheben und gleichzeitig die aktuelle Logik beibehalten?
Bearbeiten
Wie von @M.Deinum angefordert, hier ist der vollständige Stacktrace
Code: Select all
jakarta.servlet.ServletException: Request processing failed: org.springframework.orm.ObjectOptimisticLockingFailureException: Row was updated or deleted by another transaction (or unsaved-value mapping was incorrect): [ c o m . b l o o m s c o r p . l o o m . s e o . o r m . T e s t P r o d u c t I m a g e G a l l e r y S E O # 0 ] < b r / > a t o r g . s p r i n g f r a m e w o r k . w e b . s e r v l e t . F r a m e w o r k S e r v l e t . p r o c e s s R e q u e s t ( F r a m e w o r k S e r v l e t . j a v a : 1 0 2 2 ) < b r / > a t o r g . s p r i n g f r a m e w o r k . w e b . s e r v l e t . F r a m e w o r k S e r v l e t . d o P o s t ( F r a m e w o r k S e r v l e t . j a v a : 9 1 4 ) < b r / > a t j a k a r t a . s e r v l e t . h t t p . H t t p S e r v l e t . s e r v i c e ( H t t p S e r v l e t . j a v a : 5 9 0 ) < b r / > a t o r g . s p r i n g f r a m e w o r k . w e b . s e r v l e t . F r a m e w o r k S e r v l e t . s e r v i c e ( F r a m e w o r k S e r v l e t . j a v a : 8 8 5 ) < b r / > a t j a k a r t a . s e r v l e t . h t t p . H t t p S e r v l e t . s e r v i c e ( H t t p S e r v l e t . j a v a : 6 5 8 ) < b r / > a t o r g . a p a c h e . c a t a l i n a . c o r e . A p p l i c a t i o n F i l t e r C h a i n . i n t e r n a l D o F i l t e r ( A p p l i c a t i o n F i l t e r C h a i n . j a v a : 1 9 5 ) < b r / > a t o r g . a p a c h e . c a t a l i n a . c o r e . A p p l i c a t i o n F i l t e r C h a i n . d o F i l t e r ( A p p l i c a t i o n F i l t e r C h a i n . j a v a : 1 4 0 ) < b r / > a t o r g . a p a c h e . t o m c a t . w e b s o c k e t . s e r v e r . W s F i l t e r . d o F i l t e r ( W s F i l t e r . j a v a : 5 1 ) < b r / > a t o r g . a p a c h e . c a t a l i n a . c o r e . A p p l i c a t i o n F i l t e r C h a i n . i n t e r n a l D o F i l t e r ( A p p l i c a t i o n F i l t e r C h a i n . j a v a : 1 6 4 ) < b r / > a t o r g . a p a c h e . c a t a l i n a . c o r e . A p p l i c a t i o n F i l t e r C h a i n . d o F i l t e r ( A p p l i c a t i o n F i l t e r C h a i n . j a v a : 1 4 0 ) < b r / > a t c o m . b l o o m s c o r p . n v e r s e . N V e r s e R e q u e s t F i l t e r . d o F i l t e r I n t e r n a l ( N V e r s e R e q u e s t F i l t e r . j a v a : 5 3 ) < b r / > a t o r g . s p r i n g f r a m e w o r k . w e b . f i l t e r . O n c e P e r R e q u e s t F i l t e r . d o F i l t e r ( O n c e P e r R e q u e s t F i l t e r . j a v a : 1 1 6 ) < b r / > a t o r g . a p a c h e . c a t a l i n a . c o r e . A p p l i c a t i o n F i l t e r C h a i n . i n t e r n a l D o F i l t e r ( A p p l i c a t i o n F i l t e r C h a i n . j a v a : 1 6 4 ) < b r / > a t o r g . a p a c h e . c a t a l i n a . c o r e . A p p l i c a t i o n F i l t e r C h a i n . d o F i l t e r ( A p p l i c a t i o n F i l t e r C h a i n . j a v a : 1 4 0 ) < b r / > a t c o m . b l o o m s corp.nverse.NVerseExceptionHandlerFilter.doFilterInternal(NVerseExceptionHandlerFilter.java:58)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140)
at com.bloomscorp.nverse.NVerseHttpRequestFilter.doFilterInternal(NVerseHttpRequestFilter.java:20)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140)
at org.springframework.web.filter.CompositeFilter$VirtualFilterChain.doFilter(CompositeFilter.java:108)
at org.springframework.security.web.FilterChainProxy.doFilterInternal(FilterChainProxy.java:219)
at org.springframework.security.web.FilterChainProxy.doFilter(FilterChainProxy.java:191)
at org.springframework.web.filter.CompositeFilter$VirtualFilterChain.doFilter(CompositeFilter.java:113)
at org.springframework.web.servlet.handler.HandlerMappingIntrospector.lambda$createCacheFilter$3(HandlerMappingIntrospector.java:195)
at org.springframework.web.filter.CompositeFilter$VirtualFilterChain.doFilter(CompositeFilter.java:113)
at org.springframework.web.filter.CompositeFilter.doFilter(CompositeFilter.java:74)
at org.springframework.security.config.annotation.web.configuration.WebMvcSecurityConfiguration$CompositeFilterChainProxy.doFilter(WebMvcSecurityConfiguration.java:230)
at org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:352)
at org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:268)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140)
at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140)
at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140)
at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:167)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:90)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:482)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:115)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:93)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:344)
at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:389)
at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:63)
at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:896)
at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1741)
at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:52)
at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1190)
at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659)
at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:63)
at java.base/java.lang.Thread.run(Thread.java:1583)
Caused by: org.springframework.orm.ObjectOptimisticLockingFailureException: Row was updated or deleted by another transaction (or unsaved-value mapping was incorrect): [ c o m . b l o o m s c o r p . l o o m . s e o . o r m . T e s t P r o d u c t I m a g e G a l l e r y S E O # 0 ] < b r / > a t o r g . s p r i n g f r a m e w o r k . o r m . j p a . v e n d o r . H i b e r n a t e J p a D i a l e c t . c o n v e r t H i b e r n a t e A c c e s s E x c e p t i o n ( H i b e r n a t e J p a D i a l e c t . j a v a : 3 0 4 ) < b r / > a t o r g . s p r i n g f r a m e w o r k . o r m . j p a . v e n d o r . H i b e r n a t e J p a D i a l e c t . t r a n s l a t e E x c e p t i o n I f P o s s i b l e ( H i b e r n a t e J p a D i a l e c t . j a v a : 2 3 2 ) < b r / > a t o r g . s p r i n g f r a m e w o r k . o r m . j p a . A b s t r a c t E n t i t y M a n a g e r F a c t o r y B e a n . t r a n s l a t e E x c e p t i o n I f P o s s i b l e ( A b s t r a c t E n t i t y M a n a g e r F a c t o r y B e a n . j a v a : 5 5 0 ) < b r / > a t o r g . s p r i n g f r a m e w o r k . d a o . s u p p o r t . C h a i n e d P e r s i s t e n c e E x c e p t i o n T r a n s l a t o r . t r a n s l a t e E x c e p t i o n I f P o s s i b l e ( C h a i n e d P e r s i s t e n c e E x c e p t i o n T r a n s l a t o r . j a v a : 6 1 ) < b r / > a t o r g . s p r i n g f r a m e w o r k . d a o . s u p p o r t . D a t a A c c e s s U t i l s . t r a n s l a t e I f N e c e s s a r y ( D a t a A c c e s s U t i l s . j a v a : 2 4 3 ) < b r / > a t o r g . s p r i n g f r a m e w o r k . d a o . s u p p o r t . P e r s i s t e n c e E x c e p t i o n T r a n s l a t i o n I n t e r c e p t o r . i n v o k e ( P e r s i s t e n c e E x c e p t i o n T r a n s l a t i o n I n t e r c e p t o r . j a v a : 1 5 2 ) < b r / > a t o r g . s p r i n g f r a m e w o r k . a o p . f r a m e w o r k . R e f l e c t i v e M e t h o d I n v o c a t i o n . p r o c e e d ( R e f l e c t i v e M e t h o d I n v o c a t i o n . j a v a : 1 8 4 ) < b r / > a t o r g . s p r i n g f r a m e w o r k . d a t a . j p a . r e p o s i t o r y . s u p p o r t . C r u d M e t h o d M e t a d a t a P o s t P r o c e s s o r $ C r u d M e t h o d M e t a d a t a P o p u l a t i n g M e t h o d I n t e r c e p t o r . i n v o k e ( C r u d M e t h o d M e t a d a t a P o s t P r o c e s s o r . j a v a : 1 6 4 ) < b r / > a t o r g . s p r i n g f r a m e w o r k . a o p . f r a m e w o r k . R e f l e c t i v e M e t h o d I n v o c a t i o n . p r o c e e d ( R e f l e c t i v e M e t h o d I n v o c a t i o n . j a v a : 1 8 4 ) < b r / > a t o r g . s p r i n g f r a m e w o r k . a o p . i n t e r c e p t o r . E x p o s e I n v o c a t i o n I n t e r c e p t o r . i n v o k e ( E x p o s e I n v o c a t i o n I n t e r c e p t o r . j a v a : 9 7 ) < b r / > a t o r g . s p r i n g f r a m e w o r k . a o p . f r a m e w o r k . R e f l e c t i v e M e t h o d I n v o c a t i o n . p r o c e e d ( R e f l e c t i v e M e t h o d I n v o c a t i o n . j a v a : 1 8 4 ) < b r / > a t o r g . s p r i n g f r a m e w o r k . a o p . f r a m e w o r k . J d k D y n a m i c A o p P r o x y . i n v o k e ( J d k D y n a m i c A o p P r o x y . j a v a : 2 4 4 ) < b r / > a t j d k . p r o x y 2 / j d k . p r o x y 2 . $ P r o x y 2 6 5 . s a v e ( U n k n o w n S o u r c e ) < b r / > a t c o m . b l o o m s c o r p . b e h e m o t h . d a o . c o n t r o l l e r . A b s t r a c t A d d E n t i t y D A O C o n t r o l l e r . a d d N e w E n t i t y ( A b s t r a c t A d d E n t i t y D A O C o n t r o l l e r . j a v a : 2 2 ) < b r / > a t c o m . b l o o m s c o r p . l o o m . s e o . d a o . c o n t r o l l e r . T e s t P r o d u c t I m a g e G a l l e r y S E O D A O C o n t r o l l e r . m o d i f y G a l l e r y I m a g e s ( T e s t P r o d u c t I m a g e G a l l e r y S E O D A O C o n t r o l l e r . j a v a : 7 8 ) < b r / > a t j a v a . b a s e / j d k . i n t e r n a l . r e f l e c t . D i r e c t M e t h o d H a n d l e A c c e s s o r . i n v o k e ( D i r e c t M e t h o d H a n d l e A c c e s s o r . j a v a : 1 0 3 ) < b r / > a t j a v a . b a s e / j a v a . l a n g . r e f l e c t . M e t h o d . i n v o k e ( M e t h o d . j a v a : 5 8 0 ) < b r / > a t o r g . s p r i n g f r a m e w o r k . a o p . s u p p o r t . A o p U t i l s . i n v o k e J o i n p o i n t U s i n g R e f l e c t i o n ( A o p U t i l s . j a v a : 3 4 3 ) < b r / > a t o r g . s p r i n g f r a m e w o r k . a o p . f r a m e w o r k . R e f l e c t i v e M e t h o d I n v o c a t i o n . i n v o k e J o i n p o i n t ( R e f l e c t i v e M e t h o d I n v o c a t i o n . j a v a : 1 9 6 ) < b r / > a t o r g . s p r i n g f r a m e w o r k . a o p . f r a m e w o r k . R e f l e c t i v e M e t h o d I n v o c a t i o n . p r o c e e d ( R e f l e c t i v e M e t h o d I n v o c a t i o n . j a v a : 1 6 3 ) < b r / > a t o r g . s p r i n g f r a m e w o r k . a o p . f r a m e w o r k . C g l i b A o p P r o x y $ C g l i b M e t h o d I n v o c a t i o n . p r o c e e d ( C g l i b A o p P r o x y . j a v a : 7 5 1 ) < b r / > a t o r g . s p r i n g f r a m e w o r k . d a o . s u p p o r t . P e r s i s t e n c e E x c e p t i o n T r a n s l a t i o n I n t e r c e p t o r . i n v o k e ( P e r s i s t e n c e E x c e p t i o n T r a n s l a t i o n I n t e r c e p t o r . j a v a : 1 3 7 ) < b r / > a t o r g . s p r i n g f r a m e w o r k . a o p . f r a m e w o r k . R e f l e c t i v e M e t h o d I n v o c a t i o n . p r o c e e d ( R e f l e c t i v e M e t h o d I n v o c a t i o n . j a v a : 1 8 4 ) < b r / > a t o r g . s p r i n g f r a m e w o r k . a o p . f r a m e w o r k . C g l i b A o p P r o x y $ C g l i b M e t h o d I n v o c a t i o n . p r o c e e d ( C g l i b A o p P r o x y . j a v a : 7 5 1 ) < b r / > a t o r g . s p r i n g f r a m e w o r k . t r a n s a c t i o n . i n t e r c e p t o r . T r a n s a c t i o n I n t e r c e p t o r $ 1 . p r o c e e d W i t h I n v o c a t i o n ( T r a n s a c t i o n I n t e r c e p t o r . j a v a : 1 2 3 ) < b r / > a t o r g . s p r i n g f r a m e w o r k . t r a n s a c t i o n . i n t e r c e p t o r . T r a n s a c t i o n A s p e c t S u p p o r t . i n v o k e W i t h i n T r a n s a c t i o n ( T r a n s a c t i o n A s p e c t S u p p o r t . j a v a : 3 9 1 ) < b r / > a t o r g . s p r i n g f r a m e w o r k . t r a n s a c t i o n . i n t e r c e p t o r . T r a n s a c t i o n I n t e r c e p t o r . i n v o k e ( T r a n s a c t i o n I n t e r c e p t o r . j a v a : 1 1 9 ) < b r / > a t o r g . s p r i n g f r a m e w o r k .aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:184)
at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:751)
at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:703)
at com.bloomscorp.loom.seo.dao.controller.TestProductImageGallerySEODAOController$$SpringCGLIB$$0.modifyGalleryImages()
at com.bloomscorp.loom.seo.controller.ProductImageGallerySEOController.lambda$modifyGalleryImages$1(ProductImageGallerySEOController.java:126)
at com.bloomscorp.behemoth.controller.AbstractPostEntityController.post(AbstractPostEntityController.java:95)
at com.bloomscorp.behemoth.controller.AbstractPostEntityController.postEntityEnhancedResponse(AbstractPostEntityController.java:280)
at com.bloomscorp.behemoth.controller.AbstractPostEntityController.postEntity(AbstractPostEntityController.java:140)
at com.bloomscorp.behemoth.controller.AbstractPostEntityController.postEntity(AbstractPostEntityController.java:167)
at com.bloomscorp.loom.seo.controller.ProductImageGallerySEOController.modifyGalleryImages(ProductImageGallerySEOController.java:117)
at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103)
at java.base/java.lang.reflect.Method.invoke(Method.java:580)
at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:343)
at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:196)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163)
at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:751)
at org.springframework.aop.aspectj.MethodInvocationProceedingJoinPoint.proceed(MethodInvocationProceedingJoinPoint.java:89)
at com.bloomscorp.nverse.validator.NVerseValidationAspect.validateByDomainValidator(NVerseValidationAspect.java:67)
at com.bloomscorp.nverse.validator.NVerseValidationAspect.validateDomainContext(NVerseValidationAspect.java:123)
at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103)
at java.base/java.lang.reflect.Method.invoke(Method.java:580)
at org.springframework.aop.aspectj.AbstractAspectJAdvice.invokeAdviceMethodWithGivenArgs(AbstractAspectJAdvice.java:637)
at org.springframework.aop.aspectj.AbstractAspectJAdvice.invokeAdviceMethod(AbstractAspectJAdvice.java:627)
at org.springframework.aop.aspectj.AspectJAroundAdvice.invoke(AspectJAroundAdvice.java:71)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:173)
at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:751)
at org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:97)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:184)
at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:751)
at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:703)
at com.bloomscorp.loom.seo.controller.ProductImageGallerySEOController$$SpringCGLIB$$0.modifyGalleryImages()
at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103)
at java.base/java.lang.reflect.Method.invoke(Method.java:580)
at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:205)
at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:150)
at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:118)
at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:892)
at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:798)
at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87)
at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1081)
at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:974)
at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1014)
... 61 more
Code: Select all
@ResponseBody
@PostMapping(
value = "modify/test/gallery-images",
consumes = Constant.REQUEST_TYPE_APPLICATION_JSON,
produces = Constant.RESPONSE_TYPE_APPLICATION_JSON
)
public RainTreeResponse modifyGalleryImages(
NVerseHttpRequestWrapper request,
@RequestBody TestProductImageGallerySEOPayload gallerySEOPayload
) {
return this.postEntity(
request,
"modifyGalleryImages",
CODE_SUCU,
UNAUTH_GALLERY_IMAGE_REQUEST,
NEW_GALLERY_IMAGE_CREATED,
this.testValidator,
new TestProductImageGallerySEOPayloadSanitizer(),
gallerySEOPayload,
() -> this.testSEODAOController.modifyGalleryImages(
this.getAuthorityResolver().resolveUserInformationFromAuthorizationToken(
request.getHeader(Constant.REQUEST_HEADER_AUTHORIZATION)
),
gallerySEOPayload
)
);
}