Java WebService与Jetty一起工作,但与Tomcat不一起工作

Java WebService与Jetty一起工作,但与Tomcat不一起工作,java,web-services,cxf,tomcat6,jetty-8,Java,Web Services,Cxf,Tomcat6,Jetty 8,我此刻正把头撞在墙上。我使用CXF和Spring进行了一些开发,创建了一个Web服务。使用Jetty 8时一切都很好,但是当我尝试使用Tomcat 6运行它时,我甚至无法从请求中获取WSDL。详情如下: 我的Web服务界面: @WebService(name="AlertService") public interface AlertWebService { @WebMethod HandleAlertResponse openHandleAlert(@WebParam(nam

我此刻正把头撞在墙上。我使用CXF和Spring进行了一些开发,创建了一个Web服务。使用Jetty 8时一切都很好,但是当我尝试使用Tomcat 6运行它时,我甚至无法从请求中获取WSDL。详情如下:

我的Web服务界面:

@WebService(name="AlertService")
public interface AlertWebService {

    @WebMethod
    HandleAlertResponse openHandleAlert(@WebParam(name = "request") HandleAlertRequest request) throws ServiceException;
}
@WebService(endpointInterface = "c.h.g.p.service.ws.alert.AlertWebService", serviceName = "AlertService")
public class AlertWebServiceImpl implements AlertWebService {

    @Override
    public HandleAlertResponse openHandleAlert(HandleAlertRequest request) throws ServiceException {
        //Do some stuff
    }
<?xml version="1.0" encoding="UTF-8"?>
<web-app ...>   
  <display-name>Prime Service Webapp</display-name>

  <listener>
    <listener-class> org.springframework.web.context.ContextLoaderListener</listener-class>
  </listener>

  <filter>
    <filter-name>springSecurityFilterChain</filter-name>
    <filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>
  </filter>

  <filter-mapping>
    <filter-name>springSecurityFilterChain</filter-name>
    <url-pattern>/*</url-pattern>
  </filter-mapping>

  <servlet>
    <servlet-name>CXFServlet</servlet-name>
    <servlet-class>org.apache.cxf.transport.servlet.CXFServlet</servlet-class>
    <load-on-startup>1</load-on-startup>
  </servlet>

  <servlet-mapping>
    <servlet-name>CXFServlet</servlet-name>
    <url-pattern>/prime-service-webapp/*</url-pattern>
  </servlet-mapping>

</web-app>
我的Web服务impl:

@WebService(name="AlertService")
public interface AlertWebService {

    @WebMethod
    HandleAlertResponse openHandleAlert(@WebParam(name = "request") HandleAlertRequest request) throws ServiceException;
}
@WebService(endpointInterface = "c.h.g.p.service.ws.alert.AlertWebService", serviceName = "AlertService")
public class AlertWebServiceImpl implements AlertWebService {

    @Override
    public HandleAlertResponse openHandleAlert(HandleAlertRequest request) throws ServiceException {
        //Do some stuff
    }
<?xml version="1.0" encoding="UTF-8"?>
<web-app ...>   
  <display-name>Prime Service Webapp</display-name>

  <listener>
    <listener-class> org.springframework.web.context.ContextLoaderListener</listener-class>
  </listener>

  <filter>
    <filter-name>springSecurityFilterChain</filter-name>
    <filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>
  </filter>

  <filter-mapping>
    <filter-name>springSecurityFilterChain</filter-name>
    <url-pattern>/*</url-pattern>
  </filter-mapping>

  <servlet>
    <servlet-name>CXFServlet</servlet-name>
    <servlet-class>org.apache.cxf.transport.servlet.CXFServlet</servlet-class>
    <load-on-startup>1</load-on-startup>
  </servlet>

  <servlet-mapping>
    <servlet-name>CXFServlet</servlet-name>
    <url-pattern>/prime-service-webapp/*</url-pattern>
  </servlet-mapping>

</web-app>
myweb.xml:

@WebService(name="AlertService")
public interface AlertWebService {

    @WebMethod
    HandleAlertResponse openHandleAlert(@WebParam(name = "request") HandleAlertRequest request) throws ServiceException;
}
@WebService(endpointInterface = "c.h.g.p.service.ws.alert.AlertWebService", serviceName = "AlertService")
public class AlertWebServiceImpl implements AlertWebService {

    @Override
    public HandleAlertResponse openHandleAlert(HandleAlertRequest request) throws ServiceException {
        //Do some stuff
    }
<?xml version="1.0" encoding="UTF-8"?>
<web-app ...>   
  <display-name>Prime Service Webapp</display-name>

  <listener>
    <listener-class> org.springframework.web.context.ContextLoaderListener</listener-class>
  </listener>

  <filter>
    <filter-name>springSecurityFilterChain</filter-name>
    <filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>
  </filter>

  <filter-mapping>
    <filter-name>springSecurityFilterChain</filter-name>
    <url-pattern>/*</url-pattern>
  </filter-mapping>

  <servlet>
    <servlet-name>CXFServlet</servlet-name>
    <servlet-class>org.apache.cxf.transport.servlet.CXFServlet</servlet-class>
    <load-on-startup>1</load-on-startup>
  </servlet>

  <servlet-mapping>
    <servlet-name>CXFServlet</servlet-name>
    <url-pattern>/prime-service-webapp/*</url-pattern>
  </servlet-mapping>

</web-app>
我已经更改了tomcat配置以查看端口8090。我只是将名为prime service webapp的war放入tomcat的webapps目录中。将index.html文件添加到prime service webapp目录中似乎也可以解决此问题。但我根本无法获取wsdl


任何想法-让我知道。我是否需要更改tomcat 6服务器配置以使其正常工作?

我承认我对jetty一无所知,但在tomcat中,按照您的说法,您需要使用以下URL:

http://localhost:8090/prime-service-webapp/prime-service-webapp/AlertService?wsdl
试试看。原因是tomcat默认将war名称指定为上下文根,并且您已经指示您的CXFServlet侦听

<url-pattern>/prime-service-webapp/*</url-pattern>
/prime服务webapp/*

这意味着上下文根目录下的另一个级别(即使是相同的)

太好了-就是这样!但我如何告诉tomcat我实际上只想在url中使用一个“prime service webapp”?无需修改web.xml,它可以很好地与Jetty配合使用。我需要与两个应用程序服务器兼容。我从未尝试过tomcat:S。根据本文档,您可能需要在部署后(或在其管理控制台中)对服务器的配置文件进行一些修改