我正在尝试创建一个在Glassfish 4上部署的webapp。 以下是例子 Using the Restlet servlet within a webapp
pom.xml
web.xml
我的问题是它在glassfish下不能作为webapp运行。使用mvn jetty:run
它运行正常,但不是玻璃鱼。
我怀疑camel-restlet和org.restlet.jee.ext.sprint之间存在Spring版本冲突。
camel-restlet v1.13.0+
取决于spring v3.2.8.RELEASE
org.restlet.jee.ext.sprint v2.2.2
取决于spring v3.2.6.RELEASE
早期版本有类似的差异,如
camel-restlet v1.12.3+
取决于spring v3.2.5.RELEASE
所以我找不到彼此匹配的camel-restlet
和ext.spring
版本。
如何让camel.apache.org的示例在glassfish下工作。
P.S。谷歌和合作。那已经做到了。来自github和其他资源的例子已经尝试过。
因此。这是来自glassfish中运行的webapp的server.log的输出。正如我所说,相同的代码在码头运行良好。
SpringCamelContext DEBUG Route: RS_RestletDemo >>> EventDrivenConsumerRoute[Endpoint[/demo/(id)?restletMethods=GET] -> Channel[Transform(Simple: Request type : ${header.CamelHttpMethod} and ID : ${header.id})]]
SpringCamelContext DEBUG Starting consumer (order: 1001) on route: RS_RestletDemo
DefaultManagementAgent DEBUG Registered MBean with ObjectName: org.apache.camel:context=camel-1-1,type=consumers,name=RestletConsumer(0x40cb4833)
RestletConsumer DEBUG Starting consumer: Consumer[/demo/(id)?restletMethods=GET]
RestletComponent DEBUG Setting parameters: [] to server: org.restlet.Server@8528a1b
RestletComponent DEBUG Added server: null:80
RestletComponent DEBUG Added method based router: org.apache.camel.component.restlet.MethodBasedRouter@62e8f6e1
RestletComponent DEBUG Attached restlet uriPattern: /demo/{id} method: GET
RestletComponent DEBUG Attached methodRouter uriPattern: /demo/{id}
RestletComponent DEBUG Started methodRouter uriPattern: /demo/{id}
SpringCamelContext INFO Route: RS_RestletDemo started and consuming from: Endpoint[/demo/(id)?restletMethods=GET]
GET http://localhost:8080/camel-restlet/rs/demo/123
HTTP状态500 - 内部服务器错误
javax.servlet.ServletException: Servlet.init() for servlet RestletServlet threw exception
root cause
java.lang.VerifyError: Bad type on operand stack
Exception Details:
Location:
org/restlet/ext/servlet/internal/ServletWarClient.<init>(Lorg/restlet/Context;Ljavax/servlet/ServletContext;)V @35: putfield
Reason:
Type 'org/restlet/ext/servlet/internal/ServletWarClientHelper' (current frame, stack[1]) is not assignable to 'org/restlet/engine/connector/ClientHelper'
Current Frame:
bci: @35
flags: { }
locals: { 'org/restlet/ext/servlet/internal/ServletWarClient', 'org/restlet/Context', 'javax/servlet/ServletContext' }
stack: { 'org/restlet/ext/servlet/internal/ServletWarClient', 'org/restlet/ext/servlet/internal/ServletWarClientHelper' }
Bytecode:
0000000: 2a2b b600 0101 c000 02b7 0003 2ab6 0004
0000010: b200 05b9 0006 0200 572a bb00 0759 2a2c
0000020: b700 08b5 0009 b1
你能告诉我我做错了什么吗?
我尝试覆盖spring版本,不包括pom.xml等中的expring依赖项。没有运气。
更新即可。 固定
针对遇到类似问题的人的说明
我修好了
- 使用org.restlet.ext.spring v2.1.7
和camel-restlet v2.13.2
- 将org.restlet.ext.spring
移至顶部
- 从pom.xml
删除所有Spring依赖项
移动
现在它在war
中的glassfish 3,4
和独立的jetty
工作
可以在github