Web Service (二) CXF自动发布Web Service(No Spring)

Web Service实现目前流行的框架主要有两种,cxf和axis这两个框架,下面是这两个框架的优缺点,我们这个项目中使用的是cxf这个框架,首先看一下没有集成spring的时候是怎么实现远程调用的。

Axis与Cxf比较

在SOA领域,我们认为Web Service是SOA体系的构建单元(building block)。这两个框架 都是从已有的开源项目发展起来的。这两个框架哪一个更好一些呢?

通过一个比较矩阵来比较Axis2和CXF变得有现实的意义。最主要的区别在以下几个方面:

1.CXF支持 WS-Addressing,WS-Policy, WS-RM, WS-Security和WS-I Basic Profile。Axis2不支持WS-Policy,但是承诺在下面的版本支持。

2. CXF可以很好支持Spring。Axis2不能,这也是我们这个项目中为什么选择cxf来实现web service功能,我们后台使用的是Spring需要同spring集成。

3. AXIS2支持更广泛的数据并对,如XMLBeans,JiBX,JaxMe和JaxBRI和它自定义的数据绑定ADB。

4. Axis2支持多语言-除了Java,他还支持C/C++版本。

CXF发布Web Service实例

1.项目结构

2.接口以及实现类

package com.test.webservice;

public interface IHelloWorld {
	public String sayHello(String username);
}
package com.test.webservice;

public class HelloWorldImpl implements IHelloWorld {

	@Override
	public String sayHello(String username) {

		return username+"lilongsheng";
	}

}

3.Servlet过滤器

package com.test.webservice;

import javax.servlet.ServletConfig;

import org.apache.cxf.Bus;
import org.apache.cxf.BusFactory;
import org.apache.cxf.frontend.ServerFactoryBean;
import org.apache.cxf.transport.servlet.CXFNonSpringServlet;

public class WebServlet extends CXFNonSpringServlet{

	/**
	 *
	 */
	private static final long serialVersionUID = -4585672797532240291L;

	@Override
	protected void loadBus(ServletConfig sc) {
		super.loadBus(sc);

      //全局配置
      Bus bus = getBus();
      //使用全局配置
      BusFactory.setDefaultBus(bus);
      //接口实现类
      HelloWorldImpl helloWorld = new HelloWorldImpl();
      //Web server工厂
      ServerFactoryBean serverFactoryBean = new ServerFactoryBean();
      //设置服务接口类
      serverFactoryBean.setServiceClass(IHelloWorld.class);
      //服务请求路径
      serverFactoryBean.setAddress("/helloWorld");
      //设置服务实现类
      serverFactoryBean.setServiceBean(helloWorld);
      serverFactoryBean.create();  

	}

}

在这个过滤器中设置了指定哪一个类或者接口可以发布成Web Service方式访问,接口和实现类都设置进入了服务工厂bean里面,调用工厂的创建方法可以创建出WebService对象。

4.web.xml文件配置

<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
    id="WebApp_ID" version="3.0">
    <welcome-file-list>
        <welcome-file>index.html</welcome-file>
        <welcome-file>index.htm</welcome-file>
        <welcome-file>index.jsp</welcome-file>
        <welcome-file>default.html</welcome-file>
        <welcome-file>default.htm</welcome-file>
        <welcome-file>default.jsp</welcome-file>
    </welcome-file-list>
    <display-name>Web_Service_No-Spring</display-name>  

    <servlet>
        <servlet-name>CXFServlet</servlet-name>
        <servlet-class>com.test.webservice.WebServlet</servlet-class>
        <load-on-startup>1</load-on-startup>
    </servlet>
    <servlet-mapping>
        <servlet-name>CXFServlet</servlet-name>
        <url-pattern>/ws/*</url-pattern>
    </servlet-mapping>
</web-app>

5.测试是否成功,在浏览器中输入如下地址:http://localhost:8082/Web_Service_No-Spring/ws,出现如下信息

说明发布Web service接口成功。

浏览器输入:http://localhost:8082/Web_Service_No-Spring/ws/helloWorld?wsdl,将出现配置文件

<wsdl:definitions xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:tns="http://webservice.test.com/" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:ns1="http://schemas.xmlsoap.org/soap/http" name="IHelloWorld" targetNamespace="http://webservice.test.com/">
<wsdl:types>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:tns="http://webservice.test.com/" attributeFormDefault="unqualified" elementFormDefault="qualified" targetNamespace="http://webservice.test.com/">
<xsd:element name="sayHello" type="tns:sayHello"/>
<xsd:complexType name="sayHello">
<xsd:sequence/>
</xsd:complexType>
<xsd:element name="sayHelloResponse" type="tns:sayHelloResponse"/>
<xsd:complexType name="sayHelloResponse">
<xsd:sequence>
<xsd:element minOccurs="0" name="return" type="xsd:string"/>
</xsd:sequence>
</xsd:complexType>
</xsd:schema>
</wsdl:types>
<wsdl:message name="sayHelloResponse">
<wsdl:part element="tns:sayHelloResponse" name="parameters"></wsdl:part>
………………………………………………………………………………………………………………
………………………………………………………………………………………………………………

6.客户端测试类

public class testClient {
	public static void main(String[] args) {
        JaxWsDynamicClientFactory dcf = JaxWsDynamicClientFactory.newInstance();
        org.apache.cxf.endpoint.Client client = dcf.createClient("http://localhost:8082/Web_Service_No-Spring/ws/helloWorld?wsdl");
        Object[] objects;
        try {
            objects = client.invoke("sayHello");
            //输出调用结果
            System.out.println(objects[0].toString());
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

至此通过cxf自动发布Web Service既可以完成。这种方式在容器启动的时候发布好的,可以将整个接口或类发布出去,没有具体知道哪一个方法,显然不够灵活,下一篇介绍cxf手动配置类、方法发布成Web Service,需要哪些方法就可以发布哪些方法灵活一些。

Axis2允许自己作为独立的应用来发布Web Service,并提供了大量的功能和一个很好的模型,这个模型可以通过它本身的架构(modular architecture)不断添加新的功能。有些开发人员认为这种方式对于他们的需求太过于繁琐。这些开发人员会更喜欢CXF。

Axis2出现的时间较早,CXF的追赶速度快。我的建议是:如果你需要多语言的支持,你应该选择AXIS2。如果你需要把你的实现侧重JAVA并希望和Spring集成,CXF就是更好的选择,特别是把你的Web Service嵌入其他的程序中。比如将一个项目中某些类发布成Web Service方式。

时间: 2024-10-07 05:02:32

Web Service (二) CXF自动发布Web Service(No Spring)的相关文章

使用CXF 来发布一个 service

参考官网文档:http://cxf.apache.org/docs/writing-a-service-with-spring.html 从官网上下载 cxf 的包,包里会有 samples 文件夹,该文件夹中存放的就是cxf 的一些小例子 这里就是针对 java_first_spring_support 例子的改写 与 说明,该例子是采用 spring +maven +cxf 技术 创建项目 使用Eclipse 创建一个 Maven Project,工程名为 TestCXFDome1 ,修改p

从Exchange 通往Office 365系列(二十三)发布web应用程序

最近时间有一点点小忙,有几天没更新博客了,今天来继续我们之前的Office 365之旅,上次已经配置完成了adfs代理,下边来发布web应用程序,这些基本都比较简单了,配置ADFS主要是为了实现单点登录做准备 1.打开远程访问管理控制台,点击发布 2.下一步 3.选择ADFS 4.选择Office 365 5.输入内外网地址,名称等信息 6.点击发布 7.发布完成 基本上我们的准备工作就到这里了,接下来就要开始来配置单点登录了

分布式系统(3)---Web Service实战--CXF理论篇

第一篇:CXF理论篇 在Java领域,WebService的框架很多,例如:AXIS,XFire,CXF等.AXIS,XFire相对比较成熟. Axis全程Apache Extensible Interaction System即Apache可扩展交互系统.是第三代Apache SOAP.本质上就是一个SOAP引擎,但不完全是一个SOAP引擎,它还是一个独立的SOAP服务器和一个嵌入Servlet引擎的服务器. XFire是新一代的Java Web服务引擎,可以非常容易地和Spring集成.是c

IDEA社区版在tomcat 7中调式并发布web应用

IDEA社区版相对收费版少了很多功能,其中包括tomcat等web服务器的支持.网上大部分的IDEA web应用发布教程都是基于收费版的,社区版并没有这么直接的工具可以运行或发布web应用.幸运的是经过实践证明可以通过tomcat7-maven-plugin这个maven插件来实现web应用的调式和发布. 准备工作 检查确认已经安装并配置好了如下组件: tomcat7 maven tomcat需要配置以tomcat用户运行,如果没有按一下步骤先配置好tomcat: 新建用户: sudo user

webService总结(二)——使用CXF手动发布webService(不使用Spring)

上篇博客:webService总结(一)--使用CXF发布webService(不使用Spring) 介绍了不使用Spring自动发布webService,这篇博客介绍第二种方法--使用CXF手动发布webService(不使用Spring). CXF自动发布webService,我们使用的是Tomcat服务器.而使用CXF手动发布webService我们不再使用Tomcat,取而代之的是内嵌的jetty服务器.其实,jetty跟Tomcat并没有本质的区别,只是表现的形式不同,使用方法不同.既

Java Web入门二

Web应用服务器 供向外发布web资源的服务器软件. Web资源 存在于Web服务器可供外界访问的资源就是web资源.例如:存在于web服务器内部的Html.CSS.js.图片.视频等. 静态资源 web页面中供人们浏览的数据始终不变,例如:HTML.CSS.JS.图片.多媒体等 动态资源 web页面中的数据是由程序产生的,不同时间点访问web页面看到的内容各不相同.例如:JSP/Servlet等.在Java Web领域,动态资源可认为是通过Java代码动态生成的HTML. Web应用的目录结构

游戏自动发布系统思路

⑴ftp.rsync.shell实现游戏资源自动发布至cdn集群; ⑵利用svn的hooks.python实现游戏代码自动发布至web集群; 游戏自动发布系统思路

Web Service (四) 手动发布Web Service接口-CXF与Spring集成

当我们发布完Web Service接口之后有两种方式可以调用Web service服务,一种是通过动态客户端方式,另一种是引用服务端的接口,引用服务端接口的方式对于客户端同服务器端耦合比较大,而使用WSDL的方式客户端不知道服务端的存在就可以调用服务器的方法. 下面是项目的结构图: 1.Web Service发布项目 2.编写服务端接口类以及实现类,如下,同上一篇自动发布接口,多了一个注解@WebService package com.test.webservice; import javax.

Web Service学习-CXF开发Web Service的权限控制(二)

Web Service如何进行权限控制? 解决思路:服务器端要求input消息总是携带有用户名,密码信息,如果没有用户名和密码信息,直接拒绝调用 解决方案:拦截器 为了让程序员能访问,并修改CXF框架所生成的SOAP消息,CXF提供了拦截器 CXF(Celtix +XFire)说明: 如果不用CXF等框架,SOAP消息的生成,解析都是由程序员负责.无论是添加用户名,密码信息还是提取用户名,密码信息,都可由程序员代码完成. 如果使用CXF等框架,SOAP消息的生成,解析都是由CXF等框架来完成.