Код Java
Код: Выделить всё
@Repository
@Slf4j
public class ProcessLiquidationApiRepository {
private JdbcTemplate jdbcTemplate;
private DataSourceConfig config;
@Autowired
public ProcessLiquidationApiRepository(JdbcTemplate jdbcTemplate, DataSourceConfig config) {
this.jdbcTemplate = jdbcTemplate;
this.config = config;
}
public Output persistLiquidation(Input input) throws SQLException {
Output output = new Output();
try {
SimpleJdbcCall jdbcCall = new SimpleJdbcCall(jdbcTemplate)
.withSchemaName(config.schema)
.withCatalogName(config.packageName)
.withProcedureName(config.procedureName)
.declareParameters(
new SqlOutParameter("O_error_message", Types.VARCHAR),
new SqlParameter("I_store", OracleTypes.STRUCT, "jcp_liq_store_rec")
);
// Convert input to STRUCT
// Get a Connection object from the JdbcTemplate
Connection connection = jdbcTemplate.getDataSource().getConnection();
// Define an Object[] array to hold the values of the Input object fields
Object[] storeDetailsAttributes = new Object[]{
input.getStoreDetails().getStoreNumber(),
input.getStoreDetails().getPiDDetails().stream().map(piDDetail -> new Object[]{
piDDetail.getPiDNum(),
piDDetail.getItemDetails().stream().map(itemDetail -> new Object[]{
itemDetail.getItem(),
itemDetail.getAdjQuantity()
}).toArray()
}).toArray()
};
// Use the createStruct method of the Connection object to create a STRUCT
Struct storeDetailsStruct = connection.createStruct("jcp_liq_store_rec", storeDetailsAttributes);
Map inParams = new HashMap();
inParams.put("I_store", storeDetailsStruct);
Map outParams = jdbcCall.execute(inParams);
String oErrorMessage = (String) outParams.get("O_error_message");
output.setErrorMessage(oErrorMessage);
output.setResult("SUCCESS");
} catch (Exception e) {
log.error("Failed to process liquidation data", e);
output.setErrorMessage(e.getMessage());
output.setResult("FAILURE");
}
return output;
}
}
Код: Выделить всё
create or replace package liquidation_process is
PROCEDURE store_to_rms (O_error_message OUT rtk_errors.rtk_text%TYPE,
I_store IN jcp_liq_store_rec);
Код: Выделить всё
{
"Input": {
"Store_Details": {
"StoreNumber": 2835,
"PID_Details": [
{
"PID_Num": "744400000040",
"Item_Details": [
{
"Item": "8400115010510",
"Adj_Quantity": 2
}
]
}
]
}
}
}
Код: Выделить всё
{
"@timestamp":"2024-07-23 15:07:36.918",
"level":"ERROR",
"logger_name":"c.j.l.d.ProcessLiquidationApiRepository",
"StoreNumber":"2835",
"AppName":"MobileWarriorLiquidationApi",
"thread_name":"http-nio-8081-exec-2",
"pid":"2504",
"message":"Failed to process liquidation data",
"stack_trace":"java.sql.SQLException: Fail to construct descriptor: U n a b l e t o r e s o l v e t y p e \ & q u o t ; j c p _ l i q _ s t o r e _ r e c \ & q u o t ; < b r / > a t o r a c l e . s q l . T y p e D e s c r i p t o r . g e t T y p e D e s c r i p t o r ( T y p e D e s c r i p t o r . j a v a : 1 0 0 2 ) < b r / > a t o r a c l e . s q l . S t r u c t D e s c r i p t o r . i s V a l i d O b j e c t ( S t r u c t D e s c r i p t o r . j a v a : 9 9 ) < b r / > a t o r a c l e . s q l . S t r u c t D e s c r i p t o r . c r e a t e D e s c r i p t o r ( S t r u c t D e s c r i p t o r . j a v a : 1 2 2 ) < b r / > a t o r a c l e . s q l . S t r u c t D e s c r i p t o r . c r e a t e D e s c r i p t o r ( S t r u c t D e s c r i p t o r . j a v a : 8 2 ) < b r / > a t o r a c l e . j d b c . d r i v e r . P h y s i c a l C o n n e c t i o n . c r e a t e S t r u c t ( P h y s i c a l C o n n e c t i o n . j a v a : 7 1 1 0 ) < b r / > a t c o m . z a x x e r . h i k a r i . p o o l . H i k a r i P r o x y C o n n e c t i o n . c r e a t e S t r u c t ( H i k a r i P r o x y C o n n e c t i o n . j a v a ) < b r / > a t c o m . j c p . l i q u i d a t i o n . d b . P r o c e s s L i q u i d a t i o n A p i R e p o s i t o r y . p e r s i s t L i q u i d a t i o n ( P r o c e s s L i q u i d a t i o n A p i R e p o s i t o r y . j a v a : 7 1 ) < 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 . N a t i v e M e t h o d A c c e s s o r I m p l . i n v o k e 0 ( N a t i v e M e t h o d ) < 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 . N a t i v e M e t h o d A c c e s s o r I m p l . i n v o k e ( N a t i v e M e t h o d A c c e s s o r I m p l . j a v a : 7 7 ) < 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 e l e g a t i n g M e t h o d A c c e s s o r I m p l . i n v o k e ( D e l e g a t i n g M e t h o d A c c e s s o r I m p l . j a v a : 4 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 6 8 ) < 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 . 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 $ D y n a m i c A d v i s e d I n t e r c e p t o r . i n t e r c e p t ( C g l i b A o p P r o x y . j a v a : 7 0 3 ) < b r / > a t c o m . j c p . l i q u i d a t i o n . d b . P r o c e s s L i q u i d a t i o n A p i R e p o s i t o r y $ $ S p r i n g C G L I B $ $ 0 . p e r s i s t L i q u i d a t i o n ( & l t ; g e n e r a t e d & g t ; ) < b r / > a t c o m . j c p . l i q u i d a t i o n . s e r v i c e . P r o c e s s L i q u i d a t i o n A p i S e r v i c e . p r o c e s s L i q u i d a t i o n D a t a ( P r o c e s s L i q u i d a t i o n A p i S e r v i c e . j a v a : 3 5 ) < b r / > a t c o m . j c p . l i q u i d a t i o n . a p i . P r o c e s s L i q u i d a t i o n A p i C o n t r o l l e r . p r o c e s s L i q u i d a t i o n ( P r o c e s s L i q u i d a t i o n A p i C o n t r o l l e r . j a v a : 4 7 ) < 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 . N a t i v e M e t h o d A c c e s s o r I m p l . i n v o k e 0 ( N a t i v e M e t h o d ) < 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 . N a t i v e M e t h o d A c c e s s o r I m p l . i n v o k e ( N a t i v e M e t h o d A c c e s s o r I m p l . j a v a : 7 7 ) < 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 e l e g a t i n g M e t h o d A c c e s s o r I m p l . i n v o k e ( D e l e g a t i n g M e t h o d A c c e s s o r I m p l . j a v a : 4 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 6 8 ) < 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 . m e t h o d . s u p p o r t . I n v o c a b l e H a n d l e r M e t h o d . d o I n v o k e ( I n v o c a b l e H a n d l e r M e t h o d . j a v a : 2 0 5 ) < 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 . m e t h o d . s u p p o r t . I n v o c a b l e H a n d l e r M e t h o d . i n v o k e F o r R e q u e s t ( I n v o c a b l e H a n d l e r M e t h o d . j a v a : 1 5 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 . m v c . m e t h o d . a n n o t a t i o n . S e r v l e t I n v o c a b l e H a n d l e r M e t h o d . i n v o k e A n d H a n d l e ( S e r v l e t I n v o c a b l e H a n d l e r M e t h o d . j a v a : 1 1 8 ) < 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 . m v c . m e t h o d . a n n o t a t i o n . R e q u e s t M a p p i n g H a n d l e r A d a p t e r . i n v o k e H a n d l e r M e t h o d ( R e questMappingHandlerAdapter.java:884)
at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:797)
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:1011)
at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:914)
at jakarta.servlet.http.HttpServlet.service(HttpServlet.java:590)
at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:885)
at jakarta.servlet.http.HttpServlet.service(HttpServlet.java:658)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:205)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:149)
at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:51)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:174)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:149)
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:174)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:149)
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:174)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:149)
at org.springframework.web.filter.ServerHttpObservationFilter.doFilterInternal(ServerHttpObservationFilter.java:109)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:174)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:149)
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:174)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:149)
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:340)
at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:391)
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:1744)
at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:52)
at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1191)
at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659)
at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
at java.base/java.lang.Thread.run(Thread.java:840)
"
}

игнорировать имя, я не смог сделать полный снимок экрана, но jcp_liq_store_rec присутствует в той же строке ниже.
Вышеуказанная хранимая процедура развертывается в базе данных Oracle. Все классы модели созданы правильно в соответствии с входным объектом и телом запроса.
любая помощь приветствуется.
Подробнее здесь: https://stackoverflow.com/questions/787 ... -arguments