2015-01-28 2 views
0

У меня есть данные 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(); 
     } 
    } 
} 
+1

'@ XmlTransient' или я что-то упускаю? – lexicore

+0

Действительно лексикор прав, я просто хотел знать, как избежать определенной ценности, чтобы не перейти к сгенерированному XML при сортировке. – Acewin

ответ

3

Добавить @XmlTransient к вашему свойству карты сообщений:

@XmlTransient 
public HashMap<String, Message> getMessageMap() { 

Это приведет к тому, что маршалер исключит это свойство.

+0

Спасибо, что просмотрели документы API. Я тоже думал о XmlTransient, просто не был уверен. Я думаю, я становлюсь немного ленивым – Acewin

Смежные вопросы