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框架所在根目录

  

   在path中添加CXF_HOEM变量

  

 

1.3  创建java项目   引入 D:\work\apache-cxf-2.4.2\lib 目录下的jar包

2.代码编写

2.1  创建IHelloService.java 接口

复制代码
package com.service;

import javax.jws.WebParam;
import javax.jws.WebService;

@WebService
public interface IHelloService {
    public String sayHello(@WebParam(name = "text") String text);

    public User getUser(String id);
}
View Code
复制代码

 

2.2  创建HelloServiceImpl.java实现 IHelloService 接口

复制代码
package com.service;

import java.util.Date;

import javax.jws.WebService;

@WebService(endpointInterface = "com.service.IHelloService", serviceName = "HelloWorld")
public class HelloServiceImpl implements IHelloService {

    @Override
    public String sayHello(String text) {
        return "Hello x " + text;
    }

    @Override
    public User getUser(String id) {
        User u = new User();
        u.setId(id);
        u.setAge(10);
        u.setName("小明");
        u.setBirthday(new Date(new Date().getTime() - 10 * 12 * 30 * 24 * 3600));
        return u;
    }

}
View Code
复制代码

 

2.3  编写 webServiceApp.java类来暴露 web服务

复制代码
package com.service;

import javax.xml.ws.Endpoint;

public class WebServiceApp {
    public static void main(String[] args) {
        System.out.println("web service start");
        HelloServiceImpl implementor = new HelloServiceImpl();
        String address = "http://localhost:8080/HelloService";
        Endpoint.publish(address, implementor);
        System.out.println("web service started");
    }
}
View Code
复制代码

 

2.4  run webServiceApp.java 类来启动服务。 访问 http://localhost:8080/HelloService?wsdl 查看是否成功

   

 

2.5 编写客户端访问服务
======== 方法1:

创建客户端的代理,生成factory对象,用于调用服务端的方法

复制代码
package com.service;

import org.apache.cxf.jaxws.JaxWsProxyFactoryBean;

public class HelloServiceClient {
    public static void main(String[] args) {
        JaxWsProxyFactoryBean svr = new JaxWsProxyFactoryBean();
        svr.setServiceClass(IHelloService.class);
        svr.setAddress("http://localhost:8080/HelloService");
        IHelloService hw = (IHelloService) svr.create();

        System.out.println(hw.sayHello("你好"));

        User u = hw.getUser("1");
        System.out.println(u.getName());
    }
}
复制代码

 

======== 方法2:
通过命令自动生成客户端文件

 法一.   1.cmd 进入doc窗口,

            2.用  wsimport -s D:\ -p com.client http://localhost:8080/HelloWorld?wsdl (不用安装apache-cxf客户端)命令生成

 法二.
 1.   cmd 进入doc窗口, 进入apache-cxf-2.4.2\bin路径
 2.   运行 wsdl2java -frontend jaxws21 -p com.client -d D:\ -client -autoNameResolution http://localhost:8080/HelloWorld?wsdl    会在D盘生成 com\client文件夹,里面有生成号的客户端文件。将文件拷贝到项目中

  

3.  调用接口

 

复制代码
package com.main;

import com.client.HelloWorld;
import com.client.IHelloService;

public class ClientMain {

    public static void main(String[] args) {
        HelloWorld factory = new HelloWorld();
        IHelloService hw = factory.getHelloServiceImplPort();
        System.out.println(hw.sayHello("sss"));

        System.out.println(hw.getUser("11").getName());
    }
}
复制代码

 

下面链接可下载上述源码

http://pan.baidu.com/s/1kUZVZHt  希望能帮到你

posted @   亲爱的阿道君  阅读(3107)  评论(0编辑  收藏  举报
编辑推荐:
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 一个奇形怪状的面试题:Bean中的CHM要不要加volatile?
· [.NET]调用本地 Deepseek 模型
· 一个费力不讨好的项目,让我损失了近一半的绩效!
阅读排行:
· 在鹅厂做java开发是什么体验
· 百万级群聊的设计实践
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战
· 永远不要相信用户的输入:从 SQL 注入攻防看输入验证的重要性
· 全网最简单!3分钟用满血DeepSeek R1开发一款AI智能客服,零代码轻松接入微信、公众号、小程
点击右上角即可分享
微信分享提示