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 {@Overridepublic 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;@Overrideprotected 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();  }   }
}

 PS:在客户端调用时总是提示这个错误:

调用webservice出现javax.xml.bind.UnmarshalException解决办法,从网上找了很多解决办法都没有解决,最后根据提示加入了如下两个jar包即解决。

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

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

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

转载于:https://www.cnblogs.com/lilongsheng1125/p/4978503.html

Web Service (二) CXF自动发布Web Service(No Spring)相关推荐

  1. svn添加提交备注限制和自动发布web项目

    1.添加提交备注: vim /home/svn/hqjj/hooks/pre-commit (没有这个文件就新建) #!/bin/sh REPOS="$1" TXN="$ ...

  2. 使用CXF 来发布一个 service

    参考官网文档:http://cxf.apache.org/docs/writing-a-service-with-spring.html 从官网上下载 cxf 的包,包里会有 samples 文件夹, ...

  3. 山东大学项目实训(四)—— 微信小程序扫描web端二维码实现web端登录

    效果 点击登录后,显示二维码→打开"探古"(本项目)微信小程序,扫描二维码确认登录→web端登录成功 主要流程 因为本人主要负责web前端的开发,所以本文仅介绍web前端的实现方法 ...

  4. 使用 Caddy 自动化发布 Web 应用

    前言 Caddy 是一个跟 Nginx 类似的 web 服务器,拥有很多强大的特性,这篇文章是关于如何使用 Caddy 的 http.git 插件配合代码托管平台的 webhook 进行自动发布 We ...

  5. 配置web服务器 并运行,二、HelloTomcat(Web服务器配置)

    第一部分我们已经有了JAVA的开源开发工具Eclipse,并且我们运行了我们的第一个JAVA程序HelloWorld,用于测试本地能否正常编辑并运行JAVA程序. 接下来我们再引入一个工具Tomcat ...

  6. Tuscany SCA 发布Web Service

    有段时间没有学习SOA了,最近偶然碰到一个例子,运行修改理解后发布到此. 在前面的博客中有提到用axis2发布web service,借用了插件,并且步骤较繁多,现在来看下tuscany简单地通过配置 ...

  7. 通向架构师的道路(第十一天)之Axis2 Web Service(二)

    一.总结前一天 前一天中我们讲述了如何生成一个Axis2的WebService, 如何布署以及4种不同的客户端, 它们是: 传统式, 非阻塞式, 双工模式, 双工非阻塞. 并且我们看到了一个Axis2 ...

  8. 使用axis2 services.xml 发布web service

    2019独角兽企业重金招聘Python工程师标准>>> 之前转的使用Pojo来发布webservice,使用有限制,不能发布带包的Pojo,所以找了使用services.xml发布项 ...

  9. asp.net发布web service时出现“未能创建类型”错误

    asp.net发布web service时出现"未能创建类型"错误 如果直接将web service发布之后,如果不转换成"应用程序"的话,将产生"未 ...

最新文章

  1. Burpsuite学习(4)
  2. [转]计算机存在两个管理员,删除其中一个,administration隐藏显示
  3. 将域用户加入本地power user组的脚本
  4. Python 2.7版本与3.6的不同
  5. Bellman_Ford算法
  6. Apriori算法进行关联分析(2)
  7. Run-time Settings--General--Run Logic
  8. 如何远程调试部署在CloudFoundry平台上的nodejs应用
  9. vue-resource跨域问题
  10. SpringBoot注解分析
  11. 图的链式前向星表示及深度广度优先遍历
  12. “不要害怕 RAID!”
  13. 南京工业大学计算机研究生分数,2019南京工业大学研究生分数线汇总(含2016-2019历年复试)...
  14. 又一篇Centos7下的asp.net core部署教程
  15. Vue中watch用法详解
  16. 【CentOS】scala安装
  17. wordcloud python 如何不显示中文_Python词云库wordcloud中文显示问题详解
  18. amd编码器 hevc_支持 AMD VCE H.264 编码器在Bandicam录制视频 - Bandicam(班迪录屏)
  19. 现货黄金的优越性是什么?
  20. 城市区域二手房信息python爬取、保存和初步分析—笔记

热门文章

  1. 朋友开网店 做个抓取数据的小程序
  2. [BTS2004]一步一步学习BizTalk2004 CBR(content-based routing)
  3. asp.net 包含动态创建控件的容器如果要切换显示/隐藏不要用 Visible 属性
  4. 走你!Github 开源整合
  5. Mybatis---总结
  6. 使用OPATCH_DEBUG环境变量调试Opatch工具
  7. MySQL数据表基本操作
  8. 在ThinkPHP中连接数据库
  9. Oracle Exadata 一体机关机过程(虚拟机环境)
  10. VMware View 与Citrix XenDesktop对决之用户体验篇