【问题标题】:Java - Convert an entity to an wsimport objectJava - 将实体转换为 wsimport 对象
【发布时间】:2018-08-10 13:48:00
【问题描述】:

在 SOAP 服务器上,我尝试将 Entities 类转换为由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 wsimport


    【解决方案1】:

    您需要使用 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 类中。

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

    【讨论】:

      【解决方案2】:

      我认为最好的方法是在课堂上使用 JAXB 注释 像这样:

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

      之后,您可以自动生成 wsdl 架构,看看这个 link

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-08-04
        • 2012-10-25
        • 2022-01-14
        • 2014-03-24
        • 1970-01-01
        相关资源
        最近更新 更多