您的位置:首页 > 编程语言 > Java开发

WebService-CXF总结

2018-01-07 18:39 316 查看
WebService

    是:不同系统不同语言之间的数据交互

    实质:是一种思想

    

    具体实现:

        CXF Apache

        hessian

        dubbo 阿里云

    

    CXF是目前比较主流的WebService框架

    提供WS和RS两种服务方式

-----------------------------------------------------------------------------------------------        

    JAXWS    提供了标准,传输XML格式,基于SOAP协议

    JAXRS   提供了设计风格,传输XML或JSON格式,基于HTTP协议

                基于这种风格架构,软件编写可以更简洁

                基于 HTTP 协议, 支持多种消息格式,比如 XML 、JSON

                更易于实现缓存机制(第一次访问资源 缓存,第二次访问资源,返回 304 客户端调用本地)

                访问服务器统一资源,采用不同 HTTP 协议请求方式,服务器端可以得知进行 CRUD 哪个操作!

                HTTP 协议请求方式:@GET 查询 @PUT 修改 @POST 增加 @DELETE 删除    

-----------------------------------------------------------------------------------------------    

    wsdl:webService definition language webService的定义语言

        wsdl:描述了服务的名字及访问地址,还有服务中所有方法的名字,参数以及返回值    

    根据wsdl生成java代码

        wsdl2java -d C:\Users\Windows\Desktop\aaaa -client http://localhost:9999/userService?wsdl
        将服务端的wsdl生成java代码到我们自己的系统(客户端)

-----------------------------------------------------------------------------------------------        

    JAXWS

        服务端

            导入 maven 坐标:jaxws的jar包

            标签:@WebService 使用在类上面,标记类,是WebService服务提供对象

                    @WebService注解设置endPointInterface 接口服务完整类名,

                                       servicename 服务名称

                  @WebMethod 使用在方法上面,标记方法,是WebService服务提供方法

            发布:1、服务实现对象IUserService userService=new UserServiceImpl();

                  2、发布服务地址address=“http://localhost:9999/userService”;

                  3、发布服务(Endpoint对象的publish方法)

                        Endpoint.publish(address,userService);

            网址:http://localhost:9999/userService?wsdl

            

        客户端:

            导入 maven 坐标:cxf的client包

            接收:调用发布WebService服务

                1、创建JaxWsProxyFactoryBean对象

                    JaxWsProxyFactoryBean jaxWsProxyFactoryBean=new JaxWsProxyFactoryBean();

                2、调用JaxWsProxyFactoryBean的方法,设置实现接口类和地址

                    jaxWsProxyFactoryBean.setServiceClass(IUserService.class);

                    jaxWsProxyFactoryBean.setAddress("http://localhost:9999/userService");

                如果需要添加日志监控

                    jaxWsProxyFactoryBean.getInInterceptors().add(new LoggingInInterceptor());

                    jaxWsProxyFactoryBean.getOutInterceptors().add(new LoggingInInterceptor());

                3、调用JaxWsProxyFactoryBean创建调用远程服务代理对象

                    IUserService proxy=(IUserService) jaxWsProxyFactoryBean.create();

                4、通过代理对象调用原接口Webde的服务

                    proxy.....

        

        实质:服务端将业务操作类及其实现类和实体类一起发布

              客户端通过调用jaxWsProxyFactoryBean对象设置接口和网址,创建代理对象

              因此,客户端通过代理对象来完成服务端的业务操作

-----------------------------------------------------------------------------------------------        

    JAXWS与Spring整合

        配置web.xml文件

            配置spring的核心监听器、配置CXFServlet的Servlet标签

        配置applicationContext.xml文件

            引入名称空间

                xmlns:jaxws="http://cxf.apache.org/jaxws"

                http://cxf.apache.org/jaxws

                http://cxf.apache.org/schemas/jaxws.xsd

            配置服务

                1、address:客户端访问服务路径

                2、serviceClass:配置接口

                3、serviceBean:配置实现类

                <jaxws:server id="userService" address="/userService">

                    <jaxws:serviceBeans>

                        <!-- 此处存放业务接口的实现类全路径 -->

                        <bean class="cn.itcast.crm.service.CustomerServiceImplement" />

                    </jaxws:serviceBeans>

                </jaxws:server>

        配置pom.xml文件

            导入 maven 坐标

            配置启动服务端口    

-----------------------------------------------------------------------------------------------    

    JAXRS

        服务端:

            导入 maven 坐标:jaxrs的jar包,json扩展者,转换json工具包

            标签:

                实体类:

                    @XmlRootElement(name="实体类")    指定序列化(转换 XML、JSON) 对象名字

                业务接口类:

                    第一种 @Path 服务访问资源路径

                        如果访问 saveUser 方法 /userService/user

                    第二种 @Produces 生成(方法返回值) @Consumes 消费 (方法参数)

                        @Consumes 指定能够处理客户端传递过来数据格式

                        @Produces 指定能否生成哪种格式数据返回给客户端

                    第三种 @GET 查询 @PUT 修改 @POST 增加 @DELETE 删除    

                        POST 请求方式访问 保存操作

                        PUT 请求方式访问 修改操作

                        GET 请求方式访问 查询操作

                            如果实现某条数据单独查询,使用 url 参数 !

                                @GET

                                @Path("/user/{id}")

                                @Consumes("applicationContext.xml")

                                @Produces("applicationContext.xml")

                                public User findById(@PathParam("id") Integer id);

                        DELETE 请求方式访问 删除操作

            发布:1、服务实现对象IUserService userService=new UserServiceImpl();

                  2、发布服务地址addr
4000
ess=“http://localhost:9999/userService”;

                  3、发布服务(Endpoint对象的publish方法)

                        Endpoint.publish(address,userService);

            网址:http://localhost:9999/userService/user/id

            

        客户端:

            导入 maven 坐标:cxf的client包,json扩展者,转换json工具包

            接收:

                  链式接收

                  create 建立与调用服务资源路径连接

                  type 发送给服务器数据格式----@Consumes

                  accept 接收服务器传输数据格式----@Produces

                  采用HTTP协议的哪种方式访问服务器

                 //获取全部用户集合

                Collection<? extends User> collection=WebClient

                .create("http://localhost:9999/userService/user")

                .accept(MediaType.APPLICATION_XML).getCollection(User.class);

                 //添加用户

                User user =new User();

                WebClient.create("http://localhost:9999/userService/user")

                        .type(MediaType.APPLICATION_XML).post(user);

                

        实质:客户端使用WebClient对象的方法,链式添加服务端地址和数据接收,执行业务

-----------------------------------------------------------------------------------------------            

    JAXRS与spring整合

        配置web.xml文件

            配置spring的核心监听器、配置CXFServlet的Servlet标签

        配置applicationContext.xml文件

            引入名称空间 xmlns:jaxrs="http://cxf.apache.org/jaxrs"

                        http://cxf.apache.org/jaxrs

                        http://cxf.apache.org/schemas/jaxrs.xsd

            配置服务

                1、address:客户端访问服务路径

                2、serviceClass:配置接口

                3、serviceBean:配置实现类

                <jaxrs:server id="userService" address="/userService">

                    <jaxrs:serviceBeans>

                        <!-- 此处存放业务接口的实现类全路径 -->

                        <bean class="cn.itcast.crm.service.CustomerServiceImplement" />

                    </jaxrs:serviceBeans>

                </jaxrs:server>

        配置pom.xml文件

            导入 maven 坐标,json扩展者,转换json工具包

            配置启动服务端口    

        

        最终访问资源服务路径

            服务器根目录地址+web.xml配置+applicationContext.xml address配置+类@Path+ 方法@Path

-----------------------------------------------------------------------------------------------            

    rs

        独立的

            1.导入对应的jar包

            2.提供服务

                @Path??

                    服务器根目录地址+web.xml配置+applicationContext.xml address配置+类@Path+ 方法@Path

                @GET @POSt    @PUT @DELETE ???

                    @Cousume {application_json,}   chi  

                    @Produces   pull

                    public List<User> queryByXxx(String xxx);

                    public void save(User user);

    

            1.如何发送不同类型的请求

            2.如何接收返回的数据

            3.如何发送增删改查对应的数据

            4.条件查询,这些条件该怎么传

        

            WebClient.create(url) //创建连接

                .type() |accept(MediaType.APPLICATION_XML)

                .post(user)|.get(User.class)|.getCollection()|put()|delete()

                

        整合spring        

-----------------------------------------------------------------------------------------------            

    ws    范例:

            实体类:

                public class User {}

            业务接口:

                @WebService

                public interface IUserService {

                    @WebMethod

                    public String sayHello(String name);

                }

            业务实现类:

                @WebService(endpointInterface = "cn.itcast.cxf.service.IUserService", serviceName = "userService")

                public class UserServiceImpl implements IUserService {

                    public String sayHello(String name) {

                        return "Hello," + name;

                    }

                }

            applicationContext.xml配置:

                <jaxws:server id="userService" address="/userService" serviceClass="cn.itcast.cxf.service.IUserService">

                    <jaxws:serviceBean>

                        <bean class="cn.itcast.cxf.service.UserServiceImpl" />

                    </jaxws:serviceBean>

                </jaxws:server>

-----------------------------------------------------------------------------------------------                        

    rs    范例:

            实体类:

                @XmlRootElement(name = "User")

                public class User {}

            业务接口:

                @Path("/userService")    //可忽略不写

                @Produces("*/*")        //可忽略不写

                public interface IUserService {

                    @POST

                    @Path("/user")

                    @Consumes({ "application/xml", "application/json" })

                    public void saveUser(User user);

                    @PUT

                    @Path("/user")        //可忽略不写

                    @Consumes({ "application/xml", "application/json" })

                    public void updateUser(User user);

                    @GET

                    @Path("/user")

                    @Produces({ "application/xml", "application/json" })

                    public List<User> findAllUsers();

                    @GET

                    @Path("/user/{id}")

                    @Consumes("application/xml")

                    public User finUserById(@PathParam("id") Integer id);

                    @DELETE

                    @Path("/user/{id}")

                    @Consumes("application/xml")

                    public void deleteUser(@PathParam("id") Integer id);

                }

            业务实现类:

                public class UserServiceImpl implements IUserService {

                public void saveUser(User user) {

                    System.out.println("save user:" + user);

                }

            applicationContext.xml配置:

                <jaxrs:server id="userService" address="/userService" >

                    <jaxrs:serviceBeans>

                        <bean class="cn.itcast.cxf.service.UserServiceImpl" />

                    </jaxrs:serviceBeans>

                </jaxrs:server>

-----------------------------------------------------------------------------------------------                

        

        

        

        

        

        

        

        

        

        

        

        

        

        

    

    

    

    

   
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  java WebService