热门标签 | 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



推荐阅读
  • 作为一名新手,您可能会在初次尝试使用Eclipse进行Struts开发时遇到一些挑战。本文将为您提供详细的指导和解决方案,帮助您克服常见的配置和操作难题。 ... [详细]
  • 将Web服务部署到Tomcat
    本文介绍了如何在JDeveloper 12c中创建一个Java项目,并将其打包为Web服务,然后部署到Tomcat服务器。内容涵盖从项目创建、编写Web服务代码、配置相关XML文件到最终的本地部署和验证。 ... [详细]
  • 本文介绍了Java并发库中的阻塞队列(BlockingQueue)及其典型应用场景。通过具体实例,展示了如何利用LinkedBlockingQueue实现线程间高效、安全的数据传递,并结合线程池和原子类优化性能。 ... [详细]
  • 在当前众多持久层框架中,MyBatis(前身为iBatis)凭借其轻量级、易用性和对SQL的直接支持,成为许多开发者的首选。本文将详细探讨MyBatis的核心概念、设计理念及其优势。 ... [详细]
  • Android LED 数字字体的应用与实现
    本文介绍了一种适用于 Android 应用的 LED 数字字体(digital font),并详细描述了其在 UI 设计中的应用场景及其实现方法。这种字体常用于视频、广告倒计时等场景,能够增强视觉效果。 ... [详细]
  • 本文介绍如何在Java项目中使用Log4j库进行日志记录。我们将详细说明Log4j库的引入、配置及简单应用,帮助开发者快速上手。 ... [详细]
  • 根据最新发布的《互联网人才趋势报告》,尽管大量IT从业者已转向Python开发,但随着人工智能和大数据领域的迅猛发展,仍存在巨大的人才缺口。本文将详细介绍如何使用Python编写一个简单的爬虫程序,并提供完整的代码示例。 ... [详细]
  • 解决JAX-WS动态客户端工厂弃用问题并迁移到XFire
    在处理Java项目中的JAR包冲突时,我们遇到了JaxWsDynamicClientFactory被弃用的问题,并成功将其迁移到org.codehaus.xfire.client。本文详细介绍了这一过程及解决方案。 ... [详细]
  • 本文介绍了如何利用npm脚本和concurrently工具,实现本地开发环境中多个监听服务的同时启动,包括HTTP服务、自动刷新、Sass和ES6支持。 ... [详细]
  • 本文探讨了 Spring Boot 应用程序在不同配置下支持的最大并发连接数,重点分析了内置服务器(如 Tomcat、Jetty 和 Undertow)的默认设置及其对性能的影响。 ... [详细]
  • 深入解析 Apache Shiro 安全框架架构
    本文详细介绍了 Apache Shiro,一个强大且灵活的开源安全框架。Shiro 专注于简化身份验证、授权、会话管理和加密等复杂的安全操作,使开发者能够更轻松地保护应用程序。其核心目标是提供易于使用和理解的API,同时确保高度的安全性和灵活性。 ... [详细]
  • 本文详细介绍了如何使用Spring Boot进行高效开发,涵盖了配置、实例化容器以及核心注解的使用方法。 ... [详细]
  • 本文详细介绍了Akka中的BackoffSupervisor机制,探讨其在处理持久化失败和Actor重启时的应用。通过具体示例,展示了如何配置和使用BackoffSupervisor以实现更细粒度的异常处理。 ... [详细]
  • 本文详细分析了Hive在启动过程中遇到的权限拒绝错误,并提供了多种解决方案,包括调整文件权限、用户组设置以及环境变量配置等。 ... [详细]
  • 本文详细介绍了Linux系统中init进程的作用及其启动过程,解释了运行级别的概念,并提供了调整服务启动顺序的具体步骤和实例。通过了解这些内容,用户可以更好地管理系统的启动流程和服务配置。 ... [详细]
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社区 版权所有