WebService系列二:使用JDK和CXF框架开发WebService

一、使用JDK开发WebService

服务端程序创建:

1.新建一个JDK开发webservice的服务端maven项目JDKWebServiceServer

2. 定义一个接口,使用@WebService注解标注接口,使用@WebMethod注解标注接口中定义的所有方法

 1 package com.study.webservice.ws;
 2
 3 import javax.jws.WebMethod;
 4 import javax.jws.WebService;
 5
 6 /**
 7  * 定义一个接口,使用@WebService注解标注接口,使用@WebMethod注解标注接口中定义的所有方法
 8  *
 9  */
10 //使用@WebService注解标注IWebService接口
11 @WebService
12 public interface IWebService {
13
14     //使用@WebMethod注解标注IWebService接口中的方法
15     @WebMethod
16     String sayHello(String name);
17
18     @WebMethod
19     String save(String name,String pwd);
20 }

3. 编写接口的实现类,使用@WebService注解标注实现类,实现接口中定义的所有方法

package com.study.webservice.ws.impl;

import javax.jws.WebService;

import com.study.webservice.ws.IWebService;

/**
 * 编写接口的实现类,使用@WebService注解标注实现类,实现接口中定义的所有方法
 *
 */
//使用@WebService注解标注IWebService接口的实现类WebServiceImpl
@WebService
public class WebServiceImpl implements IWebService {

    @Override
    public String sayHello(String name) {
        System.out.println("WebService sayHello "+name);
        return "sayHello "+name;
    }

    @Override
    public String save(String name, String pwd) {
        System.out.println("WebService save "+name+", "+pwd);
        return "save Success";
    }

}

4. 使用Endpoint(终端)类发布webservice

package com.study.webservice.ws.publish;

import javax.xml.ws.Endpoint;

import com.study.webservice.ws.impl.WebServiceImpl;

/**
 * 使用Endpoint(终端)类发布webservice
 *
 */
public class WebServicePublish {

    public static void main(String[] args) {
        //定义WebService的发布地址,这个地址就是提供给外界访问Webervice的URL地址,URL地址格式为:http://ip:端口号/xxxx
        //String address = "http://192.168.152.1:8989/";这个WebService发布地址的写法是合法的
        //String address = "http://192.168.152.1:8989/Webservice";这个WebService发布地址的是合法的
        String address = "http://192.168.152.1:8989/WS_Server/Webservice";
        //使用Endpoint类提供的publish方法发布WebService,发布时要保证使用的端口号没有被其他应用程序占用
        Endpoint.publish(address , new WebServiceImpl());
        System.out.println("发布webservice成功!");
    }
}

6. 启动主程序WebServicePublish,效果如下

7.在浏览器中输入地址http://192.168.152.1:8989/WS_Server/Webservice?wsdl,可看到webservice发布成功

客户端程序创建:

1. 新建一个JDK开发webservice的客户端maven项目JDKWebServiceClient

2. 借助jdk的wsimort.exe工具生成客户端代码,wsimort.exe工具位于Jdk的bin目录下

3. 执行命令:wsimport -keep url(url为wsdl文件的路径)生成客户端代码。

打开命令行窗口,切换到src/main/java目录,执行"wsimport -keep http://192.168.152.1:8989/WS_Server/Webservice?wsdl"生成客户端代码,如下图所示:

4. 借助生成的代码编写调用WebService对外提供的方法

package com.study.webservice.ws.client;

import com.study.webservice.ws.impl.WebServiceImpl;
import com.study.webservice.ws.impl.WebServiceImplService;

/**
 * 调用WebService的客户端
 *
 */
public class WSClient {
    public static void main(String[] args) {
        //创建一个用于产生WebServiceImpl实例的工厂,WebServiceImplService类是wsimport工具生成的
        WebServiceImplService factory = new WebServiceImplService();
        //通过工厂生成一个WebServiceImpl实例,WebServiceImpl是wsimport工具生成的
        WebServiceImpl wsImpl = factory.getWebServiceImplPort();
        //调用WebService的sayHello方法
        String resResult = wsImpl.sayHello("小不点");
        System.out.println("调用WebService的sayHello方法返回的结果是:"+resResult);
        System.out.println("---------------------------------------------------");
        //调用WebService的save方法
        resResult = wsImpl.save("小不点","123");
        System.out.println("调用WebService的save方法返回的结果是:"+resResult);
    }
}

5. 启动客户端主程序WSClient,效果如下

二、使用CXF框架开发WebService

服务端程序创建:

1.新建一个使用CXF框架开发webservice的服务端maven项目CXFWebServiceServer

2. 在pom.xml中引入相关依赖

  <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <cxf.version>3.1.4</cxf.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>  

    <!-- 使用cxf内置的jetty服务器发布WebService -->
    <dependency>
            <groupId>org.apache.cxf</groupId>
            <artifactId>cxf-rt-transports-http-jetty</artifactId>
            <version>${cxf.version}</version>
    </dependency> 

2. 定义一个接口,使用@WebService注解标注接口

package com.study.webservice.ws;

import javax.jws.WebService;

/**
 * 定义一个接口,使用@WebService注解标注接口
 *
 */
//使用@WebService注解标注IWebService接口
@WebService
public interface IWebService {

    String sayHello(String name);

    String save(String name,String pwd);
}

3. 编写接口的实现类,使用@WebService注解标注实现类,实现接口中定义的所有方法,注意代码标红色的地方

package com.study.webservice.ws.impl;

import javax.jws.WebService;

import com.study.webservice.ws.IWebService;

/**
 * 编写接口的实现类,使用@WebService注解标注实现类,实现接口中定义的所有方法
 *
 */
//使用@WebService注解标注IWebService接口的实现类WebServiceImpl
@WebService(serviceName = "IWebService",
endpointInterface = "com.study.webservice.ws.IWebService"
)
public class WebServiceImpl implements IWebService {

    @Override
    public String sayHello(String name) {
        System.out.println("WebService sayHello "+name);
        return "sayHello "+name;
    }

    @Override
    public String save(String name, String pwd) {
        System.out.println("WebService save "+name+", "+pwd);
        return "save Success";
    }

}

4. 使用CXF的JaxWsServerFactoryBean发布webservice

package com.study.webservice.ws.publish;

import org.apache.cxf.jaxws.JaxWsServerFactoryBean;

import com.study.webservice.ws.IWebService;
import com.study.webservice.ws.impl.WebServiceImpl;

/**
 * 使用CXF的JaxWsServerFactoryBean发布webservice
 *
 */
public class WebServicePublish {

    public static void main(String[] args) {
        //定义WebService的发布地址,这个地址就是提供给外界访问Webervice的URL地址,URL地址格式为:http://ip:端口号/xxxx
        //String address = "http://192.168.152.1:8989/";这个WebService发布地址的写法是合法的
        //String address = "http://192.168.152.1:8989/Webservice";这个WebService发布地址的是合法的
        String address = "http://192.168.152.1:8989/WS_Server/Webservice";
        //使用Endpoint类提供的publish方法发布WebService,发布时要保证使用的端口号没有被其他应用程序占用
        /*Endpoint.publish(address , new WebServiceImpl());*/

        JaxWsServerFactoryBean factory = new JaxWsServerFactoryBean();
        factory.setServiceClass(IWebService.class);
        //服务发布地址
        factory.setAddress(address);
        factory.setServiceBean(new WebServiceImpl());
        factory.create();

        System.out.println("发布webservice成功!");
    }
}

5. 启动服务端主程序WebServicePublish

6. 在浏览器中输入地址http://192.168.152.1:8989/WS_Server/Webservice?wsdl,可看到webservice发布成功

客户端程序创建:

1. 新建一个使用CXF框架开发webservice的客户端maven项目CXFWebServiceClient

2. 在pom.xml中引入相关依赖

  <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <cxf.version>3.1.4</cxf.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>  

3. 借助jdk的wsimort.exe工具生成客户端代码,wsimort.exe工具位于Jdk的bin目录下

4. 执行命令:wsimport -keep url(url为wsdl文件的路径)生成客户端代码。

打开命令行窗口,切换到src/main/java目录,执行"wsimport -keep http://192.168.152.1:8989/WS_Server/Webservice?wsdl"生成客户端代码,如下图所示:

5. 使用CXF的JaxWsProxyFactoryBean调用WebService的服务端

package com.study.webservice.ws.client;

import org.apache.cxf.jaxws.JaxWsProxyFactoryBean;

import com.study.webservice.ws.IWebService;

/**
 * 使用CXF的JaxWsProxyFactoryBean调用WebService的服务端
 *
 */
public class WSClient {
    public static void main(String[] args) {
        JaxWsProxyFactoryBean jwpfb = new JaxWsProxyFactoryBean();
        jwpfb.setServiceClass(IWebService.class);
        String address = "http://192.168.152.1:8989/WS_Server/Webservice";
        jwpfb.setAddress(address);
        IWebService hs = (IWebService) jwpfb.create();
        //调用WebService的sayHello方法
        String resResult = hs.sayHello("小不点");
        System.out.println("调用WebService的sayHello方法返回的结果是:"+resResult);
        System.out.println("---------------------------------------------------");
        //调用WebService的save方法
        resResult = hs.save("小不点","123");
        System.out.println("调用WebService的save方法返回的结果是:"+resResult);
    }
}

6.启动客户端主程序,效果如下:

源代码获取地址:

https://github.com/leeSmall/WebService

参考文章:

http://www.cnblogs.com/xdp-gacl/p/4259481.html

https://www.cnblogs.com/luangeng/p/6575061.html

原文地址:https://www.cnblogs.com/leeSmall/p/8969802.html

时间: 2024-10-19 06:46:36

WebService系列二:使用JDK和CXF框架开发WebService的相关文章

MyEclipse+CXF框架开发WebService

1 Apache CXF 简介 Apache CXF =Celtix + XFire,开始叫 Apache CeltiXfire,后来更名为 Apache CXF 了,以下简称为 CXF.CXF 继承了 Celtix 和 XFire 两大开源项目的精华,提供了对 JAX-WS 全面的支持,并且提供了多种 Binding .DataBinding.Transport 以及各种 Format 的支持,并且可以根据实际项目的需要,采用代码优先(Code First)或者 WSDL 优先(WSDL Fi

基于CXF框架的webservice简单的SC两端出入拦截器实现。

开发工具:  ECLIPSE(EE) + CXF(2.5.9) (I)可以现在eclipse中使用JDK来创建webservice基础服务.(没有CXF框架的webservice) (1)新建一个java project. (命名为FirstWebService) 新建一个interface接口.改接口就是相当于webservice中的SEI. (在接口类定义前使用JDK自带webservice注释[email protected] SEI方法则是使用@WebMethod生命方法.) (2)在定

Eclipse+CXF框架开发Web服务实战

一. 说明 采用CXF框架开发webservice. 所用软件及版本如下. ? 操作系统:Window XP SP3. ? JDK:JDK1.6.0_07,http://www.oracle.com/technetwork/java/javase/downloads/index.html. ? Tomcat:apache-tomcat-6.0.14.exe,http://tomcat.apache.org/. ? IDE:eclipse-jee-juno-SR1-win32.zip,http:/

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

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

用cxf 框架调用webService(第二种,jaxWsServerFactoryBean带接口)

使用cxf 提供类 JaxWsProxyFactoryBean 来调用 webservice 的服务端....... JaxWsProxyFactoryBean 是  ClientProxyFactoryBean  的子类... package cn.itcast.cxf.client; import org.apache.cxf.jaxws.JaxWsProxyFactoryBean; import cn.itcast.server.JaxInteface.UserService; /** *

CXF框架实现webservice实例

服务器端: 1.新建Web项目,例如CXF_Server,导入cxf-2.4.2的相关jar包,如下图所示: 2.新建一个webservice服务接口MyService,该接口通过注解来暴露服务:  package com.founder.service; import javax.jws.WebService; @WebService(serviceName="MyServiceManage") public interface MyService { /**  * add():定义

用cxf 框架发布webService(第二种,ServerFactoryBean带接口)

接口类需要注解 可以添加输入输出拦截器 package cn.itcast.cxf.server; import org.apache.cxf.interceptor.LoggingInInterceptor; import org.apache.cxf.interceptor.LoggingOutInterceptor; import org.apache.cxf.jaxws.JaxWsServerFactoryBean; import cn.itcast.webservice.userSer

CXF Spring开发WebService,基于SOAP和REST方式

版本CXF2.6.9 添加的包文件 这个版本的不可在Tomcat7上运行,会出错. 配置文件 applicationContext.xml [html] view plain copy <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://ww

WebService学习总结(三)——使用JDK开发WebService

WebService学习总结(三)——使用JDK开发WebService一.WebService的开发手段 使用Java开发WebService时可以使用以下两种开发手段 1. 使用JDK开发(1.6及以上版本) 2.使用CXF框架开发(工作中)二.使用JDK开发WebService2.1.开发WebService服务器端 1.定义一个interface,使用@WebService注解标注接口,使用@WebMethod注解标注接口中定义的所有方法,如下所示:复制代码 1 package me.g