`
bbwang8088
  • 浏览: 45974 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

使用CXF发布简单WebService学习汇总

 
阅读更多

目录:

注意1:本文中所呈现或使用到的代码及工具等路径视具体环境而定,并非绝对,请按照自己计算机配置情况做必要修改。

注意2:需要提前安装JDK,IDEA和CXF,具体安装方法请自行检索。并设置JAVA_HOME指向JDK安装目录,设置CXF_HOME指向CXF安装目录,并在系统环境变量path中追加下述文字:

%JAVA_HOME%\bin;%CXF_HOME%\bin;

 

0、工具软件介绍

1、基于Maven的pom文件CXF依赖包配置

2、简单WebService接口类、WebService实现类、WebService发布类编写

3、在IDEA开发环境中服务发布及wsdl访问

4、使用CXF\bin目录下的wsdl2java工具生成客户端代码

5、客户端访问WebService

6、maven导出可执行的jar包并使用jar包发布WebService

7、参考

 

0、工具软件介绍

 

系统环境:Windows7企业版64bit

开发工具:IntelliJ IDEA 2018.1.5 Community Edition

JDK:build 1.8.0_151-b12 64bit

CXF本地工具:apache-cxf-3.2.5

CXF依赖库:3.1.8

Spring依赖库:4.3.3.RELEASE

 

1、基于Maven的pom文件CXF依赖包配置

 

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>com.lida</groupId>
  <artifactId>webservice</artifactId>
  <packaging>jar</packaging>
  <version>1.0-SNAPSHOT</version>
  <name>webservice Maven Webapp</name>
  <url>http://maven.apache.org</url>

  <properties>
    <spring.version>4.3.3.RELEASE</spring.version>
  </properties>

  <dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>4.12</version>
      <scope>test</scope>
    </dependency>

    <!--spring-->
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-core</artifactId>
      <version>${spring.version}</version>
    </dependency>
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-beans</artifactId>
      <version>${spring.version}</version>
    </dependency>
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-context</artifactId>
      <version>${spring.version}</version>
    </dependency>
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-context-support</artifactId>
      <version>${spring.version}</version>
    </dependency>
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-test</artifactId>
      <version>${spring.version}</version>
    </dependency>
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-web</artifactId>
      <version>${spring.version}</version>
    </dependency>
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-webmvc</artifactId>
      <version>${spring.version}</version>
    </dependency>
    <dependency>
      <groupId>org.apache.cxf</groupId>
      <artifactId>cxf-rt-transports-http</artifactId>
      <version>3.1.8</version>
    </dependency>

    <!--web service 以下都是cxf必备的-->
    <!--org.apache.cxf.transport.servlet.CXFServlet-->
    <dependency>
      <groupId>org.apache.cxf</groupId>
      <artifactId>cxf-rt-transports-http</artifactId>
      <version>3.1.8</version>
    </dependency>
    <!--不加这个包会报错Unable to locate spring NamespaceHandler for XML schema namespace [http://cxf.apache.org/jaxws]-->
    <dependency>
      <groupId>org.apache.cxf</groupId>
      <artifactId>cxf-rt-frontend-jaxws</artifactId>
      <version>3.1.8</version>
    </dependency>
    <!--java实现webservice,不部署到tomcat,需要jetty包支持-->
    <dependency>
      <groupId>org.apache.cxf</groupId>
      <artifactId>cxf-rt-transports-http-jetty</artifactId>
      <version>3.1.8</version>
    </dependency>

  </dependencies>
  <build>
    <finalName>webservice</finalName>
    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-compiler-plugin</artifactId>
        <configuration>
          <source>1.6</source>
          <target>1.6</target>
        </configuration>
      </plugin>
    </plugins>
  </build>
</project>

 2、简单WebService接口类、WebService实现类、WebService发布类编写

 

WebService接口类

  

package tech.bbwang.cxf.webservice.demo.server;

        import javax.jws.WebParam;
        import javax.jws.WebService;

@WebService
public interface MyWebService {
    int add(@WebParam(name = "firstA")int a, @WebParam(name = "firstB")int b);
    int minus(@WebParam(name = "secondA")int a, @WebParam(name = "secondB")int b);
}
 

 

WebService实现类

  

package tech.bbwang.cxf.webservice.demo.server;

import javax.jws.WebService;

@WebService(endpointInterface = "tech.bbwang.cxf.webservice.demo.server.MyWebService")
public class MyWebserviceImpl implements MyWebService {
    @Override
    public int add(int a, int b) {
        System.out.println(a+"+"+b+"="+(a+b));
        return a+b;
    }

    @Override
    public int minus(int a, int b) {
        System.out.println(a+"-"+b+"="+(a-b));
        return a-b;
    }
}
 

 

WebService发布类

  

package tech.bbwang.cxf.webservice.demo;

import tech.bbwang.cxf.webservice.demo.server.MyWebserviceImpl;

import javax.xml.ws.Endpoint;

public class App {

    public static void main( String[] args ){
        String address="http://localhost:9090/cxf";
        Endpoint.publish(address,new MyWebserviceImpl());
        System.out.println("发布webservice成功");
    }
}
 

 

3、在IDEA开发环境中服务发布及wsdl访问

IDEA中直接在WebService发布类鼠标右键,Run App.main执行即可。

正常启动输出如下:

 

七月 06, 2018 9:31:31 上午 org.apache.cxf.wsdl.service.factory.ReflectionServiceFactoryBean buildServiceFromClass
信息: Creating Service {http://server.demo.webservice.cxf.bbwang.tech/}MyWebserviceImplService from class tech.bbwang.cxf.webservice.demo.server.MyWebService
七月 06, 2018 9:31:31 上午 org.apache.cxf.endpoint.ServerImpl initDestination
信息: Setting the server's publish address to be http://localhost:9090/cxf
SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder".
SLF4J: Defaulting to no-operation (NOP) logger implementation
SLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for further details.
发布webservice成功
 
我们可以通过访问 http://localhost:9090/cxf?wsdl 查看wsdl文件。
请保存为cxf-demo.wsdl至本地以备后用。

请保持服务持续运行,以便后续客户端调用。

 

4、使用CXF的wsdl2java工具生成客户端代码

假设上述cxf-demo.wsdl已保存至D:\100_download目录下

系统开始->输入cmd->打开命令行窗口。

输入以下命令以切换当前工作目录:

cd /d D:\100_download

 因为CXF已经注册至系统环境变量中,所以我们可以直接输入wsdl2java工具名而不需要指定其完整文件路径。

输入以下命令进行客户端代码生成:

D:\100_download>wsdl2java -p tech.bbwang.cxf.webservice.demo.client -d cxf\ D:\100_download\cxf.wsdl

命令结束后,我们在目录 D:\100_download\cxf下得到客户端代码

 

具体的wsdl2java工具的使用方法见最后参考。

 

5、客户端访问WebService

客户端访问类

 

package tech.bbwang.cxf.webservice.demo.client;

import org.apache.cxf.jaxws.JaxWsProxyFactoryBean;


public class CxfWSClient {
    public static void main(String[] args) {
        MyWebserviceImplService wsl =  new MyWebserviceImplService();
        MyWebService ws = wsl.getMyWebserviceImplPort();
        System.out.println(ws.add(1, 2));
        System.out.println(ws.minus(1, 3));
    }
}

 

鼠标右键,Run CxfWSClient.main()执行程序。

 

正常输出如下:

七月 06, 2018 9:31:55 上午 org.apache.cxf.wsdl.service.factory.ReflectionServiceFactoryBean buildServiceFromWSDL
信息: Creating Service {http://server.demo.webservice.cxf.bbwang.tech/}MyWebserviceImplService from WSDL: file:/D:/100_download/cxf.wsdl
3
-2

 

6、Maven导出可执行的jar包并使用jar包发布WebService

Maven导出可执行的jar包需要在pom文件的中添加一下plugin配置,具体完成指定主函数和打包依赖jar包工作。

      <!-- 打包jar文件时,配置manifest文件,加入lib包的jar依赖 -->
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-jar-plugin</artifactId>
        <configuration>
          <classesDirectory>target/classes/</classesDirectory>
          <archive>
            <manifest>
              <!-- 主函数的入口 -->
              <mainClass>tech.bbwang.cxf.webservice.demo.App</mainClass>
              <!-- 打包时 MANIFEST.MF文件不记录的时间戳版本 -->
              <useUniqueVersions>false</useUniqueVersions>
              <addClasspath>true</addClasspath>
              <classpathPrefix>lib/</classpathPrefix>
            </manifest>
            <manifestEntries>
              <Class-Path>.</Class-Path>
            </manifestEntries>
          </archive>
        </configuration>
      </plugin>

 

最后使用IEDA->View->Tool Windows->Maven Projects,打开工程的Maven视图,执行Lifecycle下的package动作。编译打包成功后,可以在工程目录下看到webservice.jar文件

[INFO] Building jar: D:\projects\dream-webservice\target\webservice.jar

 首先关闭IDEA中正在运行的WebService发布进程,否则与下述工作冲突,导致端口不可使用错误。

切换命令行窗口当前目录至webservice.jar包所在路径

cd /d D:\projects\dream-webservice\target\

 执行jar包运行命令

java -jar webservice.jar

 输出下述文字即为发布成功

发布webservice成功

 

此时,再次使用上述客户端运行,依旧可以得到相同结果

 

 7、参考

 

1、使用CXF将wsdl文件生成客户端代码命令

https://blog.csdn.net/zeb_perfect/article/details/47423795

 主要参考内容:

 

在命令行执行D:\100_download>wsdl2java -p tech.bbwang.cxf.webservice.demo.client -d cxf\ D:\1
00_download\cxf.wsdl

wsdl2java用法: 
wsdl2java -p com -d src -all  aa.wsdl 
-p  指定其wsdl的命名空间,也就是要生成代码的包名: 
-d  指定要产生代码所在目录 
-client 生成客户端测试web service的代码 
-server 生成服务器启动web  service的代码 
-impl 生成web service的实现代码 
-ant  生成build.xml文件 
-all 生成所有开始端点代码:types,service proxy,,service interface, server mainline, client mainline, implementation object, and an Ant build.xml file. 
 需要注意的是在客户端代码执行过程中,还是需要访问wsdl文件,所以上述指定了绝对路径。

 

 

2、IDEA+maven+CXF+WebService

https://blog.csdn.net/colinasd/article/details/52740854

 

3、Maven如何打包成jar,如何指定main函数的入口,以及生成对应的lib

https://blog.csdn.net/oppoppoppo/article/details/61622207

主要参考内容:

 

      <!-- 打包jar文件时,配置manifest文件,加入lib包的jar依赖 -->
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-jar-plugin</artifactId>
        <configuration>
          <classesDirectory>target/classes/</classesDirectory>
          <archive>
            <manifest>
              <!-- 主函数的入口 -->
              <mainClass>tech.bbwang,cxf.webservice.App</mainClass>
              <!-- 打包时 MANIFEST.MF文件不记录的时间戳版本 -->
              <useUniqueVersions>false</useUniqueVersions>
              <addClasspath>true</addClasspath>
              <classpathPrefix>lib/</classpathPrefix>
            </manifest>
            <manifestEntries>
              <Class-Path>.</Class-Path>
            </manifestEntries>
          </archive>
        </configuration>
      </plugin>
 

 

分享到:
评论

相关推荐

    CXF框架发布webservice

    学习这些内容后,开发者将能够熟练地使用CXF框架和Spring框架来构建和发布高质量的Web服务,同时也能掌握服务的测试、安全性和事务管理等关键环节。通过实践,你可以更好地理解和掌握这些技术,提升你的Web服务开发...

    使用CXF发布WebService

    当我们谈论“使用CXF发布WebService”时,我们实际上是在讨论如何利用Apache CXF框架创建和部署Web服务。Apache CXF是一个开源的Java框架,专门用于构建和消费Web服务,支持多种协议,如SOAP和RESTful。 首先,我们...

    使用cxf发布的webservice服务

    本篇文章将详细探讨“使用CXF发布的WebService服务”,特别是针对初学者,我们将通过一个简单的员工管理系统的例子来阐述其基本操作和原理。 首先,让我们理解CXF的角色。CXF全称为Camel CXF,它是Apache软件基金会...

    使用CXF和camel-cxf调用webservice

    CXF可以基于WSDL自动生成Java客户端代码,这使得调用服务变得简单。 2. **配置服务客户端**:通过CXF的客户端API,你可以设置服务地址、认证信息等参数。这通常在Spring配置文件或代码中完成。 3. **调用服务**:...

    cxf发布webservice示例

    webservice示例 springmvc+maven+cxf发布webservice 博客地址 http://blog.csdn.net/joe_storm/article/details/78839150

    Spring+CXF 发布WebService服务

    本文将深入探讨如何使用Spring和CXF来发布WebService服务。 首先,Spring是一个开源的Java平台,它提供了全面的编程和配置模型,用于简化企业级应用的开发。Spring框架的核心特性包括依赖注入、面向切面编程(AOP)...

    springboot整合CXF发布webservice和客户端调用

    SpringBoot整合CXF是将流行的Java Web服务框架CXF与SpringBoot轻量级框架结合,以便更方便地创建和消费Web服务。这个项目提供了一个很好的示例,通过详细注释帮助开发者理解如何在SpringBoot应用中发布和调用Web服务...

    使用CXF调用发布webservice

    【精品文档】基于cxf webservice传递List及bean.pdf CXF学习笔记.doc 使用Apache CXF开发Web Service.pdf 如何使用myeclipse开发 webservice

    SpringBoot框架及CXF发布WebService

    **SpringBoot框架** SpringBoot是由Pivotal团队提供的全新框架,其设计目标是简化Spring应用...这两个部分可以作为学习和实践SpringBoot发布和消费Web服务的起点,帮助开发者深入理解SpringBoot与CXF的协同工作方式。

    webService(基于cxf)的完整例子

    Web服务在IT行业中扮演着重要的角色,它允许不同的应用程序通过网络进行通信和交换数据。CXF是一个流行的开源Java框架,用于...通过学习这个例子,开发者可以掌握CXF的基本使用方法,进一步拓展到更复杂的Web服务场景。

    WebService CXF 详细教程

    **WebService CXF 详解** **一、WebService简介** WebService是一种基于标准的,可以在不同操作系统、编程语言之间交换数据的Web应用程序。它通过WSDL(Web服务描述语言)定义了服务接口,利用SOAP(简单对象访问...

    使用CXF搭建webService服务

    使用cxf搭建webService,客户端通过接口进行调用

    CXF发布restful WebService的入门例子.pdf

    在本入门例子中,我们将使用CXF来发布一个RESTful WebService,以管理房间和居住在房间内的人物。 1. **POJO对象定义**: 在RESTful WebService中,数据通常以Java对象(POJO)的形式进行处理。这里的`Person`和`...

    CXF使用EndpointImpl发布WebService加入拦截器

    本篇文章将深入探讨如何使用CXF的`EndpointImpl`类来发布一个WebService,并加入拦截器。 首先,我们要理解`EndpointImpl`是CXF框架用于构建和配置Web服务端点的核心类。通过实例化这个类,我们可以自定义服务的...

    eclipse+CXF开发webService

    本文档主要介绍了使用eclipse和CXF开发webService的步骤,涵盖了准备工作、配置eclipse上的CXF插件、开发代码和生成WSDL文件等方面的内容。 一、准备工作 在开发webService之前,需要安装相关的软件环境,包括...

    camel-cxf调用和发布webservice例子

    用camel-cxf调用webservice和发布一个webservice接口例子,首先启动QueryServiceMain主函数启动webservice接口,然后启动测试类TestWebservice。例子主要是实现java代码实现camel调用webservice接口

    CXF 发布WebService DEMO

    CXF方式实现的WebService 接口的发布

    CXF servlet 发布webservice

    【标题】"CXF Servlet发布Web服务" 在Java Web开发中,Apache CXF是一个流行的开源框架,用于构建和部署Web服务。它支持多种协议和标准,如SOAP...对于想要深入学习和使用CXF的开发者来说,了解这些基础知识至关重要。

    使用cxf wsdl2java生成webservice客户端

    使用cxf wsdl2java生成webservice客户端命令

    CXF实现简单的WebService接口开发

    "利用CXF实现简单的WebService"这个文件名可能包含了一个实际的示例项目,下载后可以作为学习和调试的参考,进一步巩固所学知识。记得实践是检验真理的唯一标准,动手操作才能更好地理解和掌握技术。

Global site tag (gtag.js) - Google Analytics