[英]When using JaxB marshalling how to avoid adding a particular element/value
我有一個XML數據,如下所示。 我需要能夠編組/解組。 目標很簡單,我在那里沒有遇到任何問題
XML的代碼段
<?xml version=\\"1.0\\" encoding=\\"UTF-8\\" standalone=\\"yes\\"?> <messages> <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主類Messages中,我有一個哈希映射,用於將消息映射到ID。 我想讓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主類Messages中,我有一個哈希映射,用於將消息映射到ID。 我想讓messagemap不進入XML。
==============================================================
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;
}
}
=====================================
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批注添加到您的消息映射屬性中,如下所示:
@XmlTransient
public HashMap<String, Message> getMessageMap() {
這將導致封送拆封器排除此屬性。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.