Я пытаюсь повторно использовать эти вложенные классы JAXB в разных пространствах имен в разных пакетах.
packageA.MetaData. java
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "", propOrder = {
"data"
})
@XmlRootElement(name = "metadata")
public class MetaData {
@XmlElement(required = false)
protected Set<Data> data = new HashSet();
}
packageA.Data. java
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "", propOrder = {
"data"
})
@XmlRootElement(name = "data")
public class Data {
@XmlAttribute(name="name")
protected String name = "";
@XmlElement(required=false)
protected Set<Data> data = new HashSet();
}
packageA не имеет информации о пакете. java и я хочу использовать их для объектов в другом пакете
Профиль packageB. java
import packageA.MetaData;
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "", propOrder = {
"metadata"
})
@XmlRootElement(name = "Profile")
public class Profile {
@XmlElement(required = false)
protected MetaData metadata;
}
packageB.package-info. java
@javax.xml.bind.annotation.XmlSchema(namespace = "http://packageB.Profile", elementFormDefault = javax.xml.bind.annotation.XmlNsForm.QUALIFIED)
package packageB.Profile;
Я пытаюсь упорядочить объект профиля в System.Out
import packageA.MetaData;
import packageA.Data;
Profile profile = new Profile();
Data data = new Data();
data.setName("Type");
data.setValue("A");
MetaData metadata = new MetaData();
metadata.addData(data);
profile.setMetadata(metadata);
JAXBContext jaxbContext = JAXBContext.newInstance(Profile.class);
Marshaller jaxbMarshaller = jaxbContext.createMarshaller();
jaxbMarshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, Boolean.TRUE);
jaxbMarshaller.marshal(employee, System.Out);
EXPECTED
<Profile xmlns="http://packageB.Profile">
<metadata>
<data name="Type" value="A"/>
<metadata>
</Profile>
ACTUAL
<ns2:Profile xmlns:ns2="http://packageB.Profile">
<ns2:metadata>
<data name="Type" value="A"/>
</ns2:metadata>
</ns2:Profile>
Я полагаю, что он добавляет ns2 только к тем элементам, которые находятся в пакете имен B.Profile
Если я копирую и вставляю метаданные. java и Data. java классы в packageB , перекомпилируйте, затем попытайтесь выполнить маршализацию, я получаю ожидаемый вывод.
Каков наилучший способ импорта метаданных. java и данных. java из пакета A, который должен находиться в пространстве имен в пакете B?