Apache CXF +使用 spring dm 在 osgi 中嵌入 jetty 的资源处理程序

发布于 2024-11-13 08:36:28 字数 3976 浏览 1 评论 0原文

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

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

经过一番研究后,我尝试在 Spring 应用程序上下文中启动 jetty Web 服务器。

<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>

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

当我将 Web 服务的地址更改为其完整 url 时,

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

Web 服务工作正常,但静态资源不再可用。

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

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

亲切的问候, 大野

I'm trying to run an apache cxf endpoint in an equinox osgi environment with jetty 7. I need the endpoint to be on address http://x.x.x.x:8080/ws/endpoint1 and have static resources on the root path http://x.x.x.x:8080/*.

I have a dedicated bundle for this purpose containing the cxf libraries. Spring dynamic modules are part of my target platform.

After some research I tried to start the jetty webserver in my spring application context.

<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>

My WebService Endpoint is declared with:

<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>

Unfortunatly this is not working. I can reach the static resources, but not the webservice.
The log says, the WebService is published under address /endpoint1. No warnings, no exceptions.

When I change the address of the webservice to its full url

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

the webservice works fine, but the static ressources are not available any more.

Is it possible with a configuration like this to publish an endpoint to a running jetty with relative address? Or am I totally wrong? Most examples I found on the web use a web.xml, but I'm not working with an application server like tomcat and need the application to be a standalone eclipse app.

Spend the whole last two nights on this, any help is highly appreciated.

Kind regards,
Onno

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

请持续率性 2024-11-20 08:36:28

这里有很多样品。你应该能够找到你想要的东西

http://svn.apache.org/repos/asf/cxf/branches/2.4.x-fixes/distribution/src/main/release/samples

There are sooo many samples here. U shud be able to find what u r looking for

http://svn.apache.org/repos/asf/cxf/branches/2.4.x-fixes/distribution/src/main/release/samples

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文