• WebService 的CXF框架 WS独立服务之HelloWorld


    WebService:不同系统不同语言的数据交互,

    CXF主要分为两种服务方式:

    1 )JAX-WS:传输数据, xml格式,基于SOAP协议(规范:规定了xml传递数据的编码规范) ;

    2 )JAX-RS:传输数据,xml或json格式.基于HTTP协议.(风格).

    一:WS独立服务使用(主要看底层如何实现)

    1.建立项目导包

    复制代码
     1 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
     2   <modelVersion>4.0.0</modelVersion>
     3   <groupId>cn.itcast.maven</groupId>
     4   <artifactId>cxf_ws_helloworld</artifactId>
     5   <version>0.0.1-SNAPSHOT</version>
     6   <name>cxf_ws_helloworld</name>
     7   <description>独立发布CXF服务java项目</description>
     8   
     9   <dependencies>
    10           <!-- 要进行jaxws 服务开发 -->
    11           <dependency>
    12             <groupId>org.apache.cxf</groupId>
    13             <artifactId>cxf-rt-frontend-jaxws</artifactId>
    14             <version>3.0.1</version>
    15         </dependency>
    16 
    17         <!-- 内置jetty web服务器  -->
    18         <dependency>
    19             <groupId>org.apache.cxf</groupId>
    20             <artifactId>cxf-rt-transports-http-jetty</artifactId>
    21             <version>3.0.1</version>
    22         </dependency>
    23         
    24         <!-- 日志实现 -->
    25         <dependency>
    26             <groupId>org.slf4j</groupId>
    27             <artifactId>slf4j-log4j12</artifactId>
    28             <version>1.7.12</version>
    29         </dependency>
    30   </dependencies>
    31 </project>
    复制代码

    2.与pom中的日志实现相对应.

    复制代码
     1 ### direct log messages to stdout ###
     2 log4j.appender.stdout=org.apache.log4j.ConsoleAppender
     3 log4j.appender.stdout.Target=System.out
     4 log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
     5 log4j.appender.stdout.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L - %m%n
     6 
     7 ### direct messages to file mylog.log ###
     8 log4j.appender.file=org.apache.log4j.FileAppender
     9 log4j.appender.file.File=c:/mylog.log
    10 log4j.appender.file.layout=org.apache.log4j.PatternLayout
    11 log4j.appender.file.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L - %m%n
    12 
    13 ### set log levels - for more verbose logging change 'info' to 'debug' ###
    14 
    15 log4j.rootLogger=info, stdout
    复制代码

    3.编写服务端程序

    1)编写实体类Car 与 User

    复制代码
     1 package cn.itcast.cxf.domain;
     2 
     3 public class Car {
     4     private Integer id;
     5     private String carName;
     6     private Double price;
     7 
     8     public Integer getId() {
     9         return id;
    10     }
    11 
    12     public void setId(Integer id) {
    13         this.id = id;
    14     }
    15 
    16     public String getCarName() {
    17         return carName;
    18     }
    19 
    20     public void setCarName(String carName) {
    21         this.carName = carName;
    22     }
    23 
    24     public Double getPrice() {
    25         return price;
    26     }
    27 
    28     public void setPrice(Double price) {
    29         this.price = price;
    30     }
    31 
    32     @Override
    33     public String toString() {
    34         return "Car [id=" + id + ", carName=" + carName + ", price=" + price + "]";
    35     }
    36 
    37 }
    复制代码
    复制代码
     1 package cn.itcast.cxf.domain;
     2 
     3 import java.util.ArrayList;
     4 import java.util.List;
     5 
     6 public class User {
     7     private Integer id;
     8     private String username;
     9     private String city;
    10 
    11     private List<Car> cars = new ArrayList<Car>();
    12 
    13     public Integer getId() {
    14         return id;
    15     }
    16 
    17     public void setId(Integer id) {
    18         this.id = id;
    19     }
    20 
    21     public String getUsername() {
    22         return username;
    23     }
    24 
    25     public void setUsername(String username) {
    26         this.username = username;
    27     }
    28 
    29     public String getCity() {
    30         return city;
    31     }
    32 
    33     public void setCity(String city) {
    34         this.city = city;
    35     }
    36 
    37     public List<Car> getCars() {
    38         return cars;
    39     }
    40 
    41     public void setCars(List<Car> cars) {
    42         this.cars = cars;
    43     }
    44 
    45 }
    复制代码

    2)编写服务(Service)

    复制代码
     1 package cn.itcast.cxf.service;
     2 
     3 import java.util.List;
     4 
     5 import javax.jws.WebMethod;
     6 import javax.jws.WebService;
     7 
     8 import cn.itcast.cxf.domain.Car;
     9 import cn.itcast.cxf.domain.User;
    10 //使用类上面,说明标记类时WebService的服务类
    11 @WebService
    12 public interface IUserService {
    13     //服务方法
    14     @WebMethod
    15     public String sayHello(String name);
    16 
    17     @WebMethod
    18     public List<Car> findCarsByUser(User user);
    19 }
    复制代码
    复制代码
     1 package cn.itcast.cxf.service;
     2 
     3 import java.util.ArrayList;
     4 import java.util.List;
     5 
     6 import javax.jws.WebService;
     7 
     8 import cn.itcast.cxf.domain.Car;
     9 import cn.itcast.cxf.domain.User;
    10 //endpointInterface接口服务完整类名,serviceName 服务名称
    11 @WebService(endpointInterface = "cn.itcast.cxf.service.IUserService", serviceName = "userService")
    12 public class UserServiceImpl implements IUserService {
    13 
    14     // 简单参数传递
    15     public String sayHello(String name) {
    16         return "Hello," + name;
    17     }
    18 
    19     // 复杂参数传递
    20     public List<Car> findCarsByUser(User user) {
    21         if ("xiaoming".equals(user.getUsername())) {
    22             List<Car> cars = new ArrayList<Car>();
    23             Car car1 = new Car();
    24             car1.setId(1);
    25             car1.setCarName("大众途观");
    26             car1.setPrice(200000d);
    27             cars.add(car1);
    28 
    29             Car car2 = new Car();
    30             car2.setId(2);
    31             car2.setCarName("现代ix35");
    32             car2.setPrice(170000d);
    33             cars.add(car2);
    34 
    35             return cars;
    36         } else {
    37             return null;
    38         }
    39     }
    40 }
    复制代码

    3)将Uservice的服务方法,发布到网上,让其他系统调用

    复制代码
     1 package cn.itcast.cxf.ws.server;
     2 
     3 import javax.xml.ws.Endpoint;
     4 
     5 import cn.itcast.cxf.service.IUserService;
     6 import cn.itcast.cxf.service.UserServiceImpl;
     7 
     8 public class WS_Server {
     9     
    10     public static void main(String[] args) {
    11         // 使用CXF 将 UserService服务 注册到网络上
    12         // 1 、 服务实现对象
    13         IUserService userService = new UserServiceImpl();
    14         // 2、 发布服务地址
    15         String address = "http://localhost:9999/userService";
    16         // 3、 发布服务
    17         Endpoint.publish(address, userService);
    18 
    19         System.out.println("服务已经启动...");
    20     }
    21 }
    复制代码

    通过:http://ip地址:端口号/服务名称?wsdl       

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

    4.编写客户端代码

    复制代码
     1  package cn.itcast.cxf.ws.client;
     2  2 
     3  3 import org.apache.cxf.interceptor.LoggingInInterceptor;
     4  4 import org.apache.cxf.interceptor.LoggingOutInterceptor;
     5  5 import org.apache.cxf.jaxws.JaxWsProxyFactoryBean;
     6  6 
     7  7 import cn.itcast.cxf.domain.User;
     8  8 import cn.itcast.cxf.service.IUserService;
     9  9 
    10 10 public class WS_Client {
    11 11     public static void main(String[] args) {
    12 12         JaxWsProxyFactoryBean jaxWsProxyFactoryBean = new JaxWsProxyFactoryBean();
    13 13         jaxWsProxyFactoryBean.setServiceClass(IUserService.class);
    14 14         jaxWsProxyFactoryBean.setAddress("http://localhost:9999/userService");
    15 15 
    16 16         // 通过拦截器 打印soap 报文信息
    17 17         jaxWsProxyFactoryBean.getInInterceptors().add(new LoggingInInterceptor());
    18 18         jaxWsProxyFactoryBean.getOutInterceptors().add(new LoggingOutInterceptor());
    19 19 
    20 20         IUserService proxy = (IUserService) jaxWsProxyFactoryBean.create();
    21 21 
    22 22         // 调用sayHello
    23 23         System.out.println(proxy.sayHello("程序猿"));
    24 24 
    25 25         // 调用findCarsByUser
    26 26         User user = new User();
    27 27         user.setUsername("xiaoming");
    28 28         System.out.println(proxy.findCarsByUser(user));
    29 29 
    30 30     }
    31 31 }
    复制代码
  • 相关阅读:
    An Empirical Evaluation of Generic Convolutional and Recurrent Networks for Sequence Modeling
    Multi-attention Network for One Shot Learning
    Visual Question Answering with Memory-Augmented Networks
    Tutorial on word2vector using GloVe and Word2Vec
    论文笔记:Tracking by Natural Language Specification
    论文笔记:Semantic Segmentation using Adversarial Networks
    论文笔记:Attention Is All You Need
    论文笔记:Capsules for Object Segmentation
    美国签证申请流程
    论文笔记:Diffusion-Convolutional Neural Networks (传播-卷积神经网络)
  • 原文地址:https://www.cnblogs.com/Jeely/p/10761894.html
Copyright © 2020-2023  润新知