• spring-创建Webservice服务


           Web service是一个平台独立的,松耦合的,自包含的、基于可编程的web的应用程序,可使用开放的XML标准来描述、发布、发现、协调和配置这些应用程序,用于开发分布式的互操作的应用程序。webservice用的是soap协议。

           客户通过发送请求(大部分是 XML消息)来召唤 WebServices ,而服务则返回 XML 响应。WebServices 通过网络调用通信,
    HTTP作为两个框架之间的网络公认的最广泛的方法。Web 服务等效于 SOA (面向服务的体系结构) ,并且从根本上依赖于度量,例如 XML-RPC和 SOAP (简单对象访问协议)。

          Java项目中可以使用注解 @WebService 注解,你可以将普通的 Java 类转换成可发布为 Web 服务的类。 @WebService 是 Java API for XML Web Services(JAX-WS)中的注解,用于标识一个类或接口作为一个可通过网络访问的 Web 服务。

    @WebService注解

    @WebService-定义服务,有以下配置项
        targetNamespace:指定命名空间,一般是接口的包名倒序
        name:portType的名称,客户端生成代码时 为接口名称
        portName:port的名称
        serviceName:服务名称
        endpointInterface:SEI接口地址,如果一个服务类实现了多个接口,只需要发布一个接口的方法,可通过此注解指定要发布服务的接口。 

            类上添加注解@WebService,则类中所有 非静态方法 都会被发布;静态方法和 final 方法不能被发布;方法上加@WebMentod(exclude=true)后,此方法不被发布

    @WebMethod注解

    @WebMethod-定义方法,在公开方法上边
        operationName:方法名
        exclude:设置为true表示此方法不是webservice方法,反之则表示webservice方法,默认是false 

    @WebParam

    @WebParam-定义参数,在方法参数前边
        name:指定参数的名称

    @WebResult

    @WebResult-定义返回值,在方法返回值前边
        name:返回结果值的名称 

    首先先实现一个接口:

    1. package com.zhong.test.webservice;
    2. import java.util.List;
    3. import javax.jws.WebMethod;
    4. import javax.jws.WebParam;
    5. import javax.jws.WebService;
    6. @WebService(name = "WebServiceTest", targetNamespace = "http://server.webservice.example.com")
    7. public interface WebServiceTest{
    8. @WebMethod
    9. String emrService(@WebParam(name = "name") String name,@WebParam(name = "info") String info);
    10. @WebMethod
    11. String student1111(@WebParam(name = "name") String name,@WebParam(name = "info) String info);
    12. @WebMethod
    13. String aboutstudent(@WebParam(name="student") Student student);
    14. @WebMethod
    15. String studentlist(List list1);
    16. }

    然后在想要实现的服务中实现接口:

    1. package com.zhong.test.webservice;
    2. import java.util.List;
    3. import javax.jws.WebParam;
    4. import javax.jws.WebService;
    5. import org.springframework.stereotype.Component;
    6. @Component
    7. @WebService( targetNamespace = "http://server.webservice.example.com",
    8. endpointInterface = "com.zhong.test.webservice.WebServiceTest")
    9. public class WebServicecTestImp implements WebServiceTest{
    10. @Override
    11. public String emrService( String name,String info) {
    12. if(null == name|| "".equals(name.trim())){
    13. return "传入的参数为空";
    14. }
    15. return "name="+name+"@info="+info;
    16. }
    17. @Override
    18. public String student1111(String name, String info) {
    19. return "name="+name+"@info="+info;
    20. }
    21. @Override
    22. public String aboutstudent(Student student) {
    23. System.out.println(student==null);
    24. return "student.getName()="+student.getName();
    25. }
    26. @Override
    27. public String studentlist(List list1) {
    28. return "list1.size()="+list1.size();
    29. }
    30. }

    然后再配置文件中注入配置;

    1. package com.zhong.test.webservice;
    2. import javax.xml.ws.Endpoint;
    3. import org.apache.cxf.Bus;
    4. import org.apache.cxf.bus.spring.SpringBus;
    5. import org.apache.cxf.jaxws.EndpointImpl;
    6. import org.apache.cxf.transport.servlet.CXFServlet;
    7. import org.springframework.beans.factory.annotation.Autowired;
    8. import org.springframework.boot.web.servlet.ServletRegistrationBean;
    9. import org.springframework.context.annotation.Bean;
    10. import org.springframework.context.annotation.Configuration;
    11. @Configuration
    12. public class WebServiceConfig {
    13. @Autowired
    14. private WebServiceTest webServiceTest;
    15. /**
    16. * Apache CXF 核心架构是以BUS为核心,整合其他组件。
    17. * Bus是CXF的主干, 为共享资源提供一个可配置的场所,作用类似于Spring的ApplicationContext,这些共享资源包括
    18. * WSDl管理器、绑定工厂等。通过对BUS进行扩展,可以方便地容纳自己的资源,或者替换现有的资源。默认Bus实现基于Spring架构,
    19. * 通过依赖注入,在运行时将组件串联起来。BusFactory负责Bus的创建。默认的BusFactory是SpringBusFactory,对应于默认
    20. * 的Bus实现。在构造过程中,SpringBusFactory会搜索META-INF/cxf(包含在 CXF 的jar中)下的所有bean配置文件。
    21. * 根据这些配置文件构建一个ApplicationContext。开发者也可以提供自己的配置文件来定制Bus。
    22. * 非必要项
    23. */
    24. @Bean(name = Bus.DEFAULT_BUS_ID)
    25. public SpringBus springBus() {
    26. return new SpringBus();
    27. }
    28. /***
    29. *
    30. * 这里需要注意 由于springmvc 的核心类 为DispatcherServlet,此处若不重命名此bean的话 原本的mvc就被覆盖了。可查看配置类:DispatcherServletAutoConfiguration
    31. * 一种方法是修改方法名称 或者指定bean名称,
    32. * 这里需要注意 若beanName命名不是 cxfServletRegistration 时,会创建两个CXFServlet的。具体可查看下自动配置类:Declaration org.apache.cxf.spring.boot.autoconfigure.CxfAutoConfiguration
    33. *
    34. * 也可以不设置此bean 直接通过再application中的配置项 cxf.path 来修改访问路径的
    35. * http://127.0.0.1:8080/soap/列出服务列表 或 http://127.0.0.1:8080/soap/ws/api?wsdl 查看实际的服务
    36. */
    37. @Bean("cxfServletRegistration")
    38. public ServletRegistrationBean dispatcherServlet() {
    39. //注册servlet 拦截/ws 开头的请求 不设置 默认为:/services/*
    40. return new ServletRegistrationBean(new CXFServlet(), "/ws/*");
    41. }
    42. @Bean
    43. public Endpoint endpoint() {
    44. EndpointImpl endpoint = new EndpointImpl(springBus(), webServiceTest);
    45. endpoint.publish("/ws/api");
    46. return endpoint;
    47. }
    48. }

    测试的时候也可以使用一下方式测试:

    1. ublicstatic void main(String[] args) {
    2. /**
    3. * 参数1:服务的发布地址
    4. * 参数2:服务的实现者
    5. */
    6. Endpoint.publish("http://192.168.24.138:456/helloWord",
    7. new WebServiceTestImpl());
    8. }

           EndPoint是 jdk 提供的一个专门用于发布服务的类,该类的publish()方法接收两个参数,一个是本地的服务地址,二是提供服务的类。位于javax.xml.ws.Endpoint包中。

  • 相关阅读:
    2022软件测试3大发展趋势,看看你都知道吗?
    java毕业生设计大学生闲置物品拍卖系统计算机源码+系统+mysql+调试部署+lw
    Android学习笔记 53. 重新认识Android studio开发工具之创建项目
    亚马逊 CTO Werner Vogels:2023 年及未来五大技术趋势预测
    python带你采集爆火动漫弹幕,并且做词云图可视化分析
    leetcode 304. Range Sum Query 2D - Immutable 二维区域和检索 - 矩阵不可变(中等)
    [Android]Logcat调试
    【备忘/shell】hadoop 常见shell 与相关进程操作命令 ing
    公众号迁移条件是什么?
    mysql表的增删改查(进阶)
  • 原文地址:https://blog.csdn.net/qq_34484062/article/details/133708223