WebService-CXF学习使用_长篇

【WebService】springboot整合cxf实现webService远程调用 一、前言        在做接口对接的时候需要接口以HTTPS和WebService的形式暴露,虽然最近这几年restful非常火爆,但在一些特定的领域或者一些老旧系统中仍然采用WebService的形式来实现远程通信。       上一篇博客讲了WebService实现远程调用,在博文的最后,自己阐述了关于那种客户端调用存在的问题,如大家有疑问,欢迎留言区指正。二、实现       废话上一篇博... 阅读详情

以下是废话:

写文章的原因是要给医院方面写一个考核相关的接口,让护士等人员的手持设备可以实时访问,反馈结果数据。

对于比较成熟(老)的框架,我没兴趣,于是锁定了相对流行和新的框架,RESTEasy和Apache CXF。一个是jboss的一个是Apache的,因为习惯使用spring,个人也觉得apache的东西一直都比较牛叉,所以决定用CXF。

这里我会说明服务器方面接口怎么写,也会说明客户端(调用者)方面怎么调用。

1:新建maven项目

我使用的是idea,步骤为:file-new-project-选择maven-选择maven-archetype-webapp-根据向导一步步完成。

2:导入相关包

在pom.xml文件内加入如下包,然后刷新maven项目。第三个是一个类似tomcat的服务器,方便测试。

<!-- https://mvnrepository.com/artifact/org.apache.cxf/cxf-rt-frontend-jaxws -->
    <dependency>
      <groupId>org.apache.cxf</groupId>
      <artifactId>cxf-rt-frontend-jaxws</artifactId>
      <version>3.2.1</version>
    </dependency>

    <!-- https://mvnrepository.com/artifact/org.apache.cxf/cxf-core -->
    <dependency>
      <groupId>org.apache.cxf</groupId>
      <artifactId>cxf-core</artifactId>
      <version>3.2.1</version>
    </dependency>

    <!-- https://mvnrepository.com/artifact/org.apache.cxf/cxf-rt-transports-http-jetty -->
    <dependency>
      <groupId>org.apache.cxf</groupId>
      <artifactId>cxf-rt-transports-http-jetty</artifactId>
      <version>3.2.1</version>
    </dependency>

3:编写接口

注意需要加webservice注解来标识,这里是要实现的三个学习使用的接口。

分为简单类型返回,较复杂类型返回,cxf不支持的类型怎么写适配器然后返回。

/**
 * Created by gcc on 2018/2/6.
 */
@WebService
public interface HelloWord {

    public String say(String something);

    public List<Roles> getRoleByUsers(Users users);

    /**
     * 获取所有用户以及对应的角色,返回类型map需要适配转化。需要加注解
     */
    @XmlJavaTypeAdapter(MapAdapter.class)
    public Map<String,List<Roles>> getRoles();

}

4:实现接口

say方法实现:获取数据并打印,然后返回修改后的字符串

getRoleByUsers实现:通过用户实体返回对应权限集合

getRoles实现:返回复杂类型,这里实现代码简单,但因为cxf不支持这种返回类型,需要写适配类。

这里省略Roles和Users实体类,实体有id,名字和密码属性即可

/**
 * Created by Administrator on 2018/2/6.
 */
@WebService
public class HelloWordImpl implements HelloWord {


    public String say(String something) {
        System.out.println("get:"+something);
        return "you post"+something;
    }

    //开放一个,提供用户获取权限的接口
    public List<Roles> getRoleByUsers(Users users) {
        List<Roles> rolesList = new ArrayList<Roles>();
        //用户测试,模拟数据
        if("gcc".equals(users.getUsername()) & "123".equals(users.getPassword())){
            rolesList.add(new Roles(1,"super manger"));
        }else if("admin".equals(users.getUsername()) & "123".equals(users.getPassword())){
            rolesList.add(new Roles(2,"system manger"));
        }else{
            rolesList.add(new Roles(3,"normal user"));
        }
        return rolesList;
    }

    public Map<String, List<Roles>> getRoles() {
        Map<String,List<Roles>> map=new HashMap<String,List<Roles>>();
        List<Roles> roleList1=new ArrayList<Roles>();
        roleList1.add(new Roles(1,"super manger"));
        roleList1.add(new Roles(2,"system manger"));
        map.put("gcc", roleList1);

        List<Roles> roleList2=new ArrayList<Roles>();
        roleList2.add(new Roles(3,"normal user"));
        map.put("jack", roleList2);

        return map;
    }

}

实现map类型的适配转化,这里通过数组进行转化。

public class MapAdapter extends XmlAdapter<MyRole[], Map<String,List<Roles>>>{

	/**
	 *  适配器转换,MyRole[] -> Map<String, List<Role>>
	 */
	@Override
	public Map<String, List<Roles>> unmarshal(MyRole[] v) throws Exception {
		Map<String, List<Roles>> map=new HashMap<String,List<Roles>>();
		for(int i=0;i<v.length;i++){
			MyRole r=v[i];
			map.put(r.getKey(), r.getValue());
		}
		return map;
	}

	/**
	 * 适配器转换 Map<String, List<Role>> -> MyRole[]
	 */
	@Override
	public MyRole[] marshal(Map<String, List<Roles>> v) throws Exception {
		MyRole[] roles=new MyRole[v.size()];
		int i=0;
		for(String key:v.keySet()){
			roles[i]=new MyRole();
			roles[i].setKey(key);
			roles[i].setValue(v.get(key));
			i++;
		}
		return roles;
	}

}

下面是转化时需要使用的entity类

/**
 * cxf不能接受map,需要使用适配器自己定义
 */
public class MyRole {

	private String key;
	private List<Roles> value;
	
	public String getKey() {
		return key;
	}
	public void setKey(String key) {
		this.key = key;
	}
	public List<Roles> getValue() {
		return value;
	}
	public void setValue(List<Roles> value) {
		this.value = value;
	}
	
	
}

5:编写测试代码

这里先忽略拦截器代码,稍后解释。

第一步获得接口对象,第二步设置访问地址(本机地址),之后见代码注释,在所有设置完成后暴露接口。若在暴露接口后写设置编译没问题,但设置内容是无效的。

public class ServiceCxf {

    public static void main(String[] args) {
        System.out.println("webService start");
        HelloWord helloWordImpl = new HelloWordImpl();
        String addr = "http://192.168.0.122/helloWordGcc";
//        Endpoint.publish(addr,helloWordImpl);
        JaxWsServerFactoryBean serverFactoryBean = new JaxWsServerFactoryBean();//cxf初始化服务工厂
        serverFactoryBean.setAddress(addr);//设置地址
        serverFactoryBean.setServiceClass(HelloWord.class);//设置接口类
        serverFactoryBean.setServiceBean(helloWordImpl);//设置实现类

        serverFactoryBean.getInInterceptors().add(new LoggingInInterceptor()); // 添加in拦截器 日志拦截器
        serverFactoryBean.getOutInterceptors().add(new LoggingOutInterceptor()); // 添加out拦截器 日志拦截器
        serverFactoryBean.getInInterceptors().add(new MyInterceptor());//自定义拦截器,用于接口调用的权限验证

        serverFactoryBean.create();//暴露接口
        System.out.println("webService started");
    }

}

6:浏览器查看结果

http://192.168.0.122/helloWordGcc?wsdl

浏览器地址输入设置的访问地址,追加?wsdl,表示显示wsdl格式内容。wsdl就是web service description language

到此客户端接口完成,但我们不能就这样使用,因为鬼也不知道会不会有人写个死循环一直调用你的接口。所以需要写一个拦截器,在调用之前进行权限拦截。

代码如下:

public class MyInterceptor extends AbstractPhaseInterceptor<SoapMessage> {

	public MyInterceptor() {
		super(Phase.PRE_INVOKE);  // 在调用方法之前调用自定拦截器

	}

	@SuppressWarnings("null")
	public void handleMessage(SoapMessage message) throws Fault {
		List<Header> headers=message.getHeaders();
		if(headers==null && headers.size()==0){
			throw new Fault(new IllegalArgumentException("没有Header,拦截器实施拦截"));
		}
		Header firstHeader=headers.get(0);
		Element ele=(Element) firstHeader.getObject();
		NodeList uList=ele.getElementsByTagName("userName");
		NodeList pList=ele.getElementsByTagName("password");
		if(uList.getLength()!=1){
			throw new Fault(new IllegalArgumentException("用户名格式不对"));
		}
		if(pList.getLength()!=1){
			throw new Fault(new IllegalArgumentException("密码格式不对"));
		}
		String userName=uList.item(0).getTextContent();
		String password=pList.item(0).getTextContent();

		if(!userName.equals("gcc")||!password.equals("123")){
			throw new Fault(new IllegalArgumentException("用户名或者密码错误!"));
		}
	}

}

到此服务器端基本任务已经完成,下面介绍客户端如何调用接口。

1:新建maven项目

另起一个项目作为客户端调用使用。

2:生成代码

这里介绍一个神奇的工具,apache-cxf-3.2.1:http://cxf.apache.org/download.html去cxf官网下载即可,这文件夹下面的bin目录下有一个wsdl2java.bat文件,将到bin为止的路径配置到环境变量,方便cmd使用。简单使用为:cd到文件生成路径,然后写wsdl2java,然后粘贴访问路径(例如:http://192.168.0.122/helloWordGcc?wsdl),具体使用方法各位百度即可。


3:编写客户端测试代码

将文件生成在main的java目录下,生成代码很容易理解,这里不再介绍。

获取实现对象就可以调用接口方法。当然也需要编写通过拦截器验证的代码。

代码如下:

public class Client {

    public static void main(String[] args) throws Exception {
        //基本使用
        HelloWordService helloWordService = new HelloWordService();
        HelloWord helloWord = helloWordService.getHelloWordPort();
//        System.out.println(helloWord.say("你好"));

        org.apache.cxf.endpoint.Client client= ClientProxy.getClient(helloWord);
        client.getOutInterceptors().add(new AddHeaderInterceptor("gcc","123")); // 添加自定义拦截器,用于获得调用接口的权限

        //返回类型相对复杂的使用
        Users users = new Users();
        users.setUsername("gcc");
        users.setPassword("123");
        List<Roles> rolesList = helloWord.getRoleByUsers(users);
        for (Roles roles:rolesList){
            System.out.println(roles.getId()+":"+ roles.getRolename());
        }

        //需要适配的返回类型使用
        MyRoleArray arrys = helloWord.getRoles();
        List<MyRole> myRoles = arrys.getItem();
        for (int i = 0; i <myRoles.size() ; i++) {
            System.out.println(myRoles.get(i).getKey());
            for(Roles list:myRoles.get(i).getValue()){
                System.out.println(list.getId()+":"+list.getRolename());
            }
        }

    }

}

拦截器代码如下:

public class AddHeaderInterceptor extends AbstractPhaseInterceptor<SoapMessage> {

	private String userName;
	private String password;

	public AddHeaderInterceptor(String userName,String password) {
		super(Phase.PREPARE_SEND); // 准备发送SOAP消息的时候调用拦截器
		this.userName=userName;
		this.password=password;
	}

	public void handleMessage(SoapMessage message) throws Fault {
		List<Header> headerList=message.getHeaders();

		Document doc=DOMUtils.createDocument();
		Element ele=doc.createElement("authHeader");//节点名字自定义
		Element uElement=doc.createElement("userName");//对应验证的拦截器
		uElement.setTextContent(userName);
		Element pElement=doc.createElement("password");
		pElement.setTextContent(password);

		ele.appendChild(uElement);
		ele.appendChild(pElement);

		headerList.add(new Header(new QName("gcc"),ele));//key-valuex形式,key的name自定义
	}
}

至此,非spring的服务器端和客户端的使用方法多已经阐述完毕。

敬礼!

咳咳,差点忘了还要整合spring

在spring项目中修改三处即可:

1:web.xml中添加:

    <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>/webservice/*</url-pattern>  
	</servlet-mapping>

2:applicationContext.xml中添加:

<?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:p="http://www.springframework.org/schema/p"  
    xmlns:aop="http://www.springframework.org/schema/aop"   
    xmlns:context="http://www.springframework.org/schema/context"  
    xmlns:jee="http://www.springframework.org/schema/jee"  
    xmlns:tx="http://www.springframework.org/schema/tx"  
    xmlns:jaxws="http://cxf.apache.org/jaxws"
    xsi:schemaLocation="    
        http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.0.xsd  
        http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.0.xsd  
        http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.0.xsd  
        http://www.springframework.org/schema/jee http://www.springframework.org/schema/jee/spring-jee-4.0.xsd  
        http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.0.xsd
        http://cxf.apache.org/jaxws http://cxf.apache.org/schemas/jaxws.xsd">    
        
	<import resource="classpath:META-INF/cxf/cxf.xml"/>
    <import resource="classpath:META-INF/cxf/cxf-servlet.xml"/>
    
    <!-- 自动扫描 -->
	<context:component-scan base-package="com.gcc.webservice" />
	
	<!-- 定义服务提供者,在指定非拦截的路径下,追加HelloWorld路径,即执行名字为helloWorld的bean类 -->
	<jaxws:endpoint
	    implementor="#helloWorld"
	    address="/HelloWorld">

		<!-- 添加in拦截器 -->
		<jaxws:inInterceptors>
			<bean class="org.apache.cxf.interceptor.LoggingInInterceptor"/>
			<bean class="com.gcc.interceptor.MyInterceptor"/>
		</jaxws:inInterceptors>
		<!-- 添加out拦截器 -->
		<jaxws:outInterceptors>
			<bean class="org.apache.cxf.interceptor.LoggingInInterceptor"/>
		</jaxws:outInterceptors>

	</jaxws:endpoint>
</beans>

3:给需要暴露的接口实现添加为bean,让spring扫描到。

@Component("helloWorld")
@WebService
public class HelloWordImpl implements HelloWord {


    public String say(String something) {
        System.out.println("get:"+something);
        return "you post"+something;
    }
…………

暂时说明到此,若有追加,后续补充……

感谢各位顾客观赏






cxf调用webservice 引入jar <dependency> <groupId>org.apache.cxf</groupId> <artifactId>cxf-rt-frontend-jaxws</artifactId> <version>3.1.11</version> </dependency> <dependency><groupId>org.apache.cxf&lt 阅读详情

相关推荐

SpringBoot 集成CXF开发WebService

参考文章传送门:https://www.dexcoder.com/selfly/article/4593 Apache CXF 介绍 Apache CXF 是一个开源的 Services 框架,CXF 帮助您利用 Frontend 编程 API 来构建和开发 Services ,像 JAX-WS 。这些 Services 可以支持多种协议,比如:SOAP、XML/HTTP、RESTf...

飞鸟的轨迹 1795

CXF框架入门实例

CXF是apache旗下的开源框架,由Celtix + XFire这两门经典的框架合成,是一套非常流行的web service框架。 它提供了JAX-WS的全面支持,并且可以根据实际项目的需要,采用代码优先(Code First)或者 WSDL 优先(WSDL First)来轻松地实现 Web Services 的发布和使用,同时它能与spring进行完美结合。 在apache cxf

wangcomputer2010的专栏 857

apache-cxf-3.1.6所有jar包

apache-cxf-3.1.6所有jar包

webservice之cxf及整合spring自学结果

webservice之cxf

学而不敲则罔,敲而不学则殆 391

cxf-core-3.0.1-API文档-中文版.zip

赠送jar包:cxf-core-3.0.1.jar; 赠送原API文档:cxf-core-3.0.1-javadoc.jar; 赠送源代码:cxf-core-3.0.1-sources.jar; 赠送Maven依赖信息文件:cxf-core-3.0.1.pom; 包含翻译后的API文档:cxf-core-3.0.1-javadoc-API文档-中文(简体)版.zip; Maven坐标:org.apache.cxf:cxf-core:3.0.1; 标签:cxf、core、apache、jar包、java、API文档、中文版; 使用方法:解压翻译后的API文档,用浏览器打开“index.html”文件,即可纵览文档内容。 人性化翻译,文档中的代码和结构保持不变,注释和说明精准翻译,请放心使用。

cxf-core-3.2.4_cxf_源码

cxf的jar包,请随意下载。?乛?乛?

WebService之CXF笔记

分为Server和Client两个部分 1.Server端 1.1如果用Jetty实现,在pom中需要引入jetty和cxf的依赖 <dependencies> <dependency> <groupId>org.apache.cxf</groupId> <artifactId>cxf-core</artifactId> <vers

jacksonary的博客 380

基于STM32的可穿戴式多生理参数实时监测与预警系统

针对传统可穿戴健康设备存在的生理参数监测种类单一、数据处理依赖云端导致响应滞后、续航能力弱等问题,设计一种基于STM32的可穿戴式多生理参数实时监测与预警系统。系统以STM32L476RG低功耗微控制器为核心,集成心率血氧传感器、体温传感器、血压传感器,实现人体心率、血氧饱和度、体温、收缩压/舒张压的同步采集;通过边缘端轻量化数据处理算法完成参数异常判定,结合低功耗硬件设计与软件休眠策略,在保证监测精度的同时延长续航。测试结果表明,系统心率监测误差≤2次/分钟,血氧饱和度误差≤2%,体温误差≤±0.2℃,血

m0_74026776的博客 2039

cxf发布webservice用到的所有jar包

cxf的maven依赖 pom.xml文件 org.apache.cxf cxf-core 3.0.2 org.apache.cxf cxf-rt-bindings-soap 3.0.2 org.apache.cxf cxf-rt-databinding-jaxb 3.0.2 org.apache.cx

qiye_zhou的博客 3148

【mip-NeRF】使用一组二维图像渲染3D场景视频(mip-NeRF论文复现)

本文对mip-NeRF模型的pytorch实现进行了复现

Ryan2k的博客 1844

win11系统ping另一台电脑上VMware虚拟机的IP

我是用了两台电脑,所以刚才遇到一个问题就是两台电脑的IP 在同一局域网内ping不通。于是就找了很多资料,经过坚强的绝望后终于解决了。 下开始解决问题: VMWare提供了三种工作模式:bridged(桥接模式)、NAT(网络地址转换模式)和host-only(主机模式)。 1. bridged(桥接模式)   在这种模式下,VMWare虚拟出来的操作系统就像是局域网中的一台独立主机,它可以访问网内任何一台机器。在桥接模式下,你需要手工为虚拟系统配置IP地址、子网掩码,而且还要和宿主机器处于同一网段,这样虚

qq_42817360的博客 3238

CXF创建WebService实例,与maven和spring整合

一、概述 1、ApacheCXF项目是由ObjectWeb Celtix和CodeHaus XFire合并成立。ObjectWeb Celtix是 由IONA公司赞助,于2005年成立的开源Java ESB产品,XFire则是业界知名的SOAP堆栈。 合并后的ApacheCXF融合该两个开源项目的功能精华,提供了实现SOA所需要的核心ESB功能框架, 包括SOA服务创建,服务路由,及一系列

menghuannvxia的专栏 2155

SAP PP实战:MRP Area怎么用?手把手教你按产线、委外供应商拆分物料计划

本文详细解析了SAP PP模块中MRP Area的功能与应用,指导如何按产线、委外供应商拆分物料计划,实现精细化物料需求管理。通过实战案例展示MRP Area在减少计划冲突、提升库存准确率方面的显著效果,为制造业企业提供可落地的解决方案。

weixin_27015733的博客 432

【WebService框架-CXF】——WebService和CXF

在接下来的几篇博客中将对CXF的基础知识和简单应用进行总结。下面列出了要总结的内容。本篇文章集中介绍CXF的基础知识。 CXF博客总结目录WebService和CXF基础知识 CXF入门实例(编写客户端和服务端) CXF对Map等无法自动转化的类型的处理 CXF添加普通拦截器和自定义拦截器 CXF+Spring+自定义拦截器构建WebService服务端 CXF+Spring+Struts

To Begin,Begin   2403

Unity中实现HLS视频加密与流式播放的完整方案

本文详细介绍了在Unity中实现HLS视频加密与流式播放的完整方案。针对Unity原生VideoPlayer无法直接支持实时解密的问题,提出了基于HLS协议与AES-128加密的成熟解决方案,并重点阐述了如何利用AVPro Video插件进行集成。文章涵盖了从密钥生成、使用FFmpeg进行视频加密切片,到在Unity中动态加载密钥并播放加密流的全流程,为保护付费课程、独家动画等视频内容提供了安全且高效的实践路径。

weixin_29290963的博客 393

高通camera调试经验总结

修改AF对焦模式 adb shell setprop vendor.debug.camera.af.manual 2 //使能手动对焦 adb shell setprop vendor.debug.camera.af.manual 0 //使能自动对焦

weixin_43381364的博客 1万+

使用cxf发布webservice接口,以及调用webservice接口

一、cxf发布webservice接口 添加maven依赖 <dependency> <groupId>org.apache.cxf</groupId> <artifactId>cxf-core</artifactId> <version>3.4.3</version> </dependency> <de

qq_20161461的博客 1万+

Vscode远程免密连接Linux虚拟机,并配置C/C++运行环境

目前想要深入学习在Linux,也为了方便编写C/C++程序。Linux的环境里一般自带有c++的编译环境,如果没有安装gcc和g++等编译器也比较便利。但是在虚拟机里用vim编写C++程序又不得劲,因此打算使用vscode远程连接Linux虚拟机进行学习。为了防止自己以后还要再配置,重复踩坑,因此写下这篇博客用做记录。环境:windows11、VMware17、rocky linux9.1 ( 开源的CentOS9 )

m0_56779872的博客 8677

使用CXF和camel-cxf调用webservice

CXF是什么 Apache CXF 是一个开源的、全功能的WebService框架,它提供了一套工具和API来帮助开发和构建WebService,像 JAX-WS 和 JAX-RS。它也支持许多WebService标准,例如: SOAP WS-Addressing WS-Policy WS-ReliableMessaging WS-SecureConversation W...

刘刚的空间 2081

物流分拣YOLO实战:YOLO26 OBB+YOLOv8多尺度融合,不规则包裹分拣效率提升40%(附训练+部署代码)

在物流分拣的工业场景中,模型的检测精度、推理速度、部署友好性本次基于YOLO26 OBB+YOLOv8多尺度融合打造的物流分拣视觉检测方案,精准解决了工业场景中不规则包裹的旋转检测、多尺度包裹的漏检问题,最终实现分拣效率提升40%,检测准确率提升至95%以上,且模型在边缘设备上的推理帧率稳定35FPS+,完全适配物流分拣的工业落地需求。

专注于Python爬虫开发,分享爬虫技巧、项目实战与反爬经验,使用Scrapy、BeautifulSoup等工具,解决数据抓取难题。 882

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

webService总结(三)——使用CXF + Spring发布webService

近些年来,Spring一直很火,许多框架都能跟Spring完美集成,CXF也不例外。下面,我就介绍一下如何使用CXF + Spring发布webService。我们还是使用前两篇博客使用的实例。 服务端: 目录结构: 这里需要的所有Spring的包,CXF的lib目录下都有。 IHelloWorldServer代码: package com.test.server;

梦想起飞的地方,必须用心去经营 3967

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

WebService之CXF框架

本文主要包括以下内容 ant工具的使用利用cxf实现webservicecxf与spring整合 ajax访问webservice ant 工具 1、为什么要用到ant这个工具呢? Ant做为一种工具已经广泛被使用,并且历史悠久。 使用ant的内置命令,可以编译java源文件(javac),运行java文件(java),给class文件打包(jar、war、ear), 也可以创建(mkdir)、删除...

lgxzzz的博客 1539

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

用CXF发布WebService

首先去网上下载CXF的jar包,我下载的是cxf2.7.4的。新建一个Web工程,将CXF的所有jar包全部引入,在web.xml中增加CXFServlet的配置,代码如下: <?xml version="1.0" encoding="UTF-8"?> <web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javae...

风萧萧兮易水寒,壮士一去兮不复还 2601

使用 CXF 做 webservice 简单例子

一、对比Axis2和CXF jws的发布对java webservice框架产生了巨大的影响,经过大浪淘沙,目前java开发webservice的框架主要包括axis2和cxf。 axis2和cxf都是apache旗下的产品,但是其目的不同,导致webservice开发方法也不一样。两个框架都得到了开发者的支持。有必要对二者进行以下对比。    

dogiant的专栏 4648

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

上篇博客:webService总结(一)——使用CXF发布webService(不使用Spring) 介绍了不使用Spring自动发布webService,这篇博客介绍第二种方法——使用CXF手动发布webService(不使用Spring)。 CXF自动发布webService,我们使用的是Tomcat服务器。而使用CXF手动发布webService我们不再使用Tomcat,取而代

梦想起飞的地方,必须用心去经营 5062

webservice入门之CXF教程

1.CXF简介     Apache CXF是一个开源的Service框架,可以用于简化用户的service开发,基于CXF开发的应用可提供SOAP、XML/HTTP、RESTFUL HTTP或CORBA等服务。CXF底层页可以使用不同的传输协议,包括HTTP、JMS或JBI等。     根据CXF官方的说明,CXF包含以下特性:     支持大量的Web Service标准,包括S

longshengguoji的专栏 2万+
上一篇: ES学习经历三,es集群部署
下一篇: Spring-ioc等概念(一)
gcc_front
博客等级 码龄9年 16粉丝 98原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值