热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

WebServiceCXF以及CXF与Spring的整合(jaxws:server形式配置)

前言:好记性不如烂笔头,写博客的好处是,以前接触的东西即便忘记了,也可以从这里查找。ApacheCXF是一个开源的Servi

前言:好记性不如烂笔头,写博客的好处是,以前接触的东西即便忘记了,也可以从这里查找。

  Apache CXF 是一个开源的 Services 框架,CXF 帮助您利用 Frontend 编程 API 来构建和开发 Services 。可以与Spring进行快速无缝的整合。灵活的部署,可以运行在Tomcat,Jboss,Jetty(内置),IBMWS,BeaWL上面。

  更多CXF介绍:http://www.ibm.com/developerworks/cn/education/java/j-cxf/

一、cxf发布服务的类

用两个不同的类发布应用:

  a. ServerFactoryBean   -- FacotryBean

  b. JaxWsServerFactoryBean(建议使用此类)

服务端与客户端类的使用映射关系如下图所示:

二、使用ServerFactoryBean类发布标准的webservice服务

  下载cxf安装包apache-cxf-2.4.2,里面lib下jar包以供项目所有。

1.服务端

a.新建web项目,加入cxf的jar包

b.定义webservice的接口

package com.wp.service;
import javax.jws.WebService;
@WebService
public interface HelloWs {public String sayHello(String name);
}

c.定义webservice接口的实现类

package com.wp.service;
public class HelloWsImpl implements HelloWs {@Overridepublic String sayHello(String name) {return "hello" + name;}
}

d.发布webservice服务

package com.wp.service;
import org.apache.cxf.frontend.ServerFactoryBean;
public class Server {public static void main(String[] args) {ServerFactoryBean sfb = new ServerFactoryBean();//1.服务提供者实现的接口sfb.setServiceClass(HelloWs.class);//2.指定访问路径sfb.setAddress("http://localhost:9090/ws");//3.指定服务实现类sfb.setServiceBean(new HelloWsImpl());//4.发布
sfb.create();System.out.println("发布成功...");}
}

2.客户端

a.使用wsdl2java生成客户端代码调用服务(之前有解释,这里就不做解释了)

b.使用ClientProxyFactoryBean类调用service服务

  客户端必须加入cxf的jar包

  浏览器访问http://localhost:9090/ws?wsdl ,查看service和operation

  1) 不同项目中调用

  

package com.wp.test;
import com.wp.client.HelloWs;
import com.wp.client.HelloWsPortType;
public class Client {public static void main(String[] args) {HelloWs hw = new HelloWs();HelloWsPortType h = hw.getHelloWsPort();String result = h.sayHello("小强");System.out.println(result);}
}

  1) 在同一项目中调用

package com.wp.service;
import org.apache.cxf.frontend.ClientProxyFactoryBean;
public class Client {public static void main(String[] args) {ClientProxyFactoryBean cfb = new ClientProxyFactoryBean();cfb.setAddress("http://localhost:9090/ws");cfb.setServiceClass(HelloWs.class);HelloWs hw = (HelloWs) cfb.create();System.out.println(hw.sayHello("明明"));}
}

类似的例子在apache-cxf-2.4.2安装包下的samples中,开发的时候可以查看

三、使用JaxWsServerFactoryBean类发布服务

1.服务端

package com.wp.service;
import javax.jws.WebParam;
import javax.jws.WebService;
@WebService
public interface HelloWs {public String sayHello(@WebParam(name="text") String text);
}

package com.wp.service;
import javax.jws.WebService;
@WebService(endpointInterface
= "com.wp.service.HelloWs")
public class HelloWsImpl implements HelloWs {@Overridepublic String sayHello(String name) {return "hello " + name;}
}

package com.wp.service;
import org.apache.cxf.interceptor.LoggingInInterceptor;
import org.apache.cxf.interceptor.LoggingOutInterceptor;
import org.apache.cxf.jaxws.JaxWsServerFactoryBean;
public class Server {public static void main(String[] args) {JaxWsServerFactoryBean jsfb = new JaxWsServerFactoryBean();//1.服务提供者实现的接口jsfb.setServiceClass(HelloWs.class);//2.指定访问路径jsfb.setAddress("http://localhost:9090/ws");//3.指定服务实现类jsfb.setServiceBean(new HelloWsImpl());//jsfb.getInInterceptors().add(new LoggingInInterceptor());//jsfb.getOutInterceptors().add(new LoggingOutInterceptor());//4.发布
jsfb.create();System.out.println("发布成功...");}
}

2.客户端

生成客户端代码:

a.在不同项目中

package com.wp.test;
import org.apache.cxf.frontend.ClientProxyFactoryBean;
import org.apache.cxf.interceptor.LoggingInInterceptor;
import org.apache.cxf.interceptor.LoggingOutInterceptor;
import org.apache.cxf.jaxws.JaxWsProxyFactoryBean;
import com.wp.client.HelloWs;
public class Client {public static void main(String[] args) {JaxWsProxyFactoryBean factory = new JaxWsProxyFactoryBean();// factory.getInInterceptors().add(new LoggingInInterceptor());// factory.getOutInterceptors().add(new LoggingOutInterceptor());factory.setAddress("http://localhost:9090/ws");HelloWs client = factory.create(HelloWs.class);System.out.println(client.sayHello("World"));}
}

b.在同一项目中

package com.wp.service;
import org.apache.cxf.jaxws.JaxWsProxyFactoryBean;
public class Client {public static void main(String[] args) {JaxWsProxyFactoryBean bean = new JaxWsProxyFactoryBean();bean.setAddress("http://localhost:9090/ws");bean.setServiceClass(HelloWs.class);HelloWs hw = (HelloWs) bean.create();System.out.println(hw.sayHello("www"));}
}

四、spring和cxf的集成(MyEclipse)jaxws:server配置

  CXF原生支持spring,可以和Spring无缝集成。本例通过tomcat启动容器来启动cxf服务。

1.新建一个maven项目(写过一个随笔),并且加入jar包

<project xmlns&#61;"http://maven.apache.org/POM/4.0.0" xmlns:xsi&#61;"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation&#61;"http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"><modelVersion>4.0.0modelVersion><groupId>com.wp.testgroupId><artifactId>cxfmavenartifactId><packaging>warpackaging><version>0.0.1-SNAPSHOTversion><name>cxfmaven Maven Webappname><url>http://maven.apache.orgurl><properties><spring.version>3.2.5.RELEASE_BUNDLEspring.version>properties><dependencies><dependency><groupId>junitgroupId><artifactId>junitartifactId><version>3.8.1version><scope>testscope>dependency><dependency><groupId>org.springframeworkgroupId><artifactId>spring-coreartifactId><version>${spring.version}version>dependency><dependency><groupId>org.springframeworkgroupId><artifactId>spring-asmartifactId><version>3.0.5.RELEASEversion>dependency><dependency><groupId>org.springframeworkgroupId><artifactId>spring-beansartifactId><version>${spring.version}version>dependency><dependency><groupId>org.springframeworkgroupId><artifactId>spring-aopartifactId><version>${spring.version}version>dependency><dependency><groupId>org.springframeworkgroupId><artifactId>spring-contextartifactId><version>${spring.version}version>dependency><dependency><groupId>org.springframeworkgroupId><artifactId>spring-expressionartifactId><version>${spring.version}version>dependency><dependency><groupId>org.springframeworkgroupId><artifactId>spring-txartifactId><version>${spring.version}version>dependency><dependency><groupId>log4jgroupId><artifactId>log4jartifactId><version>1.2.17version>dependency><dependency><groupId>org.apache.cxfgroupId><artifactId>cxf-rt-transports-httpartifactId><version>2.4.2version>dependency><dependency><groupId>commons-logginggroupId><artifactId>commons-loggingartifactId><version>1.1version>dependency><dependency><groupId>org.apache.cxfgroupId><artifactId>cxf-rt-frontend-jaxwsartifactId><version>2.4.2version>dependency><dependency><groupId>org.apache.cxfgroupId><artifactId>cxf-rt-transports-httpartifactId><version>2.4.2version>dependency><dependency><groupId>org.apache.cxfgroupId><artifactId>cxf-rt-transports-http-jettyartifactId><version>2.4.2version>dependency>dependencies><build><finalName>cxfmavenfinalName>build>
project>

pom.xml

2.让spring管理ServerFactoryBean

xml version&#61;"1.0" encoding&#61;"UTF-8"?>
<beansxmlns&#61;"http://www.springframework.org/schema/beans"xmlns:jaxws&#61;"http://cxf.apache.org/jaxws"xmlns:xsi&#61;"http://www.w3.org/2001/XMLSchema-instance"xmlns:p&#61;"http://www.springframework.org/schema/p"xsi:schemaLocation&#61;"http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsdhttp://cxf.apache.org/jaxwshttp://cxf.apache.org/schemas/jaxws.xsd"><jaxws:server address&#61;"/helloWs"serviceClass&#61;"com.wp.service.HelloWs"><jaxws:serviceBean><bean class&#61;"com.wp.service.HelloWsImpl">bean>jaxws:serviceBean>jaxws:server>
beans>

spring.xml

3.cxf集成到web容器中

xml version&#61;"1.0" encoding&#61;"UTF-8"?>
<web-app version&#61;"2.5" xmlns&#61;"http://java.sun.com/xml/ns/javaee"xmlns:xsi&#61;"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation&#61;"http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"><display-name>display-name><welcome-file-list><welcome-file>index.jspwelcome-file>welcome-file-list><servlet><servlet-name>cxfservlet-name><servlet-class>org.apache.cxf.transport.servlet.CXFServletservlet-class><init-param><param-name>config-locationparam-name><param-value>classpath:beans.xmlparam-value>init-param><load-on-startup>1load-on-startup>servlet><servlet-mapping><servlet-name>cxfservlet-name><url-pattern>/*url-pattern>servlet-mapping>
web-app>

web.xml

4.启动web容器发布webservice服务

wsdl访问地址&#xff1a;http://localhost:8080/wsService/helloWs?wsdl

  1. 通过Eclipse中的Web Services Explorer进行测试&#xff1b;
  2. 建立一个客户端项目进行测试&#xff0c;跟上面一样。

 

转:https://www.cnblogs.com/zhanxiaoyun/p/6144651.html



推荐阅读
  • 软件自动化测试的学习路线
    软件自动化测试的学习步骤软件测试交流群关注软件测试技术公众号获取阅读目录软件自动化测试的学习步骤自动化测试的本质自动化测试学习的误区自动化测试的职位自动化测试分类Web自动化 ... [详细]
  • FluxCD、ArgoCD或Jenkins X,哪个才是适合你的GitOps工具?
    GitOps是一种使用基于Git的工作流程来全面管理应用和基础设施的想法,其在最近获得了极大关注。新一代的部署工具更能说明这一点,它们将GitOps作为 ... [详细]
  • Java发布webservice应用并发送SOAP请求调用
    webservice框架有很多,比如axis、axis2、cxf、xFire等等,做服务端和做客户端都可行,个人感觉使用这些框架的好处是减少了对于接口信息的解析,最主要的是减少了对于传递于网络中XML ... [详细]
  • Linux下安装grafana并且添加influxdb监控的方法
    这篇文章主要介绍了Linux下安装grafana并且添加influxdb监控的方法,本文给大家介绍的非常详细,具有一定的参考借鉴价值, ... [详细]
  • Eclipse中SpringBoot响应jsp的简单demo
    首先在Eclipse里新建一个maven工程,这里的打包类型和父包如果后续再去pom中添加也可以此时的工程路径是这样的接下来去到pom中添加相关的依赖,如果有报错mavenupda ... [详细]
  • apk简单介绍APK的组成apk安装流程app的启动过程apk打包流程AIDLAIDL介绍为什么要设计这门语言它有哪些语法?默认支持的数据类型包括什么是apk打包流程 ... [详细]
  • CAS介绍CAS(CentralAuthenticationService),是耶鲁大学开发的单点登录系统(SSO,singlesign-on),应用广泛,具有独立于平台的,易于理解,支持代 ... [详细]
  • pdf怎么把html变成pdf1 用AdobeAcroat8.1.2,打开网页后,页面右键菜单中会出现一个“转换为AobePDF的选项,点击就可以转换。 安装AdobeAcroba ... [详细]
  • 自定义RecyclerView添加EmptyView
    你知道RecyclerView里没有Em ... [详细]
  • Shiro 简单了解
    Shiro简单了解简单用过SpringSecurity安全框架后,再试试另一个安全框架——Shiro。1.Shiro简介ApacheShiro是一个强大且易用的Java安全框架:S ... [详细]
  • 大数据分析Python有哪些爬虫框架
    一、ScrapyScrapy是一个为了爬取网站数据,提取结构性数据而编写的应用框架。可以应用在包括数据挖掘,信息处理或存储历史数据等一系列的程序中。。用 ... [详细]
  • 开发笔记:Xunit测试使用个人小结
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了Xunit测试使用个人小结相关的知识,希望对你有一定的参考价值。因工作中用到xunit测试,故总结下用法,以供个人参考使 ... [详细]
  • Linux是一套免费使用和***传播的类UNIX操作系统,主要用于基于Intel x86系列CPU的计算机上。Linux系统是由全世界各地的成千上万的程序员合适的方式定制自己的Li ... [详细]
  • 前言微服务架构(MicroserviceArchitecture)是一种架构概念,旨在通过将功能分解到各个离散的服务中以实现对解决方案的解耦。你可以将其看作是在架构层次而非获取服务 ... [详细]
  • 突然觉得服务器ssh密码登录总是浪费一定量的时间,就想试试用sshKey进行登录。生成服务器sshkey和本地sshkey$ssh-keygen在服务器上生成一个authorize ... [详细]
author-avatar
汤侑亦_473
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有