将Java类结构转换为Python类

2024-10-01 11:19:26 发布

您现在位置:Python中文网/ 问答频道 /正文

我们试图避免在一个使用Java和Python的项目中出现重复代码。代码库的大部分是用Java编写的,由于机器学习环境的流行,现在添加了Python。在

在绿色领域场景中,我们将从swagger或protobuf之类的东西开始,并从生成的代码中派生模型。但现在不行了。在

J类用一些注释进行了注释,它们面向java8。在

在研究过程中,我发现了以下可能的方法,可以将类的结构(没有方法)转换为Python类结构:

  1. 从Java类生成XML模式
  2. 从xml模式文件生成Python类

另外一个好处是:在我们的项目中,这两种语言实际上是通过XML进行通信的,因此模式文件对其他用例很有帮助。我们使用maven来构建Java,因此将其包含在maven进程中是很好的。在

我把这个包括在pom.xml文件公司名称:

<!-- https://mvnrepository.com/artifact/org.codehaus.mojo/jaxb2-maven-plugin -->
<dependency>
    <groupId>org.codehaus.mojo</groupId>
    <artifactId>jaxb2-maven-plugin</artifactId>
    <version>2.3.1</version>
</dependency>

以及默认的插件配置

^{pr2}$

但我有个错误

[ERROR] Failed to execute goal org.codehaus.mojo:jaxb2-maven-plugin:2.3.1:schemagen (default-cli) on project common: JAXB errors arose while SchemaGen compiled sources to XML. -> [Help 1]       
org.apache.maven.lifecycle.LifecycleExecutionException: Failed to execute goal org.codehaus.mojo:jaxb2-maven-plugin:2.3.1:schemagen (default-cli) on project common: JAXB errors arose while SchemaGen compiled sources to XML.  

然后,我研究了JSON模式作为中介,但这并不能真正切断它,因为从JSON模式创建Python类源代码并不容易。在

那么有没有办法从Java代码中生成简单的“Pojo”Python类呢?没有方法,没有复杂的交叉编译,只有一个简单的结构转换。我可以从IntelliJ中的Java文件生成UML图,所以所有的信息都在那里,我只需要一个帮助转换的工具


Tags: 文件to项目方法代码org模式xml
3条回答

So is there any way to generate simple "Pojo" Python classes from Java code?

我试过了,下面是解决方法:

考虑到以下简化Pojo.java

public class Pojo {
    private String string = "default";
    public int integer = 1;
    public String getString(){
        return string;
    }
}

解决方案需要3个阶段

1。Java Pojo到JSON模式

我可以找到以下选项:

  1. FasterXML/jackson-module-jsonSchema: 这是库,下面的库也在内部使用。在
  2. mbknor/mbknor-jackson-jsonSchema:上面正式引用,支持json模式的v4。在
  3. reinert/JJSchema

下面是带有选项1的相关代码(也可以浏览网站):

^{pr2}$

下面的输出是json架构字符串:

{"type":"object","id":"urn:jsonschema:Pojo","properties":{"string":{"type":"string"},"integer":{"type":"integer"}}}

2。JSON架构后期处理

之所以需要这个阶段,主要是因为我发现对于简单的用例(至少),下面的步骤3需要一个强制具有definitions属性的json模式。我想这是因为不断发展的模式定义@http://json-schema.org/。另外,我们可以包含一个title属性来指定下一步将生成的python类的名称。在

我们可以在上面步骤1的java程序中轻松地完成这些步骤。我们需要以下格式的json架构字符串:

{"definitions": {}, "title": "Pojo", "type":"object","id":"urn:jsonschema:Pojo","properties":{"string":{"type":"string"},"integer":{"type":"integer"}}}

注意,只有加法是"definitions": {}, "title": "Pojo"

3。Python类的Json模式

frx08/jsonschema2popo这项工作做得很好。在

pip install jsonschema2popo
jsonschema2popo -o /path/to/output_file.py /path/to/json_schema.json

还有一些要点

  1. javajson模式生成器将只在输出中包含那些公共的或具有公共getter的属性。在
  2. 我假设对于大规模迁移来说,注释Java类是一件痛苦的事情。否则,如果这对您来说是可行的,那么上面所有的java库都提供了丰富的注释,您可以在其中指定属性是否是必需的,等等。在
  1. JAX-ws2.2需要jaxb2.2进行数据绑定。确保一切都更新了
  2. Schemagen具有编译范围依赖关系。在
  3. 生成xml文件的最佳实践:

    提供一个package-info.java文件和XmlSchema

    schemagen example.Address example\package-info.java

    使用@XmlType注释名称空间属性指定名称空间

    @XmlType(namespace="http://myNameSpace")

在解决了创建xml文件的问题之后,尝试使用lxml’s objectify sub-package.minidom module迭代错误的xml元素并创建Python类。在

TechWalla@{a1}有详细的说明。看看这对你有没有帮助。在

把说明书贴在这里 第1步 下载并解压缩java2python。您下载的文件是一个gzip文件,其中包含一个tarball文件;这两个都是压缩方案,都可以用7zip(一个开源程序)解压。在

第2步 将java2python文件夹的内容放在C:\驱动器的根目录下。在

第3步 在输入“python”之前,打开一个命令提示符并导航到“C:\java2python\”设置.py安装“不带引号。这将告诉Python解释器运行安装脚本并准备您的计算机。将目录更改为“C:\java2python\bin\”并保持窗口打开。在

第4步 将要转换的Java文件复制到java2python下的bin子文件夹中。在命令行中,运行“j2py-input_文件.java-o输出_文件.py,“用您的文件名替换输入\文件和输出\文件。在

第5步 打开新的Python文件夹并阅读代码。它可能并不完美,所以您需要仔细检查一下,以确保从Python的角度来看它是有意义的。然而,即使花时间手动检查,您也可以从手动转换中节省大量时间

相关问题 更多 >