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

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

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

 

         通常我们的Webservice服务的发布地址都将是一个相对路径,在与Spring一起使用时我们需要引入Cxf配置Webserviceschema,如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,这要求我们实现自己的继承自CXFNonSpringServletServlet,然后重写其loadBus方法,最终需要达到的效果就是CXFNonSpringServlet使用的Bus与我们的发布Webservice时使用的Bus是同一个即可。这样当我们访问CXFNonSpringServlet请求某个Webservice时,CXFNonSpringServlet将自动根据请求的相对路径去寻找发布路径为其相对路径的Webservice

 

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>

 

参考文档

http://cxf.apache.org/docs/servlet-transport.html

 

(注:本文是基于Cxf2.7.6所写)

 

 

 

 

 

目录
相关文章
|
安全 应用服务中间件 数据安全/隐私保护
Web安全-WebService远程部署
Web安全-WebService远程部署
142 4
|
JSON 前端开发 JavaScript
|
分布式计算 并行计算 安全
在Python Web开发中,Python的全局解释器锁(Global Interpreter Lock,简称GIL)是一个核心概念,它直接影响了Python程序在多线程环境下的执行效率和性能表现
【6月更文挑战第30天】Python的GIL是CPython中的全局锁,限制了多线程并行执行,尤其是在多核CPU上。GIL确保同一时间仅有一个线程执行Python字节码,导致CPU密集型任务时多线程无法充分利用多核,反而可能因上下文切换降低性能。然而,I/O密集型任务仍能受益于线程交替执行。为利用多核,开发者常选择多进程、异步IO或使用不受GIL限制的Python实现。在Web开发中,理解GIL对于优化并发性能至关重要。
232 0
|
前端开发 API Docker
web前端开发项目走proxy代理后端接口,构建发布到生产等环境后,如何修改api接口
web前端开发项目走proxy代理后端接口,构建发布到生产等环境后,如何修改api接口
281 0
|
SQL 安全 数据库
Web安全漏洞专项靶场—SQL注入—docker环境—sqli-labs靶场—详细通关指南
Web安全漏洞专项靶场—SQL注入—docker环境—sqli-labs靶场—详细通关指南
1656 1
|
机器人 Shell 开发者
`roslibpy`是一个Python库,它允许非ROS(Robot Operating System)环境(如Web浏览器、移动应用等)与ROS环境进行交互。通过使用`roslibpy`,开发者可以编写Python代码来远程控制ROS节点,发布和订阅话题,以及调用服务。
`roslibpy`是一个Python库,它允许非ROS(Robot Operating System)环境(如Web浏览器、移动应用等)与ROS环境进行交互。通过使用`roslibpy`,开发者可以编写Python代码来远程控制ROS节点,发布和订阅话题,以及调用服务。
|
存储 安全 网络安全
【Azure 环境】使用Azure中的App Service部署Web应用,以Windows为主机系统是否可以启动防病毒,防恶意软件服务呢(Microsoft Antimalware)?
【Azure 环境】使用Azure中的App Service部署Web应用,以Windows为主机系统是否可以启动防病毒,防恶意软件服务呢(Microsoft Antimalware)?
174 0
|
前端开发 JavaScript
【Azure 环境】前端Web通过Azure AD获取Token时发生跨域问题(CORS Error)
【Azure 环境】前端Web通过Azure AD获取Token时发生跨域问题(CORS Error)
219 0
|
存储 Apache 文件存储
在Apache环境下为Web网站增设访问控制:实战指南
在Apache服务器上保护网站资源涉及启用访问控制模块(`mod_authz_core`和`mod_auth_basic`),在`.htaccess`或`httpd.conf`中设定权限,如限制对特定目录的访问。创建`.htpasswd`文件存储用户名和密码,并使用`htpasswd`工具管理用户。完成配置后重启Apache服务,访问受限目录时需提供有效的用户名和密码。对于高安全性需求,可考虑更复杂的认证方法。【6月更文挑战第20天】
843 4
|
安全 Ubuntu 应用服务中间件
NGINX环境下实现Web网站访问控制的实战指南
在NGINX中设置基于IP的访问控制可提升网站安全性。步骤包括安装NGINX、备份配置文件、编辑`/etc/nginx/sites-available/default`,添加`allow`和`deny`指令限制特定IP访问,如`allow 192.168.1.100; deny all;`,然后测试配置并重启服务。成功后,仅允许的IP能访问网站,否则会收到403错误。这为Web安全提供基础保障,还可扩展实现更多高级控制策略。【6月更文挑战第20天】
1246 3

热门文章

最新文章