使cxf-codegen-plugin生成类持久化能力

时间:2017-06-16 12:21:27

标签: java maven jpa soap cxf-codegen-plugin

我有一个Maven jar项目,它使用cxf-codegen-plugin创建一个SOAP客户端。

在另一个使用该客户端的Maven项目中,只需要保存数据类(某些soap响应)的实例 - 由cxf-codegen-plugin生成 - 使用JPA (目前使用OpenJPA)

在编译/增强和安装客户端jar之前,可能有一些配置 - 例如 - 在每个客户端源代码生成之后将@Entity注释添加到数据类但我想摆脱这个阶段,同时仍然保持客户端尽可能通用。使用客户端的项目应该能够安全地假设该类具有持久性。

处理此问题的最佳方法可能是客户端项目设置中的一些技巧(目前使用openjpa-maven-plugin来增强数据类)来检测所需的类,并以某种方式使它们具有持久性并加强这些。

我宁愿跳过像维护beans.xml这样的东西,如果可能的话还要坚持注释,但它也是一个选项。

1 个答案:

答案 0 :(得分:0)

如果有人需要相同我描述我目前使用的方法。它基于使用id添加注释,importscom.google.code.maven-replacer-plugin等字段。

很快:我在pom.xml

中添加了以下内容
<plugin>
    <groupId>com.google.code.maven-replacer-plugin</groupId>
    <artifactId>replacer</artifactId>
    <version>1.5.3</version>
    <executions>
        <execution>
            <phase>process-sources</phase>
            <goals>
                <goal>replace</goal>
            </goals>
        </execution>
    </executions>
    <configuration>
        <!-- dir where cxf-codegen-plugin has generated model classes -->
        <basedir>src/generated/java/org/example/service</basedir>
        <includes>
            <include>NamedEntity.java</include>
        </includes>
        <regex>false</regex>
        <replacements>
            <replacement>
                <token>package org.example.service.service;</token>
                <value>package org.example.service.service;

                    import javax.persistence.Id;
                    import javax.persistence.Entity;
                    import javax.persistence.Inheritance;
                    import javax.persistence.GeneratedValue;
                    import javax.persistence.InheritanceType;

                </value>
            </replacement>
            <replacement>
                <token>public class</token>
                <value>@Entity
                    @Inheritance(strategy=InheritanceType.TABLE_PER_CLASS)
                    public class</value>
            </replacement>
            <replacement>
                <token>protected String name;
                </token>
                <value>protected String name;

                    @Id
                    @GeneratedValue
                    @Getter
                    private Long id;

                </value>
            </replacement>
        </replacements>
    </configuration>
</plugin>

为了保持代码格式良好,<replacement>中需要所有缩进和换行符。使用正则表达式可能会更时尚,但这对我来说已经足够了。