`

CXF处理JavaBean、Map以及复合类型

阅读更多
1. CXF处理JavaBean以及复合类型

User.java

package com.andrew.entity;

public class User {
    private Integer id;
    private String userName;
    private String password;
    public Integer getId() {
        return id;
    }
    public void setId(Integer id) {
        this.id = id;
    }
    public String getUserName() {
        return userName;
    }
    public void setUserName(String userName) {
        this.userName = userName;
    }
    public String getPassword() {
        return password;
    }
    public void setPassword(String password) {
        this.password = password;
    }
}

Role.java

package com.andrew.entity;

public class Role {
    private Integer id;
    private String roleName;
    public Role() {
        super();
    }
    public Role(Integer id, String roleName) {
        super();
        this.id = id;
        this.roleName = roleName;
    }
    public Integer getId() {
        return id;
    }
    public void setId(Integer id) {
        this.id = id;
    }
    public String getRoleName() {
        return roleName;
    }
    public void setRoleName(String roleName) {
        this.roleName = roleName;
    }
}

HelloWorld.java

package com.andrew.webservice;

import java.util.List;

import javax.jws.WebService;

import com.andrew.entity.Role;
import com.andrew.entity.User;

@WebService
public interface HelloWorld {
    public String say(String str);
    public List<Role> getRoleByUser(User user);
}

HelloWorldImpl.java

package com.andrew.webservice.impl;

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

import javax.jws.WebService;

import com.andrew.entity.Role;
import com.andrew.entity.User;
import com.andrew.webservice.HelloWorld;

@WebService
public class HelloWorldImpl implements HelloWorld {
    public String say(String str) {
        return "Hello " + str;
    }
    public List<Role> getRoleByUser(User user) {
        List<Role> roleList = new ArrayList<Role>();
        if (user != null) {
            if (user.getUserName().equals("andrew") && user.getPassword().equals("123456")) {
                roleList.add(new Role(1,"老板"));
                roleList.add(new Role(2,"经理"));
            } else if (user.getUserName().equals("tony") && user.getPassword().equals("123456")) {
                roleList.add(new Role(3,"员工"));
            }
            return roleList;
        } else {
            return null;          
        }
         
    }
}


生成需要的webservice客户端代码

生成代码的路径E:\studyWEBSERVICECXF\WS_Client\src\main\java

1) cmd
2) cd E:\studyWEBSERVICECXF\WS_Client\src\main\java
3) wsdl2java http://192.168.18.2/helloWorld?wsdl
会在WS_Client下生成代码
4) 启动WS_Server


Client.java

package com.andrew.client;

import java.util.List;

import com.andrew.webservice.HelloWorld;
import com.andrew.webservice.HelloWorldService;
import com.andrew.webservice.Role;
import com.andrew.webservice.User;

public class Client {
    public static void main(String[] args) {
        HelloWorldService service = new HelloWorldService();
        HelloWorld helloWorld = service.getHelloWorldPort();
        System.out.println(helloWorld.say("andrew"));
        User user = new User();
        user.setUserName("tony");
        user.setPassword("123456");
        List<Role> roleList = helloWorld.getRoleByUser(user);
        for (Role role : roleList) {
            System.out.println(role.getId() + "," + role.getRoleName());
        }
    }
}

Hello andrew
3,员工


2. CXF处理一些Map等复杂类型

HelloWorld.java

package com.andrew.webservice;

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

import javax.jws.WebService;
import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter;

import com.andrew.adapter.MapAdapter;
import com.andrew.entity.Role;
import com.andrew.entity.User;

@WebService
public interface HelloWorld {
    public String say(String str);
    public List<Role> getRoleByUser(User user);
    @XmlJavaTypeAdapter(MapAdapter.class)
    public Map<String,List<Role>> getRoles();
}

HelloWorldImpl.java

package com.andrew.webservice.impl;

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

import javax.jws.WebService;

import com.andrew.entity.Role;
import com.andrew.entity.User;
import com.andrew.webservice.HelloWorld;

@WebService
public class HelloWorldImpl implements HelloWorld {
    public String say(String str) {
        return "Hello " + str;
    }
    public List<Role> getRoleByUser(User user) {
        List<Role> roleList = new ArrayList<Role>();
        if (user != null) {
            if (user.getUserName().equals("andrew") && user.getPassword().equals("123456")) {
                roleList.add(new Role(1,"老板"));
                roleList.add(new Role(2,"经理"));
            } else if (user.getUserName().equals("tony") && user.getPassword().equals("123456")) {
                roleList.add(new Role(3,"员工"));
            }
            return roleList;
        } else {
            return null;          
        }
    }
    public Map<String, List<Role>> getRoles() {
        Map<String,List<Role>> map = new HashMap<String,List<Role>>();
        List<Role> roleList1 = new ArrayList<Role>();
        roleList1.add(new Role(1, "老板"));
        roleList1.add(new Role(2, "经理"));
        map.put("andrew", roleList1);
        List<Role> roleList2 = new ArrayList<Role>();
        roleList2.add(new Role(1, "员工"));
        map.put("tony", roleList2);
        return map;
    }
}

MapAdapter.java

package com.andrew.adapter;

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

import javax.xml.bind.annotation.adapters.XmlAdapter;

import com.andrew.entity.Role;

public class MapAdapter extends XmlAdapter<MyRole[], Map<String,List<Role>>> {
    @Override
    public Map<String, List<Role>> unmarshal(MyRole[] v) throws Exception {
        Map<String, List<Role>> map = new HashMap<String,List<Role>>();
        for(int i = 0; i < v.length; i++){
            MyRole r = v[i];
            map.put(r.getKey(), r.getValue());
        }
        return map;
    }
    @Override
    public MyRole[] marshal(Map<String, List<Role>> v) throws Exception {
        MyRole[] roles = new MyRole[v.size()];
        int i = 0;
        for(String key : v.keySet()){
            roles[i] = new MyRole();
            roles[i].setKey(key);
            roles[i].setValue(v.get(key));
            i++;
        }
        return roles;
    }
}

MyRole.java

package com.andrew.adapter;

import java.util.List;

import com.andrew.entity.Role;

public class MyRole {
    private String key;
    private List<Role> value;
    public String getKey() {
        return key;
    }
    public void setKey(String key) {
        this.key = key;
    }
    public List<Role> getValue() {
        return value;
    }
    public void setValue(List<Role> value) {
        this.value = value;
    }
}


1) cmd
2) cd E:\studyWEBSERVICECXF\WS_Client\src\main\java
3) wsdl2java http://192.168.18.2/helloWorld?wsdl
会在WS_Client下生成代码
4) 启动WS_Server


WS_Client

package com.andrew.client;

import java.util.List;

import com.andrew.webservice.HelloWorld;
import com.andrew.webservice.HelloWorldService;
import com.andrew.webservice.MyRole;
import com.andrew.webservice.MyRoleArray;
import com.andrew.webservice.Role;
import com.andrew.webservice.User;

public class Client {
    public static void main(String[] args) {
        HelloWorldService service = new HelloWorldService();
        HelloWorld helloWorld = service.getHelloWorldPort();
        System.out.println(helloWorld.say("andrew"));
        User user = new User();
        user.setUserName("tony");
        user.setPassword("123456");
        List<Role> roleList = helloWorld.getRoleByUser(user);
        for (Role role : roleList) {
            System.out.println(role.getId() + "," + role.getRoleName());
        }
        MyRoleArray array = helloWorld.getRoles();
        List<MyRole> roleList2 = array.getItem();
        for(int i = 0; i < roleList2.size(); i++){
            MyRole my = roleList2.get(i);
            System.out.print(my.getKey() + ":");
            for(Role r : my.getValue()){
                System.out.print(r.getId() + "," + r.getRoleName() + " ");
            }
            System.out.println();
        }
    }
}
分享到:
评论

相关推荐

    04.使用CXF处理JavaBean式的复合类型和List集合类型的形参和返回值

    在处理复合类型的JavaBean时,我们通常需要定义一个包含多个属性的类。例如,假设我们有一个名为`Order`的类,它包含了`Customer`和`Product`两个属性,每个属性都是一个JavaBean。在CXF的服务接口中,我们可以声明...

    07.处理Map等CXF无法自动转换的复合数据类型的形参和返回值

    本文将详细探讨如何处理Map等CXF无法自动转换的复合数据类型的形参和返回值,这对于提升服务功能和用户体验至关重要。 首先,我们需要理解CXF的工作原理。CXF提供了一种直观的方式来创建和消费Web服务,它通过Java...

    cxf-webservice复杂类型

    本主题将深入探讨CXF如何处理像Map这样的Java集合类,以及其他不能直接通过标准XML Schema(如XSD)表示的复杂数据结构。 **一、CXF与复杂类型** 1. **XML与复杂类型映射**:CXF使用JAXB(Java Architecture for ...

    cxf开发map的demo

    【标题】"cxf开发map的demo"是一个关于使用Java CXF框架处理Map类型数据的实战示例。CXF是一个开源服务框架,它允许开发者创建和消费Web服务,支持多种协议和绑定,包括SOAP、RESTful等。在这个demo中,我们将深入...

    CXF处理不规则SOAP message(转)

    在处理SOAP消息时,CXF提供了丰富的API和工具来解析、验证以及处理这些消息。当遇到不规则SOAP消息时,开发者可能需要深入理解CXF的工作原理,包括其消息模型、绑定层以及异常处理机制,以便正确地捕获和处理问题。 ...

    spring,cxf,restful发布webservice传递List,Map,List&lt;Map&gt;

    以下是发布带有复杂类型参数的RESTful Web服务的基本步骤: 1. **定义数据模型**:创建对应的Java类,如`ComplexObject`,其中包含List&lt;Map, String&gt;&gt;字段。 2. **创建服务接口**:定义一个服务接口,声明接受List...

    Apache Cxf WebService整合Spring

    Apache Cxf WebService整合Spring 处理Map、非javabean式的复合类等CXF无法自动转化的类型 CXF为服务器端和客户端添加自定义拦截器进行权限检查验证并且控制台打印日志

    apache-cxf-2.7.7以及cxf客户端所需要的jar包

    1. **CXF Bus**:这是CXF框架的基础,负责管理服务、端点和绑定配置,以及消息处理链。 2. **Data Binding**:CXF支持多种数据绑定机制,如JAXB(Java Architecture for XML Binding)用于将XML与Java对象相互转换,...

    疯狂软件李刚WebService视频教程(15集)

    资源名称:疯狂软件李刚WebService视频教程(15集)资源目录:【】01.WebService概述和...使用CXF处理JavaBean式的复合类型和List集合类型的形参和返回 资源太大,传百度网盘了,链接在附件中,有需要的同学自取。

    cxf环境变量配置以及命令

    同时,基于拦截器(Interceptor)的架构使得 CXF 极具可扩展性,你可以自定义拦截器来处理特定的业务逻辑或日志记录。 ### 支持的协议和数据格式 - **传输协议**:CXF 支持 HTTP、HTTPS、JMS、CORBA 等多种传输...

    CXF与Spring整合以及所需jar

    在压缩包文件中,`lib`目录下的jar包可能包括了CXF的核心库、Spring的整合库以及其他必要的依赖。确保这些jar包被正确地引入到项目中,是成功整合CXF和Spring的关键。在实际项目中,根据具体需求,可能还需要添加...

    Cxf转换器示例

    转换器在CXF中扮演着关键角色,尤其是在处理不同类型数据之间的转换时,如XML到Java对象,反之亦然。这些转换过程对于确保不同系统间的数据一致性至关重要。 首先,我们需要了解CXF的转换器体系结构。CXF框架中的...

    cxf 3.1.1 jar包

    - 利用CXF的客户端API调用远程Web服务,自动处理SOAP消息的构建和解析,以及HTTP通信。 - 添加安全特性,如数字签名、加密和身份验证,以确保Web服务的安全性。 - 利用CXF的WSDL工具,从WSDL文件自动生成Java服务端...

    javaBean自动生成器

    该工具能够基于SqlServer数据库自动生成对应的Java代码,包括JavaBean、MyBatis的基本CRUD操作、接口及其实现类,以及CXF服务接口和实现。此外,它还支持Delphi的保存和查询功能,为多语言环境的集成提供了便利。 ...

    cxf源代码,样例,cxfdemo

    通过研究源代码,你可以了解CXF如何处理请求、响应,以及如何与HTTP容器(如Tomcat)集成。 总之,Apache CXF是一个强大且全面的框架,它简化了Java Web服务的开发,尤其在服务端开发方面提供了广泛的功能和支持。...

    CXF webSerivces开发示例工程

    总之,CXF WebServices开发示例工程是一个全面的学习资源,涵盖了从基础的JavaBean到复杂的数据结构如List和Map的使用,以及服务的创建和部署。通过深入研究这个示例,开发者可以掌握CXF的核心特性,提高在企业级...

    CXF源码:CXF_Spring源码

    接下来,我们将深入探讨CXF和Spring的结合以及相关的源码解析。 1. **CXF与Spring的整合** Spring框架以其强大的依赖注入(DI)和面向切面编程(AOP)能力而闻名,而CXF作为Web服务框架,能够利用Spring的这些...

    cxf框架包 apache-cxf-3.4.3.tar.gz

    CXF支持SOAP 1.1和1.2,并能处理各种安全、事务和消息传递模式。 - **RESTful**:REST(Representational State Transfer)是一种轻量级的架构风格,通常用于构建Web服务。CXF提供了强大的工具来支持RESTful服务,...

Global site tag (gtag.js) - Google Analytics