|
Thanks for the feedback.
I was able to include additional validation for deleting a code, but I ran into a problem when I tried the same for code value. Once the code value was deleted, I got the following when trying to retrieve the deleted code value:
16:51:47.191 http-bio-8443-exec-226 INFO o.m.i.s.f.TenantAwareBasicAuthentica tionFilter - {"startTime":1397087507123,"totalTime":68,"method":"GET","url":"htt ps://localhost:8443/mifosng-provider/api/v1/codes/179/codevalues/62","parameters ":{"tenantIdentifier":["default"]}} Servlet.service() for servlet jersey-serlvet in context with path [/mifosng-pr ovider] threw exception org.springframework.dao.EmptyResultDataAccessException: Incorrect result size: e xpected 1, actual 0 at org.springframework.dao.support.DataAccessUtils.requiredSingleResult( DataAccessUtils.java:71) at org.springframework.jdbc.core.JdbcTemplate.queryForObject(JdbcTemplat e.java:735) at org.mifosplatform.infrastructure.codes.service.CodeValueReadPlatformS erviceImpl.retrieveCodeValue(CodeValueReadPlatformServiceImpl.java:82) at sun.reflect.GeneratedMethodAccessor189.invoke(Unknown Source) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAcces sorImpl.java:25) at java.lang.reflect.Method.invoke(Method.java:597) at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflecti on(AopUtils.java:317) at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynami cAopProxy.java:198) at $Proxy116.retrieveCodeValue(Unknown Source) at org.mifosplatform.infrastructure.codes.api.CodeValuesApiResource.retr ieveCodeValue(CodeValuesApiResource.java:89) at sun.reflect.GeneratedMethodAccessor188.invoke(Unknown Source) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAcces sorImpl.java:25) at java.lang.reflect.Method.invoke(Method.java:597) at com.sun.jersey.spi.container.JavaMethodInvokerFactory$1.invoke(JavaMe thodInvokerFactory.java:60) at com.sun.jersey.server.impl.model.method.dispatch.AbstractResourceMeth odDispatchProvider$TypeOutInvoker._dispatch(AbstractResourceMethodDispatchProvid er.java:185) at com.sun.jersey.server.impl.model.method.dispatch.ResourceJavaMethodDi spatcher.dispatch(ResourceJavaMethodDispatcher.java:75) at com.sun.jersey.server.impl.uri.rules.HttpMethodRule.accept(HttpMethod Rule.java:302) at com.sun.jersey.server.impl.uri.rules.RightHandPathRule.accept(RightHa ndPathRule.java:147) at com.sun.jersey.server.impl.uri.rules.ResourceClassRule.accept(Resourc eClassRule.java:108) at com.sun.jersey.server.impl.uri.rules.RightHandPathRule.accept(RightHa ndPathRule.java:147) at com.sun.jersey.server.impl.uri.rules.RootResourceClassesRule.accept(R ootResourceClassesRule.java:84) at com.sun.jersey.server.impl.application.WebApplicationImpl._handleRequ est(WebApplicationImpl.java:1511) at com.sun.jersey.server.impl.application.WebApplicationImpl._handleRequ est(WebApplicationImpl.java:1442) at com.sun.jersey.server.impl.application.WebApplicationImpl.handleReque st(WebApplicationImpl.java:1391) at com.sun.jersey.server.impl.application.WebApplicationImpl.handleReque st(WebApplicationImpl.java:1381) at com.sun.jersey.spi.container.servlet.WebComponent.service(WebComponen t.java:416) at com.sun.jersey.spi.container.servlet.ServletContainer.service(Servlet Container.java:538) at com.sun.jersey.spi.container.servlet.ServletContainer.service(Servlet Container.java:716) at javax.servlet.http.HttpServlet.service(HttpServlet.java:728) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(Appl icationFilterChain.java:305) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationF ilterChain.java:210) at org.springframework.security.web.FilterChainProxy$VirtualFilterChain. doFilter(FilterChainProxy.java:330) at org.springframework.security.web.access.intercept.FilterSecurityInter ceptor.invoke(FilterSecurityInterceptor.java:118) at org.springframework.security.web.access.intercept.FilterSecurityInter ceptor.doFilter(FilterSecurityInterceptor.java:84) at org.springframework.security.web.FilterChainProxy$VirtualFilterChain. doFilter(FilterChainProxy.java:342) at org.springframework.security.web.access.ExceptionTranslationFilter.do Filter(ExceptionTranslationFilter.java:113) at org.springframework.security.web.FilterChainProxy$VirtualFilterChain. doFilter(FilterChainProxy.java:342) at org.springframework.security.web.authentication.AnonymousAuthenticati onFilter.doFilter(AnonymousAuthenticationFilter.java:113) at org.springframework.security.web.FilterChainProxy$VirtualFilterChain. doFilter(FilterChainProxy.java:342) at org.springframework.security.web.servletapi.SecurityContextHolderAwar eRequestFilter.doFilter(SecurityContextHolderAwareRequestFilter.java:54) at org.springframework.security.web.FilterChainProxy$VirtualFilterChain. doFilter(FilterChainProxy.java:342) at org.springframework.security.web.authentication.www.BasicAuthenticati onFilter.doFilter(BasicAuthenticationFilter.java:201) at org.mifosplatform.infrastructure.security.filter.TenantAwareBasicAuth enticationFilter.doFilter(TenantAwareBasicAuthenticationFilter.java:118) at org.springframework.security.web.FilterChainProxy$VirtualFilterChain. doFilter(FilterChainProxy.java:342) at org.springframework.security.web.context.SecurityContextPersistenceFi lter.doFilter(SecurityContextPersistenceFilter.java:87) at org.springframework.security.web.FilterChainProxy$VirtualFilterChain. doFilter(FilterChainProxy.java:342) at org.springframework.security.web.access.channel.ChannelProcessingFilt er.doFilter(ChannelProcessingFilter.java:144) at org.springframework.security.web.FilterChainProxy$VirtualFilterChain. doFilter(FilterChainProxy.java:342) at org.springframework.security.web.FilterChainProxy.doFilterInternal(Fi lterChainProxy.java:192) at org.springframework.security.web.FilterChainProxy.doFilter(FilterChai nProxy.java:160) at org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(D elegatingFilterProxy.java:343) at org.springframework.web.filter.DelegatingFilterProxy.doFilter(Delegat ingFilterProxy.java:260) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(Appl icationFilterChain.java:243) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationF ilterChain.java:210) at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperV alve.java:222) at org.apache.catalina.core.StandardContextValve.invoke(StandardContextV alve.java:123) at org.apache.catalina.authenticator.AuthenticatorBase.invoke(Authentica torBase.java:502) at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.j ava:171) at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.j ava:100) at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineVal ve.java:118) at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.jav a:408) at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp 11Processor.java:1041) at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process( AbstractProtocol.java:603) at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoin t.java:310) at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExec utor.java:886) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor .java:908) at java.lang.Thread.run(Thread.java:662)
It looks like the CodeValueReadPlatformServiceImpl performs a standard join, so no results come back once the code value is deleted. I haven't looked through other classes to see how other domain objects are handled in this situation, but if you have any suggestions, that would be helpful.
Thanks.
|