Node调用Java的示例代码


Posted in Javascript onSeptember 20, 2017

Java 端作为服务提供者,基于Dubbo 实现服务并通过 Dubbo Hessian 扩展暴露服务;Node 端作为服务消费者,通过node-hessian 调用 Java 端的服务。

Java 端

服务接口

package com.yuanxin.paas.ssb;
 
public interface TestService {
 
  /**
   * 测试:无参,无返回值。
   */
  void test();
   
  /**
   * 测试:原生类型参数与返回值。
   * 
   * @param i
   * @return 
   */
  String test0(int i);
   
  /**
   * 测试:无参,自定义类型返回值。
   * 
   * @return 
   */
  Result test1();
   
  /**
   * 测试:自定义类型参数,无返回值。
   * 
   * @param arg 
   */
  void test2(Arg arg);
   
  /**
   * 测试:自定义参数,自定义返回值。
   * 
   * @param arg
   * @return 
   */
  Result test3(final Arg arg);
}

自定义参数类

package com.yuanxin.paas.ssb;
 
import java.io.Serializable;
 
public class Arg implements Serializable {
 
  private int i;
 
  public int getI() {
    return i;
  }
 
  public void setI(int i) {
    this.i = i;
  }
 
}

自定义返回值类

package com.yuanxin.paas.ssb;
 
import java.io.Serializable;
 
public class Result implements Serializable {
 
  private int i;
 
  private String string;
 
  public int getI() {
    return i;
  }
 
  public void setI(int i) {
    this.i = i;
  }
 
  public String getString() {
    return string;
  }
 
  public void setString(String string) {
    this.string = string;
  }
 
}

Dubbo 配置略。

Node 端

node-hessian

安装 node-hessian:

npm install hessian-proxy

调用服务接口

var Proxy = require('hessian-proxy').Proxy;
 
var proxy = new Proxy('http://127.0.0.1:9098/test-provider/provider/com.yuanxin.paas.ssb.TestService', '', '', proxy);
 
proxy.invoke('test', null, function (err, reply) {
  console.log('test: ' + reply);
});
 
proxy.invoke('test0', [25], function (err, reply) {
  console.log('test0: ' + JSON.stringify(reply));
})
 
proxy.invoke('test1', null, function (err, reply) {
  if (err) {
    console.log('test1: ' + err);
  }
 
  console.log('test1: ' + JSON.stringify(reply));
})
 
var argForTest2 = {
  i: 2
};
 
argForTest2.__type__ = 'com.yuanxin.paas.ssb.Arg';
 
proxy.invoke('test2', [argForTest2], function (err, reply) {
  if (err) {
    console.log('test2: ' + err);
  }
 
  console.log('test2: ' + JSON.stringify(reply));
})
 
 
var argForTest3 = {
  i: 3
};
 
argForTest3.__type__ = 'com.yuanxin.paas.ssb.Arg';
 
proxy.invoke('test3', [argForTest3], function (err, reply) {
  if (err) {
    console.log('test3: ' + err);
  }
 
  console.log('test3: ' + JSON.stringify(reply));
})

运行结果

Java 端

Node调用Java的示例代码

Node 端

Node调用Java的示例代码

总结

Dubbo 非常赞,提供了对 Hessian 原生协议的支持;Node 调用起来也非常简单,不过还是有几个点需要注意一下:

  • 接口方法不能重载(接口里的方法必须使用不同的方法名)
  • 自定义类型的命名空间服务端与消费端要一致(com.yuanxin.paas.ssb.Arg)
  • 服务端自定义类型需要实现序列化接口(java.io.Serializable)
  • 尽量使用简单的自定义类型结构(避免嵌套)

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
符合标准的js表单提交的代码
Sep 13 Javascript
AngularJS的表单使用详解
Jun 17 Javascript
JS使用插件cryptojs进行加密解密数据实例
May 11 Javascript
ES6下子组件调用父组件的方法(推荐)
Feb 23 Javascript
解决layui中的form表单与button的点击事件冲突问题
Aug 15 Javascript
详解基于iview-ui的导航栏路径(面包屑)配置
Feb 22 Javascript
原生JS实现图片懒加载之页面性能优化
Apr 26 Javascript
JS中实现一个下载进度条及播放进度条的代码
Jun 10 Javascript
微信小程序webview 脚手架使用详解
Jul 22 Javascript
微信小程序实现滚动加载更多的代码
Dec 06 Javascript
Vue 中如何将函数作为 props 传递给组件的实现代码
May 12 Javascript
使用JavaScript和MQTT开发物联网应用示例解析
Aug 07 Javascript
浅谈react前后端同构渲染
Sep 20 #Javascript
微信页面弹出键盘后iframe内容变空白的解决方案
Sep 20 #Javascript
微信小程序 页面跳转事件绑定的实例详解
Sep 20 #Javascript
微信小程序 数据绑定及运算的简单实例
Sep 20 #Javascript
Angularjs使用过滤器完成排序功能
Sep 20 #Javascript
微信小程序 swiper组件构建轮播图的实例
Sep 20 #Javascript
node+koa实现数据mock接口的方法
Sep 20 #Javascript
You might like
S900/ ETON E1-XM 收音机
2021/03/02 无线电
Windows下PHP的任意文件执行漏洞
2006/10/09 PHP
php不用正则采集速度探究总结
2008/03/24 PHP
新浪微博API开发简介之用户授权(PHP基础篇)
2011/09/25 PHP
浅析php中json_encode()和json_decode()
2014/05/25 PHP
jquery validation插件表单验证的一个例子
2010/03/03 Javascript
Javascript延迟执行实现方法(setTimeout)
2010/12/30 Javascript
元素的内联事件处理函数的特殊作用域在各浏览器中存在差异
2011/01/12 Javascript
JavaScript中valueOf函数与toString方法深入理解
2012/12/02 Javascript
jQuery实现提示密码强度的代码
2015/07/15 Javascript
jquery按回车键实现表单提交的简单实例
2016/05/25 Javascript
JS从数组中随机取出几个数组元素的方法
2016/08/02 Javascript
Vue项目webpack打包部署到服务器的实例详解
2017/07/17 Javascript
vue下跨域设置的相关介绍
2017/08/26 Javascript
微信小程序富文本渲染引擎的详解
2017/09/30 Javascript
webpack4 CSS Tree Shaking的使用
2018/09/03 Javascript
更改BootStrap popover的默认样式及popover简单用法
2018/09/13 Javascript
Element-UI踩坑之Pagination组件的使用
2018/10/29 Javascript
微信小程序如何调用新闻接口实现列表循环
2019/07/02 Javascript
layui导出所有数据的例子
2019/09/10 Javascript
公众号SVG动画交互实战代码
2020/05/31 Javascript
[01:16:28]DOTA2-DPC中国联赛 正赛 iG vs Magma BO3 第二场 2月23日
2021/03/11 DOTA
举例详解Python中的split()函数的使用方法
2015/04/07 Python
python实现猜单词小游戏
2020/05/22 Python
Python短信轰炸的代码
2020/03/25 Python
大数据分析用java还是Python
2020/07/06 Python
Python爬虫基于lxml解决数据编码乱码问题
2020/07/31 Python
CSS3中的Media Queries学习笔记
2016/05/23 HTML / CSS
浅析图片上传及canvas压缩的流程
2020/06/10 HTML / CSS
新奥尔良珠宝:Mignon Faget
2020/11/23 全球购物
下面这个程序执行后会有什么错误或者效果
2014/11/03 面试题
法学毕业生自荐信
2013/11/13 职场文书
销售总监工作职责
2013/11/21 职场文书
勤俭节约倡议书
2014/04/14 职场文书
老干部工作先进事迹
2014/08/17 职场文书
基于Redis位图实现用户签到功能
2021/05/08 Redis