• 12_CXF入门


    【CXF】

      Apache CXF = Celtix + Xfire,开始叫 Apache CeltiXfire,后来更名为 Apache CXF 了,以下简称为 CXF。Apache CXF 是一个开源的 web Services 框架,CXF 帮助您构建和开发 web Services ,它支持多种协议,比如:SOAP1.1,1,2、XML/HTTP、RESTful HTTP 或者 CORBA。

      CXF是基于SOA总线结构的,依靠Spring完成模块的集成,实现SOA方式。

      灵活的部署:可以运行有Tomcat、Jboss、Jetty(内置)、WebLogic上面。

    【环境配置】

    下载apache-cxf-2.7.18版本

    环境变量配置:

    CXF_HOME= D:Program Filesapache-cxf-2.7.18
    Path =    %CXF_HOME%in;
    CLASSPATH=%CXF_HOME%libcxf-manifest.jar

     【创建CXF工程流程】

    第一步:创建java工程

    第二步:将CXF的jar包加入工程

    第三步:创建服务接口和服务实现类(创建服务接口和服务类的方法同上篇的描述,编写SEI及SEI的实现)

    【第一个CXF程序】

    【服务端工程截图】

    【WeatherModel.java】

    package com.Higgin.ws.pojo;
    
    import java.util.Date;
    
    public class WeatherModel {
        
        //天气概况
        private String detail;
        
        //日期
        private Date date;
        
        //最高温度
        private  int  temperature_max;
        
        //最低温度
        private int temperature_min;
        //忽略get/set方法      
    }

    【WeatherInterface.java】

    注意:CXF开发SEI需要将@WebService注解放在接口中(之前是在接口实现类中)

    package com.Higgin.ws.service;
    
    import java.util.List;
    
    import javax.jws.WebParam;
    import javax.jws.WebResult;
    import javax.jws.WebService;
    import javax.xml.ws.BindingType;
    
    import com.Higgin.ws.pojo.WeatherModel;
    
    @WebService(
            targetNamespace="http://weather.Higgin.com/",//指定wsdl的命名空间
            name="WeatherInterface",                    //指定portType的名称
            portName="WeatherInterfacePort",            //指定port的名称    
            serviceName="WeatherService"                //服务视图的名称
            //endpointInterface="com.Higgin.ws.service.WeatherInterface" //指定哪个接口中方法要发布成WebService,此时接口中也要加上@WebService注解
    )
    public interface WeatherInterface {
        public @WebResult(name="result") List<WeatherModel> queryWeather(@WebParam(name="cityName") String cityName);
    }

    【WeatherInterfaceImpl.java】

    package com.Higgin.ws.service;
    
    import java.util.ArrayList;
    import java.util.Calendar;
    import java.util.Date;
    import java.util.List;
    import com.Higgin.ws.pojo.WeatherModel;
    
    //这里没有@WebService注解!!!!!
    public class WeatherInterfaceImpl implements WeatherInterface{
    
        @Override
        public List<WeatherModel> queryWeather(String cityName) {
            
            //构造三天天气
            List<WeatherModel> list =new ArrayList<WeatherModel>();
            Calendar calendar=Calendar.getInstance();
            int day=calendar.get(Calendar.DATE);
            
            WeatherModel weatherModel_1=new WeatherModel();
            weatherModel_1.setDetail("晴天");
            weatherModel_1.setDate(new Date());
            weatherModel_1.setTemperature_max(10);
            weatherModel_1.setTemperature_min(-10);
            
            WeatherModel weatherModel_2=new WeatherModel();
            weatherModel_2.setDetail("阴天");
            calendar.set(Calendar.DATE, day+1);
            weatherModel_2.setDate(calendar.getTime());
            weatherModel_2.setTemperature_max(6);
            weatherModel_2.setTemperature_min(-2);
            
            WeatherModel weatherModel_3=new WeatherModel();
            weatherModel_3.setDetail("晴天");
            calendar.set(Calendar.DATE, day+2);
            weatherModel_3.setDate(calendar.getTime());
            weatherModel_3.setTemperature_max(30);
            weatherModel_3.setTemperature_min(3);
            
            list.add(weatherModel_1);
            list.add(weatherModel_2);
            list.add(weatherModel_3);
            return list;
        }
    
    }

    【WeatherServer.java】发布服务代码

    package com.Higgin.ws.service;
    
    import org.apache.cxf.jaxws.JaxWsServerFactoryBean;
    
    public class WeatherServer {
        public static void main(String[] args) {
            //Endpoint.publish("http://127.0.0.1:12345/weather", new WeatherInterfaceImpl());
            
            //使用jaxWs发布SOAP协议的WebService
            JaxWsServerFactoryBean jaxWsServerFactoryBean=new JaxWsServerFactoryBean();
            //指定WebService地址
            jaxWsServerFactoryBean.setAddress("http://127.0.0.1:12345/weather");
            //指定portType
            jaxWsServerFactoryBean.setServiceClass(WeatherInterface.class);
            //指定服务类对象
            jaxWsServerFactoryBean.setServiceBean(new WeatherInterfaceImpl());
            //发布服务
            jaxWsServerFactoryBean.create();
        }
    }

    【运行服务代码之后,使用Wsimport生成客户端代码,并导入客户端】

    【客户端工程截图】

    【WeatherClient.java】

    package com.higgin.weather.client;
    
    import java.text.SimpleDateFormat;
    import java.util.Date;
    import java.util.List;
    
    import org.apache.cxf.jaxws.JaxWsProxyFactoryBean;
    
    import com.higgin.weather.WeatherInterface;
    import com.higgin.weather.WeatherModel;
    
    public class WeatherClient {
        public static void main(String[] args) {
            //jaxWsProxyFactoryBean调用WebService服务端
            JaxWsProxyFactoryBean jaxWsProxyFactoryBean=new JaxWsProxyFactoryBean();
            //调用地址
            jaxWsProxyFactoryBean.setAddress("http://127.0.0.1:12345/weather?wsdl");
            //设置portType
            jaxWsProxyFactoryBean.setServiceClass(WeatherInterface.class);
            //创建portType
            WeatherInterface weatherInterface=(WeatherInterface) jaxWsProxyFactoryBean.create();
            
            //调用portType方法
            List<WeatherModel> list=weatherInterface.queryWeather("杭州");
            
            for(WeatherModel weatherModel:list){
                System.out.println(weatherModel.getDetail());
                Date date=weatherModel.getDate().toGregorianCalendar().getTime();
                System.out.println(new SimpleDateFormat("yyyy-MM-dd").format(date));
                System.out.println(weatherModel.getTemperatureMax());
                System.out.println(weatherModel.getTemperatureMin());
            }
            
        }
    }

    【运行结果】

  • 相关阅读:
    哈尔特征Haar
    【python】发送post请求
    【svn】SSL error: A TLS warning alert has been received的解决方法
    【python】tarfile的路径问题
    【python】nuitka封装python
    【linux】scp命令
    【mongo】聚合相关资料
    【python】with的实现方法
    【mongo】mongoVUE使用
    【http】四种常见的 POST 提交数据方式
  • 原文地址:https://www.cnblogs.com/HigginCui/p/5842793.html
Copyright © 2020-2023  润新知