google-app-engine - 迁移到端点框架版本 2 时出现 NoSuchMethodException
问题描述
当我尝试将现有端点版本 1.o 代码迁移到端点框架版本 2 时,出现 NoSuchMethod 异常。
我在这里使用此网址中的指南
https://cloud.google.com/endpoints/docs/frameworks/java/migrating
但我不断收到此错误消息
java.lang.NoSuchMethodException: sampe-package-path.EndpointClassEndpoint.<init>()
at java.lang.Class.getConstructor0(Class.java:3082)
at java.lang.Class.newInstance(Class.java:412)
at com.google.api.server.spi.EndpointsServlet.createService(EndpointsServlet.java:143)
at com.google.api.server.spi.EndpointsServlet.createSystemService(EndpointsServlet.java:128)
at com.google.api.server.spi.EndpointsServlet.init(EndpointsServlet.java:57)
我在此处迁移的示例中使用了确切的 web.xml
我会错过什么吗?
在上面的 Endpoint 类中,我只有一个像这样的参数构造函数
@Inject
public EndpointClassEndpoint(EndpointClassContext context) {
this.context = context;
}
对于解决此错误的任何帮助,我将不胜感激
根据@saiyr 的要求添加完整的 web.xml
<?xml version="1.0" encoding="utf-8" standalone="no"?>
<web-app xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="2.5"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
<listener>
<listener-class>
somethpath.bootstrap.CompanyOneGSCL
</listener-class>
</listener>
<listener>
<listener-class>
somethpath.bootstrap.listeners.ObjectifyLoaderContextListener
</listener-class>
</listener>
<!-- GUICE -->
<filter>
<filter-name>guiceFilter</filter-name>
<filter-class>com.google.inject.servlet.GuiceFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>guiceFilter</filter-name>
<url-pattern>/_ah/spi/*</url-pattern>
<url-pattern>/*</url-pattern>
</filter-mapping>
<!-- ENDPOINTS -->
<servlet>
<servlet-name>EndpointsServlet</servlet-name>
<servlet-class>com.google.api.server.spi.EndpointsServlet</servlet-class>
<init-param>
<param-name>services</param-name>
<param-value>
somethpath.endpoints.PraxoneV1API,
somethpath.endpoints.EmpresasEndpoint,
csomethpath.endpoints.AdministrationEndpoint,
somethpath.endpoints.CentrosEndpoint,
somethpath.endpoints.CargosEndpoint,
somethpath.endpoints.TrabajadoresEndpoint,
somethpath.endpoints.EvaluacionEndpoint,
somethpath.endpoints.EpidemiologiaEndpoint,
somethpath.endpoints.ActividadEndpoint,
somethpath.endpoints.TrabajadoresOpenEndpoint,
somethpath.endpoints.AsyncJobEndpoint
</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>EndpointsServlet</servlet-name>
<url-pattern>/_ah/api/*</url-pattern>
</servlet-mapping>
<!-- MonitorCompanyTask Servlet -->
<servlet>
<servlet-name>MonitorCompanyTask</servlet-name>
<servlet-class>reducted-path.MonitorCompanyTask</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>MonitorCompanyTask</servlet-name>
<url-pattern>/tasks/v1/monitor/company</url-pattern>
</servlet-mapping>
<!--servlet>
<servlet-name>appstats</servlet-name>
<servlet-class>com.google.appengine.tools.appstats.AppstatsServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>appstats</servlet-name>
<url-pattern>/appstats/*</url-pattern>
</servlet-mapping>
<security-constraint>
<web-resource-collection>
<web-resource-name>appstats</web-resource-name>
<url-pattern>/appstats/*</url-pattern>
</web-resource-collection>
<auth-constraint>
<role-name>admin</role-name>
</auth-constraint>
</security-constraint -->
<!-- All app must use HTTPS -->
<security-constraint>
<web-resource-collection>
<web-resource-name>any</web-resource-name>
<url-pattern>/*</url-pattern>
</web-resource-collection>
<user-data-constraint>
<transport-guarantee>CONFIDENTIAL</transport-guarantee>
</user-data-constraint>
</security-constraint>
</web-app>
当我做 gradle 依赖项时,这就是我得到的
+--- com.google.endpoints:endpoints-framework:2.0.8
| +--- javax.servlet:servlet-api:2.5
| +--- com.google.guava:guava:19.0 -> 20.0
| +--- com.fasterxml.jackson.core:jackson-annotations:2.6.4 -> 2.9.0
| +--- com.fasterxml.jackson.core:jackson-core:2.6.4 -> 2.9.6
| +--- com.fasterxml.jackson.core:jackson-databind:2.6.4 -> 2.9.6
| | +--- com.fasterxml.jackson.core:jackson-annotations:2.9.0
| | \--- com.fasterxml.jackson.core:jackson-core:2.9.6
| +--- com.google.appengine:appengine-api-1.0-sdk:1.9.49 -> 1.9.64
| +--- com.google.http-client:google-http-client-jackson2:1.21.0 -> 1.23.0
| | +--- com.google.http-client:google-http-client:1.23.0
| | | +--- com.google.code.findbugs:jsr305:1.3.9 -> 3.0.1
| | | \--- org.apache.httpcomponents:httpclient:4.0.1 -> 4.5.2
| | | +--- org.apache.httpcomponents:httpcore:4.4.4
| | | +--- commons-logging:commons-logging:1.2
| | | \--- commons-codec:commons-codec:1.9 -> 1.10
| | \--- com.fasterxml.jackson.core:jackson-core:2.1.3 -> 2.9.6
| +--- com.google.api-client:google-api-client:1.21.0 -> 1.23.0
| | +--- com.google.oauth-client:google-oauth-client:1.23.0
| | | +--- com.google.http-client:google-http-client:1.23.0 (*)
| | | \--- com.google.code.findbugs:jsr305:1.3.9 -> 3.0.1
| | +--- com.google.http-client:google-http-client-jackson2:1.23.0 (*)
| | \--- com.google.guava:guava-jdk5:17.0
| +--- com.google.api-client:google-api-client-appengine:1.21.0 -> 1.23.0
| | +--- com.google.oauth-client:google-oauth-client-appengine:1.23.0
| | | +--- com.google.http-client:google-http-client-appengine:1.23.0
| | | | \--- com.google.http-client:google-http-client:1.23.0 (*)
| | | +--- com.google.oauth-client:google-oauth-client:1.23.0 (*)
| | | \--- com.google.oauth-client:google-oauth-client-servlet:1.23.0
| | | +--- com.google.oauth-client:google-oauth-client:1.23.0 (*)
| | | +--- com.google.http-client:google-http-client-jdo:1.23.0
| | | | +--- com.google.http-client:google-http-client:1.23.0 (*)
| | | | \--- javax.jdo:jdo2-api:2.3-eb
| | | | \--- javax.transaction:transaction-api:1.1
| | | \--- javax.jdo:jdo2-api:2.3-eb (*)
| | +--- com.google.api-client:google-api-client:1.23.0 (*)
| | +--- com.google.api-client:google-api-client-servlet:1.23.0
| | | +--- com.google.oauth-client:google-oauth-client-servlet:1.23.0 (*)
| | | +--- com.google.api-client:google-api-client:1.23.0 (*)
| | | +--- javax.servlet:servlet-api:2.5
| | | \--- javax.jdo:jdo2-api:2.3-eb (*)
| | \--- com.google.http-client:google-http-client-appengine:1.23.0 (*)
| +--- com.google.code.findbugs:jsr305:3.0.1
| +--- io.swagger:swagger-models:1.5.9
| | +--- com.fasterxml.jackson.core:jackson-annotations:2.4.5 -> 2.9.0
| | +--- org.slf4j:slf4j-api:1.6.3 -> 1.7.21
| | \--- io.swagger:swagger-annotations:1.5.9
| +--- io.swagger:swagger-core:1.5.9
| | +--- org.apache.commons:commons-lang3:3.2.1
| | +--- org.slf4j:slf4j-api:1.6.3 -> 1.7.21
| | +--- com.fasterxml.jackson.core:jackson-annotations:2.4.5 -> 2.9.0
| | +--- com.fasterxml.jackson.core:jackson-databind:2.4.5 -> 2.9.6 (*)
| | +--- com.fasterxml.jackson.datatype:jackson-datatype-joda:2.4.5
| | | +--- com.fasterxml.jackson.core:jackson-annotations:2.4.0 -> 2.9.0
| | | +--- com.fasterxml.jackson.core:jackson-core:2.4.5 -> 2.9.6
| | | +--- com.fasterxml.jackson.core:jackson-databind:2.4.5 -> 2.9.6 (*)
| | | \--- joda-time:joda-time:2.2 -> 2.9.4
| | +--- com.fasterxml.jackson.dataformat:jackson-dataformat-yaml:2.4.5
| | | +--- com.fasterxml.jackson.core:jackson-core:2.4.5 -> 2.9.6
| | | \--- org.yaml:snakeyaml:1.12
| | +--- io.swagger:swagger-models:1.5.9 (*)
| | +--- com.google.guava:guava:18.0 -> 20.0
| | \--- javax.validation:validation-api:1.1.0.Final
| \--- org.slf4j:slf4j-nop:1.7.21
| \--- org.slf4j:slf4j-api:1.7.21
我可以看到 com.google.appengine:appengine-api-1.0-sdk:1.9.49 -> 1.9.64 和其他看起来像端点 1 的依赖项,这些在这里好吗?
解决方案
由于您尝试使用 Guice,因此您需要像迁移指南中那样配置端点。请注意,除非您使用 API 管理,否则 Guice 模块中的某些行不相关。调用的最后一行configureEndpoints
是最重要的。然后将该模块添加到您的 Guice 配置中。
推荐阅读
- html - Laravel 公共 CSS 样式表
- solidity - 如何修复“警告:不推荐使用“var”关键字”?
- javascript - 如何在 React.js 前端应用程序中显示来自 Rails 5 API 的数据?
- r - ggplot sec_axis 不适用于在 3.1 版中将轴提升到幂的转换
- c++ - run protobuf example on Mac OS with error
- php - How to change value output after edit Nestable
- python - Count of records of table in mssql server
- python - How to write single class based view for multiple url?
- angularjs - accessing node modules from index.html from public folder
- c - Binary Search Tree (BST) - Traversal search