支持设置 ServletName 的 CamelHttpTransportServlet
升级到 Grails3 后,没了 web.xml,只能通过 ServletRegistrationBean 来注册 servlet,此时默认的 seveletName 为类名。
此时,如果用原始的 CamelHttpTransportServlet 类来注册 servlet,则名称为 camelHttpTransportServlet;
但是对于 servlet:// 的路由,除非在 url 上加上 servletName = camelHttpTransportServlet,否则会默认注册到名为 CamelServlet 的注册表中,导致路由不生效。
于是,新增子类 CamelServlet 和可接收自定义名称的构造器,并且通过 RoutingGrailsPlugin 设置名称为 CamelServlet。
测试代码:
def s = ctx.camelServlet.servlet
println "servletName == " + s.servletName // 应该是 "CamelServlet"
org.apache.camel.component.servlet.DefaultHttpRegistry.registries.each{
println "============" + it + "n" + it.value.consumers + "n" + it.value.providers
}
| Fields inherited from class | Fields |
|---|---|
class org.apache.camel.component.servlet.CamelHttpTransportServlet |
ASYNC_PARAM |
class org.apache.camel.http.common.CamelServlet |
ASYNC_PARAM |
| Constructor and description |
|---|
CamelServlet
(String servletName) |
| Type | Name and description |
|---|---|
void |
init(javax.servlet.ServletConfig config) |
| Methods inherited from class | Name |
|---|---|
class org.apache.camel.component.servlet.CamelHttpTransportServlet |
org.apache.camel.component.servlet.CamelHttpTransportServlet#isIgnoreDuplicateServletName(), org.apache.camel.component.servlet.CamelHttpTransportServlet#toString(), org.apache.camel.component.servlet.CamelHttpTransportServlet#init(javax.servlet.ServletConfig), org.apache.camel.component.servlet.CamelHttpTransportServlet#connect(org.apache.camel.http.common.HttpConsumer), org.apache.camel.component.servlet.CamelHttpTransportServlet#destroy(), org.apache.camel.component.servlet.CamelHttpTransportServlet#isAsync(), org.apache.camel.component.servlet.CamelHttpTransportServlet#getServletName(), org.apache.camel.component.servlet.CamelHttpTransportServlet#setServletName(String), org.apache.camel.component.servlet.CamelHttpTransportServlet#getServletResolveConsumerStrategy(), org.apache.camel.component.servlet.CamelHttpTransportServlet#getConsumers(), org.apache.camel.component.servlet.CamelHttpTransportServlet#setServletResolveConsumerStrategy(org.apache.camel.http.common.ServletResolveConsumerStrategy), org.apache.camel.component.servlet.CamelHttpTransportServlet#setAsync(boolean), org.apache.camel.component.servlet.CamelHttpTransportServlet#disconnect(org.apache.camel.http.common.HttpConsumer), org.apache.camel.component.servlet.CamelHttpTransportServlet#service(javax.servlet.ServletRequest, javax.servlet.ServletResponse), org.apache.camel.component.servlet.CamelHttpTransportServlet#getServletConfig(), org.apache.camel.component.servlet.CamelHttpTransportServlet#getServletInfo(), org.apache.camel.component.servlet.CamelHttpTransportServlet#getInitParameter(String), org.apache.camel.component.servlet.CamelHttpTransportServlet#getInitParameterNames(), org.apache.camel.component.servlet.CamelHttpTransportServlet#getServletContext(), org.apache.camel.component.servlet.CamelHttpTransportServlet#log(String, Throwable), org.apache.camel.component.servlet.CamelHttpTransportServlet#log(String), org.apache.camel.component.servlet.CamelHttpTransportServlet#init(), org.apache.camel.component.servlet.CamelHttpTransportServlet#wait(long, int), org.apache.camel.component.servlet.CamelHttpTransportServlet#wait(long), org.apache.camel.component.servlet.CamelHttpTransportServlet#wait(), org.apache.camel.component.servlet.CamelHttpTransportServlet#equals(Object), org.apache.camel.component.servlet.CamelHttpTransportServlet#hashCode(), org.apache.camel.component.servlet.CamelHttpTransportServlet#getClass(), org.apache.camel.component.servlet.CamelHttpTransportServlet#notify(), org.apache.camel.component.servlet.CamelHttpTransportServlet#notifyAll() |
class org.apache.camel.http.common.CamelServlet |
org.apache.camel.http.common.CamelServlet#isAsync(), org.apache.camel.http.common.CamelServlet#getServletName(), org.apache.camel.http.common.CamelServlet#setServletName(String), org.apache.camel.http.common.CamelServlet#getServletResolveConsumerStrategy(), org.apache.camel.http.common.CamelServlet#getConsumers(), org.apache.camel.http.common.CamelServlet#setServletResolveConsumerStrategy(org.apache.camel.http.common.ServletResolveConsumerStrategy), org.apache.camel.http.common.CamelServlet#setAsync(boolean), org.apache.camel.http.common.CamelServlet#init(javax.servlet.ServletConfig), org.apache.camel.http.common.CamelServlet#connect(org.apache.camel.http.common.HttpConsumer), org.apache.camel.http.common.CamelServlet#disconnect(org.apache.camel.http.common.HttpConsumer), org.apache.camel.http.common.CamelServlet#service(javax.servlet.ServletRequest, javax.servlet.ServletResponse), org.apache.camel.http.common.CamelServlet#getServletConfig(), org.apache.camel.http.common.CamelServlet#getServletInfo(), org.apache.camel.http.common.CamelServlet#getInitParameter(String), org.apache.camel.http.common.CamelServlet#getInitParameterNames(), org.apache.camel.http.common.CamelServlet#getServletContext(), org.apache.camel.http.common.CamelServlet#log(String, Throwable), org.apache.camel.http.common.CamelServlet#log(String), org.apache.camel.http.common.CamelServlet#init(), org.apache.camel.http.common.CamelServlet#destroy(), org.apache.camel.http.common.CamelServlet#wait(long, int), org.apache.camel.http.common.CamelServlet#wait(long), org.apache.camel.http.common.CamelServlet#wait(), org.apache.camel.http.common.CamelServlet#equals(Object), org.apache.camel.http.common.CamelServlet#toString(), org.apache.camel.http.common.CamelServlet#hashCode(), org.apache.camel.http.common.CamelServlet#getClass(), org.apache.camel.http.common.CamelServlet#notify(), org.apache.camel.http.common.CamelServlet#notifyAll() |
BROPEN Documentation, 2020-04-21 10:50