Java - 将实体转换为 wsimport 对象

Java - Convert an entity to an wsimport object

在 SOAP 服务器上,我尝试将实体 class 转换为 wsimport 生成的对象。 这些对象具有相同的 getter 和 setter,但我现在不知道如何将模型的 getter 注入 wsimport object setter

例如我需要转换这个模型:

package org.library.webservice.model;

public class User {

    private int id;
    private String firstname;
    private String lastname;
    private String email;
    private String password;

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getFirstname() {
        return firstname;
    }

    public void setFirstname(String firstname) {
        this.firstname = firstname;
    }

    public String getLastname() {
        return lastname;
    }

    public void setLastname(String lastname) {
        this.lastname = lastname;
    }

    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }

    public String getPassword() {
        return password;
    }

}

给这个对象:

package org.library.webservice.service.generated.user;

@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "user", propOrder = {
        "email",
        "firstname",
        "id",
        "lastname",
        "password"
})
public class User {


    protected int id;
    protected String firstname;
    protected String lastname;
    protected String email;
    protected String password;

    /**
     * Obtient la valeur de la propriete email.
     *
     * @return possible object is
     * {@link String }
     */
    public String getEmail() {
        return email;
    }

    /**
     * Definit la valeur de la propriete email.
     *
     * @param value allowed object is
     *              {@link String }
     */
    public void setEmail(String value) {
        this.email = value;
    }

    /**
     * Obtient la valeur de la propriete firstname.
     *
     * @return possible object is
     * {@link String }
     */
    public String getFirstname() {
        return firstname;
    }

    /**
     * Definit la valeur de la propriete firstname.
     *
     * @param value allowed object is
     *              {@link String }
     */
    public void setFirstname(String value) {
        this.firstname = value;
    }

    /**
     * Obtient la valeur de la propriete id.
     */
    public int getId() {
        return id;
    }

    /**
     * Definit la valeur de la propriete id.
     */
    public void setId(int value) {
        this.id = value;
    }

    /**
     * Obtient la valeur de la propriete lastname.
     *
     * @return possible object is
     * {@link String }
     */
    public String getLastname() {
        return lastname;
    }

    /**
     * Definit la valeur de la propriete lastname.
     *
     * @param value allowed object is
     *              {@link String }
     */
    public void setLastname(String value) {
        this.lastname = value;
    }

    /**
     * Obtient la valeur de la propriete password.
     *
     * @return possible object is
     * {@link String }
     */
    public String getPassword() {
        return password;
    }

    /**
     * Definit la valeur de la propriete password.
     *
     * @param value allowed object is
     *              {@link String }
     */
    public void setPassword(String value) {
        this.password = value;
    }


}

我认为通用性和自反性是可能的,但我不知道该怎么做。

您需要的是使用 Java Bean-Bean 映射器,例如 Dozer 或 MapStruct。我用过 MapStruct,设置和使用它真的很容易。

使用 MapStruct,必须创建此接口:

@Mapper
public interface UserMapper {

    UserMapper INSTANCE = Mappers.getMapper( UserMapper.class );

    org.library.webservice.service.generated.user.User toDto(org.library.webservice.model.User user);

    org.library.webservice.model.User toEntity(org.library.webservice.service.generated.user.User user);
}

这就是你需要让它工作的全部(好的,你必须使用 maven 并将 mapstruct 的注释处理器添加到插件中,但是不编写 java 转换代码是可以接受的),因为两个 bean class.

中的字段名称相同

MapStruct 将生成正确的实现,您可以检查生成的源代码在目标文件夹中的行为是否符合您的预期,如果不是,您可以通过特定注释或使用装饰器更改工作方式class, 请查看文档。

我认为最好的方法是对你使用 JAXB 注释 class 像这样:

@XmlRootElement
public class User {
   @XmlElement
   private int id;
}

之后你可以自动生成 wsdl schema 看这个 link