2014-02-10 82 views
1

以下程序編組和解組包含Map<Integer, List<Integer>>字段的類。如何編組/解組一個Map <Integer,列表<Integer>>?

解映射列表後包含字符串而不是整數。

是否有一種簡單的方法可以確保在解組期間,該列表將用整數而不是 字符串填充?

import java.io.StringReader; 
import java.io.StringWriter; 
import java.util.Arrays; 
import java.util.HashMap; 
import java.util.List; 
import java.util.Map; 
import javax.xml.bind.JAXBContext; 
import javax.xml.bind.JAXBException; 
import javax.xml.bind.Marshaller; 
import javax.xml.bind.Unmarshaller; 
import javax.xml.bind.annotation.XmlRootElement; 
import org.eclipse.persistence.jaxb.JAXBContextFactory; 
import org.eclipse.persistence.jaxb.MarshallerProperties; 
import org.eclipse.persistence.oxm.MediaType; 

public class MapApp { 

    @XmlRootElement 
    public static class Publication { 

     private String name; 

     private Map<Integer, List<Integer>> yearToIssues; 

     public void setName(String name) { 
      this.name = name; 
     } 

     public String getName() { 
      return name; 
     } 

     public void setYearToIssues(Map<Integer, List<Integer>> yearToIssues) { 
      this.yearToIssues = yearToIssues; 
     } 

     public Map<Integer, List<Integer>> getYearToIssues() { 
      return yearToIssues; 
     } 

    } 

    public static void main(String[] args) throws JAXBException { 
     Publication publication = new Publication(); 
     publication.setName("JAXB miracles"); 
     Map<Integer, List<Integer>> yearToIssues = new HashMap<>(); 
     yearToIssues.put(2013, Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12)); 
     yearToIssues.put(2014, Arrays.asList(1, 2)); 
     publication.setYearToIssues(yearToIssues); 
     String marshalled = marshal(publication); 
     Publication uPublication = unmarshal(Publication.class, marshalled); 
     List<Integer> issues = uPublication.getYearToIssues().get(2013); 
     if (((Object) issues.get(0)) instanceof String) { 
      System.out.println("issue is instance of String!"); 
     } 

    } 

    static String marshal(Object toMarshal) throws JAXBException { 
     JAXBContext jc = JAXBContextFactory.createContext(new Class[] {toMarshal.getClass()}, null); 
     Marshaller marshaller = jc.createMarshaller(); 
     marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true); 
     marshaller.setProperty(MarshallerProperties.MEDIA_TYPE, MediaType.APPLICATION_XML); 
     StringWriter sw = new StringWriter(); 
     marshaller.marshal(toMarshal, sw); 
     System.out.println(sw); 
     return sw.toString(); 
    } 

    static <T> T unmarshal(Class<T> entityClass, String str) throws JAXBException { 
     JAXBContext jc = JAXBContextFactory.createContext(new Class[] {entityClass}, null); 
     Unmarshaller unmarshaller = jc.createUnmarshaller(); 
     unmarshaller.setProperty(MarshallerProperties.MEDIA_TYPE, MediaType.APPLICATION_XML); 
     return (T) unmarshaller.unmarshal(new StringReader(str)); 
    } 

} 

回答

相關問題