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
在 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