У меня есть данные XML, которые выглядят ниже. Мне нужно уметь маршаллировать/отменять это. Цель проста, и я не предъявляются какие-либо проблемы тамПри использовании JaxB сортировки, как избежать добавления конкретного элемента/значения
Фрагмент кода для XML
<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>
<messages>
\t <message msg-id=\"1\" msg-type=\"ERROR\" msg=\"\"/>
<message msg-id=\"2\" msg-type=\"INFO\" msg=\"\"/>
<message msg-id=\"3\" msg-type=\"WARNING\" msg=\"\"/>
</messages>
В моих основных класса POJO сообщения У меня есть HashMap, которые я использую для отображения сообщения на Я БЫ. Я хотел бы, чтобы messagemap не переходила в XML. Короче говоря, я хотел бы знать, есть ли у них какая-либо конкретная аннотация или способ, который я могу использовать просто, чтобы избежать конкретных данных (в данном случае HashMap), чтобы не перейти к сгенерированному XML, когда я занимаюсь сортировкой
Фрагмент XML который получает генерируется на сортировочном
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<messages>
<message msg-id="1" msg-type="ERROR" msg=" madrid"></message>
<message msg-id="2" msg-type="INFO" msg="portugal"></message>
<message msg-id="3" msg-type="WARNING" msg="barcelona"></message>
<messageMap>
<entry>
<key>3</key>
<value msg-id="3" msg-type="WARNING" msg="barcelona"></value>
</entry>
<entry>
<key>2</key>
<value msg-id="2" msg-type="INFO" msg="portugal"></value>
</entry>
<entry>
<key>1</key>
<value msg-id="1" msg-type="ERROR" msg=" madrid"></value>
</entry>
</messageMap>
</messages>
В моем основном классе POJO сообщении у меня есть HashMap, которые я использую для отображения сообщения на ID. Я бы хотел, чтобы messagemap не переходила в XML.
=============== POJO для ввода сообщения ===================
package code.rfid.common.salami;
import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlAttribute;
import javax.xml.bind.annotation.XmlRootElement;
import javax.xml.bind.annotation.XmlValue;
@XmlAccessorType(XmlAccessType.FIELD)
@XmlRootElement(name = "message")
public class Message {
@XmlValue
protected String value;
@XmlAttribute(name = "msg-id")
protected String msgId;
@XmlAttribute(name = "msg-type")
protected String msgType;
@XmlAttribute(name = "msg")
protected String msg;
public static String INFO = "info";
public static String ERROR = "error";
public static String WARNING = "warning";
public String getValue() {
return value;
}
public void setValue(String value) {
this.value = value;
}
public String getMsgId() {
return msgId;
}
public void setMsgId(String value) {
this.msgId = value;
}
@Override
public String toString() {
return "Message [value=" + value + ", msgId=" + msgId + ", msgType="
+ msgType + ", msg=" + msg + "]";
}
public String getMsgType() {
return msgType;
}
public void setMsgType(String value) {
this.msgType = value;
}
public String getMsg() {
return msg;
}
public void setMsg(String value) {
this.msg = value;
}
}
= ======== POJO для сообщений ====================
package code.rfid.common.salami;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlRootElement;
@XmlAccessorType(XmlAccessType.FIELD)
@XmlRootElement(name = "messages")
public class Messages {
@Override
public String toString() {
return "Messages [message=" + message + ", messageMap=" + messageMap
+ "]";
}
protected List<Message> message;
protected HashMap<String, Message> messageMap;
public List<Message> getMessage() {
if (message == null) {
message = new ArrayList<Message>();
}
return this.message;
}
public HashMap<String, Message> getMessageMap() {
if (messageMap == null) {
messageMap = new HashMap<String, Message>();
}
return messageMap;
}
public void populateMessageMap()
{
messageMap = new HashMap<String, Message>();
if(message == null || message.isEmpty())
return;
for(Message _message: message)
{
messageMap.put(_message.getMsgId(), _message);
}
}
}
============ ============ Код для сортировочных и демаршаллизации
package code.rfid.common;
import java.io.StringReader;
import javax.xml.bind.JAXBContext;
import javax.xml.bind.JAXBException;
import javax.xml.bind.Marshaller;
import javax.xml.bind.Unmarshaller;
import code.rfid.common.salami.Messages;
public class MessageJaxBPort {
static String responseString ="<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>"
+ "<messages>"
+ "<message msg-id=\"1\" msg-type=\"ERROR\" msg=\" madrid\"/>"
+ "<message msg-id=\"2\" msg-type=\"INFO\" msg=\"portugal\"/>"
+ "<message msg-id=\"3\" msg-type=\"WARNING\" msg=\"barcelona\"/>"
+ "</messages>";
public static void main(String[] args) {
// TODO Auto-generated method stub
try {
JAXBContext jaxbContext = JAXBContext.newInstance(Messages.class);
Unmarshaller jaxbUnmarshaller = jaxbContext.createUnmarshaller();
Messages mapmessages = (Messages) jaxbUnmarshaller.unmarshal(new StringReader(responseString));
System.out.println("UserInfo object :- " + mapmessages.toString());
Marshaller jaxbMarshaller = jaxbContext.createMarshaller();
jaxbMarshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
jaxbMarshaller.marshal(mapmessages, System.out);
} catch (JAXBException jaxbEx) {
jaxbEx.printStackTrace();
}
}
}
'@ XmlTransient' или я что-то упускаю? – lexicore
Действительно лексикор прав, я просто хотел знать, как избежать определенной ценности, чтобы не перейти к сгенерированному XML при сортировке. – Acewin