`
lfc_jack
  • 浏览: 144886 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类

Web Service笔记(二):利用CXF开发Web Service(转别人的)

 
阅读更多
前言:
1、wsdl与soap详解 或 wsdl文件结构分析
2、jax-ws详解
3、jax-rs详解

一、CXF开发简单的WS服务与客户端

(一)、要求的jar 包
1、CXF版本为 cxf-2.7.8.jar ,其他版本可能会有出入。
2、需要的jar包为:

3、因为使用main函数启动发布,所以需要 jetty 包。
4、出现Cannot create a secure XMLInputFactory异常提示时通常是少了woodstox-core-asl-4.2.0.jar或stax2-api这两个包,少这两个包服务能够启动成功,且浏览器访问wsdl正常;但客户端连接web service时就出现错误提示了。加入后可能还需要重启下eclipse。

(二)、服务器端
1、接口:
[java] view plain copy 在CODE上查看代码片派生到我的代码片
package com.ws; 
 
import java.util.List; 
 
import javax.jws.WebService; 
 
 
import com.ws.bean.Cat; 
import com.ws.bean.User; 
 
@WebService 
public interface HelloWorld { 
     
    public String sayHi(String name); 
     


2、实现类
[java] view plain copy 在CODE上查看代码片派生到我的代码片
package com.ws.impl; 
 
import java.text.SimpleDateFormat; 
import java.util.Date; 
import java.util.List; 
 
import javax.jws.WebService; 
 
import com.service.UserService; 
import com.service.impl.UserServiceImp; 
import com.ws.HelloWorld; 
import com.ws.bean.Cat; 
import com.ws.bean.User; 
 
/**
* endpointInterface,是他实现的接口,记得写全包名 serviceName,服务器名称

* @author SAM

*/ 
 
// 实现类需要标明 WebService 
// 标明实现的接口,endpointInterface 含包名 
// serviceName 自定义名称 
@WebService(endpointInterface = "com.ws.HelloWorld", serviceName = "HelloSAM") 
public class HelloWorldImpl implements HelloWorld { 
 
    public String sayHi(String name) { 
 
        return name + ",您好!您现在访问的是简单的WS服务端,时间为:" + new SimpleDateFormat().format(new Date()); 
    } 
 
 


3、发布
[java] view plain copy 在CODE上查看代码片派生到我的代码片
/**
* 发布简单的WebService
*/ 
public void deployService() { 
 
    System.out.println("Server start ……"); 
 
    HelloWorldImpl service = new HelloWorldImpl(); 
    String address = "http://localhost:8080/helloWorld"; 
 
    // 调用Endpoint的publish方法 
    Endpoint.publish(address, service); 
 
    System.out.println("server ready ……"); 
 



4、分析
1)实现类需要标明 @WebService
2)标明实现的哪个接口,关键字,endpointInterface 含包名。如 endpointInterface = "com.ws.HelloWorld"
3)serviceName 自定义服务器的名称,这个名字随便取,用 wsdl2java 生成客户端时,生成的继承 service的类,就会是这个名字。如我这边取名为  serviceName = "HelloSAM" 。
4)使用 Endpoint.publish(address, service) 方法发布WS的服务端。这时,只要访问 http://localhost:8080/helloWorld?wsdl 地址就可以看到WS服务成功发布了。如


(三)、客户端
1、自动生成客户端,在dos窗口,进入eclipse的客户端工程下,使用 wsdl2java + 服务器端的 wsdl 地址。如


2、CXF会根据自动生成 http://localhost:8080/helloWorld?wsdl 的wsdl文件自动生成客户端需要的文件。
3、客户端调用服务器端代码:需要使用自动生成的继承了Service 类的那个类,这边就是 HelloSAM 即在服务端的那个 serviceName = "HelloSAM" 指定的名称。代码如下:
[java] view plain copy 在CODE上查看代码片派生到我的代码片
/**
* 简单客户端访问
*/ 
private void visitServer() { 
 
    HelloSAM helloFactory = new HelloSAM();// HelloSAM是客户端生成的继承了 service的类 
    HelloWorld hw = helloFactory.getHelloWorldImplPort();// 返回远程ws对象的代理,不是服务器中远程对象 
    System.out.println(hw.sayHi("SAM-SHO")); 
 


4、这边服务器和客户端启动都是依赖main方法,需要jetty包的支持,到此为止,一次启动服务和客户端,就可以再后台看到如下输出,即简单的WS发布和访问成功。
[java] view plain copy 在CODE上查看代码片派生到我的代码片
SAM-SHO,您好!您现在访问的是简单的WS服务端,现在的时间是:14-11-16 下午10:41 

5、另一种方式:利用 JaxWsProxyFactoryBean
[java] view plain copy 在CODE上查看代码片派生到我的代码片
/**
* 另一种方式访问
*/ 
private void visitServer2() { 
    // 调用WebService 
    JaxWsProxyFactoryBean factory = new JaxWsProxyFactoryBean(); 
    factory.setServiceClass(HelloWorld.class); 
    factory.setAddress("http://localhost:8080/Java_WS_Server/soap/helloWorld"); 
 
    HelloWorld service = (HelloWorld) factory.create(); 
 
    System.out.println("#############Client sayHi##############"); 
    System.out.println(service.sayHi("SAM-SAM")); 
 



6、分析详见:Web Service笔记(三):wsdl 与 soap协议详解

二、带javaBean 和 集合的WS

(一)、服务器端
1、在服务器端增加方法:然后创建javaBean 以及其业务类。代码如下:
[java] view plain copy 在CODE上查看代码片派生到我的代码片
package com.ws; 
 
import java.util.List; 
 
import javax.jws.WebService; 
 
 
import com.ws.bean.Cat; 
import com.ws.bean.User; 
 
@WebService 
public interface HelloWorld { 
     
    public String sayHi(String name); 
     
    public List<Cat> getCatsByUser(User user); 


[java] view plain copy 在CODE上查看代码片派生到我的代码片
package com.ws.impl; 
 
import java.text.SimpleDateFormat; 
import java.util.Date; 
import java.util.List; 
 
import javax.jws.WebService; 
 
import com.service.UserService; 
import com.service.impl.UserServiceImp; 
import com.ws.HelloWorld; 
import com.ws.bean.Cat; 
import com.ws.bean.User; 
 
/**
* endpointInterface,是他实现的接口,记得写全包名 serviceName,服务器名称

* @author SAM

*/ 
 
// 实现类需要标明 WebService 
// 标明实现的接口,endpointInterface 含包名 
// serviceName 自定义名称 
@WebService(endpointInterface = "com.ws.HelloWorld", serviceName = "HelloSAM") 
public class HelloWorldImpl implements HelloWorld { 
 
    /**
     * 简单方法
     */ 
    public String sayHi(String name) { 
 
        return name + ",您好!您现在访问的是简单的WS服务端,时间为:" + new SimpleDateFormat().format(new Date()); 
    } 
 
    /**
     * 复杂方法 含javabean 和 集合
     */ 
    public List<Cat> getCatsByUser(User user) { 
 
        UserService tUserService = new UserServiceImp(); 
        return tUserService.getCatsByUser(user); 
    } 

[java] view plain copy 在CODE上查看代码片派生到我的代码片
package com.ws.bean; 
/**
* User类
* @author SAM
*
*/ 
public class User { 
     
    private Integer  id; 
    private String name; 
    private String pass; 
    private String address; 
     
    public User() { 
        super(); 
    } 
     
    public User(Integer id, String name, String pass, String address) { 
        super(); 
        this.id = id; 
        this.name = name; 
        this.pass = pass; 
        this.address = address; 
    } 
 
    public Integer getId() { 
        return id; 
    } 
    public void setId(Integer id) { 
        this.id = id; 
    } 
    public String getName() { 
        return name; 
    } 
    public void setName(String name) { 
        this.name = name; 
    } 
    public String getPass() { 
        return pass; 
    } 
    public void setPass(String pass) { 
        this.pass = pass; 
    } 
    public String getAddress() { 
        return address; 
    } 
    public void setAddress(String address) { 
        this.address = address; 
    } 
 
    @Override 
    public int hashCode() { 
        final int prime = 31; 
        int result = 1; 
        result = prime * result + ((name == null) ? 0 : name.hashCode()); 
        result = prime * result + ((pass == null) ? 0 : pass.hashCode()); 
        return result; 
    } 
 
    @Override 
    public boolean equals(Object obj) { 
        if (this == obj) 
            return true; 
        if (obj == null) 
            return false; 
        if (getClass() != obj.getClass()) 
            return false; 
        User other = (User) obj; 
        if (name == null) { 
            if (other.name != null) 
                return false; 
        } else if (!name.equals(other.name)) 
            return false; 
        if (pass == null) { 
            if (other.pass != null) 
                return false; 
        } else if (!pass.equals(other.pass)) 
            return false; 
        return true; 
    } 
     


[java] view plain copy 在CODE上查看代码片派生到我的代码片
package com.ws.bean; 
/**
* Cat类
* @author SAM
*
*/ 
public class Cat { 
    private Integer id; 
    private String name; 
    private String color; 
     
    public Cat() { 
        super(); 
    } 
     
    public Cat(Integer id, String name, String color) { 
        super(); 
        this.id = id; 
        this.name = name; 
        this.color = color; 
    } 
     
    public Integer getId() { 
        return id; 
    } 
    public void setId(Integer id) { 
        this.id = id; 
    } 
    public String getName() { 
        return name; 
    } 
    public void setName(String name) { 
        this.name = name; 
    } 
    public String getColor() { 
        return color; 
    } 
    public void setColor(String color) { 
        this.color = color; 
    } 
 
    @Override 
    public String toString() { 
        return "Cat [color=" + color + ", id=" + id + ", name=" + name + "]"; 
    } 

[java] view plain copy 在CODE上查看代码片派生到我的代码片
package com.service; 
 
import java.util.List; 
 
import com.ws.bean.Cat; 
import com.ws.bean.User; 
 
public interface UserService { 
 
    List<Cat> getCatsByUser(User user); 
 


[java] view plain copy 在CODE上查看代码片派生到我的代码片
package com.service.impl; 
 
import java.util.ArrayList; 
import java.util.HashMap; 
import java.util.List; 
import java.util.Map; 
 
import com.service.UserService; 
import com.ws.bean.Cat; 
import com.ws.bean.User; 
/**

* UserServiceImp.java
*
* @title User业务类
* @description
* @author SAM-SHO 
* @Date 2014-11-16
*/ 
public class UserServiceImp implements UserService { 
 
    //模拟数据库 
    static Map <User,List<Cat>> catDB = new HashMap<User,List<Cat>>(); 
    //静态初始化 
    static{ 
        List<Cat> catList1 = new ArrayList<Cat>(); 
        catList1.add(new Cat(1, "加菲猫", "黄色")); 
        catList1.add(new Cat(2, "蓝胖子", "蓝色")); 
        catDB.put(new User(1, "Sam-Sho", "1234", "soochow"), catList1); 
         
        List<Cat> catList2 = new ArrayList<Cat>(); 
        catList1.add(new Cat(3, "hello kitty", "粉色")); 
        catList1.add(new Cat(4, "熊猫", "黑白色")); 
        catDB.put(new User(2, "赵小妞", "4567", "soochow"), catList2); 
         
    } 
     
    public List<Cat> getCatsByUser(User user) { 
         
        return catDB.get(user); 
    } 
 


2、服务端发布如下:
[java] view plain copy 在CODE上查看代码片派生到我的代码片
/**
* 发布javaBean 和集合 的WS
*/ 
private void deployComplexService() { 
    System.out.println("Server start ……"); 
    HelloWorldImpl service = new HelloWorldImpl(); 
    String address = "http://localhost:8080/helloWorld"; 
 
    // 调用Endpoint的publish方法 
    Endpoint.publish(address, service); 
    System.out.println("server ready ……"); 


3、在浏览器中调用 http://localhost:8080/helloWorld?wsdl



(二)、客户端
1、使用 wsdl2java ,方法与上面创建客户端一致。
2、客户端调用服务端代码如下:
[java] view plain copy 在CODE上查看代码片派生到我的代码片
/**
* 访问复杂客户端
*/ 
private void visitComplexServer() { 
 
    HelloSAM helloFactory = new HelloSAM();// HelloSAM是客户端生成的继承了 service的类 
    HelloWorld hw = helloFactory.getHelloWorldImplPort();// 返回远程ws对象的代理,不是服务器中远程对象 
     
    //1, "Sam-Sho", "1234", "soochow" 
    User user = new User(); 
    user.setId(1); 
    user.setName("Sam-Sho"); 
    user.setPass("1234"); 
    user.setAddress("soochow"); 
    System.out.println(hw.getCatsByUser(user));//[com.ws.Cat@1aaf0b3, com.ws.Cat@1a082e2, com.ws.Cat@f0c85e, com.ws.Cat@1f297e7] 
    System.out.println(hw.getCatsByUser(user).get(0).getName());//加菲猫 


3、【输出】
[java] view plain copy 在CODE上查看代码片派生到我的代码片
SAM-SHO,您好!您现在访问的是简单的WS服务端,时间为:14-11-16 下午11:29 
[com.ws.Cat@1aaf0b3, com.ws.Cat@1a082e2, com.ws.Cat@f0c85e, com.ws.Cat@1f297e7] 
加菲猫 


三、CXF处理Map等不支持的类型
(一)服务端实现
1、使用 @XmlJavaTypeAdapter 注解修饰 CXF 不支持的类型。并且通过其value属性指定特定的类型转换器。
2、这个类型转换器必须继承抽象类 XmlAdapter<ValueType,BoundType>,其中 BoundType 为CXF不支持的类型,而 ValueType 为我们即将把 BoundType  转换为的支持的类型。一般需要自己定义。
3、定义 ValueType 这个转换对象类型,且为CXF 支持的类型。其本质就是模拟实现一个Map即可。

4、服务端涉及的代码如下
1)服务的接口与实现类代码:
[java] view plain copy 在CODE上查看代码片派生到我的代码片
package com.ws; 
 
import java.util.List; 
import java.util.Map; 
 
import javax.jws.WebService; 
import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter; 
 
import com.adapter.TypeAdapter; 
import com.ws.bean.Cat; 
import com.ws.bean.User; 
 
@WebService 
public interface HelloWorld { 
     
    public String sayHi(String name); 
     
    public List<Cat> getCatsByUser(User user); 
     
    //value属性指定一个转换器,为自定义的转换器 
    @XmlJavaTypeAdapter(value = TypeAdapter.class)  
    public Map<String,Cat> getAllCats(); 
     
     

[java] view plain copy 在CODE上查看代码片派生到我的代码片
package com.ws.impl; 
 
import java.text.SimpleDateFormat; 
import java.util.Date; 
import java.util.List; 
import java.util.Map; 
 
import javax.jws.WebService; 
 
import com.service.UserService; 
import com.service.impl.UserServiceImp; 
import com.ws.HelloWorld; 
import com.ws.bean.Cat; 
import com.ws.bean.User; 
 
/**
* endpointInterface,是他实现的接口,记得写全包名 serviceName,服务器名称

* @author SAM

*/ 
 
// 实现类需要标明 WebService 
// 标明实现的接口,endpointInterface 含包名 
// serviceName 自定义名称 
@WebService(endpointInterface = "com.ws.HelloWorld", serviceName = "HelloSAM") 
public class HelloWorldImpl implements HelloWorld { 
 
    /**
     * 简单方法
     */ 
    public String sayHi(String name) { 
 
        return name + ",您好!您现在访问的是简单的WS服务端,时间为:" + new SimpleDateFormat().format(new Date()); 
    } 
 
    /**
     * 复杂方法 含javabean 和 集合
     */ 
    public List<Cat> getCatsByUser(User user) { 
 
        UserService tUserService = new UserServiceImp(); 
        return tUserService.getCatsByUser(user); 
    } 
 
    /**
     * 处理Map
     */ 
    public Map<String, Cat> getAllCats() { 
        UserService tUserService = new UserServiceImp(); 
        return tUserService.getAllCats(); 
    } 
 


[java] view plain copy 在CODE上查看代码片派生到我的代码片
package com.service; 
 
import java.util.List; 
import java.util.Map; 
 
import com.ws.bean.Cat; 
import com.ws.bean.User; 
 
public interface UserService { 
 
    List<Cat> getCatsByUser(User user); 
 
    Map<String, Cat> getAllCats(); 
 


[java] view plain copy 在CODE上查看代码片派生到我的代码片
package com.service.impl; 
 
import java.util.ArrayList; 
import java.util.HashMap; 
import java.util.List; 
import java.util.Map; 
 
import com.service.UserService; 
import com.ws.bean.Cat; 
import com.ws.bean.User; 
/**

* UserServiceImp.java
*
* @title User业务类
* @description
* @author SAM-SHO 
* @Date 2014-11-16
*/ 
public class UserServiceImp implements UserService { 
 
    //模拟数据库 
    static Map <User,List<Cat>> catDB = new HashMap<User,List<Cat>>(); 
    //静态初始化 
    static{ 
        List<Cat> catList1 = new ArrayList<Cat>(); 
        catList1.add(new Cat(1, "加菲猫", "黄色")); 
        catList1.add(new Cat(2, "蓝胖子", "蓝色")); 
        catDB.put(new User(1, "Sam-Sho", "1234", "soochow"), catList1); 
         
        List<Cat> catList2 = new ArrayList<Cat>(); 
        catList1.add(new Cat(3, "hello kitty", "粉色")); 
        catList1.add(new Cat(4, "熊猫", "黑白色")); 
        catDB.put(new User(2, "赵小妞", "4567", "soochow"), catList2); 
         
    } 
     
    public List<Cat> getCatsByUser(User user) { 
         
        return catDB.get(user); 
    } 
 
    /**
     * 返回Map
     */ 
    public Map<String, Cat> getAllCats() { 
        Map<String, Cat> catMap = new HashMap<String, Cat>(); 
        int i = 1; 
        for(List<Cat> cats: catDB.values()){ 
            for( Cat cat: cats){ 
                catMap.put("第"+ i++ + "个", cat); 
            } 
        } 
        return catMap; 
    } 
 


2)自定义转换器代码如下:TypeAdapter.class
[java] view plain copy 在CODE上查看代码片派生到我的代码片
package com.adapter; 
 
import java.util.HashMap; 
import java.util.List; 
import java.util.Map; 
 
import javax.xml.bind.annotation.adapters.XmlAdapter; 
 
import com.adapter.StringCat.Entry; 
import com.ws.bean.Cat; 
/**

* TypeAdapter.java
*
* @title 类型转换器
* @description
* XmlAdapter<ValueType,BoundType>:
* 1、BoundType为不支持的类型,即 Map<String,Cat>
* 2、ValueType 为map即将转换成的支持的类型。自定义即可。
* @author SAM-SHO 
* @Date 2014-11-19
*/ 
public class TypeAdapter extends XmlAdapter<StringCat, Map<String,Cat>> { 
 
    // 即 Map<String, Cat> 转换为 StringCat 
    @Override 
    public StringCat marshal(Map<String, Cat> v) throws Exception { 
         
        StringCat tStringCat = new StringCat(); 
        for (String key : v.keySet()) { 
            tStringCat.getEntries().add(new Entry(key,v.get(key))); 
        } 
         
        return tStringCat; 
    } 
 
    // StringCat 即 转换为 Map<String, Cat>  
    @Override 
    public Map<String, Cat> unmarshal(StringCat v) throws Exception { 
         
        Map<String, Cat> catMap = new HashMap<String, Cat>(); 
         
        List<Entry> entryLists = v.getEntries();// 
        for (Entry entry : entryLists) { 
            catMap.put(entry.getKey(), entry.getValue()); 
        } 
         
        return catMap; 
    } 
 


3)自定义转换的支持类型如下:StringCat.class
[java] view plain copy 在CODE上查看代码片派生到我的代码片
package com.adapter; 
 
import java.util.ArrayList; 
import java.util.List; 
 
import com.ws.bean.Cat; 
 
/**
* StringCat.java
*
* @title  自定义CXF支持的类型
* @description
* @author SAM-SHO 
* @Date 2014-11-19
*/ 
public class StringCat { 
     
    // 把Map<String,Cat> 转换 Entry 
    // 然后把Entry放入List 
    private List<Entry> entries = new ArrayList<Entry>(); 
     
     
    //内部类 即 Map<String,Cat>  
    public static class Entry{ 
        private String key; 
        private Cat value; 
         
        public Entry() { 
             
        } 
        public Entry(String key, Cat value) { 
            this.key = key; 
            this.value = value; 
        } 
        public String getKey() { 
            return key; 
        } 
        public void setKey(String key) { 
            this.key = key; 
        } 
        public Cat getValue() { 
            return value; 
        } 
        public void setValue(Cat value) { 
            this.value = value; 
        } 
    } 
 
 
    public List<Entry> getEntries() { 
        return entries; 
    } 
 
 
    public void setEntries(List<Entry> entries) { 
        this.entries = entries; 
    } 



5、这时启动服务就可以访问了:http://localhost:8080/helloWorld?wsdl
[java] view plain copy 在CODE上查看代码片派生到我的代码片
/**
* 发布含有Map的ws
*/ 
private void deployMapService() { 
     
    System.out.println("Server start ……"); 
    HelloWorldImpl service = new HelloWorldImpl(); 
    String address = "http://localhost:8080/helloWorld"; 
 
    // 调用Endpoint的publish方法 
    Endpoint.publish(address, service); 
    System.out.println("server ready ……"); 
     


6、传入传出的消息(xml片段)为如下:分析wsdl文件得出
[html] view plain copy 在CODE上查看代码片派生到我的代码片
<!--传入--> 
<getAllCats> 
</getAllCats> 
 
 
<!--传出--> 
<getAllCatsResponse> 
    <return> 
        <entries>--出现0-N次 
            <key></key> 
            <value> 
                <color></color> 
                <id></id> 
                <name></name> 
            </value> 
        </entries> 
        <entries> 
            <key></key> 
            <value> 
                <color></color> 
                <id></id> 
                <name></name> 
            </value> 
        </entries> 
    </return> 
</getAllCatsResponse> 

(二)、客户端实现
1、wsdl2java,重新生成客户端。
2、实现服务端方法getAllCats()的调用
[html] view plain copy 在CODE上查看代码片派生到我的代码片
/** 
* 访问CXF不支持的客户端 
*/ 
private void visitMapServer() { 
    HelloSAM helloFactory = new HelloSAM();// HelloSAM是客户端生成的继承了 service的类 
    HelloWorld hw = helloFactory.getHelloWorldImplPort();// 返回远程ws对象的代理,不是服务器中远程对象 
     
    StringCat tStringCat = hw.getAllCats(); 
    for (Entry entry : tStringCat.getEntries()) { 
        System.out.println(entry.getKey()+" : " + entry.getValue().getName()); 
    } 



3【输出】
[html] view plain copy 在CODE上查看代码片派生到我的代码片
第4个 : 熊猫 
第3个 : hello kitty 
第1个 : 加菲猫 
第2个 : 蓝胖子 



原博客地址:http://blog.csdn.net/u012228718/article/details/41077187
分享到:
评论

相关推荐

    Java+WebService利用(cxf)开发笔记.rar

    在"Java+WebService利用(cxf)开发笔记"中,你将找到这些概念的实际应用和案例,帮助你深入理解如何使用CXF创建和调用Web服务。这份笔记是学习和实践的宝贵资料,不仅可以帮助初学者快速上手,也能为有经验的开发者...

    Eclipse+CXF开发Web服务、Tomcat部署

    在了解如何使用Eclipse和CXF开发和部署Web服务之前,我们需要先明确一些关键的基础概念。 首先,CXF是一个开源的服务框架,它支持创建Web服务,特别是基于SOAP和REST的Web服务。它提供了丰富的工具来快速开发和部署...

    web service入门学习笔记

    Web Service入门学习笔记 Web Service是一种基于互联网的、平台无关的通信协议,它允许不同系统间的应用程序通过网络互相调用,实现数据交换和服务共享。在本文中,我们将深入探讨Web Service的基本概念,以及如何...

    CXF笔记

    1. **SOAP服务**:CXF支持基于SOAP的Web服务,包括WSDL(Web Service Description Language)第一和第二版,使得开发者能够轻松地创建符合WS-I(Web Services Interoperability)规范的服务。 2. **RESTful服务**:...

    web service学习笔记1

    Java语言对SOAP-based Web Service提供了支持,例如通过JAX-WS(Java API for XML Web Services),并有Axis、CXF和Metro等主流实现。这些实现具有不同的性能和易用性特点,如Metro在性能和开发测试方面表现最佳。 ...

    Apache_cxf_学习笔记.docx

    ### Apache CXF 学习笔记知识点汇总 #### 一、CXF简介 ##### 1.1 CXF概述 - **背景介绍**:Apache CXF 是一个高性能、功能丰富的开源框架,用于构建和消费 Web 服务。它融合了 Celtix 和 XFire 两个开源项目的...

    CXF学习笔记.docx )

    CXF(CXF: Composite eXtensible Framework)是一个开源的Java框架,它主要用于构建和服务导向架构(Service-Oriented Architecture, SOA)中的Web服务。CXF允许开发者通过多种方式来创建和消费Web服务,无论是基于...

    cxf3.0 spirng 集成笔记

    Apache CXF是一个开源的SOA(Service-Oriented Architecture)框架,它允许开发人员创建和消费各种Web服务。在Spring框架中集成CXF可以方便地管理和调用Web服务。 首先,我们来看看集成CXF到Spring的尝试和挑战: ...

    WebService的实现——CXF学习笔记

    CXF支持多种协议,包括RESTful和SOAP,使得开发人员能够方便地创建符合WS-*规范的Web服务。 本文主要围绕CXF 2.1.4版本,讲解如何创建服务端和客户端,并涉及相关的XML配置和环境设置。为了理解CXF的工作原理,我们...

    cxf学习笔记

    本篇CXF学习笔记详细介绍了使用CXF框架结合Spring框架发布Web服务的基本流程和技术要点。从简单的Hello World示例入手,逐步深入到复杂的数据类型处理、大数据传输以及安全性保障等方面。通过这些实践案例的学习,...

    Apache_cxf_学习笔记

    Apache CXF 是一个开源的Java框架,主要用于构建和开发服务导向架构(Service-Oriented Architecture, SOA)和Web服务。本学习笔记旨在提供对Apache CXF的基本理解、功能特性和实际操作指导。 **1. CXF 简介** 1.1...

    Apache cxf 学习笔记.pdf

    Apache CXF 是一个开源的Java框架,它主要用于构建和开发服务导向架构(Service-Oriented Architecture, SOA)的应用程序。CXF这个名字来源于两个曾经流行的Java Web服务项目的合并:Celtix和XFire,CXF意在强调其对...

    CXF webservice初学笔记

    【CXF Webservice初学笔记】 Apache CXF 是一个开源的Web服务框架,它使得开发者可以轻松地创建和部署Web服务。本笔记将探讨CXF的基本概念、如何使用CXF构建Webservice以及与之相关的技术栈,如Spring、Struts2等。...

    webservice+cxf基础笔记和视频,

    总的来说,这份“webservice+cxf基础笔记和视频”资源将引导你进入Web服务的世界,通过学习和实践,你可以掌握使用CXF和Spring进行Web服务开发的基本技能。无论你是初学者还是有一定经验的开发者,这都将是一份有...

    西安野马计算机培训学校WEBSERVICE讲义

    章节二:CXF实现Web Service - CXF框架介绍:CXF是一个开源的Java框架,用于构建和部署Web Service。本章节将详细介绍CXF的特点和优势,以及如何配置和使用CXF环境。 - 创建Web Service:通过实例演示如何使用CXF...

    使用CXF调用发布webservice

    【精品文档】基于cxf webservice传递List及bean.pdf CXF学习笔记.doc 使用Apache CXF开发Web Service.pdf 如何使用myeclipse开发 webservice

Global site tag (gtag.js) - Google Analytics