OSDir


[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Mifos-developer] Wrong MySQL(The RuntimeException could not be mapped to a response, re-throwing to the HTTP container)


Dear  Steve,

I am having the same error on mysql 5.5. i download the latest code
using git clone https://github.com/openMF/incubator-fineract.git.
please what is the solution to this error message.

select x.* from (SELECT x.* FROM m_client c, m_office o,
(SELECT a.loanCycle, a.activeLoans, b.lastLoanAmount, d.activeSavings,
d.totalSavings FROM
  (SELECT IFNULL(MAX(l.loan_counter),0) AS loanCycle, COUNT(l.id) AS
activeLoans FROM m_loan l
  WHERE l.loan_status_id=300 AND l.client_id=10) a,
  (SELECT count(l.id), IFNULL(l.principal_amount,0) AS 'lastLoanAmount'
FROM m_loan l WHERE l.client_id=10
  AND l.disbursedon_date = (SELECT IFNULL(MAX(disbursedon_date),NOW()) FROM
m_loan where client_id=10 and loan_status_id=300)) b,
 (SELECT COUNT(s.id) AS 'activeSavings',
IFNULL(SUM(s.account_balance_derived),0) AS 'totalSavings'
 FROM m_savings_account s WHERE s.status_enum=300 AND s.client_id=10) d
) x
WHERE c.id=10 AND o.id = c.office_id AND o.hierarchy LIKE CONCAT('.', '%'))
x


On Sat, Jun 9, 2018 at 5:30 PM, Steve Conrad <sconrad1@xxxxxxxxx> wrote:

> Hi Emmanuel -
>
> We do have a project that allows us to work with MySQL 5.7 and fixes all
> of the group by clauses in Fineract. But that code has not been pushed into
> any of the active branches as far as I know. I think we had identified a
> large testing task for this summer's GSoC to make sure we had covered
> everything.
>
> If you want to use MySQL 5.7, you can pull from my fork:
> https://github.com/conradsp/fineract/tree/mysql-5.7
> Otherwise, you'll have to use MySQL 5.6
>
> Thanks,
> Steve
>
>
> On Sat, Jun 9, 2018 at 11:07 AM, Emmanuel Njoku <einjoku@xxxxxxxxx> wrote:
>
>> The solution is below query
>>
>> select x.* from (SELECT x.* FROM m_client c, m_office o,
>> (SELECT a.loanCycle, a.activeLoans, b.lastLoanAmount, d.activeSavings,
>> d.totalSavings FROM
>>   (SELECT IFNULL(MAX(l.loan_counter),0) AS loanCycle, COUNT(l.id) AS
>> activeLoans FROM m_loan l WHERE l.loan_status_id=300 AND l.client_id=8) a,
>>   (SELECT count(l.id), IFNULL(l.principal_amount,0) AS 'lastLoanAmount'
>> FROM m_loan l WHERE l.client_id=8
>>   AND l.disbursedon_date = (SELECT IFNULL(MAX(disbursedon_date),NOW())
>> FROM
>> m_loan where client_id=8 and loan_status_id=300) group by
>> l.principal_amount) b,
>>  (SELECT COUNT(s.id) AS 'activeSavings',
>> IFNULL(SUM(s.account_balance_derived),0) AS 'totalSavings'
>>  FROM m_savings_account s WHERE s.status_enum=300 AND s.client_id=8) d) x
>> WHERE c.id=8 AND o.id = c.office_id AND o.hierarchy LIKE CONCAT('.',
>> '%'))
>> x;
>>
>> But i need the class where it was defined so that it can be update.
>>
>> Regards
>>
>> On Sat, Jun 9, 2018 at 4:54 PM, Emmanuel Njoku <einjoku@xxxxxxxxx> wrote:
>>
>> > please assist on this request. I have identify the issue and solution to
>> > it but i am seriously looking on the code "incubator-fineract" so that i
>> > can update it. There is no "group by" on the Mysql query.
>> >
>> > Caused by: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException:
>> In
>> > aggregated query without GROUP BY, expression #2 of SELECT list contains
>> > nonaggregated column 'mifostenant-default.l.principal_amount'; this is
>> > incompatible with sql_mode=only_full_group_by
>> >
>> >
>> > /v1/runreports/ClientSummary","parameters":{"genericResultSe
>> t":["false"],"
>> > R_clientId":["10"]}}
>> > 197280 [http-bio-443-exec-1] ERROR o.s.b.context.web.ErrorPageFilter -
>> > Forwarding to error page from request [/api/v1/runreports/ClientSumm
>> ary]
>> > due to exception [StatementCallback; bad SQL grammar [select x.* from
>> > (SELECT x.* FROM m_client c, m_office o,
>> > (
>> >        SELECT a.loanCycle, a.activeLoans, b.lastLoanAmount,
>> > d.activeSavings, d.totalSavings FROM
>> >   (SELECT IFNULL(MAX(l.loan_counter),0) AS loanCycle, COUNT(l.id) AS
>> > activeLoans FROM m_loan l WHERE l.loan_status_id=300 AND
>> l.client_id=10) a,
>> >   (SELECT count(l.id), IFNULL(l.principal_amount,0) AS 'lastLoanAmount'
>> > FROM m_loan l WHERE l.client_id=10 AND l.disbursedon_date = (SELECT
>> > IFNULL(MAX(disbursedon_date),NOW()) FROM m_loan where client_id=10 and
>> > loan_status_id=300)) b,
>> >  (SELECT COUNT(s.id) AS 'activeSavings', IFNULL(SUM(s.account_balance_d
>> erived),0)
>> > AS 'totalSavings' FROM m_savings_account s WHERE s.status_enum=300 AND
>> > s.client_id=10) d
>> > ) x
>> > WHERE c.id=10 AND o.id = c.office_id AND o.hierarchy LIKE CONCAT('.',
>> > '%')) x]; nested exception is com.mysql.jdbc.exceptions.jdbc
>> 4.MySQLSyntaxErrorException:
>> > In aggregated query without GROUP BY, expression #2 of SELECT list
>> contains
>> > nonaggregated column 'mifostenant-default.l.principal_amount'; this is
>> > incompatible with sql_mode=only_full_group_by]
>> > org.springframework.jdbc.BadSqlGrammarException: StatementCallback; bad
>> > SQL grammar [select x.* from (SELECT x.* FROM m_client c, m_office o,
>> > (
>> >        SELECT a.loanCycle, a.activeLoans, b.lastLoanAmount,
>> > d.activeSavings, d.totalSavings FROM
>> >   (SELECT IFNULL(MAX(l.loan_counter),0) AS loanCycle, COUNT(l.id) AS
>> > activeLoans FROM m_loan l WHERE l.loan_status_id=300 AND
>> l.client_id=10) a,
>> >   (SELECT count(l.id), IFNULL(l.principal_amount,0) AS 'lastLoanAmount'
>> > FROM m_loan l WHERE l.client_id=10 AND l.disbursedon_date = (SELECT
>> > IFNULL(MAX(disbursedon_date),NOW()) FROM m_loan where client_id=10 and
>> > loan_status_id=300)) b,
>> >  (SELECT COUNT(s.id) AS 'activeSavings', IFNULL(SUM(s.account_balance_d
>> erived),0)
>> > AS 'totalSavings' FROM m_savings_account s WHERE s.status_enum=300 AND
>> > s.client_id=10) d
>> > ) x
>> > WHERE c.id=10 AND o.id = c.office_id AND o.hierarchy LIKE CONCAT('.',
>> > '%')) x]; nested exception is com.mysql.jdbc.exceptions.jdbc
>> 4.MySQLSyntaxErrorException:
>> > In aggregated query without GROUP BY, expression #2 of SELECT list
>> contains
>> > nonaggregated column 'mifostenant-default.l.principal_amount'; this is
>> > incompatible with sql_mode=only_full_group_by
>> >         at org.springframework.jdbc.support.SQLExceptionSubclassTransla
>> tor
>> > .doTranslate(SQLExceptionSubclassTranslator.java:91)
>> > ~[spring-jdbc-4.0.7.RELEASE.jar:4.0.7.RELEASE]
>> >         at org.springframework.jdbc.support.AbstractFallbackSQLExceptio
>> nTr
>> > anslator.translate(AbstractFallbackSQLExceptionTranslator.java:73)
>> > ~[spring-jdbc-4.0.7.RELEASE.jar:4.0.7.RELEASE]
>> >         at org.springframework.jdbc.support.AbstractFallbackSQLExceptio
>> nTr
>> > anslator.translate(AbstractFallbackSQLExceptionTranslator.java:81)
>> > ~[spring-jdbc-4.0.7.RELEASE.jar:4.0.7.RELEASE]
>> >         at org.springframework.jdbc.core.JdbcTemplate.execute(JdbcTempl
>> ate.java:413)
>> > ~[spring-jdbc-4.0.7.RELEASE.jar:4.0.7.RELEASE]
>> >         at org.springframework.jdbc.core.JdbcTemplate.query(JdbcTemplat
>> e.java:468)
>> > ~[spring-jdbc-4.0.7.RELEASE.jar:4.0.7.RELEASE]
>> >         at org.springframework.jdbc.core.JdbcTemplate.queryForRowSet(Jd
>> bcTemplate.java:523)
>> > ~[spring-jdbc-4.0.7.RELEASE.jar:4.0.7.RELEASE]
>> >         at org.apache.fineract.infrastructure.dataqueries.service.
>> > GenericDataServiceImpl.fillGenericResultSet(GenericDataServi
>> ceImpl.java:59)
>> > ~[classes/:na]
>> >         at org.apache.fineract.infrastructure.dataqueries.service.
>> > ReadReportingServiceImpl.retrieveGenericResultset(
>> > ReadReportingServiceImpl.java:181) ~[classes/:na]
>> >         at org.apache.fineract.infrastructure.dataqueries.
>> > api.RunreportsApiResource.runReport(RunreportsApiResource.java:121)
>> > ~[classes/:na]
>> >         at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
>> > ~[na:1.8.0_171]
>> >         at sun.reflect.NativeMethodAccessorImpl.invoke(
>> > NativeMethodAccessorImpl.java:62) ~[na:1.8.0_171]
>> >         at sun.reflect.DelegatingMethodAccessorImpl.invoke(
>> > DelegatingMethodAccessorImpl.java:43) ~[na:1.8.0_171]
>> >         at java.lang.reflect.Method.invoke(Method.java:498)
>> > ~[na:1.8.0_171]
>> >         at com.sun.jersey.spi.container.JavaMethodInvokerFactory$1.invo
>> ke(
>> > JavaMethodInvokerFactory.java:60) ~[jersey-server-1.17.jar:1.17]
>> >         at com.sun.jersey.server.impl.model.method.dispatch.
>> > AbstractResourceMethodDispatchProvider$ResponseOutInvoker._dispatch(
>> > AbstractResourceMethodDispatchProvider.java:205)
>> > ~[jersey-server-1.17.jar:1.17]
>> >
>> >
>> >
>> > On Sat, Jun 9, 2018 at 3:25 PM, Ed Cable <edcable@xxxxxxxxx> wrote:
>> >
>> >> Emmanuel,
>> >>
>> >> Please start a new message thread if you have a different support
>> query.
>> >> You can do so my creating a new email with a relevant subject line and
>> >> sending it to the respective mailing list.
>> >>
>> >> We need to keep each discussion thread relevant and on-topic. Thank you
>> >> for using the mailing lists though!
>> >>
>> >> Cheers,
>> >>
>> >> Ed
>> >>
>> >> On Sat, Jun 9, 2018 at 3:00 AM Emmanuel Njoku <einjoku@xxxxxxxxx>
>> wrote:
>> >>
>> >>> who can assist me on this error message. I obtain this message after
>> >>> creation of new Data table mapped to client*.*
>> >>>
>> >>>
>> >>> Jun 09, 2018 10:45:22 AM com.sun.jersey.spi.container.C
>> ontainerResponse
>> >>> mapMappableContainerException
>> >>> SEVERE: The RuntimeException could not be mapped to a response,
>> >>> re-throwing
>> >>> to the HTTP container
>> >>> java.lang.NullPointerException
>> >>> at
>> >>> org.apache.fineract.infrastructure.security.utils.SQLInjecti
>> >>> onValidator.validateSQLInput(SQLInjectionValidator.java:36)
>> >>> at
>> >>> org.apache.fineract.infrastructure.security.utils.ColumnVali
>> >>> dator.validateSqlInjection(ColumnValidator.java:95)
>> >>> at
>> >>> org.apache.fineract.infrastructure.dataqueries.service.ReadW
>> >>> riteNonCoreDataServiceImpl.retrieveDataTableGenericResultSet
>> >>> (ReadWriteNonCoreDataServiceImpl.java:1190)
>> >>> at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
>> >>> at
>> >>> sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAcce
>> >>> ssorImpl.java:62)
>> >>> at
>> >>> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMe
>> >>> thodAccessorImpl.java:43)
>> >>> at java.lang.reflect.Method.invoke(Method.java:498)
>> >>> at
>> >>> org.springframework.aop.support.AopUtils.invokeJoinpointUsin
>> >>> gReflection(AopUtils.java:317)
>> >>> at
>> >>> org.springframework.aop.framework.JdkDynamicAopProxy.invoke(
>> >>> JdkDynamicAopProxy.java:201)
>> >>> at com.sun.proxy.$Proxy148.retrieveDataTableGenericResultSet(Unknown
>> >>> Source)
>> >>> at
>> >>> org.apache.fineract.infrastructure.dataqueries.api.
>> >>> DatatablesApiResource.getDatatable(DatatablesApiResource.java:174)
>> >>> at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
>> >>> at
>> >>> sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAcce
>> >>> ssorImpl.java:62)
>> >>> at
>> >>> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMe
>> >>> thodAccessorImpl.java:43)
>> >>> at java.lang.reflect.Method.invoke(Method.java:498)
>> >>> at
>> >>> com.sun.jersey.spi.container.JavaMethodInvokerFactory$1.invo
>> >>> ke(JavaMethodInvokerFactory.java:60)
>> >>> at
>> >>> com.sun.jersey.server.impl.model.method.dispatch.AbstractRes
>> >>> ourceMethodDispatchProvider$TypeOutInvoker._dispatch(Abstr
>> >>> actResourceMethodDispatchProvider.java:185)
>> >>> at
>> >>> com.sun.jersey.server.impl.model.method.dispatch.ResourceJav
>> >>> aMethodDispatcher.dispatch(ResourceJavaMethodDispatcher.java:75)
>> >>> at
>> >>> com.sun.jersey.server.impl.uri.rules.HttpMethodRule.accept(
>> >>> HttpMethodRule.java:302)
>> >>> at
>> >>> com.sun.jersey.server.impl.uri.rules.RightHandPathRule.accep
>> >>> t(RightHandPathRule.java:147)
>> >>> at
>> >>> com.sun.jersey.server.impl.uri.rules.ResourceClassRule.accep
>> >>> t(ResourceClassRule.java:108)
>> >>> at
>> >>> com.sun.jersey.server.impl.uri.rules.RightHandPathRule.accep
>> >>> t(RightHandPathRule.java:147)
>> >>> at
>> >>> com.sun.jersey.server.impl.uri.rules.RootResourceClassesRule
>> >>> .accept(RootResourceClassesRule.java:84)
>> >>> at
>> >>> com.sun.jersey.server.impl.application.WebApplicationImpl._h
>> >>> andleRequest(WebApplicationImpl.java:1511)
>> >>> at
>> >>> com.sun.jersey.server.impl.application.WebApplicationImpl._h
>> >>> andleRequest(WebApplicationImpl.java:1442)
>> >>> at
>> >>> com.sun.jersey.server.impl.application.WebApplicationImpl.ha
>> >>> ndleRequest(WebApplicationImpl.java:1391)
>> >>> at
>> >>> com.sun.jersey.server.impl.application.WebApplicationImpl.ha
>> >>> ndleRequest(WebApplicationImpl.java:1381)
>> >>> at
>> >>> com.sun.jersey.spi.container.servlet.WebComponent.service(We
>> >>> bComponent.java:416)
>> >>> at
>> >>> com.sun.jersey.spi.container.servlet.ServletContainer.servic
>> >>> e(ServletContainer.java:538)
>> >>> at
>> >>> com.sun.jersey.spi.container.servlet.ServletContainer.servic
>>
>> >>> e(ServletContainer.java:716)
>> >>> at javax.servlet.http.HttpServlet.service(HttpServlet.java:731)
>> >>> at
>> >>> org.apache.catalina.core.ApplicationFilterChain.internalDoFi
>> >>> lter(ApplicationFilterChain.java:303)
>> >>> at
>> >>> org.apache.catalina.core.ApplicationFilterChain.doFilter(App
>> >>> licationFilterChain.java:208)
>> >>> at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilte
>> >>> r.java:52)
>> >>> at
>> >>> org.apache.catalina.core.ApplicationFilterChain.internalDoFi
>> >>> lter(ApplicationFilterChain.java:241)
>> >>> at
>> >>> org.apache.catalina.core.ApplicationFilterChain.doFilter(App
>> >>> licationFilterChain.java:208)
>> >>> at
>> >>> org.springframework.security.web.access.intercept.FilterSecu
>> >>> rityInterceptor.invoke(FilterSecurityInterceptor.java:108)
>> >>> at
>> >>> org.springframework.security.web.access.intercept.FilterSecu
>> >>> rityInterceptor.doFilter(FilterSecurityInterceptor.java:84)
>> >>> at
>> >>> org.apache.catalina.core.ApplicationFilterChain.internalDoFi
>> >>> lter(ApplicationFilterChain.java:241)
>> >>> at
>> >>> org.apache.catalina.core.ApplicationFilterChain.doFilter(App
>> >>> licationFilterChain.java:208)
>> >>> at
>> >>> org.springframework.security.web.FilterChainProxy$VirtualFil
>> >>> terChain.doFilter(FilterChainProxy.java:330)
>> >>> at
>> >>> org.springframework.security.web.access.intercept.FilterSecu
>> >>> rityInterceptor.invoke(FilterSecurityInterceptor.java:118)
>> >>> at
>> >>> org.springframework.security.web.access.intercept.FilterSecu
>> >>> rityInterceptor.doFilter(FilterSecurityInterceptor.java:84)
>> >>> at
>> >>> org.springframework.security.web.FilterChainProxy$VirtualFil
>> >>> terChain.doFilter(FilterChainProxy.java:342)
>> >>> at
>> >>> org.springframework.security.web.access.ExceptionTranslation
>> >>> Filter.doFilter(ExceptionTranslationFilter.java:113)
>> >>> at
>> >>> org.springframework.security.web.FilterChainProxy$VirtualFil
>> >>> terChain.doFilter(FilterChainProxy.java:342)
>> >>> at
>> >>> org.springframework.security.web.authentication.AnonymousAut
>> >>> henticationFilter.doFilter(AnonymousAuthenticationFilter.java:113)
>> >>> at
>> >>> org.springframework.security.web.FilterChainProxy$VirtualFil
>> >>> terChain.doFilter(FilterChainProxy.java:342)
>> >>> at
>> >>> org.springframework.security.web.servletapi.SecurityContextH
>> >>> olderAwareRequestFilter.doFilter(SecurityContextHolder
>> >>> AwareRequestFilter.java:154)
>> >>> at
>> >>> org.springframework.security.web.FilterChainProxy$VirtualFil
>> >>> terChain.doFilter(FilterChainProxy.java:342)
>> >>> at
>> >>> org.apache.fineract.infrastructure.security.filter.TwoFactor
>> >>> AuthenticationFilter.doFilter(TwoFactorAuthenticationFilter.java:122)
>> >>> at
>> >>> org.springframework.security.web.FilterChainProxy$VirtualFil
>> >>> terChain.doFilter(FilterChainProxy.java:342)
>> >>> at
>> >>> org.springframework.security.web.context.request.async.WebAs
>> >>> yncManagerIntegrationFilter.doFilterInternal(WebAsyncManag
>> >>> erIntegrationFilter.java:50)
>> >>> at
>> >>> org.springframework.web.filter.OncePerRequestFilter.doFilter
>> >>> (OncePerRequestFilter.java:107)
>> >>> at
>> >>> org.springframework.security.web.FilterChainProxy$VirtualFil
>> >>> terChain.doFilter(FilterChainProxy.java:342)
>> >>> at
>> >>> org.springframework.security.web.authentication.www.BasicAut
>> >>> henticationFilter.doFilter(BasicAuthenticationFilter.java:201)
>> >>> at
>> >>> org.apache.fineract.infrastructure.security.filter.TenantAwa
>> >>> reBasicAuthenticationFilter.doFilter(TenantAwareBasicAuthe
>> >>> nticationFilter.java:153)
>> >>> at
>> >>> org.springframework.security.web.FilterChainProxy$VirtualFil
>> >>> terChain.doFilter(FilterChainProxy.java:342)
>> >>> at
>> >>> org.springframework.security.web.context.SecurityContextPers
>> >>> istenceFilter.doFilter(SecurityContextPersistenceFilter.java:87)
>> >>> at
>> >>> org.springframework.security.web.FilterChainProxy$VirtualFil
>> >>> terChain.doFilter(FilterChainProxy.java:342)
>> >>> at
>> >>> org.springframework.security.web.access.channel.ChannelProce
>> >>> ssingFilter.doFilter(ChannelProcessingFilter.java:144)
>> >>> at
>> >>> org.springframework.security.web.FilterChainProxy$VirtualFil
>> >>> terChain.doFilter(FilterChainProxy.java:342)
>> >>> at
>> >>> org.springframework.security.web.FilterChainProxy.doFilterIn
>> >>> ternal(FilterChainProxy.java:192)
>> >>> at
>> >>> org.springframework.security.web.FilterChainProxy.doFilter(F
>> >>> ilterChainProxy.java:160)
>> >>> at
>> >>> org.apache.catalina.core.ApplicationFilterChain.internalDoFi
>> >>> lter(ApplicationFilterChain.java:241)
>> >>> at
>> >>> org.apache.catalina.core.ApplicationFilterChain.doFilter(App
>> >>> licationFilterChain.java:208)
>> >>> at
>> >>> org.springframework.boot.context.web.ErrorPageFilter.doFilte
>> >>> r(ErrorPageFilter.java:108)
>> >>> at
>> >>> org.springframework.boot.context.web.ErrorPageFilter.access$
>> >>> 000(ErrorPageFilter.java:58)
>> >>> at
>> >>> org.springframework.boot.context.web.ErrorPageFilter$1.doFil
>> >>> terInternal(ErrorPageFilter.java:87)
>> >>> at
>> >>> org.springframework.web.filter.OncePerRequestFilter.doFilter
>> >>> (OncePerRequestFilter.java:107)
>> >>> at
>> >>> org.springframework.boot.context.web.ErrorPageFilter.doFilte
>> >>> r(ErrorPageFilter.java:100)
>> >>> at
>> >>> org.apache.catalina.core.ApplicationFilterChain.internalDoFi
>> >>> lter(ApplicationFilterChain.java:241)
>> >>> at
>> >>> org.apache.catalina.core.ApplicationFilterChain.doFilter(App
>> >>> licationFilterChain.java:208)
>> >>> at
>> >>> org.apache.catalina.core.StandardWrapperValve.invoke(Standar
>> >>> dWrapperValve.java:219)
>> >>> at
>> >>> org.apache.catalina.core.StandardContextValve.invoke(Standar
>> >>> dContextValve.java:110)
>> >>> at
>> >>> org.apache.catalina.authenticator.AuthenticatorBase.invoke(A
>> >>> uthenticatorBase.java:506)
>> >>> at
>> >>> org.apache.catalina.core.StandardHostValve.invoke(StandardHo
>> >>> stValve.java:169)
>> >>> at
>> >>> org.apache.catalina.valves.ErrorReportValve.invoke(ErrorRepo
>> >>> rtValve.java:103)
>> >>> at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogVa
>> >>> lve.java:962)
>> >>> at
>> >>> org.apache.catalina.core.StandardEngineValve.invoke(Standard
>> >>> EngineValve.java:116)
>> >>> at
>> >>> org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAd
>> >>> apter.java:445)
>> >>> at
>> >>> org.apache.coyote.http11.AbstractHttp11Processor.process(Abs
>> >>> tractHttp11Processor.java:1115)
>> >>> at
>> >>> org.apache.coyote.AbstractProtocol$AbstractConnectionHandler
>> >>> .process(AbstractProtocol.java:637)
>> >>> at
>> >>> org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(
>> >>> JIoEndpoint.java:318)
>> >>> at
>> >>> java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPool
>> >>> Executor.java:1149)
>> >>> at
>> >>> java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoo
>> >>> lExecutor.java:624)
>> >>> at
>> >>> org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.
>> >>> run(TaskThread.java:61)
>> >>> at java.lang.Thread.run(Thread.java:748)
>> >>>
>> >>> On Sat, Jun 9, 2018 at 7:20 AM, Raunak Sett <sett.raunak@xxxxxxxxx>
>> >>> wrote:
>> >>>
>> >>> > We should use Angular Material. We should have consistent experience
>> >>> > across all platforms and given that we are already following
>> material
>> >>> > design guidelines on a lot of our android clients as well as web.
>> So it
>> >>> > would be easier if we just have a common UI/UX guidelines for the
>> >>> > consistency.
>> >>> >
>> >>> > On Fri, Jun 8, 2018 at 10:13 PM Abhay Chawla <
>> abhay.chawla97@xxxxxxxxx
>> >>> >
>> >>> > wrote:
>> >>> >
>> >>> >> Hello everyone,
>> >>> >>
>> >>> >> After some discussion, Anwesh and I have a come up with the
>> following
>> >>> >> points regarding the decision to use Angular Material or bootswatch
>> >>> and
>> >>> >> ng-bootstrap for the new MifosX Web App (Angular 6):
>> >>> >>
>> >>> >> 1) ng-bootstrap is a wrapper over bootstrap.js which contains a
>> set of
>> >>> >> Angular Directives that can be implemented without any
>> dependencies on
>> >>> >> jQuery or popper.js  https://ng-bootstrap.github.io/#/home
>> >>> >> 2) Bootswatch provides a collection of themes(21 + 1 default) for
>> >>> >> Bootstrap  https://github.com/thomaspark/bootswatch/
>> >>> >> 3) Bootswatch provides with an API which can be integrated with the
>> >>> >> platform for theme configuration easily and provide the
>> organizations
>> >>> with
>> >>> >> a choice from these 21 themes  https://bootswatch.com/api/4.json
>> >>> >> 4) We are currently using the bootswatch material theme to compete
>> and
>> >>> >> provide with a similar kind of look as by angular-material
>> >>> >> 5) New themes if required can be configured easily using bootstrap,
>> >>> as a
>> >>> >> simple example I have created a demonstration here:
>> >>> https://abhaychawla.
>> >>> >> github.io/angular-theme/
>> >>> >> 6) We can also provide instructions so that the organizations will
>> be
>> >>> >> able to clone the project, create their own custom theme, build the
>> >>> app and
>> >>> >> use that theme.
>> >>> >> 7) Overall, ng-bootstrap and bootswatch built on top of bootstrap
>> are
>> >>> >> easy to implement and could be modified and used to suit our needs
>> >>> >>
>> >>> >> 8) On the other hand, angular-material provides with 4 inbuilt
>> >>> material
>> >>> >> themes to chose from  https://material.angular.io/
>> >>> >> 9) More custom themes can be configured according to organizations
>> >>> needs
>> >>> >> using angular-material as well but it will be a bit more complex
>> >>> >> 10) Overall, angular-material will be more time consuming and a
>> little
>> >>> >> difficult to implement
>> >>> >>
>> >>> >> We would like to share this with the community and get their
>> opinion
>> >>> >> regarding our choice of design framework so that we can finalize
>> the
>> >>> same
>> >>> >> as soon as possible in the initial stage of the project.
>> >>> >>
>> >>> >> Looking forward to your responses.
>> >>> >>
>> >>> >> Thanks
>> >>> >> Abhay.
>> >>> >>
>> >>> >> --
>> >>> >> You received this message because you are subscribed to the Google
>> >>> Groups
>> >>> >> "Mifos Google Summer of Code 2018" group.
>> >>> >> To unsubscribe from this group and stop receiving emails from it,
>> >>> send an
>> >>> >> email to gsoc-2018+unsubscribe@xxxxxxxxx.
>> >>> >>
>> >>> >
>> >>> >
>> >>> > --
>> >>> > Raunak Sett
>> >>> >
>> >>> > ------------------------------------------------------------
>> >>> > ------------------
>> >>> > Check out the vibrant tech community on one of the world's most
>> >>> > engaging tech sites, Slashdot.org! http://sdm.link/slashdot
>> >>> > Mifos-developer mailing list
>> >>> > mifos-developer@xxxxxxxxxxxxxxxxxxxxx
>> >>> > Unsubscribe or change settings at:
>> >>> > https://lists.sourceforge.net/lists/listinfo/mifos-developer
>> >>> >
>> >>>
>> >>
>> >>
>> >> --
>> >> *Ed Cable*
>> >> President/CEO, Mifos Initiative
>> >> edcable@xxxxxxxxx | Skype: edcable | Mobile: +1.484.477.8649
>> >>
>> >> *Collectively Creating a World of 3 Billion Maries | *http://mifos.org
>> >> <http://facebook.com/mifos>  <http://www.twitter.com/mifos>
>> >>
>> >>
>> >
>>
>
>
> ------------------------------------------------------------
> ------------------
> Check out the vibrant tech community on one of the world's most
> engaging tech sites, Slashdot.org! http://sdm.link/slashdot
> Mifos-developer mailing list
> mifos-developer@xxxxxxxxxxxxxxxxxxxxx
> Unsubscribe or change settings at:
> https://lists.sourceforge.net/lists/listinfo/mifos-developer
>