2011-06-03 71 views
2

我試圖運行apache cxf端點在與jetty 7春分osgi環境中。我需要端點在地址http://x.x.x.x:8080/ws/endpoint1上有靜態資源根路徑http://x.x.x.x:8080/ *。Apache CXF +資源處理程序與嵌​​入式碼頭在osgi與春天dm

我有一個專用包,用於此目的包含cxf庫。 Spring動態模塊是我的目標平臺的一部分。

經過一番研究,我嘗試在我的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> 

我的web服務端點都被定義爲:

<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下發布的。沒有警告,沒有例外。

當我的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服務工作正常,但靜態ressources沒有提供任何更多。

是否可以用這樣的配置將端點發布到具有相對地址的正在運行的碼頭?還是我完全錯了?我在網上找到的大多數例子都使用了web.xml,但我沒有使用像tomcat這樣的應用服務器,並且需要應用程序成爲獨立的eclipse應用程序。

花費整個最後兩晚在此,任何幫助是高度讚賞。

親切的問候, ONNO

回答