美文网首页
CXF构建webservice解析

CXF构建webservice解析

作者: maerzi | 来源:发表于2018-09-15 19:01 被阅读198次

    1.注意:cxf-3.0以上一般用jdk1.7,1.8版本。

    什么是CXF?

           CXF是建立在SOAP协议上的一个Web service框架。什么是SOAP协议,简单来说就是两个不同项目(开发语言不同等)通过xml文件来描述要传输的东西,然后通过HTTP协议传输,接收方把收到的xml解析成需要的对象使用,返回的时候又用xml封装又通过http协议传输,如此就是SOAP协议。而CXF就是两个项目之间为了提供服务,而开发的一个开源框架,使用CXF框架可以快速搭建web service。CXF就是将项目中暴露出来的接口(服务)包装起来,成为wsdl,使用方通过wsdl来调用这些服务,跟CXF同样功能的是XFIRE,AXIAS。可是现在都用CXF了,他整合了XFIRE。AXIAS也越来越少人用。

    2 .什么是WebService?

    Web service是一个平台独立的,低耦合的,自包含的、基于可编程的web的应用程序,可使用开放的XML标准通用标记语言下的一个子集)标准描述、发布、发现、协调和配置这些应用程序,用于开发分布式的互操作的应用程序

    3.构建过程

    第一步: 安装jdk,tomcat,ant,并配置环境,并在maven里配置jar包;

    <?xml version="1.0" encoding="UTF-8"?>

    <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/xsd/maven-4.0.0.xsd">

    <modelVersion>4.0.0</modelVersion>

    <groupId>com.majian</groupId>

    <artifactId>WebService02</artifactId>

    <version>1.0-SNAPSHOT</version>

    <packaging>war</packaging>

    <properties>

    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>

    <maven.compiler.source>1.7</maven.compiler.source>

    <maven.compiler.target>1.7</maven.compiler.target>

    <cxf.version>3.0.1</cxf.version>

    <spring.version>4.3.12.RELEASE</spring.version>

    </properties>

    <dependencies>

    <dependency>

    <groupId>org.apache.cxf</groupId>

    <artifactId>cxf-rt-frontend-jaxws</artifactId>

    <version>${cxf.version}</version>

    </dependency>

    <dependency>

    <groupId>org.apache.cxf</groupId>

    <artifactId>cxf-rt-transports-http</artifactId>

    <version>${cxf.version}</version>

    </dependency>

    <dependency>

    <groupId>com.alibaba</groupId>

    <artifactId>fastjson</artifactId>

    <version>1.2.31</version>

    </dependency>

    <dependency>

    <groupId>org.springframework</groupId>

    <artifactId>spring-core</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-context</artifactId>

    <version>${spring.version}</version>

    </dependency>

    <dependency>

    <groupId>org.springframework</groupId>

    <artifactId>spring-beans</artifactId>

    <version>${spring.version}</version>

    </dependency>

    <dependency>

    <groupId>wsdl4j</groupId>

    <artifactId>wsdl4j</artifactId>

    <version>1.6.2</version>

    </dependency>

    <dependency>

    <groupId>org.apache.cxf</groupId>

    <artifactId>cxf-rt-transports-http-jetty</artifactId>

    <version>3.1.6</version>

    </dependency>

    <dependency>

    <groupId>org.apache.cxf</groupId>

    <artifactId>cxf-rt-frontend-jaxws</artifactId>

    <version>${cxf.version}</version>

    </dependency>

    <dependency>

    <groupId>org.apache.cxf</groupId>

    <artifactId>cxf-rt-transports-http-jetty</artifactId>

    <version>${cxf.version}</version>

    </dependency>

    </dependencies>

    </project>


    为什么要用到ant这个工具呢?Ant做为一种工具已经广泛被使用,并且历史悠久。

    使用ant的内置命令,可以编译java源文件(javac),运行java文件(java),给class文件打包(jar、war、ear),

    也可以创建(mkdir)、删除(del)、拷贝(copy),甚至可以使用ant执行sql文件。

    由于ant是用xml语言写成的文件,并取默认名为build.xml文件。

    所以,今后大家应该在见到名为build.xml文件时知道这是一个ant的文件。

    第二步:Web.xml中添加该段配置,org.apache.cxf.transport.servlet.CXFServlet用于在web容器中发布WebService。

    <!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "http://java.sun.com/dtd/web-app_2_3.dtd" >

    <web-app>

    <display-name>Archetype Created Web Application</display-name>

    <context-param>

    <param-name>contextConfigLocation</param-name>

    <param-value>/WEB-INF/spring-context.xml</param-value>

    </context-param>

    <listener>

    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>

    </listener>

    <servlet>

    <servlet-name>CXFServlet</servlet-name>

    <servlet-class>org.apache.cxf.transport.servlet.CXFServlet</servlet-class>

    <load-on-startup>1</load-on-startup>

    </servlet>

    <servlet-mapping>

    <servlet-name>CXFServlet</servlet-name>

    <url-pattern>/services/*</url-pattern>

    </servlet-mapping>

    </web-app>


    spring-context.xml中添加 implementor引用上面的bean,address和路径中问号前的访问相同。

    <?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:jaxws="http://cxf.apache.org/jaxws" xmlns:jaxrs="http://www.springframework.org/schema/c"

          xsi:schemaLocation="http://www.springframework.org/schema/beans

    http://www.springframework.org/schema/beans/spring-beans-2.5.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-extension-*.xml" />

    <import resource="classpath*:META-INF/cxf/cxf-servlet.xml" />

    <jaxws:endpoint id="sumAndMul" implementor="com.majian.service.impl.CountServiceImpl"

                    address="/sumAndMul"></jaxws:endpoint>

    </beans>


    第三步:编写接口CalculatorService.java,这个接口就是提供web服务的那个接口,里面的方法都是提供给人家调用。

    package com.majian.service;

    import javax.jws.WebService;

    import java.math.BigDecimal;

    /**

    * Created by majian on 2018/9/14.

    */

    @WebService

    public interface CountService {

    public String result(BigDecimal[] factors);

    }


    第四步:编写接口的实现类CountServiceImpl.java,类里面要实现接口的方法。

    package com.majian.service.impl;

    import com.majian.service.CountService;

    import javax.jws.WebService;

    import java.math.BigDecimal;

    /**

    * Created by majian on 2018/9/14.

    */

    @WebService(endpointInterface ="com.majian.service.CountService")

    public class CountServiceImplimplements CountService{

    @Override

        public String result(BigDecimal[] factors) {

    BigDecimal add=new BigDecimal("0");

    BigDecimal mul=new BigDecimal("1");

    for (BigDecimal tmp :factors){

    mul=mul.multiply(tmp);

    add = add.add(tmp);

    }

    return "两个数的和sum="+add.toString()+"\n 两个数的积mul="+mul.toString();

    }

    }

    第五步:调用服务

    可以通过tomcat服务器,直接配合就行,启动地址http://localhost:8081/{项目名}/services:

    可以通过main方法,如下:

    package com.majian.controller;

    import com.majian.service.impl.CountServiceImpl;

    import javax.xml.ws.Endpoint;

    /**

    * Created by majian on 2018/9/15.

    */

    public class Server {

    public static void main(String[] args) {

    System.out.println("start Web...");

    CountServiceImpl countService=new CountServiceImpl();

    String address="http://localhost:8081/web/services";

    Endpoint publish = Endpoint.publish(address, countService);

    System.out.println("End Web....");

    }

    }


    第六步:生成客户端代码

    wsdl2java http://localhost:8081/web/services/sumAndMul?wsdl

    D:\workspace\WebClient02\src\main\java>wsdl2java http://localhost:8081/web/services/sumAndMul?wsdl

    第七步:编写客户端代码

    package com.majian.service;

    import com.majian.service.impl.CountServiceImplService;

    import java.math.BigDecimal;

    import java.util.ArrayList;

    import java.util.List;

    /**

    * Created by majian on 2018/9/14.

    */

    public class Client {

    public static void main(String[] args) {

    CountServiceImplService factory =new CountServiceImplService();

    CountService service = factory.getCountServiceImplPort();

    List list=new ArrayList();

    BigDecimal big1 =new BigDecimal(38);

    BigDecimal big2=new BigDecimal(42);

    list.add(big1);

    list.add(big2);

    String s = service.result(list);

    System.out.println(s);

    }

    }


    结果:
    两个数的和sum=80

    两个数的积mul=1596

    服务端项目结构:

    服务端结构

    客户端结构

    客户端结构

    代码后期会传到GitHub上。。。。。

    相关文章

      网友评论

          本文标题:CXF构建webservice解析

          本文链接:https://www.haomeiwen.com/subject/brctnftx.html