SpringBoot+webservice

задняя часть

Сегодня я увидел проект по подключению к заводской ERP с помощью веб-сервиса. Хотя использовать springboot удобнее, давайте посмотрим:

что такое веб-сервис

В Интернете есть много объяснений, но на самом деле это технология удаленного вызова через языки и операционные системы. Например, Amazon может предоставлять свои собственные сервисы в виде сервисов веб-сервисов, и мы можем вызывать их через Интернет. Независимо от того, используем ли мы язык java или c, это также форма приложения SOA.

WSDL (язык описания веб-служб) описывает веб-службу, написанную на любом языке, например ее параметры или возвращаемые значения. WSDL — это стандартный формат, который могут интерпретировать как серверы, так и клиенты. Клиент получает доступ к файлу WSDL через URL-адрес и сначала обращается к файлу WSDL перед вызовом сервера. После прочтения WSDL классы прокси можно сгенерировать через класс API клиента, а доступ к службе веб-сервиса можно получить, вызвав эти классы прокси. Прокси-класс изменяет метод клиента в формат soap (Simple Object Access Protocol, который можно понимать как http+xml) и отправляет его через http, а также принимает и анализирует возвращаемое значение в формате soap.


использование веб-сервиса

  • Создать проект

  • добавить зависимости

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>

        <dependency>
            <groupId>org.apache.httpcomponents</groupId>
            <artifactId>httpclient</artifactId>
            <version>4.5.4</version>
        </dependency>

        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>fastjson</artifactId>
            <version>1.1.41</version>
        </dependency>
    
        <dependency>
            <groupId>org.apache.cxf</groupId>
            <artifactId>cxf-spring-boot-starter-jaxws</artifactId>
            <version>3.1.11</version>
        </dependency>

        <dependency>
            <groupId>org.scala-lang</groupId>
            <artifactId>scala-library</artifactId>
            <version>2.11.0</version>
        </dependency>
    </dependencies>
  • Тестовый объект TestBean

    public class TestBean {
        private String name;
        private String id;

        public String getName() {
            return name;
        }

        public void setName(String name) {
            this.name = name;
        }

        public String getId() {
            return id;
        }

        public void setId(String id) {
            this.id = id;
        }
    }
  • Интерфейс сервера

    @WebService(name = "testService",targetNamespace = "http://service.webservicedemo.sxt.com")
    public interface Wbservice {

        @WebMethod
        @WebResult()
        public String helloService(@WebParam(name = "name") String name);
        
        @WebMethod
        public ArrayList<TestBean> getAllBean()
    }
  • Реализация интерфейса сервера

    @WebService(name = "testService",
            targetNamespace = "http://service.webservicedemo.sxt.com",
            endpointInterface="com.sxt.webservicedemo.Service.Wbservice")

    @Component
    public class WebserviceImpl implements Wbservice {
        @Override
        public String helloService(String name) {
            return "hello"+name;
        }

        @Override
        public ArrayList<TestBean> getAllBean() {
            ArrayList<TestBean> list = new ArrayList<>();
            TestBean bean1 = new TestBean("zhangsan", "1");
            TestBean bean2 = new TestBean("lisi", "2");
            list.add(bean1);
            list.add(bean2);
            return list;
        }
    }
  • опубликовать конфигурацию

@Configuration
public class Webserviceconfig {

    @Bean
    public ServletRegistrationBean dispatcherServlet(){
        return new ServletRegistrationBean(new CXFServlet(),"/service/*");//发布服务名称
    }

    @Bean(name = Bus.DEFAULT_BUS_ID)
    public SpringBus springBus()
    {
        return  new SpringBus();
    }

    @Bean
    public Wbservice beanService()
    {
        return  new WebserviceImpl();
    }

    @Bean
    public Endpoint endpoint() {
        EndpointImpl endpoint=new EndpointImpl(springBus(), beanService());//绑定要发布的服务
        endpoint.publish("/test"); //显示要发布的名称
        return (Endpoint) endpoint;
    }
  • Звонок клиента

public static void main(String[] args) throws Exception {
        JaxWsDynamicClientFactory dcflient=JaxWsDynamicClientFactory.newInstance();

        Client client=dcflient.createClient("http://localhost:8080/service/test?wsdl");

        Object[] objects=client.invoke("getBean","411001");
        System.out.println("*******"+objects[0].toString());
    }