天道酬勤,学无止境

How can I add my own code to JAVA generated classes from proto file?

I'm using protobuf and I'm generating JAVA classes from the following proto file.

syntax = "proto3";
enum Greeting {
    NONE = 0;
    MR = 1;
    MRS = 2;
    MISS = 3;
}

message Hello {
    Greeting greeting = 1;
    string name = 2;
}

message Bye {
    string name = 1;
}

option java_multiple_files = true;

Now I need to add some code to the generated files and I found that is possible using a custom plugin (https://developers.google.com/protocol-buffers/docs/reference/java-generated#plugins). I'm trying to generate that plugin in Java, something like this.

public class Test {
   PluginProtos.CodeGeneratorResponse.getDefaultInstance();
   /* Code to get generated files from java_out and use the insertion points */
   codeGeneratorResponse.writeTo(System.out);
}

And then I run

protoc --java_out=./classes --plugin=protoc-gen-demo=my-plugin --demo_out=. example.proto

The problem is that on my Test.java main method I don't know how to get access to the files created by the option --java_out so that I can use their insertion points. Currently the CodeGeneratorResponse for the default instance is empty (no files).

Does anybody know how can I get the CodeGeneratorResponse from the --java_out so that I can add more code to the generated classes?

Thanks in advance.

评论

I recently struggled with this as well and wasn't able to find a good answer. I finally figured it out after staring at the comments within the CodeGeneratorResponse message for a while.

What threw me off at first was that I was thinking of plugins as a pipeline, where the output from one feeds into the next. However, each plugin gets the exact same input (the parsed .proto files expressed via CodeGeneratorRequest messages), and all the generated code from the plugins (including the built-in ones) gets combined into the output file. However, plugins may modify the output from the previous plugins, which is what insertion points are designed for.

Specifically to your question, you would add a file to the response with the name field getting set to the name of the generated Java file, the insertion_point field getting set to the name of the insertion point at which you want to add code, and the content field getting set to the code you want inserted at that point.

I found this article helpful in creating a simple plugin (in this case in python). As a simple test, I modified the generate_code function from that article to look like this:

def generate_code(request, response):
    for proto_file in request.proto_file:
        f = response.file.add()
        f.name = "Test.java"
        f.insertion_point = "outer_class_scope"
        f.content = "// Inserting a comment as a test"

Then I ran protoc with the plugin:

$ cat test.proto
syntax = "proto3";
message MyMsg {
    int32 num = 1;
}
$ protoc --plugin=protoc-gen-sample=sample_proto_gen.py --java_out=. --sample_out=. test.proto
$ tail -n3 Test.java
  // Inserting a comment as a test
  // @@protoc_insertion_point(outer_class_scope)
}

Your plugin just needs to be some executable which reads a CodeGeneratorRequest message from stdin and writes a CodeGeneratorResponse message to stdout, so could certainly be written in Java instead. I just chose python as I'm generally more comfortable with it and found this simple example.

As a reference, here's a plugin I wrote for generating code based on custom protobuf options.

I have made a custom python plugin. To run my plugin i use the command below:

protoc --plugin=protoc-gen-custom=my_plugin_executable_file --custom_out=./build test.proto

So i think that, you have to generate an executable file from your .java file and use it in your command.

受限制的 HTML

  • 允许的HTML标签:<a href hreflang> <em> <strong> <cite> <blockquote cite> <code> <ul type> <ol start type> <li> <dl> <dt> <dd> <h2 id> <h3 id> <h4 id> <h5 id> <h6 id>
  • 自动断行和分段。
  • 网页和电子邮件地址自动转换为链接。

相关推荐
  • 使用 gradle 进行简单的 protobuf 编译(simple protobuf compilation with gradle)
    问题 如果您正在寻找示例 gradle protobuf 项目,请看这里。 我在使用 gradle 和 protobuf 时遇到困难,我想创建一个简单的 gradle 项目,该项目将从默认的src/main/proto 、 src/test/proto获取任何 proto 文件并将它们编译为src/main/java 、 src/test/java相应地,然后将其打包到一个 jar 中并发布到本地存储库。 不幸的是,我是 gradle 的新手,无法弄清楚原始项目是如何组成的。 这是我未完成的 build.gradle 文件 apply plugin: 'java' apply plugin: "com.google.protobuf" buildscript { repositories { mavenCentral() } dependencies { classpath 'com.google.protobuf:protobuf-gradle-plugin:0.7.0' } } repositories { mavenCentral() } dependencies { compile 'com.google.protobuf:protobuf-java:3.0.0-beta-1' } sourceSets { main { proto { srcDir 'src/main
  • Protobuf3语言指南
    定义一个消息类型 指定字段类型分配标识号指定字段规则添加更多消息类型添加注释保留标识符(Reserved)从.proto文件生成了什么?标量数值类型默认值枚举使用其他消息类型 导入定义使用proto2消息类型嵌套类型更新一个消息类型AnyOneof 使用OneofOneof 特性向后兼容性问题映射(Maps) 向后兼容性问题包(Packages) 包及名称的解析定义服务JSON 映射选项 自定义选项生成你的类 英文原文: Language Guide (proto3) 中文出处: Protobuf语言指南 [译]Protobuf 语法指南 中文出处是proto2的译文,proto3的英文出现后在原来基础上增改了,水平有限,还请指正 这个指南描述了如何使用Protocol buffer 语言去描述你的protocol buffer 数据, 包括 .proto文件符号和如何从.proto文件生成类。包含了proto2版本的protocol buffer语言:对于老版本的proto3 符号,请见Proto2 Language Guide(以及中文译本,抄了很多这里的感谢下老版本的翻译者) 本文是一个参考指南——如果要查看如何使用本文中描述的多个特性的循序渐进的例子,请在教程中查找需要的语言的教程。 定义一个消息类型 先来看一个非常简单的例子。假设你想定义一个“搜索请求”的消息格式
  • gRPC快速入门(一)——Protobuf简介
    gRPC快速入门(一)——Protobuf简介 一、Protobuf简介 1、Protobuf简介 Protobuf即Protocol Buffers,是Google公司开发的一种跨语言和平台的序列化数据结构的方式,是一个灵活的、高效的用于序列化数据的协议。与XML和JSON格式相比,protobuf更小、更快、更便捷。protobuf是跨语言的,并且自带一个编译器(protoc),只需要用protoc进行编译,就可以编译成Java、Python、C++、C#、Go等多种语言代码,然后可以直接使用,不需要再写其它代码,自带有解析的代码。只需要将要被序列化的结构化数据定义一次(在.proto文件定义),便可以使用特别生成的源代码(使用protobuf提供的生成工具)轻松的使用不同的数据流完成对结构数据的读写操作。甚至可以更新.proto文件中对数据结构的定义而不会破坏依赖旧格式编译出来的程序。GitHub地址:https://github.com/protocolbuffers/protobuf不同语言源码版本下载地址:https://github.com/protocolbuffers/protobuf/releases/latest 2、Protobuf的优缺点 Protobuf的优点如下:A、性能号,效率高序列化后字节占用空间比XML少3-10倍,序列化的时间效率比XML快20
  • iOS上的Google协议缓冲区(Google protocol buffers on iOS)
    问题 是iOS的元语法静态库。 。 。 http://code.google.com/p/metasyntactic/wiki/ProtocolBuffers 。 。 。 与常规的旧C ++编译原型兼容吗? 我不想使用捆绑的编译器生成的OBJ-C。 有什么方法可以编译Google为iOS提供的库吗? 回答1 好的。 在这种情况下,似乎不需要元语法库(或任何其他第三方库)。 您可以直接将Google源添加到您的项目中。 我在Google讨论组中从Nicola Ferruzzi找到了以下答案。 。 。 原始答案在这里。 。 。 http://groups.google.com/group/protobuf/browse_thread/thread/ca4218d7db144252 该答案的内容包括在下面的图像中,以作永久记录... 编辑 由于今晚有一段时间以来第一次尝试此操作,因此除了下面概述的步骤外,我还需要执行其他一些步骤(此方法适用于protobuf 2.5.0)。 您需要针对libz.dylib进行链接。 您可以在构建阶段>使用库链接二进制文件中进行设置。 要轻松删除所有与单元测试有关的内容,请从google目录中的shell中使用以下命令: find . -name "*unittest*" -exec rm -rf {} \; find . -name "*unittest
  • protocal buffers 官方文档学习
    protocal buffers 官方文档学习 文章目录 protocal buffers 官方文档学习1.What are protocol buffers?2.选择你喜欢的语言3.怎么开始,步骤3.1下载和安装protocal buffer 编译器3.2阅读入门指南3.2.1 开发者指南3.2.1.1 怎么开始?3.2.1.2为什么不使用xml?3.2.1.3介绍一下protobuf3 3.2.2 proto3语言3.2.2.1 定义一个消息类型3.2.2.2 字段值类型3.2.2.3枚举3.2.2.4 使用消息类型3.2.2.5嵌套类型3.2.2.6 更新一个消息时怎么办3.2.2.7 未知的字段3.2.2.8 any 类型3.2.2.9Oneof3.2.2.11定义服务3.2.2.12可选项 3.2.3编码风格指南3.2.3.1标准文件格式3.2.3.2 消息和字段名称3.2.3.4 重复字段3.2.3.5 枚举3.2.3.4 重复字段3.2.3.5 枚举 前言:最近在做一个项目,负责通讯这块。采用技术是netty+protobuf 在安卓端和c#端进行通信。项目快差不多了,做一下沉淀,翻译一下protbuf文档,和自己的项目工程实践。工程实践代码可以看我的另一篇博文,是接着写的。 1.What are protocol buffers? protocal
  • Android Protobuf Nano文档(Android protobuf nano documentation)
    问题 我正在尝试减少Google pro-buf生成的方法的数量,替代方法之一是使用pro-buf nano。 但是我没有找到有关如何使用它的文档。 除了包链接外,我找不到任何有关如何使用nano从原始文件生成Java文件的信息。 因此,问题很简单:如何使用Google Proto Nano以便从Proto文件生成Java类以及如何在项目中使用它们? 回答1 查看主要的protobuf编译器源代码: #include <google/protobuf/compiler/javanano/javanano_generator.h> .... int main(int argc, char* argv[]) { google::protobuf::compiler::CommandLineInterface cli; cli.AllowPlugins("protoc-"); ... // Proto2 JavaNano google::protobuf::compiler::javanano::JavaNanoGenerator javanano_generator; cli.RegisterGenerator("--javanano_out", &javanano_generator, "Generate Java source file nano runtime.")
  • protobuf详细介绍和使用
    一、protobuf初识 (一)protocol buffers 是什么? protocol buffers 是一种灵活,高效,自动化机制的结构数据序列化方法-可类比 XML,但是比 XML 更小、更快、更为简单。你可以定义数据的结构,然后使用特殊生成的源代码轻松的在各种数据流中使用各种语言进行编写和读取结构数据。你甚至可以更新数据结构,而不破坏根据旧数据结构编译而成并且已部署的程序。 (二)它是如何工作的? 你可以通过在 .proto 文件中定义 protocol buffer message 类型,来指定你想如何对序列化信息进行结构化。每一个 protocol buffer message 是一个信息的小逻辑记录,包含了一系列的 name-value 对。这里有一个非常基础的 .proto 文件样例,它定义了一个包含 "person" 相关信息的 message: message Person { required string name = 1; required int32 id = 2; optional string email = 3; ​ enum PhoneType { MOBILE = 0; HOME = 1; WORK = 2; } ​ message PhoneNumber { required string number = 1; optional
  • 如何获得Eclipse来解析Maven 2生成的类?(How do I get Eclipse to resolve classes generated with Maven 2?)
    问题 我正在使用Google协议缓冲区为我的项目生成一些Java类。 使用Maven 2及其“ antrun”插件,这些类在编译之前重新生成,输出到目标/生成源,并在构建期间放在类路径中。 因此,从POM构建项目是没有问题的。 但是,Eclipse不知道如何解析生成的类,因为在开发过程中它所在的文件夹似乎不在IDE的类路径上。 我正在使用m2eclipse并让它为我管理依赖项,因此我期望Maven会照顾到这一点。 如何获得生成代码的IDE支持(代码完成等)? 回答1 m2eclipse支持这一点。 首先,将该路径添加到您的构建路径中: <plugin> <groupId>org.codehaus.mojo</groupId> <artifactId>build-helper-maven-plugin</artifactId> <version>1.8</version> <executions> <execution> <id>add-source</id> <phase>generate-sources</phase> <goals> <goal>add-source</goal> </goals> <configuration> <sources> <source>${project.build.directory}/generated-sources/java/<
  • 采用Locust对grpc协议进行压测
    1.Locust学习 详情可以参考:Locust官方文档【中文翻译】 2.grpc协议 详情可以参考:gRPC 官方文档中文版V1.0 gRPC 是什么? 在 gRPC 里客户端应用可以像调用本地对象一样直接调用另一台不同的机器上服务端应用的方法,使得您能够更容易地创建分布式应用和服务。与许多 RPC 系统类似,gRPC 也是基于以下理念:定义一个服务,指定其能够被远程调用的方法(包含参数和返回类型)。在服务端实现这个接口,并运行一个 gRPC 服务器来处理客户端调用。在客户端拥有一个存根能够像服务端一样的方法。 gRPC 客户端和服务端可以在多种环境中运行和交互 - 从 google 内部的服务器到你自己的笔记本,并且可以用任何 gRPC 支持的语言来编写。所以,你可以很容易地用 Java 创建一个 gRPC 服务端,用 Go、Python、Ruby 来创建客户端。此外,Google 最新 API 将有 gRPC 版本的接口,使你很容易地将 Google 的功能集成到你的应用里。 使用 protocol buffers gRPC 默认使用 protocol buffers,这是 Google 开源的一套成熟的结构数据序列化机制(当然也可以使用其他数据格式如 JSON)。正如你将在下方例子里所看到的,你用 proto files 创建 gRPC 服务,用 protocol
  • protobuf序列化原理及序列化选型总结
    一、protobuf的基本使用 使用protobuf 开发的一般步骤是 配置开发环境,安装protocol compiler 代码编译器编写.proto 文件,定义序列化对象的数据结构基于编写的.proto 文件,使用 protocol compiler 编译器生成对应的序列化/反序列化工具类基于自动生成的代码,编写自己的序列化应用 1、下载 protobuf 工具 下载地址:https://github.com/google/protobuf/releases,我下载的是protoc-3.5.1-win32.zip 2、编写 proto 文件 protobuf是一个序列化的平台,它有自己的语法,这是它比较麻烦的地方。 syntax="proto2"; package com.kangping.protobuf; //包的路径 option java_package = "com.kangping.protobuf"; // 生成类的路径 option java_outer_classname="UserProtos"; // 生成类的名称 message User { // messsage 类修饰符 // required 表示必填字段 (optional表示可选字段repeated 可重复,表示集合) required string name=1; // 数字 1,2
  • 如何使用 Gradle 构建 Google 协议缓冲区和 Kotlin?(How to build Google protocol buffers and Kotlin using Gradle?)
    问题 我正在尝试使用 Gradle 构建一个同时使用 Google 协议缓冲区和 Kotlin 的项目。 我希望 proto 文件编译成 Java 源代码,然后从我的 Kotlin 代码中调用它。 我的源文件是这样排列的: src/main/proto/*.proto src/main/kotlin/*.kt src/test/kotlin/*.kt 这是我的build.gradle文件: version '1.0-SNAPSHOT' apply plugin: 'kotlin' apply plugin: 'java' apply plugin: 'com.google.protobuf' repositories { mavenCentral() maven { url "http://dl.bintray.com/kotlin/kotlin-eap-1.1" } } buildscript { ext.kotlin_version = '1.1-M02' repositories { mavenCentral() maven { url "http://dl.bintray.com/kotlin/kotlin-eap-1.1" } } dependencies { classpath 'com.google.protobuf:protobuf-gradle-plugin:0
  • Go编译proto文件
    文章目录 1. 安装Go1.1 下载Go1.2 配置go环境 2. 工具安装2.1 安装protoc2.2 安装protoc-gen-go2.3 安装protoc-gen-validate2.4 安装protoc-gen-grpc-gateway2.5 安装protoc-gen-doc2.6 安装proto-gen-java 3. 编译3.1 hello.proto3.2 编译3.2.1 编译为Go代码(protoc-gen-go)3.2.2 编译为Java代码 (protoc-gen-java)3.2.3 生成proto文档(proto-gen-doc) 3.3 复杂点的proto3.4 生成gw.pb文件 3.5 编译脚本3.6 代码注册 1. 安装Go 1.1 下载Go wget https://studygolang.com/dl/golang/go1.13.4.linux-amd64.tar.gz # 解压 tar -zxvf go1.13.4.linux-amd64.tar.gz 1.2 配置go环境 编辑 /etc/profile 文件 vim ~/.bashrc 将下面内容加入到末尾(GOPAT是我Windows中的GOPATH) export GOROOT=/usr/local/go export GOPATH=/home/pibigstar/goWork
  • 2021-01-07
    Return Homezq2599 CnBlogsHomeNew PostContactAdminSubscription订阅Posts - 134 Articles - 0 Comments - 21 Kubernetes官方java客户端之五:proto基本操作 欢迎访问我的GitHub https://github.com/zq2599/blog_demos 内容:所有原创文章分类汇总及配套源码,涉及Java、Docker、Kubernetes、DevOPS等; 概览 本文是《Kubernetes官方java客户端》系列的第五篇,以下提到的java客户端都是指client-jar.jar; 经过前面四篇文章的准备和尝试,我们对java客户端有了初步了解,也成功运行了hello world,接下来要做的是继续深入学习和实践,掌握这门利器; 两个主要脉络 java客户端的基本功能并不复杂,就是以何种手段发起对K8S资源的增删改查请求,把握以下两个主脉络即可: proto主线:用K8S官方的protobuf定义将各种资源生成java类,用少量API处理这些对象(特点,API极少,每个API都通用,处理所有类型的资源对象); openapi主线:使用openapi工具,将所有资源都自动生成增删改查的API(特点:API极多,每个资源都有自身的API);
  • Go+Python双语言混合开发 第三部分 Go开发学习 第5章 protobuf3和grpc进阶 学习笔记
    Go+Python双语言混合开发 第三部分 Go开发学习 第5章 protobuf3和grpc进阶 学习笔记 第5章 protobuf3和grpc进阶 protobuf 官方文档参考 官方地址: https://developers.google.com/protocol-buffers/docs/proto3 5.1 定义一个消息类型 先来看一个非常简单的例子。假设你想定义一个“搜索请求”的消息格式,每一个请求含有一个查询字符串、你感兴趣的查询结果所在的页数,以及每一页多少条查询结果。可以采用如下的方式来定义消息类型的.proto文件了: syntax = "proto3"; message SearchRequest { string query = 1; int32 page_number = 2; int32 result_per_page = 3; } 文件的第一行指定了你正在使用proto3语法:如果你没有指定这个,编译器会使用proto2。这个指定语法行必须是文件的非空非注释的第一个行。SearchRequest消息格式有3个字段,在消息中承载的数据分别对应于每一个字段。其中每个字段都有一个名字和一种类型。 指定字段类型 在上面的例子中,所有字段都是标量类型:两个整型(page_number和result_per_page),一个string类型(query)。当然
  • 将协议缓冲区集成到 Maven2 构建中(Integrate Protocol Buffers into Maven2 build)
    问题 我正在一个现有的、相当普通的 Maven 2 项目中试验协议缓冲区。 目前,我每次需要更新生成的源时都会调用一个 shell 脚本。 这显然很麻烦,因为我希望在每次构建之前自动生成源代码。 希望不要诉诸可耻的hackery。 所以,我的问题有两个方面: 远景:是否有 Maven 2 的“协议缓冲区插件”可以以自动方式实现上述目标? 谷歌代码上有一个分支,其作者似乎已经尝试实现这样的插件。 不幸的是,它没有通过代码审查或被合并到 protobuf 主干中。 因此,该插件的状态未知。 可能更现实:缺少实际的插件,我还能如何从我的 Maven 2 构建中调用protoc ? 我想我可以将我现有的 shell 脚本连接到antrun调用或类似的东西中。 个人经验最受赞赏。 回答1 您将在 Protocol Buffers 讨论组的 Protocol Buffers Compiler Maven Plug-In 线程中的 Protocol Buffers 存储库中找到有关该插件的一些信息。 我的理解是它可用但缺乏测试。 我想试一试。 或者你可以只使用antrun插件(从上面提到的线程粘贴的antrun ): <build> <plugins> <plugin> <artifactId>maven-antrun-plugin</artifactId> <executions>
  • gRPC远程实现Java调用python服务-demo
    GRPC学习 1 GRPC配合java的简单应用 1.1 项目生成 用IDEA生成的一个Springboot应用。(这边是因为要做一个web项目,也可以只生成一个普通的带maven的java项目)。先放出一个整体的项目结构图,这个结构图的一些文件是整个项目编译(target文件夹中的文件)好才生成的。 1.2 添加依赖 首先是添加一下grpc对应的依赖。 <dependency> <groupId>io.grpc</groupId> <artifactId>grpc-netty-shaded</artifactId> <version>1.26.0</version> </dependency> <dependency> <groupId>io.grpc</groupId> <artifactId>grpc-protobuf</artifactId> <version>1.26.0</version> </dependency> <dependency> <groupId>io.grpc</groupId> <artifactId>grpc-stub</artifactId> <version>1.26.0</version> </dependency> 除了以上方法,还可以像如下的方式添加全面的依赖,但是导入的依赖项比较多。 <dependency> <groupId>io
  • linux 环境下python3 对google 的 protobuf 安装和使用 详解
    1.安装 a>在线安装 安装protobuf环境: sudo snap install protobuf --classic 安装protobuf python库:pip3 install protobuf b>源码安装 下载源代码 安装protoc 解压:protoc-3.5.0-osx-x86_64.zip 将解压出的:protoc-3.5.0-osx-x86_64/bin/protoc至于系统路径中 输入:protoc --version 检查是否安装成功 安装Python扩展,protobuf 解压:protobuf-python-3.5.0.zip 进入目录:protobuf-3.5.0/python 首先更新:setuptools 和 pip, 执行命令:pip3 install -U setuptools pip 避免出现错误:AttributeError: '_NamespacePath' object has no attribute 'sort' 我的pip和setuptools版本分别是:pip: 10.0.0.dev0,setuptools: 36.7.2 然后依次执行: python3 setup.py build python3 setup.py test python3 setup.py install 检查是否安装成功 Python 3.6.3
  • Java - .Net 对象交换,不是基于网络的(Java - .Net object interchange, not web-based)
    问题 我有一个用 C# 实现的客户端-服务器系统,客户端和服务器通过序列化/反序列化和 TCP/IP 通信交换 .Net 对象。 它在本地网络上运行,它不是基于 Web 或基于 Internet 的。 现在我想包括通过 wifi 连接的 Android 客户端。 同样,这只是本地网络,不是通过互联网,也不是基于网络。 Android 编程将使用 Java。 (我知道适用于 Android 的 Mono,但现在不想深入研究。) 是否有一些相当简单的方法来实现 Java 和 .Net 对象之间的对象到对象交换,当然,前提是它们是兼容的? 我看过一些 JSON(Java 端的 Jackson 和 .Net 端的 Json.Net),我猜它可能可以完成,但只有在尽快重新映射每一端的东西上付出巨大努力对象变得相当复杂。 还有其他建议吗? 基于 JSON 还是其他方式? 附注。 我的问题与这个用于将 Java 的 JSON 转换为/从 C# 转换的映射工具有些相关,但它从未得到合适的答案,可能是由于问题中的信息不足。 此外,我不在乎我是否最终使用基于 JSON 的传输或 XML 或其他东西。 回答1 我建议使用 JSON 或 XML(基于 .xsd 文件),因为它们独立于它们各自的实现(而不是像 Java 中的ObjectOutputStream这样的东西)。 在两个组件(客户端和服务器
  • Node.js Eggjs和RPC框架的结合实践方案 使用egg-sofa-rpc模块搭建服务端和客户端
    前言 本文将简单介绍RPC,以及通过Eggjs框架搭建RPC客户端和服务端。 过程遇到的问题记录在这:Node.js Eggjs使用RPC模块 egg-sofa-rpc 踩坑记录 RPC介绍 RPC ( Remote Procedure Call ) 即 远程过程调用,就是像调用本地的函数一样去调用远程的函数。简单讲,就是本地调用的逻辑处理的过程放在的远程的机器上,而不是本地服务代理来处理。 也就是说两台服务器A,B,一个应用部署在A服务器上,想要调用B服务器上应用提供的函数/方法,由于不在一个内存空间,不能直接调用,需要通过网络来表达调用的语义和传达调用的数据。 HTTP和RPC的对比 在HTTP和RPC的选择上,可能有些人是迷惑的,主要是因为,有些RPC框架配置复杂,如果走HTTP也能完成同样的功能,那么为什么要选择RPC,而不是更容易上手的HTTP来实现了。 以下是阐述HTTP和RPC的异同。 传输协议 RPC,可以基于TCP协议,也可以基于HTTP协议HTTP,基于HTTP协议 传输效率 RPC,使用自定义的TCP协议,可以让请求报文体积更小,或者使用HTTP2协议,也可以很好的减少报文的体积,提高传输效率HTTP,如果是基于HTTP1.1的协议,请求中会包含很多无用的内容,如果是基于HTTP2.0,那么简单的封装以下是可以作为一个RPC来使用的
  • FindBugs 排除过滤器的问题(Problems with FindBugs exclude filter)
    问题 我正在评估 FindBugs 并尝试使用 excludeFilter 以便该工具不处理测试包或生成的 ejb 存根。 我尝试了以下方法: <FindBugsFilter> <!-- Match any test packages --> <Match> <Package name="~.*\.test"/> </Match> <Match> <Or> <Class name="~.*\.^_*"/> <Class name="~.*EJS*"/> </Or> <Bug pattern="MALICIOUS_CODE"/> </Match> 生成的 EJB 仍在查看中。 有人可以就此提供一些更好的指导。 我想排除所有以“_”开头的类 例子: com/mycompany/business/admin/ejb/_AdminRemoteHome_Stub.java com/mycompany/business/admin/ejb/_EJSRemoteStatelessAdminHome_054d51b9_Tie.java 更新了过滤器文件。 我使用建议的 regx 更改将过滤器文件更改为以下结构,现在事情按预期工作: <FindBugsFilter> <!-- Match any test packages --> <Match> <Package name="~.*\.test"/