Giter VIP home page Giter VIP logo

freee-accounting-sdk-java's Issues

@Query("offset") Type Inconsistencies

Thanks for the awesome SDK!

I notice some inconsistencies when trying to call the API that has @query("offset"). Some are typed with Long and other is typed with Integer. Is there a specific reason behind this?

Here's the list of the location where Long and Integer is used for @query("offset")

Long

  • DealsApi
    [ ] getDeals
  • ExpenseApplicationLineTemplatesApi
    [ ] getExpenseApplicationLineTemplates
  • ExpenseApplicationsApi
    [ ] getExpenseApplications
  • InvoicesApi
    [ ] getInvoices
  • ManualJournalsApi
    [ ] getManualJournals
  • PartnersApi
    [ ] getPartners
  • QuotationsApi
    [ ] getQuotations
  • ReceiptsApi
    [ ] getReceipts
  • SegmentTagsApi
    [ ] getSegmentTags
  • TransfersApi
    [ ] getTransfers
  • WalletTxnsApi
    [ ] getWalletTxns

Integer

  • ApprovalRequestsApi
    [ ] getApprovalRequests
  • ItemsApi
    [ ] getItems
  • TagsApi
    [ ] getTags

UsersApi getUsers return OAuthProblemException instead of 401 Unauthorized

Code:

        UsersApi api = apiClient.createService(UsersApi.class);

        return ResponseEntity.ok(api.getUsers(companyId, limit).blockingSingle().getUsers());

Previously this API will return 401 when the users does not have permission to call https://api.freee.co.jp/api/1/users. But now it returns 500 OAuthProblemException.

This is the complete trace:

org.apache.oltu.oauth2.common.exception.OAuthProblemException: invalid_client, クライアントが不明か、クライアント認証が含まれていないか、もしくは認証メソッドがサポートされていないため、クライアント認証は失敗しました。
	at org.apache.oltu.oauth2.common.exception.OAuthProblemException.error(OAuthProblemException.java:59) ~[org.apache.oltu.oauth2.client-1.0.1.jar:na]
	at org.apache.oltu.oauth2.client.validator.OAuthClientValidator.validateErrorResponse(OAuthClientValidator.java:63) ~[org.apache.oltu.oauth2.client-1.0.1.jar:na]
	at org.apache.oltu.oauth2.client.validator.OAuthClientValidator.validate(OAuthClientValidator.java:48) ~[org.apache.oltu.oauth2.client-1.0.1.jar:na]
	at org.apache.oltu.oauth2.client.response.OAuthClientResponse.validate(OAuthClientResponse.java:64) ~[org.apache.oltu.oauth2.client-1.0.1.jar:na]
	at org.apache.oltu.oauth2.client.response.OAuthClientResponse.init(OAuthClientResponse.java:59) ~[org.apache.oltu.oauth2.client-1.0.1.jar:na]
	at org.apache.oltu.oauth2.client.response.OAuthAccessTokenResponse.init(OAuthAccessTokenResponse.java:52) ~[org.apache.oltu.oauth2.client-1.0.1.jar:na]
	at org.apache.oltu.oauth2.client.response.OAuthClientResponseFactory.createCustomResponse(OAuthClientResponseFactory.java:60) ~[org.apache.oltu.oauth2.client-1.0.1.jar:na]
	at jp.co.freee.accounting.auth.OAuthOkHttpClient.execute(OAuthOkHttpClient.java:58) ~[freee-accounting-sdk-2.3.0.jar:na]
	at org.apache.oltu.oauth2.client.OAuthClient.accessToken(OAuthClient.java:65) ~[org.apache.oltu.oauth2.client-1.0.1.jar:na]
	at org.apache.oltu.oauth2.client.OAuthClient.accessToken(OAuthClient.java:55) ~[org.apache.oltu.oauth2.client-1.0.1.jar:na]
	at org.apache.oltu.oauth2.client.OAuthClient.accessToken(OAuthClient.java:71) ~[org.apache.oltu.oauth2.client-1.0.1.jar:na]
	at jp.co.freee.accounting.auth.OAuth.updateAccessToken(OAuth.java:138) ~[freee-accounting-sdk-2.3.0.jar:na]
	at jp.co.freee.accounting.auth.OAuth.retryingIntercept(OAuth.java:117) ~[freee-accounting-sdk-2.3.0.jar:na]
	at jp.co.freee.accounting.auth.OAuth.intercept(OAuth.java:76) ~[freee-accounting-sdk-2.3.0.jar:na]
	at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:142) ~[okhttp-3.14.9.jar:na]
	at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:117) ~[okhttp-3.14.9.jar:na]
	at com.example.freeeappbackend.util.exception.ErrorInterceptor.intercept(ErrorInterceptor.java:16) ~[classes/:na]
	at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:142) ~[okhttp-3.14.9.jar:na]
	at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:117) ~[okhttp-3.14.9.jar:na]
	at okhttp3.RealCall.getResponseWithInterceptorChain(RealCall.java:229) ~[okhttp-3.14.9.jar:na]
	at okhttp3.RealCall.execute(RealCall.java:81) ~[okhttp-3.14.9.jar:na]
	at retrofit2.OkHttpCall.execute(OkHttpCall.java:186) ~[retrofit-2.5.0.jar:na]
	at retrofit2.adapter.rxjava2.CallExecuteObservable.subscribeActual(CallExecuteObservable.java:45) ~[adapter-rxjava2-2.5.0.jar:na]
	at io.reactivex.Observable.subscribe(Observable.java:12284) ~[rxjava-2.2.21.jar:na]
	at retrofit2.adapter.rxjava2.BodyObservable.subscribeActual(BodyObservable.java:34) ~[adapter-rxjava2-2.5.0.jar:na]
	at io.reactivex.Observable.subscribe(Observable.java:12284) ~[rxjava-2.2.21.jar:na]
	at io.reactivex.internal.operators.observable.ObservableSingleMaybe.subscribeActual(ObservableSingleMaybe.java:31) ~[rxjava-2.2.21.jar:na]
	at io.reactivex.Maybe.subscribe(Maybe.java:4290) ~[rxjava-2.2.21.jar:na]
	at io.reactivex.Maybe.blockingGet(Maybe.java:2320) ~[rxjava-2.2.21.jar:na]
	at io.reactivex.Observable.blockingSingle(Observable.java:5381) ~[rxjava-2.2.21.jar:na]
	at com.example.freeeappbackend.controller.UserController.users(UserController.java:54) ~[classes/:na]
	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:na]
	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) ~[na:na]
	at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:na]
	at java.base/java.lang.reflect.Method.invoke(Method.java:568) ~[na:na]
	at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:197) ~[spring-web-5.3.6.jar:5.3.6]
	at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:141) ~[spring-web-5.3.6.jar:5.3.6]
	at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:106) ~[spring-webmvc-5.3.6.jar:5.3.6]
	at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:894) ~[spring-webmvc-5.3.6.jar:5.3.6]
	at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:808) ~[spring-webmvc-5.3.6.jar:5.3.6]
	at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87) ~[spring-webmvc-5.3.6.jar:5.3.6]
	at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1060) ~[spring-webmvc-5.3.6.jar:5.3.6]
	at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:962) ~[spring-webmvc-5.3.6.jar:5.3.6]
	at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1006) ~[spring-webmvc-5.3.6.jar:5.3.6]
	at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:898) ~[spring-webmvc-5.3.6.jar:5.3.6]
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:626) ~[tomcat-embed-core-9.0.45.jar:4.0.FR]
	at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:883) ~[spring-webmvc-5.3.6.jar:5.3.6]
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:733) ~[tomcat-embed-core-9.0.45.jar:4.0.FR]
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:227) ~[tomcat-embed-core-9.0.45.jar:9.0.45]
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162) ~[tomcat-embed-core-9.0.45.jar:9.0.45]
	at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53) ~[tomcat-embed-websocket-9.0.45.jar:9.0.45]
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189) ~[tomcat-embed-core-9.0.45.jar:9.0.45]
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162) ~[tomcat-embed-core-9.0.45.jar:9.0.45]
	at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100) ~[spring-web-5.3.6.jar:5.3.6]
	at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) ~[spring-web-5.3.6.jar:5.3.6]
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189) ~[tomcat-embed-core-9.0.45.jar:9.0.45]
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162) ~[tomcat-embed-core-9.0.45.jar:9.0.45]
	at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93) ~[spring-web-5.3.6.jar:5.3.6]
	at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) ~[spring-web-5.3.6.jar:5.3.6]
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189) ~[tomcat-embed-core-9.0.45.jar:9.0.45]
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162) ~[tomcat-embed-core-9.0.45.jar:9.0.45]
	at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201) ~[spring-web-5.3.6.jar:5.3.6]
	at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) ~[spring-web-5.3.6.jar:5.3.6]
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189) ~[tomcat-embed-core-9.0.45.jar:9.0.45]
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162) ~[tomcat-embed-core-9.0.45.jar:9.0.45]
	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:202) ~[tomcat-embed-core-9.0.45.jar:9.0.45]
	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:97) ~[tomcat-embed-core-9.0.45.jar:9.0.45]
	at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:542) ~[tomcat-embed-core-9.0.45.jar:9.0.45]
	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:143) ~[tomcat-embed-core-9.0.45.jar:9.0.45]
	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92) ~[tomcat-embed-core-9.0.45.jar:9.0.45]
	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:78) ~[tomcat-embed-core-9.0.45.jar:9.0.45]
	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:357) ~[tomcat-embed-core-9.0.45.jar:9.0.45]
	at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:374) ~[tomcat-embed-core-9.0.45.jar:9.0.45]
	at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65) ~[tomcat-embed-core-9.0.45.jar:9.0.45]
	at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:893) ~[tomcat-embed-core-9.0.45.jar:9.0.45]
	at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1707) ~[tomcat-embed-core-9.0.45.jar:9.0.45]
	at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49) ~[tomcat-embed-core-9.0.45.jar:9.0.45]
	at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1136) ~[na:na]
	at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635) ~[na:na]
	at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) ~[tomcat-embed-core-9.0.45.jar:9.0.45]
	at java.base/java.lang.Thread.run(Thread.java:833) ~[na:na]

Calling the API using normal HTTP Request will not return this 500 error and return the 401 Unauthorized exception correctly.

        UriComponentsBuilder url = UriComponentsBuilder.fromHttpUrl(USERS_URI);
        url.queryParam("company_id", companyId);
        url.queryParam("limit", limit);

        HttpEntity<?> httpEntity = new HttpEntity<>(HeadersUtil.getBearerAuthJsonHeaders(accessToken));

        ResponseEntity<String> responseEntity = restTemplate.exchange(url.toUriString(), HttpMethod.GET, httpEntity,
                String.class);

        if (responseEntity.getBody() == null) {
            return ResponseEntity.badRequest().body("Failed to retrieve users data");
        }

        if (responseEntity.getStatusCode().is4xxClientError()) {
            return ResponseEntity.badRequest().body(responseEntity.getBody());
        }

        return ResponseEntity.ok().body(responseEntity.getBody());

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.