2017-04-10 1 views
0

이 질문을 전에 보았습니다. 해결할 수없는 것 같습니다. 현재 Google App Engine은 java.util.logging.Logger의 하위 클래스를 지원하지 않습니다. 내 CRM에 연락처를 입력하려면 Base CRM API (여기 정보 : https://github.com/basecrm/basecrm-java)를 사용하는 Java 끝점에 일부 코드가 있습니다. 이것은 테스트를 위해 locahost 환경에서 사용할 때 예상대로 작동하지만, 기본 API가 수행하는 로깅을 좋아하지 않으면 영향을받습니다. 여기Google App Engine Java 로깅, 특히 Slf4j

java.lang.SecurityException: Google App Engine does not support subclasses of java.util.logging.Logger: com/getbase/http/jersey/HttpClient$Slf4jAdapter 
    at com.google.appengine.runtime.Request.process-bbdc1f6d27729bc9(Request.java) 
    at java.lang.ClassLoader.loadClass(ClassLoader.java:375) 
    at com.getbase.http.jersey.HttpClient.<init>(HttpClient.java:31) 
    at com.getbase.Client.<init>(Client.java:34) 
    at com.nicholas.leadsbackend.LeadsServlet.sendToBase(LeadsServlet.java:90) 
    at com.nicholas.leadsbackend.LeadsServlet.doPost(LeadsServlet.java:61) 
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:637) 
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:717) 
    at org.mortbay.jetty.servlet.ServletHolder.handle(ServletHolder.java:511) 
    at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1166) 
    at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157) 
    at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157) 
    at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157) 
    at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157) 
    at org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:388) 
    at org.mortbay.jetty.security.SecurityHandler.handle(SecurityHandler.java:216) 
    at org.mortbay.jetty.servlet.SessionHandler.handle(SessionHandler.java:182) 
    at org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:765) 
    at org.mortbay.jetty.webapp.WebAppContext.handle(WebAppContext.java:418) 
    at org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:152) 
    at org.mortbay.jetty.Server.handle(Server.java:326) 
    at org.mortbay.jetty.HttpConnection.handleRequest(HttpConnection.java:542) 
    at org.mortbay.jetty.HttpConnection$RequestHandler.headerComplete(HttpConnection.java:923) 
    at org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:404) 
    at com.google.tracing.TraceContext$TraceContextRunnable.runInContext(TraceContext.java:453) 
    at com.google.tracing.TraceContext$TraceContextRunnable$1.run(TraceContext.java:460) 
    at com.google.tracing.CurrentContext.runInContext(CurrentContext.java:293) 
    at com.google.tracing.TraceContext$AbstractTraceContextCallback.runInInheritedContextNoUnref(TraceContext.java:319) 
    at com.google.tracing.TraceContext$AbstractTraceContextCallback.runInInheritedContext(TraceContext.java:311) 
    at com.google.tracing.TraceContext$TraceContextRunnable.run(TraceContext.java:457) 
    at java.lang.Thread.run(Thread.java:745) 

기지로 전송 내 엔드 포인트의 코드입니다 : : 여기 GAE에서 점점 오전 오류입니다

Client client = new Client(new Configuration.Builder() 
        .accessToken(BASECRM_ACCESS_TOKEN) 
        .verbose() 
        .build()); 

      Contact contact = new Contact(); 
      contact.setName(name); 
      contact.setPhone(phone); 
      contact.setEmail(email); 
      contact.setDescription("Make/Model/Year: " + make + "\n" + 
        "Type of Ad: " + adType); 
      client.contacts().create(contact); 

이 API 코드는 매우 간단한 코드입니다, 여기에 문제가되지 않습니다 . 내 문제는 CRM API가이 종속성을 필요로한다는 것입니다. compile group: 'org.slf4j', name: 'slf4j-simple', version: '1.7.21'이 제대로 작동하지 않거나 오류가 발생합니다.

GAE를 해결할 방법이 있는지 알려주십시오. 다른 옵션에는 엄격한 로깅 규칙이 없을 수도 있으므로 GAE 이외의 다른 옵션을 찾고 있습니다. 이 API는 나에게 문제가되는 특수한 시나리오이기 때문에 특별한 경우이지만 이해가 매우 도움이 될 것입니다. 미리 감사드립니다!

답변

0

이 문제는 매우 구체적인 문제이며 SFL4j 로깅에 대한 해결 방법을 찾으려면 기본 개발자 지원팀과 협력하고 있음을 이해합니다. 그래서 Base Java API를 스크럽하여 하나의 클래스 만 sfj4j 어댑터의 서브 클래스를 생성합니다. 이 API는 해당 API에 대한 업데이트로,이 업데이트가 통합 된시기는 확실하지 않으므로 이전 API를 사용한 다음 설명서에 나열한 API를 사용하기로 결정했습니다. java.util의 로거의 서브 클래스입니다

public static class Slf4jAdapter extends java.util.logging.Logger { 
     private final Logger logger; 

     public Slf4jAdapter(Logger logger) { 
      super("jersey", null); 
      this.logger = logger; 
     } 

     @Override 
     public void info(String msg) { 
      logger.info(msg); 
     } 
    } 

: "com.getbase:basecrm-java:1.4.5"이 클래스가

을 컴파일 : 여기

는 하나 개의 라이브러리 기본 사용 제공합니다. 그들은 sfl4j 로깅을 사용하기 시작하기 전에이다 compile "com.getbase:basecrm-java:1.0.0"

:

나는이 라이브러리를 사용하여 끝났다. 이렇게하면 Google App Engine이 요청을 거부하지 않고 모든 것이 작동하게됩니다.

sfl4j를 사용하기 시작한 버전이 확실하지 않지만 sfl4j가없는 최신 getbase 빌드를 사용할 수 있도록 알게 될 것입니다.

sfl4j 로깅에 대한 해결책이 있는지 확인한 후이 빌드를 수정하거나 최신 빌드를 표시합니다. 나는 이것이 다른 누구에게나 도움이되기를 바랍니다.