作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
以下是我用于在 WebLogic 10.3.2 版本上使用 MOXy JAXB 转换创建子类的类。我正在使用 EclipseLink 2.4.1 MOXy 来生成 XML。我无法在以下代码中生成 type 属性。如果我在这里做错了什么,请告诉我。
我正在使用 EclipseLink MOXy 2.4.1 和 WebLogic 10.3.2 并且在 WebLogic 中配置了 MOXy 2.4.1
import javax.xml.bind.annotation.*;
import org.eclipse.persistence.oxm.annotations.XmlDiscriminatorNode;
@XmlAccessorType(XmlAccessType.PROPERTY)
@XmlDiscriminatorNode("@type")
public abstract class BaseEntity {
private String firstName;
private String lastName;
public String getLastName() {
return lastName;
}
public void setLastName(String lastName) {
this.lastName = lastName;
}
public String getFirstName() {
return firstName;
}
public void setFirstName(String firstName) {
this.firstName = firstName;
}
}
package forum13831189;
import org.eclipse.persistence.oxm.annotations.XmlDiscriminatorValue;
@XmlDiscriminatorValue("xyz")
public class XyzEntity extends BaseEntity {
public XyzEntity() {
super();
}
}
import org.eclipse.persistence.oxm.annotations.XmlDiscriminatorValue;
@XmlDiscriminatorValue("Abc")
public class AbcEntity extends BaseEntity {
}
@GET
@Path("/xyz")
@Produces({ MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON })
public Representation getAccount() throws CPAException {
Representation rep = new Representation();
BaseEntity entity = new XyzEntity();
entity.setFirstName("first-name");
entity.setLastName("last-name");
rep.setEntity(entity);
return rep;
}
@XmlRootElement
static class Representation {
private BaseEntity entity;
public BaseEntity getEntity() {
return entity;
}
public void setEntity(BaseEntity entity) {
this.entity = entity;
}
}
<representation>
<firstName>first-name</firstName>
<lastName>last-name</lastName>
</representation>
最佳答案
有几个项目可能会导致您出现问题。
基础实体
默认情况下,JAX-RS 实现会创建一个 JAXBContext
在服务方法的返回类型或参数上,在本例中 Represenatation
.在处理域模型时,JAXB impl 还将引入引用类型,例如 BaseEntity
.它不能自动拉入子类,所以我们可以使用 @XmlSeeAlso
注释以引用这些。
import javax.xml.bind.annotation.*;
import org.eclipse.persistence.oxm.annotations.XmlDiscriminatorNode;
@XmlAccessorType(XmlAccessType.PROPERTY)
@XmlDiscriminatorNode("@type")
@XmlSeeAlso({AbcEntity.class, XyzEntity.class})
public abstract class BaseEntity {
private String firstName;
private String lastName;
public String getLastName() {
return lastName;
}
public void setLastName(String lastName) {
this.lastName = lastName;
}
public String getFirstName() {
return firstName;
}
public void setFirstName(String firstName) {
this.firstName = firstName;
}
}
@XmlDescriminatorNode
/
@XmlDescriminatorValue
是需要确保将 MOXy 指定为 JAXB 提供程序的 MOXy 扩展。这是通过添加一个名为
jaxb.properties
的文件来完成的。在与域模型相同的包中包含以下条目。
javax.xml.bind.context.factory=org.eclipse.persistence.jaxb.JAXBContextFactory
import javax.xml.bind.*;
import javax.xml.bind.annotation.XmlRootElement;
public class Demo {
public static void main(String[] args) throws Exception {
JAXBContext jc = JAXBContext.newInstance(Representation.class);
Representation rep = new Representation();
BaseEntity entity = new XyzEntity();
entity.setFirstName("first-name");
entity.setLastName("last-name");
rep.setEntity(entity);
Marshaller marshaller = jc.createMarshaller();
marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
marshaller.marshal(rep, System.out);
}
@XmlRootElement
static class Representation {
private BaseEntity entity;
public BaseEntity getEntity() {
return entity;
}
public void setEntity(BaseEntity entity) {
this.entity = entity;
}
}
}
type
属性现在存在。
<?xml version="1.0" encoding="UTF-8"?>
<representation>
<entity type="xyz">
<firstName>first-name</firstName>
<lastName>last-name</lastName>
</entity>
</representation>
关于jaxb - @XmlDiscriminatorNode/@XmlDecriminatorValue 不适用于 WebLogic Server,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13831189/
以下是我用于在 WebLogic 10.3.2 版本上使用 MOXy JAXB 转换创建子类的类。我正在使用 EclipseLink 2.4.1 MOXy 来生成 XML。我无法在以下代码中生成 ty
我是一名优秀的程序员,十分优秀!