Мы хотим реализовать RESTful-Web-сервис с JAX-RS и JAXB. У нас есть метод PUT, который потребляет XML, который выглядит следующим образом:JAXB: проблемы с JAXB
<mailAccount>
<id>-1</id>
<name>test</name>
<mailaddress>[email protected]</mailaddress>
<password>1234</password>
<servertype>IMAP</servertype>
<host>hallo</host>
<port>5678</port>
<encryption>SSL/TLS</encryption>
<authentication>true</authentication>
<interval>12</interval>
</mailAccount>
Мы также имеем MailAccount.class, который сопоставляется с XML.
@XmlRootElement
public class MailAccount {
private String name;
private String mailaddress;
private String password;
private String servertype;
private String host;
private int port;
private String encryption;
private boolean authentication;
private int interval;
private int id;
getter + setter...
}
Функции PUT-метод выглядит следующим образом:
@PUT()
@Path("/addMailAccount")
@Consumes(MediaType.APPLICATION_XML)
@Produces(MediaType.TEXT_HTML)
public Response addMailAccount(JAXBElement<MailAccount> mail) throws Exception{
MailAccount mailAccounts = mail.getValue();
StringWriter sw = new StringWriter();
JAXBContext jaxbContext = JAXBContext.newInstance(MailAccount.class);
Marshaller jaxbMarshaller = jaxbContext.createMarshaller();
jaxbMarshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
jaxbMarshaller.marshal(mailAccounts, sw);
String xmlConsume = sw.toString();
Source source = new StreamSource(new StringReader(xmlConsume));
SchemaFactory sf = SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI);
Schema schema = sf.newSchema(MailAccountService.class.getResource("/emailAddresses.xsd"));
Validator validator = schema.newValidator();
//validator.validate(source);
return Response.status(200).entity(xmlConsume +"..."+ mailAccounts.getMailadress()).build();
}
Наша цель состоит в том, чтобы сортировочная в JAXB-элемент, чтобы проверить его против XML-схемы. Но проблема заключается в сортировке: во-первых, элементы не в правильном порядке. Использование тегов propOrder каждый раз появляется во внутренней ошибке сервера.
Вторая проблема заключается в том, что элемент «mailaddress» пуст. Это не сортировка, и когда я помещаю ее в ответ этого метода, значение равно null.
Вот что PUT-метод возвращает:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<mailAccount>
<authentication>true</authentication>
<encryption>SSL/TLS</encryption>
<host>hallo</host>
<id>-1</id>
<interval>12</interval>
<name>test</name>
<password>1234</password>
<port>5678</port>
<servertype>IMAP</servertype>
</mailAccount>
...null
Не можете ли вы в алфавитном порядке сортировать теги в XML-файле, который вы его кормите? Это решит проблему заказа. –