【问题标题】:Deploy JAX-WS on Karaf as an OSGi bundle在 Karaf 上部署 JAX-WS 作为 OSGi 包
【发布时间】:2015-12-13 23:32:27
【问题描述】:

我尝试在 Karaf 上部署一个简单的 JAX-WS Web 服务作为 OSGi 包。 将 web 服务导出为 War 文件并部署到 Karaf 的 /deploy 文件夹后,我发现 http://localhost:8181/HelloWebService/helloWebService 无法访问它

我的代码很简单,我只使用这个https://github.com/yngwietiger/HelloWebService.git

web.xml 如下:

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee"
     xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee         http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
     id="WebApp_ID" version="2.5">

<display-name>jaxwsExample</display-name>

<listener>
    <listener-class>com.sun.xml.ws.transport.http.servlet.WSServletContextListener</listener-class>
</listener>

<servlet>
    <servlet-name>helloWebService</servlet-name>
    <servlet-class>com.sun.xml.ws.transport.http.servlet.WSServlet</servlet-class>
    <load-on-startup>1</load-on-startup>
</servlet>

<servlet-mapping>
    <servlet-name>helloWebService</servlet-name>
    <url-pattern>/helloWebService</url-pattern>
</servlet-mapping>

<servlet>
    <servlet-name>myservlet</servlet-name>
    <servlet-class>com.webservices.demo.MyServlet</servlet-class>
    <load-on-startup>1</load-on-startup>
</servlet>

<servlet-mapping>
    <servlet-name>myservlet</servlet-name>
    <url-pattern>/myservlet</url-pattern>
</servlet-mapping>

<session-config>
    <session-timeout>120</session-timeout>
</session-config>

日志是:

2015-09-17 14:59:59,712 | INFO  | raf-4.0.1/deploy | fileinstall                      | 4 - org.apache.felix.fileinstall - 3.5.0 | Updating bundle HelloWebService / 0.0.0
2015-09-17 14:59:59,712 | INFO  | raf-4.0.1/deploy | Activator                        | 89 - org.ops4j.pax.web.pax-web-extender-war - 4.2.0 | Destroying extension for bundle HelloWebService
2015-09-17 14:59:59,716 | INFO  | raf-4.0.1/deploy | HttpServiceFactoryImpl           | 93 - org.ops4j.pax.web.pax-web-runtime - 4.2.0 | Unbinding bundle: [HelloWebService [231]]
2015-09-17 15:00:02,251 | INFO  | raf-4.0.1/deploy | HttpServiceFactoryImpl           | 93 - org.ops4j.pax.web.pax-web-runtime - 4.2.0 | Binding bundle: [HelloWebService [231]] to http service
2015-09-17 15:00:02,254 | INFO  | raf-4.0.1/deploy | fileinstall                      | 4 - org.apache.felix.fileinstall - 3.5.0 | Started bundle: webbundle:file:/E:/Software/apache-karaf-4.0.1/deploy/HelloWebService.war?Web-ContextPath=HelloWebService&Bundle-SymbolicName=HelloWebService&Bundle-Version=0.0.0
2015-09-17 15:00:02,258 | INFO  | pool-24-thread-3 | JettyServerWrapper               | 91 - org.ops4j.pax.web.pax-web-jetty - 4.2.0 | will add org.eclipse.jetty.websocket.jsr356.server.deploy.WebSocketServerContainerInitializer to ServletContainerInitializers
2015-09-17 15:00:09,800 | INFO  | pool-24-thread-3 | JettyServerWrapper               | 91 - org.ops4j.pax.web.pax-web-jetty - 4.2.0 | added ServletContainerInitializer: org.eclipse.jetty.websocket.jsr356.server.deploy.WebSocketServerContainerInitializer
2015-09-17 15:00:09,800 | INFO  | pool-24-thread-3 | JettyServerWrapper               | 91 - org.ops4j.pax.web.pax-web-jetty - 4.2.0 | will add org.apache.jasper.servlet.JasperInitializer to ServletContainerInitializers
2015-09-17 15:00:09,801 | INFO  | pool-24-thread-3 | JettyServerWrapper               | 91 - org.ops4j.pax.web.pax-web-jetty - 4.2.0 | Skipt org.apache.jasper.servlet.JasperInitializer, because specialized handler will be present
2015-09-17 15:00:09,806 | INFO  | pool-24-thread-3 | HttpServiceContext               | 91 - org.ops4j.pax.web.pax-web-jetty - 4.2.0 | registering context WebAppHttpContext{HelloWebService - 231}, with context-name: HelloWebService

通过使用 web:list,它显示 231 捆绑包处于活动状态并一直在部署。

================================================ ========================

如何使用 OSGi 部署标准的 JAX-WS Web 服务(不是 JXC,只是简单的 JAX-WS Web 服务)?
通过使用 Karaf 或构建 Jetty OSGi 环境或其他东西......

【问题讨论】:

    标签: osgi jax-ws karaf


    【解决方案1】:

    您提到的示例使用 maven。它构建不包含正确 OSGi 清单的通用 WAR 文件,并且不生成任何与 JaxWS 相关的内容。 为了创建公开 Web 服务的 OSGi WAB(Web 存档包),您必须使用适当的 maven 插件,例如: 用于 WSDL 生成的 jaxws-maven-plugin; maven-war-plugin 与 maven-bundle-plugin 一起构建 WAB。 实际上,maven-bundle-plugin 可以自己构建 WAB。

    【讨论】:

    • 谢谢。但是根据Karaf deployerKaraf webcontainer的文档,它说安装了war功能,我们可以简单地使用command安装WAR: bundle: install -s "webbundle:file:/E:/Software/apache- karaf-4.0.1/deploy/HelloWebService.war?Web-ContextPath=HelloWebService&Bundle-SymbolicName=HelloWebService&Bundle-Version=0.0.0"
    • 确实如此,但此解决方案将依赖于 osgi 容器。在任何情况下,您都必须生成 Jax-WS 相关信息。
    • 您的意思是 web.xml 包含 com.sun.xml.ws.transport.http.servlet.WSServletContextListener 和 sun-jaxws.xml?我已经把这些放进去了。
    • 我写了一个简单的JAX-WS webservice,并将其导出到war文件中,它在Tomcat中运行良好。然后我想用 commond 包将它部署到 karaf: install -s "webbundle:file:/D:/Software/webTest.war?Web-C‌​ontextPath=/webTest&Bundle-SymbolicName=/webTest&Bundle-Version=0.0‌​ .0”。但是效果不好。
    猜你喜欢
    • 2012-06-12
    • 2019-05-22
    • 1970-01-01
    • 2010-12-15
    • 2010-12-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多