Apache CXF +资源处理程序,带有spring dm的osgi中的嵌入式jetty

时间:2011-06-03 11:39:40

标签: web-services spring jetty osgi cxf

我正在尝试使用jetty 7在equinox osgi环境中运行apache cxf端点。我需要端点位于地址http://x.x.x.x:8080/ws/endpoint1并且在根路径http://x.x.x.x:8080/ *上具有静态资源。

我有一个专用的包,用于包含cxf库。 Spring动态模块是我的目标平台的一部分。

经过一番研究后,我尝试在春季应用程序环境中启动jetty webserver。

<bean id="Server" class="org.eclipse.jetty.server.Server"
    init-method="start" destroy-method="stop">

    <property name="connectors">
        <list>
            <bean id="Connector" class="org.eclipse.jetty.server.nio.SelectChannelConnector">
                <property name="port" value="8080" />
            </bean>
        </list>
    </property>

    <property name="handler">
        <bean id="handlers" class="org.eclipse.jetty.server.handler.HandlerList">
            <property name="handlers">
                <list>
                    <bean class="org.eclipse.jetty.server.handler.ResourceHandler">
                        <property name="directoriesListed" value="true" />
                        <property name="welcomeFiles">
                            <list>
                                <value>index.html</value>
                            </list>
                        </property>
                        <property name="resourceBase" value="./someDir" />
                    </bean>
                    <ref bean="web-service-cxf" />
                    <bean class="org.eclipse.jetty.server.handler.DefaultHandler" />
                </list>
            </property>
        </bean>
    </property>
</bean>



<bean name="web-service-cxf" class="org.eclipse.jetty.servlet.ServletContextHandler">
    <property name="contextPath" value="/ws" />
    <property name="handler">
        <bean class="org.eclipse.jetty.servlet.ServletHandler">
            <property name="servlets">
                <list>
                    <bean class="org.eclipse.jetty.servlet.ServletHolder">
                        <property name="name" value="cxf-servlet-holder" />
                        <property name="servlet">
                            <bean class="org.apache.cxf.transport.servlet.CXFServlet">
                            </bean>
                        </property>
                    </bean>
                </list>
            </property>
            <property name="servletMappings">
                <list>
                    <bean class="org.eclipse.jetty.servlet.ServletMapping">
                        <property name="servletName" value="cxf-servlet-holder" />
                        <property name="pathSpec" value="/*" />
                    </bean>
                </list>
            </property>
        </bean>
    </property>
</bean>

我的WebService端点声明为:

<import resource="classpath:META-INF/cxf/cxf.xml" />
<import resource="classpath:META-INF/cxf/cxf-servlet.xml" />

<bean id="someService" class="abc.xyz.SomeClass" />
<jaxws:endpoint id="endpointId" implementor="#someBean"
    address="/endpoint1">
</jaxws:endpoint>

不幸的是,这不起作用。我可以访问静态资源,但不能访问Web服务。 日志说,WebService是在address / endpoint1下发布的。没有警告,没有例外。

当我将网络服务的地址更改为完整网址时

<bean id="someService" class="abc.xyz.SomeClass" />
<jaxws:endpoint id="endpointId" implementor="#someBean"
    address="http://x.x.x.x:8080/ws/endpoint1">
</jaxws:endpoint>

webservice工作正常,但静态资源不再可用。

使用这样的配置是否可以将端点发布到具有相对地址的正在运行的码头?或者我完全错了?我在网上找到的大多数例子都使用了web.xml,但是我没有使用像tomcat这样的应用服务器,需要将应用程序作为一个独立的eclipse应用程序。

花了整整两个晚上,非常感谢任何帮助。

亲切的问候, ONNO

1 个答案:

答案 0 :(得分:0)