• 学习使用webservice【我】


    主要参考如下大神文章:

    一个网上可用的免费webservice

    http://ws.webxml.com.cn/WebServices/MobileCodeWS.asmx?wsdl

    WebService客户端调用常见5种方式

    按照文章搭建服务端,

    遇到

    坑1:上面这个Endpoint相关类会报错

       @Bean
        public Endpoint endpoint(UserService userService) {
            EndpointImpl endpoint = new EndpointImpl(springBus(), userService);
            endpoint.publish("/user");// 发布地址
            return endpoint;
        }

    上面这个Endpoint相关类会报错,主要是导入的包不对,下面贴这个类的完整代码:

    package com.learn.simplewebserviceserver.config;
    
    import com.learn.simplewebserviceserver.webservice.UserService;
    import com.learn.simplewebserviceserver.webservice.impl.UserServiceImpl;
    import org.apache.cxf.Bus;
    import org.apache.cxf.bus.spring.SpringBus;
    import org.apache.cxf.jaxws22.EndpointImpl;
    import org.apache.cxf.transport.servlet.CXFServlet;
    import org.springframework.boot.web.servlet.ServletRegistrationBean;
    import org.springframework.context.annotation.Bean;
    import org.springframework.context.annotation.Configuration;
    
    import javax.xml.ws.Endpoint;
    
    @Configuration
    public class CxfWebServiceConfig {
    
        // 这里需要注意 若beanName命名不是 cxfServletRegistration 时,会创建两个CXFServlet的。
        // 具体可查看下自动配置类:Declaration
        // org.apache.cxf.spring.boot.autoconfigure.CxfAutoConfiguration
        // 也可以不设置此bean 直接通过配置项 cxf.path 来修改访问路径的
        @Bean("cxfServletRegistration")
        public ServletRegistrationBean<CXFServlet> cxfServletRegistration() {
            // 注册servlet 拦截/ws 开头的请求 不设置 默认为:/services/*
            return new ServletRegistrationBean<CXFServlet>(new CXFServlet(), "/ws/*");
        }
    
        /**
         * 申明业务处理类 当然也可以直接 在实现类上标注 @Service
         *
         */
        @Bean
        public UserService userService() {
            return new UserServiceImpl();
        }
    
        /*
         * 非必要项
         */
        @Bean(name = Bus.DEFAULT_BUS_ID)
        public SpringBus springBus() {
            SpringBus springBus = new SpringBus();
            return springBus;
        }
    
        /*
         * 发布endpoint
         */
        @Bean
        public Endpoint endpoint(UserService userService) {
            EndpointImpl endpoint = new EndpointImpl(springBus(), userService);
            endpoint.publish("/user");// 发布地址
            return endpoint;
        }
    }

    坑2:启动项目时报错,起不来项目:

    2020-07-22 15:35:10.169  WARN 16540 --- [           main] ConfigServletWebServerApplicationContext : Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'org.apache.cxf.spring.boot.autoconfigure.CxfAutoConfiguration': Unsatisfied dependency expressed through field 'properties'; nested exception is org.springframework.boot.context.properties.ConfigurationPropertiesBindException: Error creating bean with name 'cxf-org.apache.cxf.spring.boot.autoconfigure.CxfProperties': Could not bind properties to 'CxfProperties' : prefix=cxf, ignoreInvalidFields=false, ignoreUnknownFields=true; nested exception is javax.validation.NoProviderFoundException: Unable to create a Configuration, because no Bean Validation provider could be found. Add a provider like Hibernate Validator (RI) to your classpath.
    2020-07-22 15:35:10.169  INFO 16540 --- [           main] o.s.s.concurrent.ThreadPoolTaskExecutor  : Shutting down ExecutorService 'applicationTaskExecutor'
    2020-07-22 15:35:10.174  INFO 16540 --- [           main] o.apache.catalina.core.StandardService   : Stopping service [Tomcat]
    2020-07-22 15:35:10.187  INFO 16540 --- [           main] ConditionEvaluationReportLoggingListener : 
    
    Error starting ApplicationContext. To display the conditions report re-run your application with 'debug' enabled.
    2020-07-22 15:35:10.194 ERROR 16540 --- [           main] o.s.b.d.LoggingFailureAnalysisReporter   : 
    
    ***************************
    APPLICATION FAILED TO START
    ***************************
    
    Description:
    
    The Bean Validation API is on the classpath but no implementation could be found
    
    Action:
    
    Add an implementation, such as Hibernate Validator, to the classpath

    在pom文件中添加 Hibernate Validator 相关jar包:

          <dependency>
                <groupId>org.hibernate</groupId>
                <artifactId>hibernate-validator</artifactId>
                <version>5.2.4.Final</version>
            </dependency>

    ---

    调用也可以参考下面文章:

    WebService的四种客户端调用方式(基本)

    。。。。

    自己测试时,如果按照第一个文档自己发布的服务,然后用jdk自带工具生成客户端代码的方式可以使用如下代码进行测试:

    package com.example.webserviceclient.webservice;
    
    import com.example.webserviceclient.genclientcode.UserDto;
    import com.example.webserviceclient.genclientcode.UserService;
    import com.example.webserviceclient.genclientcode.UserService_Service;
    import com.example.webserviceclient.tq.MobileCodeWS;
    import com.example.webserviceclient.tq.MobileCodeWSSoap;
    
    public class UserClient {
        public static void main1(String[] args) {
            //http://ws.webxml.com.cn/WebServices/MobileCodeWS.asmx?wsdl
            //创建服务访问点集合的对象,例如:<wsdl:service name="MobileCodeWS">
            MobileCodeWS mobileCodeWS = new MobileCodeWS();
            //获取服务实现类,例如:<wsdl:portType name="MobileCodeWSSoap">,port--binding--portType
            //MobileCodeWSSoap mobileCodeWSSoap = mobileCodeWS.getPort(MobileCodeWSSoap.class);
            //根据服务访问点的集合中的服务访问点的绑定对象来获得绑定的服务类
            //获得服务类的方式是get+服务访问点的name:getWSServerPort
            MobileCodeWSSoap mobileCodeWSSoap = mobileCodeWS.getMobileCodeWSSoap();
            String mobileCodeInfo = mobileCodeWSSoap.getMobileCodeInfo("18518114962", "");
            System.out.println(mobileCodeInfo);
        }
    
        public static void main(String[] args) {
            UserService_Service userService_service = new UserService_Service();
            UserService userPortName = userService_service.getUserPortName();
            UserDto u = userPortName.getUserByName("王五");
            System.out.println(u);
        }
    
    
    }

    会报错,还没解决

  • 相关阅读:
    使用 webapi+Aspose.Cells 导出execl 功能
    自定义html滚动条样式
    vue+webapi 实现WebSocket 推送
    vue 跨层级 调用solt 传递
    关于对 asp.net mvc 异步方法的理解
    c# 反射机制
    千里之行,始于足下
    [转]浅析大数据量高并发的数据库优化
    关闭rdlc报表打印预览后,关闭客户端,抛出异常“发生了应用程序级的异常 将退出”
    深拷贝
  • 原文地址:https://www.cnblogs.com/libin6505/p/13361084.html
Copyright © 2020-2023  润新知