cxf webservice简单应用

Server端

server部署到一个端口号为80的tomcat中

CXFController.java

package com.lwj.controller;

import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import com.lwj.util.Privileges;
@WebServlet("/login")
public class CXFController extends HttpServlet {

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp)
            throws ServletException, IOException {
        doPost(req, resp);
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp)
            throws ServletException, IOException {

        Map<String, List<Integer>> privileges = Privileges.getPrivileges();
// 查询当前坐席所能管理的客户,假设为,在这里固定几个数据

        List<Integer> ids1 = new ArrayList<Integer>();
        ids1.add(1);
        ids1.add(2);
        ids1.add(3);

        List<Integer> ids2 = new ArrayList<Integer>();
        ids2.add(4);
        ids2.add(5);
        ids2.add(6);

        privileges.put("fw1950", ids1);
        privileges.put("fw1951", ids2);

    }

}

CXFListener.java

package com.lwj.listener;

import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
import javax.servlet.annotation.WebListener;
import javax.xml.ws.Endpoint;

import com.lwj.service.ServerImpl;
import com.lwj.service.IServer;
@WebListener
public class CXFListener implements ServletContextListener{

    @Override
    public void contextDestroyed(ServletContextEvent arg0) {

    }

    @Override
    public void contextInitialized(ServletContextEvent arg0) {
        System.out.println("web service start");
        IServer implementor= new ServerImpl();
        String address="http://localhost:8088/cxf";
        Endpoint.publish(address, implementor);
        System.out.println("web service started");
    }

}

User.java

package com.lwj.po;

public class User {

    private int id;
    private String account;
    private String name;

    public int getId() {
        return id;
    }

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

    public String getAccount() {
        return account;
    }

    public void setAccount(String account) {
        this.account = account;
    }

    public String getName() {
        return name;
    }

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

    @Override
    public String toString() {
        return "User [id=" + id + ", account=" + account + ", name=" + name
                + "]";
    }

}

IServer.java

package com.lwj.service;

import javax.jws.WebService;

@WebService
public interface IServer {

    String getUserOnline();
}

ServerImpl.java

package com.lwj.service;

import java.util.ArrayList;
import java.util.List;
import java.util.Map;

import javax.jws.WebService;

import com.google.gson.Gson;
import com.lwj.po.User;
import com.lwj.util.Privileges;
@WebService(endpointInterface="com.lwj.service.IServer")
public class ServerImpl implements IServer {

    @Override
    public String getUserOnline() {
        Map<String, List<Integer>> privileges = Privileges.getPrivileges();

        List<Integer> list = privileges.get("fw1950");
        List<User> users = new ArrayList<User>();
        if (list != null && list.contains(new Integer(1))) {
            User u = new User();
            u.setId(1);
            u.setAccount("fw1950");
            u.setName("刘文举");
            users.add(u);
        }

        Gson gson = new Gson();
        return gson.toJson(users);
    }

}

Privileges.java

package com.lwj.util;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

public class Privileges {

    private static Map<String, List<Integer>> privileges = new HashMap<String, List<Integer>>();

    public static Map<String, List<Integer>> getPrivileges() {
        return privileges;
    }

    public static void setPrivileges(Map<String, List<Integer>> privileges) {
        Privileges.privileges = privileges;
    }

}

Client端

client端部署到一个端口号为8082的tomcat上

User.java

package com.lwj.po;

public class User {

    private int id;
    private String account;
    private String name;

    public int getId() {
        return id;
    }

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

    public String getAccount() {
        return account;
    }

    public void setAccount(String account) {
        this.account = account;
    }

    public String getName() {
        return name;
    }

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

    @Override
    public String toString() {
        return "User [id=" + id + ", account=" + account + ", name=" + name
                + "]";
    }

}

ClientService.java

package com.lwj.service;

import java.io.IOException;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.cxf.endpoint.Client;
import org.apache.cxf.jaxws.endpoint.dynamic.JaxWsDynamicClientFactory;

@WebServlet("/test")
public class ClientService extends HttpServlet {

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp)
            throws ServletException, IOException {
        doPost(req, resp);
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp)
            throws ServletException, IOException {
        JaxWsDynamicClientFactory dcf = JaxWsDynamicClientFactory.newInstance();
        Client client = dcf.createClient("http://localhost:8088/cxf?wsdl");

        resp.setContentType("text/xml;charset=utf-8");
        resp.setHeader("Cache-Control", "no-cache");
        try {
            Object[] os = client.invoke("getUserOnline");
            for (Object o : os) {
                System.out.println(o.toString());
                resp.getWriter().write(o.toString());
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

}

如果调用的方法中存在参数,则只需要在invoke中第二个参数中加上,

如:server中方法,String getUserOnline(Integer id);

则在client中调用时:

client.invoke("getUserOnline",1);

index.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
<script type="text/javascript" src="${pageContext.request.contextPath}/resources/js/jquery-1.11.2.js"></script>
<style type="text/css">
#chartImage {
    position: fixed;
    right: 0;
    top: 30%;
    z-index: 1000;
    width: 50px;
    height: 50px;
    background-image: url(image/chart3.png);
    cursor: pointer;
}
</style>
</head>
<body>
    <div id="chartImage"></div>
    aaaaa aaaa
    <br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br />
    <br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br />
    <br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br />
    <br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br />
    <br /><br /><br /><br /><br /><br />
</body>
<script type="text/javascript">

document.getElementById("chartImage").onclick=function(){
    $.ajax({
        type:"get",
        url:"${pageContext.request.contextPath}/test",
        data:{},
        dataType:"json",
        success:function(data){
            alert(data[0].name+"("+data[0].account+")");
        }
    });
}

</script>
</html>

一、启动server,发布webservice请求

二、访问:http://localhost/server/login,初始化privileges

三、访问:http://localhost:8082/client/,进到index主页,点击右方的聊天图标(chart3.png),页面中弹出信息

  

  测试成功。

时间: 2024-10-09 20:45:22

cxf webservice简单应用的相关文章

webservice简单了解

一:WebService的功能是什么? WebService是一种跨编程语言和跨操作系统平台的远程调用技术 所谓远程调用,就是一台计算机a上的一个程序可以调用到另外一台计算机b上的一个对象的方法,譬如,银联提供给商场的pos刷卡系统(采用交互提问的方式来加深大家对此技术的理解). 远程调用技术有什么用呢?商场的POS机转账调用的转账方法的代码是在银行服务器上,还是在商场的pos机上呢? 什么情况下可能用到远程调用技术呢?例如,amazon,天气预报系统,淘宝网,校内网,百度等把自己的系统服务以w

CXF WebService整合SpringMVC的maven项目

首先推荐博客:http://www.cnblogs.com/xdp-gacl/p/4259481.html   http://blog.csdn.net/hu_shengyang/article/details/38384597 CXF是webService技术的一种实现工具,为什么用CXF来实现webService: 1.      Java的webService实现本身就是一个很耗性能的实现方案(xml与java对象之间在服务端以及客户端的互转比较消耗性能): 2.      目前java主

使用CXF开发简单的Web Service

使用CXF开发简单的Web Service 博文我们介绍了Web Service的基本概念,了解它的基本概念之后,我们这篇博文介绍一个开源的WebService框架-Apache CXF,并实现一个HelloWorld实例. 一.开始之前 SOA目前已经成为了人人皆知的热点,SOA是面向服务的架构,SOA的重点在于服务的重用,即Service1+Service2+Service3,所有的组件都是"即插即用"的.SOA是由IBM提倡的架构,希望以"组装电脑"的方式开发

CXF webService Map 适配器模式

CXF webservice 比JDK的实现强多了,直接支持了复杂类型,类,集合(先不说MAp),但是,Map的类型要支持的话,要自己写一个适配器. 其实不光是Map,有一些类CXF也不能直接支持,比如sql里面有个什么TimeStamp也要搞适配器. 1     写一个适配器,让他继承XmlAdapter<MyRole[], Map<String,List<Role>>>    其中前面是转换后的类型,后面是目标类型,也就是待转换的类型. package com.ja

webservice简单引用

//1.创建网站//2.新建项=>添加web服务//运行texttweb.asmx可以通过访问http://域名/webservice/texttweb.asmx来验证了//3.添加服务引用=>发现服务=>确定添加//4.添加窗体调用webservive对外发布的方法,可以调用显示webservice对外开发的方法了 web服务 1 using System; 2 using System.Collections.Generic; 3 using System.Data.SqlClien

WebService 简单安全验证

转http://www.cnblogs.com/luking/archive/2011/03/04/1970592.html WebService 简单安全验证 2011-03-04 10:34 by Vincent.Studio, 9815 阅读, 0 评论, 收藏, 编辑 最近新接了一个需要调用第三方WebService的项目,看到这个第三方WebService被调用的时候,需要授权用户名和密码,于是自己也想对WebService的安全授权这个方面进行了一下研究,以前调用的WebServic

.net请求Webservice简单实现天气预报功能

很久没有接触Webservice的知识,今天稍微复习了一下关于webservice,简单做了一个天气预报的功能,虽然界面丑的厉害,但功能算是实现了,以下是效果展示. 这东西没什么难点,只是天气预报的功能在网站类的开发中会经常用到,所以就简单写下,以便以后查阅. 1.新建一个网站或者web应用程序,添加一个aspx页面,用于展示天气数据.(这个应该不用细讲吧) 2.在网上找一个免费的天气预报的接口,我用的是Webxml网站的,地址如下: http://webservice.webxml.com.c

CXF webservice完整例子

Web Service技术应用广泛,可实现不同平台的数据交换,现做了一个CXF webservice小例子,供webservice初学者参考. 1.环境搭建 1.1  下载 Apache CXF  可以去官方下载 http://cxf.apache.org/ .也可点击http://pan.baidu.com/s/1jIPyOYU 我分享的云盘下载(apache-cxf-2.4.2).  解压文件 1.2  配置Apache CXF环境变量: 创建一个CXF_HOEM变量,值为CXF框架所在根目

Webservice简单调用示例

Webservice简单调用示例 webservice主要是一些站点为我们写好了的方法,供我们调用,当然我们也可以自己去编写自己的webservice,本文主要是通过一个小的实例,去如何调用webservice.下面先给出几个常用的webservice的调用地址. 快递查询接口 http://webservice.36wu.com/ExpressService.asmx ip查询接口 http://webservice.36wu.com/ipService.asmx 天气预报接口 http://