gpt4 book ai didi

java - Jaxb 解码 : not getting my collection elements

转载 作者:行者123 更新时间:2023-11-30 04:48:53 26 4
gpt4 key购买 nike

我是 Jaxb 新手,这是我第一次使用它。我有一个 xml,我希望将其转换为我现有的对象。我成功地使用了简单的属性和元素,但是对于集合,我得到了空集合。

我想生成一个带有 xml 的版权持有者实例。我创建了一个 http post 方法来发送 xml 并使用注释对其进行解码。为了生成 post 方法,我使用了一个名为 Poster 的 Firefox 插件。来自 CopyrightHolder 的所有集合都无法加载。 (PS:契约(Contract)集合未映射)。对 post 方法的调用有效,创建了版权所有者,但所有集合为空。我想我遗漏了一些注释。

感谢任何帮助。

类(class):

版权持有人联系人:

 @XmlRootElement(name="Contact", namespace="http://www.example.org/common")
//@XmlType(name="Contact", namespace="http://www.example.org/common")
public class CopyHolderContacts implements Contact, Serializable {



private Long idContact;
private CopyrightHolder copyrightHolder;
private String name;
private String email;
private String office;
private String work;
private String mobile;
private Boolean notify;

public CopyHolderContacts() {
}

public CopyHolderContacts(CopyrightHolder copyrightHolder, String name, String email) {
this.copyrightHolder = copyrightHolder;
this.name = name;
this.email = email;
}

public CopyHolderContacts( CopyrightHolder copyrightHolder, String name, String email, String office,
String work, String mobile, Boolean notify ) {
this.copyrightHolder = copyrightHolder;
this.name = name;
this.email = email;
this.office = office;
this.work = work;
this.mobile = mobile;
this.notify = notify;
}

@XmlTransient
public Long getIdContact() {
return this.idContact;
}

public void setIdContact( Long idContact ) {
this.idContact = idContact;
}

@XmlTransient
public CopyrightHolder getCopyrightHolder() {
return this.copyrightHolder;
}

public void setCopyrightHolder(CopyrightHolder copyrightHolder) {
this.copyrightHolder = copyrightHolder;
}

@XmlAttribute
public String getName() {
return this.name;
}

public void setName(String name) {
this.name = name;
}

@XmlAttribute
public String getEmail() {
return this.email;
}

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

@XmlAttribute(name="phoneOffice")
public String getOffice() {
return this.office;
}

public void setOffice(String office) {
this.office = office;
}

@XmlAttribute(name="phoneWork")
public String getWork() {
return this.work;
}

public void setWork(String work) {
this.work = work;
}

@XmlAttribute(name="phoneMobile")
public String getMobile() {
return this.mobile;
}

public void setMobile(String mobile) {
this.mobile = mobile;
}

@XmlAttribute
public Boolean getNotify() {
return this.notify;
}

public void setNotify(Boolean notify) {
this.notify = notify;
}

}

版权持有人:

import static javax.persistence.GenerationType.SEQUENCE;

import java.io.Serializable;
import java.util.HashSet;
import java.util.List;
import java.util.Set;

import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.OneToMany;
import javax.persistence.SequenceGenerator;
import javax.persistence.Table;
import javax.persistence.Transient;
import javax.persistence.UniqueConstraint;
import javax.xml.bind.annotation.XmlAttribute;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlElementWrapper;
import javax.xml.bind.annotation.XmlRootElement;
import javax.xml.bind.annotation.XmlSeeAlso;
import javax.xml.bind.annotation.XmlTransient;

import org.hibernate.annotations.Cascade;


@XmlRootElement(name="CopyrightHolder", namespace="http://www.example.org/copyrightholder")
@XmlSeeAlso(CopyHolderContacts.class)
@Entity
public class CopyrightHolder implements Serializable {

private Long idCopyrightHolder;
private String name;
private String address;
private String affiliation;
private Set<CopyHolderDocuments> copyHolderDocuments = new HashSet<CopyHolderDocuments>( 0 );
private Set<CopyHolderContacts> copyHolderContacts = new HashSet<CopyHolderContacts>( 0 );
private Set<Contract> contracts = new HashSet<Contract>( 0 );
private Set<CustomLicFieldValue> copyHolderCustomLicFieldValues = new HashSet<CustomLicFieldValue>( 0 );
private List<XMLCustomField> customFields;

public CopyrightHolder() {
}

public CopyrightHolder( String name, String address, String affiliation ) {
this.name = name;
this.address = address;
this.affiliation = affiliation;
}

public CopyrightHolder( String name, String address, String affiliation,
Set<CopyHolderDocuments> copyHolderDocuments, Set<CopyHolderContacts> copyHolderContacts,
Set<Contract> contracts, Set<CustomLicFieldValue> customLicFieldValues ) {
this.name = name;
this.address = address;
this.affiliation = affiliation;
this.copyHolderDocuments = copyHolderDocuments;
this.copyHolderContacts = copyHolderContacts;
this.contracts = contracts;
this.copyHolderCustomLicFieldValues = customLicFieldValues;
}

@XmlTransient
public Long getIdCopyrightHolder() {
return this.idCopyrightHolder;
}

public void setIdCopyrightHolder( Long idCopyrightholder ) {
this.idCopyrightHolder = idCopyrightholder;
}

@XmlAttribute
public String getName() {
return this.name;
}

public void setName( String name ) {
this.name = name;
}

@XmlElement(name="Address", namespace="http://www.example.org/copyrightholder")
public String getAddress() {
return this.address;
}

public void setAddress( String address ) {
this.address = address;
}

@XmlAttribute
public String getAffiliation() {
return this.affiliation;
}

public void setAffiliation( String affiliation ) {
this.affiliation = affiliation;
}

@XmlElementWrapper(name="Documents")
@XmlElement(name="Document")
public Set<CopyHolderDocuments> getCopyHolderDocuments() {
return this.copyHolderDocuments;
}

public void setCopyHolderDocuments( Set<CopyHolderDocuments> copyHolderDocuments ) {
this.copyHolderDocuments = copyHolderDocuments;
}

@XmlElementWrapper(name="Contacts", namespace="http://www.example.org/common")
@javax.xml.bind.annotation.XmlElement(name="Contact", namespace="http://www.example.org/common")
public Set<CopyHolderContacts> getCopyHolderContacts() {
return this.copyHolderContacts;
}

public void setCopyHolderContacts( Set<CopyHolderContacts> copyHolderContacts ) {
this.copyHolderContacts = copyHolderContacts;
}

@XmlTransient
public Set<Contract> getContracts() {
return this.contracts;
}

public void setContracts( Set<Contract> contracts ) {
this.contracts = contracts;
}

@XmlTransient
public Set<CustomLicFieldValue> getCopyHolderCustomLicFieldValues() {
return this.copyHolderCustomLicFieldValues;
}

public void setCopyHolderCustomLicFieldValues( Set<CustomLicFieldValue> customLicFieldValues ) {
this.copyHolderCustomLicFieldValues = customLicFieldValues;
}

@Transient
@XmlElementWrapper(name="custom-fields")
@XmlElement(name="custom-field")
public List<XMLCustomField> getCustomFields() {
return customFields;
}

public void setCustomFields(List<XMLCustomField> customFields) {
this.customFields = customFields;
}

}

我发送的 XML:

<?xml version="1.0" encoding="UTF-8"?>
<CopyrightHolder affiliation="ingest" name="ingest" xmlns="http://www.example.org/copyrightholder" xmlns:cm="http://www.example.org/common" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.example.org/copyrightholder copyrightholder2.xsd ">
<Address>Address</Address>
<Contacts>
<cm:Contact email="ingest2@ingest.com" name="ingest" notify="true" phoneMobile="" phoneOffice="" phoneWork=""/>
</Contacts>
<Documents>
<cm:FilePath>cm:FilePath</cm:FilePath>
</Documents>
<CustomFields>
<cm:CustomField name="ingest" order="0" required="false" type="Alphanumeric" value=""/>
</CustomFields>
</CopyrightHolder>

XSD:

common.xsd:

<?xml version="1.0" encoding="UTF-8"?>
<xsd:schema targetNamespace="http://www.example.org/common" elementFormDefault="qualified" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:cm="http://www.example.org/common">
<xsd:complexType name="contact">
<xsd:sequence></xsd:sequence>

<xsd:attribute name="name" use="required">
<xsd:simpleType>
<xsd:restriction base="xsd:string">
<xsd:minLength value="1"></xsd:minLength>
<xsd:maxLength value="50"></xsd:maxLength>
</xsd:restriction>
</xsd:simpleType>
</xsd:attribute>
<xsd:attribute name="email" use="required">
<xsd:simpleType>
<xsd:restriction base="xsd:string">
<xsd:pattern value="\w+@\w+"></xsd:pattern>
</xsd:restriction>
</xsd:simpleType>
</xsd:attribute>
<xsd:attribute name="phoneOffice" type="xsd:string" use="optional"></xsd:attribute>
<xsd:attribute name="phoneWork" type="xsd:string" use="optional"></xsd:attribute>
<xsd:attribute name="phoneMobile" type="xsd:string" use="optional"></xsd:attribute>
<xsd:attribute name="notify" type="xsd:boolean" use="optional"></xsd:attribute>

</xsd:complexType>

<xsd:complexType name="documents">
<xsd:sequence>
<xsd:element name="FilePath" type="xsd:string" minOccurs="1" maxOccurs="unbounded">
</xsd:element>
</xsd:sequence>
</xsd:complexType>

<xsd:complexType name="custom-field">
<xsd:sequence></xsd:sequence>
<xsd:attribute name="name" use="required">
<xsd:simpleType>
<xsd:restriction base="xsd:string">
<xsd:minLength value="1"></xsd:minLength>
<xsd:maxLength value="50"></xsd:maxLength>
</xsd:restriction>
</xsd:simpleType>
</xsd:attribute>
<xsd:attribute name="required" type="xsd:boolean" use="optional" default="false">
</xsd:attribute>
<xsd:attribute name="type" use="required">
<xsd:simpleType>
<xsd:restriction base="xsd:string">
<xsd:enumeration value="Alphanumeric"></xsd:enumeration>
<xsd:enumeration value="Date"></xsd:enumeration>
<xsd:enumeration value="Number"></xsd:enumeration>
<xsd:enumeration value="Percentage"></xsd:enumeration>
<xsd:enumeration value="Text"></xsd:enumeration>
</xsd:restriction>
</xsd:simpleType>
</xsd:attribute>
<xsd:attribute name="order" type="xsd:int" use="optional"></xsd:attribute>
<xsd:attribute name="value" type="xsd:string" use="required"></xsd:attribute>
</xsd:complexType>

<xsd:complexType name="contacts">
<xsd:sequence>
<xsd:element name="Contact" type="cm:contact" minOccurs="1" maxOccurs="unbounded"></xsd:element>
</xsd:sequence>
</xsd:complexType>

<xsd:complexType name="custom-fields">
<xsd:sequence>
<xsd:element name="CustomField" minOccurs="1" maxOccurs="unbounded" type="cm:custom-field"></xsd:element>
</xsd:sequence>
</xsd:complexType>

</xsd:schema>

版权持有人.xsd

<?xml version="1.0" encoding="UTF-8"?>
<xsd:schema targetNamespace="http://www.example.org/copyrightholder" elementFormDefault="qualified" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="http://www.example.org/copyrightholder" xmlns:cm="http://www.example.org/common">


<xsd:import namespace="http://www.example.org/common" schemaLocation="common.xsd"></xsd:import>
<xsd:complexType name="CopyrightHolder">
<xsd:sequence>

<xsd:element name="Address" type="xsd:string" minOccurs="1" maxOccurs="1"></xsd:element>
<xsd:element name="Contacts" type="cm:contacts" minOccurs="0" maxOccurs="1">
</xsd:element>
<xsd:element name="Documents" type="cm:documents" minOccurs="0" maxOccurs="1">
</xsd:element>
<xsd:element name="CustomFields" type="cm:custom-fields" minOccurs="0" maxOccurs="1">
</xsd:element>
</xsd:sequence>


<xsd:attribute name="name" use="required">
<xsd:simpleType>
<xsd:restriction base="xsd:string">
<xsd:minLength value="1"></xsd:minLength>
<xsd:maxLength value="50"></xsd:maxLength>
</xsd:restriction>
</xsd:simpleType>
</xsd:attribute>
<xsd:attribute name="affiliation" use="required">
<xsd:simpleType>
<xsd:restriction base="xsd:string">
<xsd:minLength value="1"></xsd:minLength>
<xsd:maxLength value="50"></xsd:maxLength>
</xsd:restriction>
</xsd:simpleType>
</xsd:attribute>
</xsd:complexType>

<xsd:element name="CopyrightHolder" type="CopyrightHolder"></xsd:element>
</xsd:schema>

最佳答案

你的命名空间搞乱了。例如:

@XmlElementWrapper(name="Contacts", namespace="http://www.example.org/common")
@javax.xml.bind.annotation.XmlElement(name="Contact", namespace="http://www.example.org/common")
public Set<CopyHolderContacts> getCopyHolderContacts() {
return this.copyHolderContacts;
}

在 XML 文档中,Contacts 包装元素具有 http://www.example.org/copyrightholder 命名空间。

尝试将其更改为

@XmlElementWrapper(name="Contacts", namespace="http://www.example.org/copyrightholder")
@XmlElement(name="Contact", namespace="http://www.example.org/common")

其他集合也类似。

关于java - Jaxb 解码 : not getting my collection elements,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10284502/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com