Java 在Eclipse Virgo中使用restlet
我正在尝试将restlet集成到一个使用EclipseVirgo作为应用服务器的应用程序中。由于Virgo基于OSGi,我不得不使用Java 在Eclipse Virgo中使用restlet,java,spring,jakarta-ee,restlet,eclipse-virgo,Java,Spring,Jakarta Ee,Restlet,Eclipse Virgo,我正在尝试将restlet集成到一个使用EclipseVirgo作为应用服务器的应用程序中。由于Virgo基于OSGi,我不得不使用org.restlet.OSGi库和不依赖Java1.7的最新版本(Restlet2.2.3),因为最新的Virgo版本抱怨捆绑包依赖Java1.7 我试图让restlet使用EclipseVirgoWeb服务器来交付RESTAPI,但我所尝试的似乎都不起作用。当然,我可以在与EclipseVirgo不同的端口上启动restlet自己的web服务器,但是我没有成功地
org.restlet.OSGi
库和不依赖Java1.7的最新版本(Restlet2.2.3),因为最新的Virgo版本抱怨捆绑包依赖Java1.7
我试图让restlet使用EclipseVirgoWeb服务器来交付RESTAPI,但我所尝试的似乎都不起作用。当然,我可以在与EclipseVirgo不同的端口上启动restlet自己的web服务器,但是我没有成功地使用它的web服务器。有可能吗
更新
故事中还涉及到春天,所以我认为这会使事情变得更加有趣。与Spring相关的配置如下所示:
<context-param>
<param-name>contextClass</param-name>
<param-value>org.eclipse.virgo.web.dm.ServerOsgiBundleXmlWebApplicationContext</param-value>
</context-param>
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/spring/*.xml</param-value>
</context-param>
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<servlet>
<servlet-name>springdispatcher</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextClass</param-name>
<param-value>org.eclipse.virgo.web.dm.ServerOsgiBundleXmlWebApplicationContext</param-value>
</init-param>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/spring/*.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>springdispatcher</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
实际上,在osgi容器中创建work restlet不需要扩展名
org.restlet.ext.osgi
。事实上,在OSGi版本中,所有Restlet JAR都包含有效的清单文件(甚至在版本2.2之前)
Virgo支持Web捆绑包,因此您可以利用扩展org.Restlet.ext.servlet
将Restlet应用程序嵌入其中。有关详细信息,请查看以下链接:
否则,我想了解更多关于在这种环境下尝试使用Restlet时出现的错误的详细信息
编辑(在问题中添加的新元素之后)
您应该为Spring配置restletservlet。这个servlet将替换Spring本身的servlet(DispatcherServlet
)。侦听器ContextLoaderListener
必须保留,因为它用于管理Web捆绑包中的Spring应用程序上下文
以下是此servlet的配置示例:
<servlet>
<servlet-name>SpringRestletServlet</servlet-name>
<servlet-class>org.restlet.ext.spring.SpringServerServlet</servlet-class>
<init-param>
<param-name>org.restlet.component</param-name>
<param-value>myComponent</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>tracker</servlet-name>
<url-pattern>/*</url-pattern>
</servlet-mapping>
谢谢你的解释。我遵循了教程,但没有多大成功。这可能是因为我必须让Spring也能正常工作。我更新了这个问题,你能看一下吗?我更新了我的答案来描述如何在你的上下文中配置Restlet。希望它能解决你的问题!我得到了这样一个结果:由java.lang.ClassNotFoundException引起:net.sf.cglib.proxy.Factory,不管我怎么做。我知道这是一个OSGi的东西,但无论我做了什么使它看到cglib依赖项,我都失败了。你能提供完整的异常堆栈来查看它从何处抛出吗?谢谢我更新了问题,因为我无法将整个stacktrace放在评论中。
<servlet>
<servlet-name>SpringRestletServlet</servlet-name>
<servlet-class>org.restlet.ext.spring.SpringServerServlet</servlet-class>
<init-param>
<param-name>org.restlet.component</param-name>
<param-value>myComponent</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>tracker</servlet-name>
<url-pattern>/*</url-pattern>
</servlet-mapping>
<bean id="myComponent" class="org.restlet.ext.spring.SpringComponent">
<property name="defaultTarget" ref="router" />
</bean>
<bean name="router" class="org.restlet.ext.spring.SpringRouter">
<property name="attachments">
<map>
<entry key="/ping">
<bean class="org.restlet.ext.spring.SpringFinder">
<lookup-method name="create" bean="pingServerResource" />
</bean>
</entry>
<entry key="/dir" value-ref="staticsDirectory" />
</map>
</property>
</bean>
<bean id="pingServerResource" class="test.TestServerResource"></bean>