• Web环境使用相对路径发布Webservice


    常我们的Webservice服务的发布地址都将是一个相对路径,在与Spring一起使用时我们需要引入Cxf配置Webservice的schema,如jaxws,用以定义对应的Webservice。

    <?xml version="1.0" encoding="UTF-8"?>

    <beans xmlns="http://www.springframework.org/schema/beans"

          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

          xmlns:jaxws="http://cxf.apache.org/jaxws"

          xsi:schemaLocation="

             http://www.springframework.org/schema/beans

             http://www.springframework.org/schema/beans/spring-beans.xsd

             http://cxf.apache.org/jaxws

             http://cxf.apache.org/schemas/jaxws.xsd">

       <bean id="helloWorld" class="com.elim.test.cxf.service.HelloWorldServiceImpl"/>

       <!-- ID可以加斜杠也可以不加 -->

       <jaxws:server id="/helloWorld" serviceBean="#helloWorld" serviceClass="com.elim.test.cxf.service.HelloWorldService" />

    </beans>

             然后我们需要定义一个CXFServlet,用以接收对应的Webservice请求,如下所示。

    <?xml version="1.0" encoding="UTF-8"?>

    <web-app 

            version="3.0" 

            xmlns="http://java.sun.com/xml/ns/javaee" 

            xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 

            xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd">

           

       <context-param>

          <param-name>contextConfigLocation</param-name>

          <param-value>classpath:webservices.xml</param-value>

       </context-param>

      

       <listener>

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

       </listener>

      

       <servlet>

          <servlet-name>CxfServlet</servlet-name>

          <servlet-class>org.apache.cxf.transport.servlet.CXFServlet</servlet-class>

       </servlet>

      

       <servlet-mapping>

          <servlet-name>CxfServlet</servlet-name>

          <url-pattern>/sys/service/*</url-pattern>

       </servlet-mapping>

      

    </web-app>

             这样如果我们想访问HelloWorldService这个Webservice就可以通过相对于当前工程发布路径的/sys/service/helloWorld来访问了。

             但是如果我们的工程没有使用Spring,但是我们也想把Webservice发布为工程的某一个路径的相对路径怎么办?Cxf也为我们提供了相应的支持,这比使用Spring时的CXFServlet要麻烦一点。Cxf为我们提供了一个CXFNonSpringServlet,这要求我们实现自己的继承自CXFNonSpringServlet的Servlet,然后重写其loadBus方法,最终需要达到的效果就是CXFNonSpringServlet使用的Bus与我们的发布Webservice时使用的Bus是同一个即可。这样当我们访问CXFNonSpringServlet请求某个Webservice时,CXFNonSpringServlet将自动根据请求的相对路径去寻找发布路径为其相对路径的Webservice。

     下载地址java后台框架 springmvc mybaits 集代码生成器 

    publicclass WebserviceServlet extends CXFNonSpringServlet {

       /**

        *

        */

       private static final longserialVersionUID = 3919868434043901738L;

       @Override

       protected void loadBus(ServletConfig sc) {

          super.loadBus(sc);

          //获取当前CXFNonSpringServlet使用的Bus,然后利用该Bus来发布服务

          Bus bus = this.getBus();

          JaxWsServerFactoryBean jsFactoryBean = new JaxWsServerFactoryBean();

          jsFactoryBean.setBus(bus);

          //该路径是相对于当前CXFNonSpringServlet匹配的路径的,也可以加斜杠

          jsFactoryBean.setAddress("helloWorld");

          jsFactoryBean.setServiceClass(HelloWorldService.class);

          jsFactoryBean.setServiceBean(new HelloWorldServiceImpl());

          jsFactoryBean.create();

       }

      

    }

       这时我们的web.xml需要定义我们自己的CXFNonSpringServlet,即:

    <?xml version="1.0" encoding="UTF-8"?>

    <web-app 

            version="3.0" 

            xmlns="http://java.sun.com/xml/ns/javaee" 

            xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 

            xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd">

           

       <servlet>

          <servlet-name>CxfServlet</servlet-name>

          <servlet-class>com.elim.test.cxf.servlet.WebserviceServlet</servlet-class>

          <load-on-startup>1</load-on-startup>

       </servlet>

      

       <servlet-mapping>

          <servlet-name>CxfServlet</servlet-name>

          <url-pattern>/sys/service/*</url-pattern>

       </servlet-mapping>

      

    </web-app>

  • 相关阅读:
    DP实验
    Linux shell学习
    线性排序算法-计数排序
    算法笔试题练习
    堆排序
    node.js初识
    linux下vim命令详解
    html5学习笔记
    有趣的参数收集
    算法学习-归并排序
  • 原文地址:https://www.cnblogs.com/tianyuxinchuan/p/5017282.html
Copyright © 2020-2023  润新知