CXF Web Service

一、下载apache-cxf-3.1.4.zip。

二、编写服务端

1、新建工程,导入apache-cxf-3.1.4.zip下的jar包。

2、编写一个Web Service用来传输参数的类。

package com.ws.services.entity;

import javax.xml.bind.annotation.XmlRootElement;
/**
 * 该类为Web Service中的参数、返回值类型,故需要使用JAXB注解告诉CXF如何在XML和Java Object之间处理,
 * 因为,SOAP消息格式包装的是一段XML代码,无论是服务器端,还是客户端,
 * 在接收到SOAP消息时,都需要将XML转化为Java Object,
 * 在发送SOAP消息时,需要将Java Object转化为XML。
 * */
@XmlRootElement(name = "People")
public class People {
    private String id;
    private String name;

    public String getId() {
        return id;
    }

    public void setId(String id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
}

3、编写Web Service接口。

package com.ws.services;

import java.util.List;
import javax.jws.WebService;
import com.ws.services.entity.People;

@WebService
public interface PeopleService {

    public String add(People people);

    public String del(People people);

    public String modify(People people);

    public People getOne(String id);

    public List<People> getList(String name);
}

4、编写Web Service接口的实现类。

package com.ws.services;

import java.util.ArrayList;
import java.util.List;
import javax.jws.WebService;
import com.ws.services.entity.People;

@WebService(endpointInterface="com.ws.services.PeopleService")
public class PeopleServiceImpl implements PeopleService {

    @Override
    public String add(People people) {
        // TODO Auto-generated method stub
        System.out.println("ADD:"+people.getId()+","+people.getName());
        System.out.println("SUCCESS");
        return "ADD SUCCESS";
    }

    @Override
    public String del(People people) {
        // TODO Auto-generated method stub
        System.out.println("DEL:"+people.getId()+","+people.getName());
        System.out.println("SUCCESS");
        return "DEL SUCCESS";
    }

    @Override
    public String modify(People people) {
        // TODO Auto-generated method stub
        System.out.println("MODIFY:"+people.getId()+","+people.getName());
        System.out.println("SUCCESS");
        return "MODIFY SUCCESS";
    }

    @Override
    public People getOne(String id){
        // TODO Auto-generated method stubSystem.out.println("QRY BEGIN");
        People people=new People();
        people.setId("004");
        people.setName("Name-004");
        System.out.println("SUCCESS");
        return people;

    }
    @Override
    public List<People> getList(String name){
        // TODO Auto-generated method stub
        List<People> list=new ArrayList<People>();
        People people0=new People();
        People people1=new People();
        people0.setId("005");
        people0.setName(name+"-005");
        people1.setId("006");
        people1.setName(name+"-006");
        list.add(people0);
        list.add(people1);
        System.out.println("SUCCESS");
        return list;
    }
}

5、发布Web Service服务

package com.ws.services;

import javax.xml.ws.Endpoint;

public class SoapServer {
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        //发布服务
        Endpoint.publish("http://127.0.0.1:80/peopleService", new PeopleServiceImpl());
    }
}

6、测试服务发布情况

运行Java Application,访问http://127.0.0.1/peopleService?wsdl

  <?xml version="1.0" encoding="UTF-8" ?>
- <!--  Published by JAX-WS RI at http://jax-ws.dev.java.net. RI‘s version is JAX-WS RI 2.2.4-b01.
  -->
- <!--  Generated by JAX-WS RI at http://jax-ws.dev.java.net. RI‘s version is JAX-WS RI 2.2.4-b01.
  -->
- <definitions xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd" xmlns:wsp="http://www.w3.org/ns/ws-policy" xmlns:wsp1_2="http://schemas.xmlsoap.org/ws/2004/09/policy" xmlns:wsam="http://www.w3.org/2007/05/addressing/metadata" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:tns="http://services.ws.com/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="http://schemas.xmlsoap.org/wsdl/" targetNamespace="http://services.ws.com/" name="PeopleServiceImplService">
- <types>
- <xsd:schema>
  <xsd:import namespace="http://services.ws.com/" schemaLocation="http://127.0.0.1/peopleService?xsd=1" />
  </xsd:schema>
  </types>
- <message name="add">
  <part name="parameters" element="tns:add" />
  </message>
- <message name="addResponse">
  <part name="parameters" element="tns:addResponse" />
  </message>
- <message name="modify">
  <part name="parameters" element="tns:modify" />
  </message>
- <message name="modifyResponse">
  <part name="parameters" element="tns:modifyResponse" />
  </message>
- <message name="getOne">
  <part name="parameters" element="tns:getOne" />
  </message>
- <message name="getOneResponse">
  <part name="parameters" element="tns:getOneResponse" />
  </message>
- <message name="getList">
  <part name="parameters" element="tns:getList" />
  </message>
- <message name="getListResponse">
  <part name="parameters" element="tns:getListResponse" />
  </message>
- <message name="del">
  <part name="parameters" element="tns:del" />
  </message>
- <message name="delResponse">
  <part name="parameters" element="tns:delResponse" />
  </message>
- <portType name="PeopleService">
- <operation name="add">
  <input wsam:Action="http://services.ws.com/PeopleService/addRequest" message="tns:add" />
  <output wsam:Action="http://services.ws.com/PeopleService/addResponse" message="tns:addResponse" />
  </operation>
- <operation name="modify">
  <input wsam:Action="http://services.ws.com/PeopleService/modifyRequest" message="tns:modify" />
  <output wsam:Action="http://services.ws.com/PeopleService/modifyResponse" message="tns:modifyResponse" />
  </operation>
- <operation name="getOne">
  <input wsam:Action="http://services.ws.com/PeopleService/getOneRequest" message="tns:getOne" />
  <output wsam:Action="http://services.ws.com/PeopleService/getOneResponse" message="tns:getOneResponse" />
  </operation>
- <operation name="getList">
  <input wsam:Action="http://services.ws.com/PeopleService/getListRequest" message="tns:getList" />
  <output wsam:Action="http://services.ws.com/PeopleService/getListResponse" message="tns:getListResponse" />
  </operation>
- <operation name="del">
  <input wsam:Action="http://services.ws.com/PeopleService/delRequest" message="tns:del" />
  <output wsam:Action="http://services.ws.com/PeopleService/delResponse" message="tns:delResponse" />
  </operation>
  </portType>
- <binding name="PeopleServiceImplPortBinding" type="tns:PeopleService">
  <soap:binding transport="http://schemas.xmlsoap.org/soap/http" style="document" />
- <operation name="add">
  <soap:operation soapAction="" />
- <input>
  <soap:body use="literal" />
  </input>
- <output>
  <soap:body use="literal" />
  </output>
  </operation>
- <operation name="modify">
  <soap:operation soapAction="" />
- <input>
  <soap:body use="literal" />
  </input>
- <output>
  <soap:body use="literal" />
  </output>
  </operation>
- <operation name="getOne">
  <soap:operation soapAction="" />
- <input>
  <soap:body use="literal" />
  </input>
- <output>
  <soap:body use="literal" />
  </output>
  </operation>
- <operation name="getList">
  <soap:operation soapAction="" />
- <input>
  <soap:body use="literal" />
  </input>
- <output>
  <soap:body use="literal" />
  </output>
  </operation>
- <operation name="del">
  <soap:operation soapAction="" />
- <input>
  <soap:body use="literal" />
  </input>
- <output>
  <soap:body use="literal" />
  </output>
  </operation>
  </binding>
- <service name="PeopleServiceImplService">
- <port name="PeopleServiceImplPort" binding="tns:PeopleServiceImplPortBinding">
  <soap:address location="http://127.0.0.1/peopleService" />
  </port>
  </service>
  </definitions>

三、编写客户端代码

1、使用WSDL2Java生成Web Service客户端代码

(1)配置CXF环境变量

path中加入apache-cxf-3.1.4\bin的绝对路径。

(2)使用WSDL2Java生成Web Service客户端代码,命令如下:

wsdl2java -p com.ws.client -d D:\\src -client http://127.0.0.1/peopleService?wsdl

将生成的类拷入Web Service客户端工程中。

2、编写客户端测试方法

package com.ws;

import java.text.ParseException;
import java.util.List;
import org.apache.cxf.jaxws.JaxWsProxyFactoryBean;
import com.ws.client.People;
import com.ws.client.PeopleService;

public class SoapClient {
    public static void main(String[] args) throws ParseException {
        JaxWsProxyFactoryBean soapFactoryBean = new JaxWsProxyFactoryBean();
        soapFactoryBean.setAddress("http://127.0.0.1/peopleService");
        soapFactoryBean.setServiceClass(PeopleService.class);
        Object o = soapFactoryBean.create();
        PeopleService ps = (PeopleService) o;
        People p1 = new People();
        p1.setId("001");
        p1.setName("陈一");
        ps.add(p1);

        People p2 = new People();
        p2.setId("002");
        p2.setName("吕二");
        ps.del(p2);

        People p3 = new People();
        p3.setId("003");
        p3.setName("张三");
        ps.del(p3);

        People p4=ps.getOne("004");
        System.out.println("004:"+p4.getId()+","+p4.getName());

        List<People> list=ps.getList("王五");
        for(People p:list){
            System.out.println(":"+p.getId()+","+p.getName());
        }

    }
}

最后,进行测试。

备注:

webservice服务端启动时,报错:prefix wsdp is not bound to a namespace,去掉下列四个jar包,

cxf-services-ws-discovery-api-3.1.4.jar

cxf-services-ws-discovery-service-3.1.4.jar

cxf-services-wsn-api-3.1.4.jar

cxf-services-wsn-core-3.1.4.jar

时间: 2024-10-17 02:13:37

CXF Web Service的相关文章

CXF Web Service的Hello World之一 搭建环境

摘要 本文介绍如何配置 Eclipse + Java EE + Apache CXF + Tomcat + JDK 的开发环境,用于开发CXF Web Service. JDK 版本:1.7.0_71,下载地址:http://www.oracle.com/technetwork/java/javase/downloads/index.html,我下载的安装包文件名:jdk-7u71-windows-x64.exe. 配置环境变量,参见下面的脚本:setx_java_env.bat,注意修改ROO

基于Maven在Spring中集成CXF Web Service框架

引言: 在跨系统和跨平台的系统通信中,WebService是一个事实上的标准,其以平台无关性,获得了广泛的应用.本文将讲述如何基于Spring来集成CXF,并开发出第一个Hello World的应用. 1.  Web Service是什么? Web service是一个平台独立的,低耦合的,自包含的.基于可编程的web的应用程序,可使用开放的XML(标准通用标记语言下的一个子集)标准来描述.发布.发现.协调和配置这些应用程序,用于开发分布式的互操作的应用程序. Web Service技术, 能使

Web Service学习之六:CXF解决无法处理的数据类型

CXF不能够处理像Map复杂的数据类型,需要单独转换处理. 总体思路:创建一个转换器和一个对应的可以处理的数据结构类型,将不能处理的类型转换成可以处理的类型: 步骤: 一.创建一个可以处理的类型 举例:要转换Map<String,User> package ws; import java.util.List; public class StringUser { public static class Entry { private String key; private User value;

Web Service笔记(五):CXF开发RESTful风格的Web Service

前言: 1.Web Service笔记(五):利用CXF结合Spring开发web service 2.XML学习笔记(三):Jaxb负责xml与javaBean映射 3.jax-rs详解 4.可以使用浏览器的工具调试:如 Firefox 的RESTClient 和chrome的REST Console. 一.配置Spring的配置文件 1.需要引入新的 jar 包. 2.配置 applicationContext-server.xml 文件.使用 jaxrs:server ,记得引入jaxrs

Web Service (四) 手动发布Web Service接口-CXF与Spring集成

当我们发布完Web Service接口之后有两种方式可以调用Web service服务,一种是通过动态客户端方式,另一种是引用服务端的接口,引用服务端接口的方式对于客户端同服务器端耦合比较大,而使用WSDL的方式客户端不知道服务端的存在就可以调用服务器的方法. 下面是项目的结构图: 1.Web Service发布项目 2.编写服务端接口类以及实现类,如下,同上一篇自动发布接口,多了一个注解@WebService package com.test.webservice; import javax.

Web Service学习-CXF开发Web Service实例demo(一)

Web Service是什么? Web Service不是框架.更甚至不是一种技术. 而是一种跨平台,跨语言的规范 Web Service解决什么问题: 为了解决不同平台,不同语言所编写的应用之间怎样调用问题.比如.有一个C语言写的程序.它想去调用java语言写的某个方法. 集中解决:1,远程调用 2.跨平台调用 3,跨语言调用 实际应用: 1.同一个公司的新,旧系统的整合.Linux上的java应用,去调用windows平台的C应用 2,不同公司的业务整合.业务整合就带来不同公司的系统整合.不

Apache CXF实现Web Service(4)——Tomcat容器和Spring实现JAX-RS(RESTful) web service

准备 我们仍然使用 Apache CXF实现Web Service(2)——不借助重量级Web容器和Spring实现一个纯的JAX-RS(RESTful) web service 中的代码作为基础,并引入spring来进行RESTful web service的配置和管理. 项目目录结构如下图 首先我们要在web.xml中加入通过Spring的ContextLoaderListener加载的Spring运行时环境以及CXF的Spring配置文件 web.xml <?xml version="

Web Service 那点事儿(4)—— 使用 CXF 开发 REST 服务

现在您已经学会了如何使用 CXF 开发基于 SOAP 的 Web 服务,也领略了 Spring + CXF 这个强大的组合,如果您错过了这精彩的一幕,请回头看看这篇吧: Web Service 那点事儿(2) —— 使用 CXF 开发 SOAP 服务 今天我们将视角集中在 REST 上,它是继 SOAP 以后,另一种广泛使用的 Web 服务.与 SOAP 不同,REST 并没有 WSDL 的概念,也没有叫做“信封”的东西,因为 REST 主张用一种简单粗暴的方式来表达数据,传递的数据格式可以是

使用CXF开发Web Service服务

1.使用CXF开发Web Service服务端 1.1 开发一个Web Service业务接口,该接口要用@WebService修饰 (1)创建一个Java项目MyServer (2)在MyServer项目中创建一个接口HelloWorld package com.xju.ws; import javax.jws.WebService; @WebService public interface HelloWorld { String sayHello(String name); } 1.2 开发