zoukankan      html  css  js  c++  java
  • cxf开发webservice服务器+客户端(各种类型的参数传递返回)

    开发环境:eclipse3.7+jdk1.6.0_29+tomcat6.0.37

    XFire搭建webservice: http://www.cnblogs.com/gavinYang/p/3525339.html
    JAX-WS搭建webservice:http://www.cnblogs.com/gavinYang/p/3525287.html

    源码下载地址: http://pan.baidu.com/s/1qWEtePm 

    Server

    1.新建一个接口类:UserService

    package com.gavin.service;
    
    import java.util.List;
    import javax.jws.WebParam;
    import javax.jws.WebService;
    
    @WebService
    public interface UserService {
    
        String getUserName(@WebParam(name="username")String username);
        
        User getUser(@WebParam(name="user")User user);
        
        List<User> getUserList(@WebParam(name="userList")List<User> userList);
        
        User getUserMap(@WebParam(name="userMap")User userMap);
        
        User[] getUserArray(@WebParam(name="userArray")User userArray);
    }

    2.接口实现类:UserServiceImpl

    package com.gavin.service;
    
    import java.util.List;
    
    public class UserServiceImpl implements UserService{
    
        @Override
        public String getUserName(String username) {
            // TODO 自动生成的方法存根
            return username;
        }
    
        @Override
        public User getUser(User user) {
            // TODO 自动生成的方法存根
            return user;
        }
    
        @Override
        public List<User> getUserList(List<User> userList) {
            // TODO 自动生成的方法存根
            return userList;
        }
    
        @Override
        public User getUserMap(User userMap) {
            // TODO 自动生成的方法存根
            return userMap;
        }
    
        @Override
        public User[] getUserArray(User userArray) {
            // TODO 自动生成的方法存根
            return userArray.getUserArray();
        }
    
    }

    User对象

    package com.gavin.service;
    
    import java.util.HashMap;
    
    public class User {
    
        private String username;
        private String userpass;
        private HashMap userMap;
        private User[] userArray;
        public User() {
        }
        
        public User(HashMap userMap) {
            this.userMap = userMap;
        }
        public User(User[] userArray) {
            this.userArray = userArray;
        }
        public User(String name,String pass) {
            this.username = name;
            this.userpass = pass;
        }
        
        public String getUsername() {
            return username;
        }
        public void setUsername(String username) {
            this.username = username;
        }
        public String getUserpass() {
            return userpass;
        }
        public void setUserpass(String userpass) {
            this.userpass = userpass;
        }
        public HashMap getUserMap() {
            return userMap;
        }
        public void setUserMap(HashMap userMap) {
            this.userMap = userMap;
        }
        public User[] getUserArray() {
            return userArray;
        }
        public void setUserArray(User[] userArray) {
            this.userArray = userArray;
        }
        
    }

    3.spring配置文件中配置cxf

    <?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"  
        xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.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-soap.xml" />
        <import resource="classpath:META-INF/cxf/cxf-servlet.xml" />
    
        <bean id="userServiceImpl" class="com.gavin.service.UserServiceImpl"></bean>
        
        <jaxws:endpoint id="userService" address="/getUserService" implementor="#userServiceImpl"></jaxws:endpoint>
    
    </beans>

    4.在web.xml配置cxf

    <?xml version="1.0" encoding="UTF-8"?>
    <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5">
      <display-name>server</display-name>
      
      <context-param>
          <param-name>contextConfigLocation</param-name>
          <param-value>/WEB-INF/spring.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>
      </servlet>
      <servlet-mapping>
          <servlet-name>CXFServlet</servlet-name>
        <url-pattern>/services/*</url-pattern>
      </servlet-mapping>
      
      <welcome-file-list>
        <welcome-file>index.jsp</welcome-file>
      </welcome-file-list>
    </web-app>

    做完上面的部分,server端就已经完成了,访问:http://localhost:8080/server/services/getUserService?wsdl

    Client

    1.必须将服务器端的User对象复制过来,才能进行对象传递返回,否则会出现类型转换异常
    2.测试server

    package com.gavin.cxf.test;
    
    import java.util.ArrayList;
    import java.util.HashMap;
    import java.util.List;
    
    import org.apache.cxf.endpoint.Client;
    import org.apache.cxf.jaxws.endpoint.dynamic.JaxWsDynamicClientFactory;
    import com.gavin.service.User;
    
    
    public class TestCXF {
    
        public static void main(String[] args) {
            System.out.println("=======================plain========================");
            Object[] plainResult = callService("http://localhost:8080/server/services/getUserService?wsdl", "getUserName", "gavin");
            System.out.println("plain result:"+plainResult[0]);
            System.out.println("=======================object========================");
            Object[] objectResult = callService("http://localhost:8080/server/services/getUserService?wsdl", "getUser", new User("gavin", "123456"));
            User user = (User)objectResult[0];
            System.out.println("object result:"+user.getUsername()+"/"+user.getUserpass());
            System.out.println("========================list=========================");
            List<User> list = new ArrayList<User>();
            list.add(new User("zhangsan", "666666"));
            list.add(new User("lisi", "888888"));
            Object[] listResult = callService("http://localhost:8080/server/services/getUserService?wsdl", "getUserList", list);
            List<User> userList = (List) listResult[0];
            for(User userInfo : userList){
                System.out.println("list result:"+userInfo.getUsername()+"/"+userInfo.getUserpass());
            }
            //map,array对象必须包在一个对象下面
            System.out.println("========================map==========================");
            HashMap map = new HashMap();
            map.put("name", "zs");
            //如果想在map中传递对象则需写成HashMap<String,User> map = new HashMap<String,User>();
            //map.put("user", new User("wangwu", "123456"));
            Object[] mapResult = callService("http://localhost:8080/server/services/getUserService?wsdl", "getUserMap", new User(map));
            User userMap = (User) mapResult[0];
            System.out.println("map resilt:"+userMap.getUserMap().get("name"));
            System.out.println("========================array=========================");
            Object[] arrayResult = callService("http://localhost:8080/server/services/getUserService?wsdl", "getUserMap", new User(new User[]{new User("kangkang","123456"),new User("jane","123456")}));
            User userArray = (User) arrayResult[0];
            for(User userInfo : userArray.getUserArray()){
                System.out.println("array result:"+userInfo.getUsername()+"/"+userInfo.getUserpass());
            }
        }
        
        public static Object[] callService(String wsUrl, String method, Object...arg) { 
            JaxWsDynamicClientFactory dcf = JaxWsDynamicClientFactory.newInstance(); 
            Client client = dcf.createClient(wsUrl); 
            Object[] res = null; 
            try { 
                res = client.invoke(method, arg); 
            } catch (Exception e) { 
                e.printStackTrace(); 
            } 
            return res; 
        } 
    }

    打印结果显示:
    =======================plain========================
    plain result:gavin
    =======================object========================
    object result:gavin/123456
    ========================list=========================
    list result:zhangsan/666666
    list result:lisi/888888
    ========================map==========================
    map resilt:zs
    ========================array=========================
    array result:kangkang/123456
    array result:jane/123456

  • 相关阅读:
    [翻译]AxureBasic Interactions原型设计工具Axure学习第1.3节
    [翻译]AxurePage Properties原型设计工具Axure学习第1.2节
    更新数据库表的某一字段为限制范围的随机数
    silverlight带水印的自定义TextBox控件(版本2)
    silverlight带水印的TextBox
    [翻译]AxureMasters原型设计工具Axure学习第2.2节
    [翻译]AxureBuild Wireframes原型设计工具Axure学习第1.1节
    [翻译]Windows Phone(Silverlight) 控件数据绑定
    [翻译]AxureDynamic Panel(Basic)原型设计工具Axure学习第2.1节
    假如你是新浪微博移动方向的产品经理
  • 原文地址:https://www.cnblogs.com/gavinYang/p/3551345.html
Copyright © 2011-2022 走看看