精华内容
下载资源
问答
  • 我有一个完整的java Web 项目,可以运行成功,但是现在有需要把其中的接口暴露出来,这就有问题了,我加了@webservice,但是当我在...如果是这样,那我该怎么暴露接口呢(必须用cxf),求高手指点,谢谢。
  • springboot如何暴露接口 1.再对应的service层编写对应的...在web层创建个文件夹对外暴露接口(controller层是对前端暴露接口) 3.再指定的地方 提供对应的接口给别人使用(映射的url是在web层对应的url) ...

    springboot如何暴露接口
    1.在对应的service层编写提供别人使用的方法
    service2.再指定的地方 提供对应的接口给别人使用(映射的url是在web层对应的url)

    @FeignClient(value = "ms-erp-mall-admin", configuration = {FeignApplyConfiguration.class})
    value:指定FeignClient的名称,如果项目使用了Ribbon,name属性会作为微服务的名称,用于服务发现
    configuration :Feign配置类,可以自定义Feign的Encoder、Decoder、LogLevel、Contract
    

    提供接口
    3.在web层创建个文件夹编写调用接口的实现类 可以等同看作编写controller层(controller层是对前端暴露接口)
    对外暴露接口

    展开全文
  • 最近公司有一个需求,需要暴露当前web项目接口给第三方系统调用,网上查到webservice是跨平台、跨语言的应用技术,所以作为首选。查找了很多例子,都是很简单的加@WebService到类,加@WebMethod到暴露的方法上,...

    最近公司有一个需求,需要暴露当前web项目的接口给第三方系统调用,网上查到webservice是跨平台、跨语言的应用技术,所以作为首选。

    查找了很多例子,都是很简单的加@WebService到类,加@WebMethod到暴露的方法上,然后EndPoint.publish即可,但我在web项目中使用,没有报错,但就是发布失败,在这里卡了很久,

    以下是我的解决过程,做下记录备忘:

    首先试着新建了一个普通java项目,同样的加接口、实现类、注解,结果发布成功。但是新建一个web项目同样的操作就是发布不成功,看了下项目结构,主要就是web项目默认加载tomcat的lib

    所有JAR包,把这些包删除,重新发布,结果成功。这时我考虑到可能是我tomcat下的jar包冲突问题,于是进行排查,最后发现去掉  xfire-all-1.2.6.jar ,web项目就可以发布成功了,但是web项目

    又必须有  xfire-all-1.2.6.jar,网上查了没有找到具体方法,但有提到xfire-core-1.2.6.jar,于是我把 xfire-all-1.2.6.jar 替代成 xfire-core-1.2.6.jar,web项目功能正常,webservice也可以发布成功。

    因为我的项目是ssh框架,所以就创建一个filter类,配置到web.xml,启动项目的同时发布接口。

    public class StartFilter implementsFilter{

    @Overridepublic voiddestroy() {//TODO Auto-generated method stub

    }

    @Overridepublic voiddoFilter(ServletRequest request, ServletResponse response, FilterChain chain)throwsIOException, ServletException {//TODO Auto-generated method stub

    }

    @Overridepublic void init(FilterConfig filterConfig) throwsServletException {this.startWebservice();

    }public voidstartWebservice() {

    Endpoint.publish("http://localhost:8085/service/wstest",newWsInterfaceImpl());

    System.out.println("webservice发布成功");

    }

    }

    //web.xml添加配置

    StartFilter

    com.cf.cfipms.interceptor.StartFilter

    目前只是实现使用jdk自带的webservice进行发布,看到很多推荐CXF,正在学习,等成功了在更新。

    展开全文
  • 解决方案2.1 实现生产者中的接口2.2 暴露接口2.3 远程调用2.4 SpringBoot整合测试2.5 开始测试 一. 问题背景 技术栈:SpringBoot+SpringCloud 项目结构组织:项目由多个Module构成,而每个Module又由api模块、model...

    一. 问题背景

    技术栈:SpringBoot+SpringCloud
    项目结构组织:项目由多个Module构成,而每个Module又由api模块、model模块、web模块构成

    需求:现在需要将A项目(生产者,或者叫服务提供者)的web模块中的某些接口暴露出去,要求在api模块中定义。使得B项目(消费者,或者叫客户端)能远程调用A项目暴露的接口

    备注:笔者对SpringCloud只有了解并未实践过,导致实现这个需求时踩了不少坑,本博客适合初次实操SpringCloud或者如何暴露接口的小白。

    解决踩坑过程中觉得不错的博客:【SpringCloud】 - Feign 踩坑记录:404 ,调用不成功 , 接口定义规范 等问题记录

    二. 解决方案

    这里先给出代码实现以及注意事项,后面有时间再补充微服务相关的知识。

    2.1 实现生产者中的接口

    • 首先实现生产者中的接口,在A项目的web模块中,代码如下:
    @Api(value = "字典定义", tags = " 字典定义")
    @RestController
    @RequestMapping(value = "/wcenter/dict/define")
    public class WcenterDictDefineRest {
    
     /**
       * 获取树状字典
       **/
      @ApiOperation(value = "获取树状字典")
      @ApiImplicitParams({
          @ApiImplicitParam(name = "codes", value = "字典编码", paramType = "query", dataType = "String[]"),
      })
      @GetMapping(value = "/tree")
      public ResponsePacket<ResponseTreeEntityDto> tree(HttpServletRequest request, String[] codes) {
        //...业务逻辑
        return xxx;
      }
    
    }
    

    注意:上面那个类,必须加@RestController注解,否则后面调用api模块暴露的接口会出现问题。

    2.2 暴露接口

    • 首先要引入Feign的依赖,Feign依赖是必须引入的,其余依赖根据自己的接口需要引入其他依赖。如下:
     <!-- Feign Form Spring -->
        <dependency>
          <groupId>io.github.openfeign.form</groupId>
          <artifactId>feign-form-spring</artifactId>
          <version>3.8.0</version>
        </dependency>
    
        <!-- Feign Form -->
        <dependency>
          <groupId>io.github.openfeign.form</groupId>
          <artifactId>feign-form</artifactId>
          <version>3.8.0</version>
        </dependency>
    
        <!-- Feign Core-->
        <dependency>
          <groupId>io.github.openfeign</groupId>
          <artifactId>feign-core</artifactId>
          <version>10.10.1</version>
        </dependency>
    
        <!-- Feign Hystrix -->
        <dependency>
          <groupId>io.github.openfeign</groupId>
          <artifactId>feign-hystrix</artifactId>
          <version>10.10.1</version>
        </dependency>
    
        <!-- Feign Slf4j -->
        <dependency>
          <groupId>io.github.openfeign</groupId>
          <artifactId>feign-slf4j</artifactId>
          <version>10.10.1</version>
        </dependency>
    
    • 暴露接口,在A项目的api模块中,代码如下:
    @Api("数据字典远程服务接口")
    @FeignClient(value = "接口的实现方法所在项目的微服务名", path = "web以及请求路径")
    public interface DictFeign {
    
      @ApiOperation(value = "获取树状字典")
      @ApiImplicitParams({
          @ApiImplicitParam(name = "codes", value = "字典编码", paramType = "query", dataType = "String[]"),
      })
      @GetMapping(value = "/tree")
      ResponsePacket<ResponseTreeEntityDto> tree(@RequestParam("request") HttpServletRequest request, @RequestParam("codes") String[] codes);
    
    }
    

    注意:

    1. 必须加@FeignClient声明
    2. 其他 value属性的值是yml文件中spring.application.name的值,这里建议用全局变量来填写,方便管理更多的微服务
    3. 如果yml文件中配置了server.servlet.context-path,必须配上path属性。否则后面调用这个接口会出现404问题
    4. 关于方法的mapping注解,有人说Feign不支持 GetMapping,笔者测试过 是支持的。这应该与某些依赖的版本有关
    5. 方法参数必须加@RequestParam注解(否则,后面调用该接口会报too many bad parameter错误),若是POST请求方式,需要根据情况加@RequestBody注解

    2.3 远程调用

    • 需要在B项目中引入A项目的api模块的依赖,例子如下:
    <dependency>
      <groupId>xxx.xxx</groupId>
      <artifactId>business-wcenter-api</artifactId>
      <version>2.0.0</version>
    </dependency>
    
    • B项目的启动类必须加上@EnableFeignClients注解,还必须要加上basePackages的属性,他的值是标注了@FeignClient注解的接口的包路径,如下:
    @EnableFeignClients(basePackages = "xx.xx.xx")
    @SpringCloudApplication
    public class CriterionServerApplication {
    
    }
    

    2.4 SpringBoot整合测试

    引入SpringBoot的测试依赖,如下:

    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-test</artifactId>
    </dependency>
    
    • 代码如下:
    @Slf4j
    @RunWith(SpringJUnit4ClassRunner.class)
    @SpringBootTest(
        classes = 启动类.class
        )
    public class DictFeignTest {
    
      @Autowired
      DictFeign dictFeign;
    
      /**
       * 测试 远程调用数据字典
       */
      @Test
      public void testRpcDictFeign(){
        ResponsePacket<ResponseTreeEntityDto> tree = dictFeign.tree(null, null);
        log.info("The dict tree is: {}", tree);
      }
    }
    

    2.5 开始测试

    这种暴露接口的测试,必须先启动生产者(服务提供者),再启动消费者(客户端)。

    我们先启动A项目,再启动B项目,运行上面的测试方法,测试成功。

    三. 回调处理

    前面讲述了远程调用的简单版本,如果调用失败,是没有相应的机制去处理的,那么接下来就实现调用失败的处理机制,这里简称方法回调

    代码如下:

    @FeignClient(value = "xxx", path = "xxx", fallbackFactory = DictDefineFallbackFactory.class)
    public interface DictDefineFeign {
    
    }
    

    解释:使用@FeignClient注解的fallbackFactory属性,其值是一个类,代码如下:

    @Component
    @Slf4j
    public class DictDefineFallbackFactory implements FallbackFactory<DictDefineFeign> {
    
      @Override
      public DictDefineFeign create(Throwable throwable) {
        log.error("字典定义服务调用失败:" + throwable.getMessage());
        return new DictDefineFeign() {
       
          @Override
          public ResponsePacket<ResponseTreeEntityDto> tree(String[] codes) {
            return ResponsePacket.generateFail("字典定义服务--->获取树状字典失败");
          }
    
        };
      }
    }
    
    

    四. 踩坑记录

    测试暴露接口的过程中,遇到了一系列形如“xxxClass can not find、xxxMethod is not define”,一般都是对应的依赖没有下载下来。尤其是依赖中的依赖,有些是设置了<optional>true</optional>,这个作用是只允许此依赖所在的项目使用,即使别的项目引用了这个依赖,都无法下载下来。

    因此解决方法是调整依赖,或者单独引入缺失的依赖

    展开全文
  • WebService学习之使用jdk实现暴露接口暴露接口后,该地址即可任何项目调用获取数据了。 目录: 系统环境:win10 java环境:jdk1.8 maven版本:3.5.2 实现过程: 1、创建 mavenweb项目 2、添加包...

    什么是webservice,请百度,不做介绍了。

    WebService学习之使用jdk实现暴露接口,暴露接口后,该地址即可任何项目调用获取数据了。

    目录:

    系统环境:win10

    java环境:jdk1.8

    maven版本:3.5.2

    实现过程:

    1、创建 mavenweb空项目

    2、添加包com.gx.webservice,添加接口 IHelloWorld.java

    package com.gx.webservice;
    
    import javax.jws.WebService;
    
    @WebService
    public interface IHelloWorld {
    	
    	public String say(String str);
    
    }
    

    3、添加包com.gx.webservice.impl,创建实现类HelloWorldImpl.java

    package com.gx.webservice.impl;
    
    import javax.jws.WebService;
    
    import com.gx.webservice.IHelloWorld;
    
    @WebService
    public class HelloWorldImpl implements IHelloWorld{
    
    	public String say(String str) {
    		return "hello "+str;
    	}
    
    }
    

    4、添加包com.gx.server,创建Server.java,下面地址端口自定义

    package com.gx.server;
    
    import javax.xml.ws.Endpoint;
    
    import com.gx.webservice.IHelloWorld;
    import com.gx.webservice.impl.HelloWorldImpl;
    
    public class Server {
    	static String address = "http://127.0.0.1:34563/helloWorld";
    	
    	public static void main(String[] args) {
    		System.out.println("web service start");
    		IHelloWorld implementor = new HelloWorldImpl();
    		Endpoint.publish(address, implementor); //jdk实现 暴露webservice接口
    		System.out.println("web service started");
    	}
    	
    }
    

    Run As -> Java Application,看到

    在浏览器网址输入自定义address:http://127.0.0.1:34563/helloWorld?wsdl,看到

    即表示接口暴露成功,可调用数据了。

    下篇:

    WebService小白学习 之 使用CXF工具暴露接口

     

    整理至java1234_小峰_WebService之CXF视频教程,感谢!

     

    展开全文
  • * 在传统Spring项目基础上增加 Web Service 的步骤(SSH ): 1 . 让 Controller 依赖远程 Web Service 的接口; 2 . 复制 CXF 的 jar 包(最核心的6个), jar 包地址 http://pan.baidu.com/s/1jHJ56BW 注:请...
  • 在传统Spring项目基础上增加 Web Service 的步骤(SSH 已经配置过,SSM 未配过): 1 . 复制 CXF 的 jar 包(最核心的6个), jar 包地址 http://pan.baidu.com/s/1jHJ56BW 注:请选择性复制 (Apache官网上也...
  • ngrok工具,将本地web服务暴露给互联网 项目中经常会向别人提供接口,但是调用该接口的并不是同公司的或者说并不是处于同一个局域网,就导致接口调用方只有在发布后才能测试该接口。如果接口调用方能直接访问我们...
  • 再指定的地方 提供对应的接口给别人使用(映射的url是在web层对应的url) @FeignClient(value = "ms-erp-mall-admin", configuration = {FeignApplyConfiguration.class}) value:指定FeignClient的名称,如果项目...
  • Ⅰ)调用CXF提供的wsdl2java工具,根据WSDL文档生成相应的Java代码(任何语言实现web service都要暴露WSDL文档); Ⅱ)找到wsdl2java所生成的类中一个继承了Service的类(该类的实例可当工厂使用); Ⅲ)调用...
  • WebAPi接口安全之公钥私钥加密

    千次阅读 2018-01-08 18:17:34
    最近项目项目中由于提供给APP的接口未对接口进行时间防范导致短信接口被怒对造成一定的损失,临时的措施导致PC和app的防止措施不一样导致后来前端调用相当痛苦,选型过oauth,https,当然都被上级未通过,那就只能...
  • 项目采用cxf3.0.13为项目添加webService服务接口项目框架采用spring4,springmvc,mybatis。jdk1.8。...本文只介绍了如果在项目中引入cxf框架,暴露webService接口,不涉及项目框架的其他整...
  • 如果在Windows系统下使用eclipse开发Java应用,那么开始的时候我们一般不会考虑编码问题,但是随着不断学习,接触到前端、服务端、数据接口、数据库等更多的组件时,编码问题就逐渐暴露出来了,我们会在程序内部对...
  • 一、dubbo服务项目结构及发布结构 dubbo 服务项目结构 ...xxxxx-service 接口实现 以及dubbo服务暴露 需要提供dubbo服务的服务命名以Impl结尾 (xxxxxImpl.java) 关于Duubo服务本地启动方式和用W...
  • 项目中经常会遇到通过webservice发送短信功能,从表面上看,Web service 就是一个应用程序,它向外界暴露出一个能够通过Web进行调用的API,我们需要做的是用编程的方法通过Web来调用这个应用程序,即我们要编写...
  • restful接口 restful接口具有很多优势,比如可以...首先,别的项目想要访问我们对外暴露接口时候,我们必须将该类请求放行不拦截,别的项目才可以访问到我们的请求,我们使用的是cas单点登录的框架,至于单点登...
  • 一、分布式系统web端控制 系统概述: 现在已经完成了: 1、会员服务 2、消息服务平台 ...SOA就是面向服务开发,提供接口给前端来调用。...SOA层就是把传统的项目中的控制层抽取出来,暴露...2、使用java web项目,用r...
  •  现在,越来越多的 Web 应用转向了 RESTful 的架构,很多产品和应用暴露给用户的往往就是一组 REST API,这样有一个好处,用户可以根据需要,调用不同的 API,整合出自己的应用出来。从这个角度来讲,Web 开发的...
  • 一般情况下,实施接口测试的优先级是:对暴露在外面的接口(该接口会给第三方调用)进行接口测试;内部的核心功能接口也会做接口测试;内部非核心功能接口接口测试(很多时候就是单元测试)。当然这个实施的具体细节,还...
  • 接口签名2

    2019-10-05 20:15:16
    所以对这些接口需要进行身份的认证,那么这就需要用户提供一些信息,比如用户名密码等,但是为了安全起见让用户暴露的明文密码次数越少越好,我们一般在web项目中,大多数采用保存的session中,然后在存一份到cookie...
  • 使用基本的Flask服务器创建一个Web应用程序,该服务器在一个数据库表上具有REST API(以执行CRUD操作),并使用AJAX调用随附的Web界面来执行这些CRUD操作。 对于这个项目,我将使用DVD租赁数据库,其中包含两个表...
  • api接口签名

    千次阅读 2018-03-02 13:24:54
    所以对这些接口需要进行身份的认证,那么这就需要用户提供一些信息,比如用户名密码等,但是为了安全起见让用户暴露的明文密码次数越少越好,我们一般在web项目中,大多数采用保存的session中,然后在存一份到cookie...
  • app接口设计

    2017-07-10 19:55:45
    所以对这些接口需要进行身份的认证,那么这就需要用户提供一些信息,比如用户名密码等,但是为了安全起见让用户暴露的明文密码次数越少越好,我们一般在web项目中,大多数采用保存的session中,然后在存一份到cookie...

空空如也

空空如也

1 2 3 4 5 ... 14
收藏数 274
精华内容 109
关键字:

web项目暴露接口