精华内容
下载资源
问答
  • 解决java web 项目发布webservice接口
    2020-12-19 16:58:01

    最近公司有一个需求,需要暴露当前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,正在学习,等成功了在更新。

    更多相关内容
  • 自己在研究ASP.NET WebAPI的过程中,为了方便自己调试,写了一个自测工具。 可以进行 application/json 协议的访问,也可以进行 application/x-www-form-urlencoded 协议的访问。 为了方便经常调试某个接口,可将 ...
  • 解决方案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>,这个作用是只允许此依赖所在的项目使用,即使别的项目引用了这个依赖,都无法下载下来。

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

    展开全文
  • Java基于spring暴露接口供外部调用

    千次阅读 2020-05-23 15:21:11
    -- 暴露一个webService连接 --> <bean class="org.springframework.remoting.jaxws.SimpleJaxWsServiceExporter"> <property name="baseAddress" value="http://localhost:8085/"/> </bean>...

    在springmvc的配置文件添加创建如下的bean:

        <!-- 暴露一个webService连接 -->
        <bean class="org.springframework.remoting.jaxws.SimpleJaxWsServiceExporter">
               <property name="baseAddress" value="http://localhost:8085/"/>
        </bean>

    创建一个接口和实现类

    package com.nbesoft.company.service;
    
    public interface ReceiveDataService {
    
        public String exporeInterfaceService(String data);
        
    }
    package com.nbesoft.company.service.impl;
    
    import javax.jws.WebMethod;
    import javax.jws.WebParam;
    import javax.jws.WebService;
    
    import org.springframework.stereotype.Service;
    
    import com.nbesoft.company.service.ReceiveDataService;
    
    @Service
    @WebService(name="dataService",serviceName="receiveDataServiceImpl",targetNamespace="dataReceive")
    public class ReceiveDataServiceImpl implements ReceiveDataService {
    
        @WebMethod
        public String exporeInterfaceService(@WebParam(name="data") String data) {
            
            System.out.println("==========");
            System.out.println("data:"+data);
            
            System.out.println("=====---------=====");
            return "外部传送数据进来了..."+data;
        }
    
    
    
    
    }

    调用接口

    需要如下jar包

    调用的相关代码:

    package ss;
    
    import java.net.URL;
    import java.rmi.RemoteException;
    
    import javax.xml.namespace.QName;
    import javax.xml.rpc.ParameterMode;
    
    import org.apache.axis.client.Call;
    import org.apache.axis.client.Service;
    import org.apache.axis.encoding.XMLType;
    
    
    
    
    
    public class Testss {
        
        public static void main(String[] args) {
            // 访问的url 
            String url = "http://localhost:8085/receiveDataServiceImpl?wsdl";
            // 命名空间
            String namespace_uri = "dataReceive";
            // 暴露的方法名
            String methodName = "exporeInterfaceService";
            // 创建Service实例
            Service service = new Service();
            Call call = null;
            try {
                // 通过Service创建Call的实例
                call = (Call) service.createCall();
                // 将对应的WSDL的URL路径加入call的实例
                call.setTargetEndpointAddress(new URL(url));
            } catch (Exception e) {
                e.printStackTrace();
            }
            // 设置要访问的方法
            call.setOperationName(new QName(namespace_uri,methodName));
            // 设置要访问的方法里面需要传入的参数
            call.addParameter(new QName("data"), XMLType.XSD_STRING, ParameterMode.IN);
            // 设置返回参数
            call.setReturnType(XMLType.XSD_STRING, String.class);
            
            String str = "哈哈哈";
            Object[] obj = {str};
            Object result = null;
            try {
                // 调用
                result = call.invoke(obj);
            } catch (RemoteException e) {
                e.printStackTrace();
            }
            // 打印返回结果
            System.out.println("*****"+result);
        }
        
    }

     

    展开全文
  • 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层是对前端暴露接口)
    对外暴露接口

    展开全文
  • Python3 接口自动化测试项目实战一(WEB项目

    千次阅读 热门讨论 2019-01-13 21:58:32
    1.1 接口测试项目搭建 1.1.1 教育局招生管理系统部署 教育局招生管理系统是基于java+mysql,下面介绍它的部署过程。 1.从我的网盘下载部署文件。   2.安装jdk以及配置环境变量。 点击文件进行安装。   下...
  • 再指定的地方 提供对应的接口给别人使用(映射的url是在web层对应的url) @FeignClient(value = "ms-erp-mall-admin", configuration = {FeignApplyConfiguration.class}) value:指定FeignClient的名称,如果项目...
  • Java Web项目常用的第三方接口

    千次阅读 2017-11-09 11:36:03
    感谢作者 ...1. Web Service接口 ...1.1 接口方式说明和优点 ...在笔者的开发生涯中,当作为接口提供商给第三方提供接口时,以及作为客户端去调用第三方提供的接口时,大部分时候都是使用Web Service接口,We
  • Ⅰ)调用CXF提供的wsdl2java工具,根据WSDL文档生成相应的Java代码(任何语言实现web service都要暴露WSDL文档); Ⅱ)找到wsdl2java所生成的类中一个继承了Service的类(该类的实例可当工厂使用); Ⅲ)调用...
  • WebService接口
  • 如何把项目打jar包,然后暴露接口给第三方应用提供服务【实战讲解】 下面这个例子,是我在开源项目CR949中使用到的部分代码,作为讲解,发布到这里。 jar包中的controller,如何对外暴露接口。 这样一个场景:比如...
  • nodejs和Java调用webservice接口总结 做了一天终于调通了 Java和node工程都是可以使用,随便总结一下,下次忘记咯
  • SpringBoot接口Http协议开发实战,很简单很详细的入门哦
  • 前端代码中如何避免暴露后端接口

    千次阅读 2021-04-16 15:12:36
    在日常开发中,后端同事会给前端一个地址,这个地址我们不想暴露出来,具体操作该怎么做? 这里已vue3 的项目为例子。react 原理是一样的 第一步前端配置 .env.production文件 VUE_APP_NODE_ENV = "'production'" ...
  • 我有一个完整的java Web 项目,可以运行成功,但是现在有需要把其中的接口暴露出来,这就有问题了,我加了@webservice,但是当我在...如果是这样,那我该怎么暴露接口呢(必须用cxf),求高手指点,谢谢。
  • 怎么做web接口测试

    万次阅读 多人点赞 2018-05-10 17:00:55
    这就需要开发提供的接口文档了,接口文档和功能测试的需求说明书的功能是一样的。包括:接口说明、调用的url,请求方式(get or post),请求参数、参数类型、请求参数说明,返回结果说明。有了接口文档后,我们就...
  • 参考:... 主要针对idea 修改了相关jar包 1、加入web service 相关jar包 cxf.version>3.2.1cxf.version>  org.apache.cxf cxf-rt-frontend-jaxws ${cxf.version}
  • ngrok工具,将本地web服务暴露给互联网 项目中经常会向别人提供接口,但是调用该接口的并不是同公司的或者说并不是处于同一个局域网,就导致接口调用方只有在发布后才能测试该接口。如果接口调用方能直接访问我们...
  • golang webapi开源项目

    千次阅读 2022-01-22 18:19:05
    looklapi looklapi是一个为业务构建的基于kataras/iris的微服务开发脚手架项目项目集成了mongodb,redis,并实现了redis基本操作和分布式锁操作。...内置应用内消息发布和处理接口AppEventPublisher和AppObs
  • 我们在做服务层时,经常会用到Web Service,但是这有个问题,容易被人恶意调用接口。 一种解决办法是自己写个验证SoapHeader,屏蔽接口在网页端调用,但使用这个方法别人还是能看到你的接口有哪些,也不安全,所以...
  • 一般情况下,实施接口测试的优先级是:对暴露在外面的接口(该接口会给第三方调用)进行接口测试;内部的核心功能接口也会做接口测试;内部非核心功能接口接口测试(很多时候就是单元测试)。当然这个实施的具体细节,还...
  • 在传统Spring项目基础上增加 Web Service 的步骤(SSH 已经配置过,SSM 未配过): 1 . 复制 CXF 的 jar 包(最核心的6个), jar 包地址 http://pan.baidu.com/s/1jHJ56BW 注:请选择性复制 (Apache官网上也...
  • 查看开发机的ip地址,并告诉给其他小伙伴,还有端口号 补充知识:vue项目通过本地ip实现真机调试 使用webpack打包后 cmd 输入 IPCONFIG 拿这个地址 然后去package.json 在dev里面输入 你的ip 然后npm run dev 运行...
  • 因为我们在用swagger代替接口的时候,难免有些接口会直观的暴露出来,比如我们结合Consul一起使用的时候,会将健康检查接口以及报警通知接口暴露出来,这些接口有时候会出于方便考虑,没有进行加密,这个时候我们就...
  • 前后端分离开发基于api调用,或者在api系统接口开发中,api接口调用的合法性不可避免,参加高校微信小程序大赛,需要开发后台,暴露接口给前端小程序,在此过程中,为了保证接口调用的合法性以及处于安全性考虑,...
  • 现在很流行的Dubbo很多朋友都听说过吧,最近我也在看这方面的东西,分享先我的心得笔记。...项目分三层,model存放数据,view页面展示、controller下面具体逻辑实现。通过dubbo消费方和供应方注...
  • [项目规范]JAVA WEB项目实施规范

    千次阅读 2018-02-26 22:17:09
    一:前言在此将Java Web项目的实施规范做一个总结。二:需求阶段需求阶段主要包含需求分析和需求拆分,下面针对这两块做一个说明。1.需求分析需求分析是由PM撰写初稿,然后PM,DEV,FE,QA四方共同review之后定稿的...
  • * 在传统Spring项目基础上增加 Web Service 的步骤(SSH ): 1 . 让 Controller 依赖远程 Web Service 的接口; 2 . 复制 CXF 的 jar 包(最核心的6个), jar 包地址 http://pan.baidu.com/s/1jHJ56BW 注:请...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 58,167
精华内容 23,266
关键字:

web项目暴露接口