2015-01-13 2 views
1

Hy,распаковать из ArrayList в Java

У меня есть список объектов, вставленных в ArrayList с помощью HashMap

private static Map<Integer, Users> usersH = new HashMap<Integer, Users>(); 

    static { 
     ArrayList<Users> users = new ArrayList(); 
     UserImpl u = new UserImpl(); 
     users = u.getUsers(); 
     //int j = users.size(); 

     for(int i=0; i<users.size(); ++i){ 
      Users u1 = new Users(); 
      u1.setUserID(users.get(i).getUserID()); 
      u1.setUserName(users.get(i).getUserName()); 
      u1.setUserPass(users.get(i).getUserPass()); 
      u1.setUserRight(users.get(i).getUserRight()); 
      usersH.put(users.get(i).getUserID(), u1); 
      // System.out.println(usersH.toString()); 
     } 


    } 

мой Остальной сервис приносит мне право данные со следующими addnotation

@GET 
    @Path("/listareF") 
    @Produces("application/xml") 
    public static UsersList listme(){ 
     UsersList ul = new UsersList(); 
     HashMap m = new HashMap(); 
     for(Map.Entry<Integer, Users> utiliz : usersH.entrySet()){ 
      // m = new HashMap(); 
      m.put(utiliz.getKey(), utiliz.getValue()); 
      //ul.setVariabila(); 

     } 
     ul.setVariabila(m); 
     return ul; 

    } 

JAXB:

import javax.xml.bind.annotation.XmlElement; 
import javax.xml.bind.annotation.XmlRootElement; 

//@XmlRootElement(name ="USER") 
public class Users { 

    private int userID; 
    private String userName; 
    private String userPass; 
    private String userRight; 

    public Users(int uI, String uN, String uP, String uR) { 
     this.userID = uI; 
     this.userName = uN; 
     this.userPass = uP; 
     this.userRight = uR; 
    } 

    public Users() { 

    } 

    public Users(int uI) { 
     this.userID = uI; 
    } 

    @XmlElement 
    public int getUserID() { 
     return userID; 
    } 

    public void setUserID(int userID) { 
     this.userID = userID; 
    } 
    @XmlElement 
    public String getUserName() { 
     return userName; 
    } 

    public void setUserName(String userName) { 
     this.userName = userName; 
    } 

    @XmlElement 
    public String getUserPass() { 
     return userPass; 
    } 

    public void setUserPass(String userPass) { 
     this.userPass = userPass; 
    } 

    @XmlElement 
    public String getUserRight() { 
     return userRight; 
    } 

    public void setUserRight(String userRight) { 
     this.userRight = userRight; 
    } 

Java-класс, содержащий корневой элемент:

@XmlRootElement 
public class UsersList { 


ArrayList<Users> variabila; 

public UsersList() { 

} 

/*public List<Users> getVariabila() { 
    return variabila; 
}*/ 

public void setVariabila(HashMap<Integer,Users> collection) { 
    this.variabila = new ArrayList(collection.values()); 
} 
@XmlElement(name="getusers") 
public ArrayList<Users> getUsers() { 
      return variabila; 
     } 



    } 

Пример XML:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?><usersList><getusers><userID>1</userID><userName>maracineanu</userName><userPass>12345</userPass><userRight>u</userRight></getusers></usersList> 

unmarshaller:

StreamSource ss = new StreamSource(output); 

    JAXBContext jaxbContext = JAXBContext.newInstance(UsersList.class); 
    Unmarshaller jaxbUnmarshaller = jaxbContext.createUnmarshaller(); 
    StringReader reader = new StringReader(output); 
    System.out.println(output); 
    // UsersList ul = new UsersList(); 

    HashMap<Integer,Users> ul2 = (HashMap<Integer, Users>) jaxbUnmarshaller.unmarshal(reader); 
    System.out.println(ul2); 

и я получаю ошибку на строке с кодом: HashMap ul2 = (HashMap) jaxbUnmarshaller.unmarshal (читатель);

Я также пробовал: UsersList ul2 = (UsersList) jaxbUnmarshaller.unmarshal (reader); Но такая же ошибка возникает.

Как выход создан:

URL url = new URL("http://localhost:8081/Pictori/rest/weby/listareF"); 
     HttpURLConnection conn = (HttpURLConnection) url.openConnection(); 
     //conn. 
     conn.setRequestMethod("GET"); 
     conn.setRequestProperty("Accept", "application/xml"); 

     if (conn.getResponseCode() != 200) { 
      throw new RuntimeException("Failed : HTTP error code : " 
        + conn.getResponseCode()); 
     } 
     System.out.println("Content type:" + conn.getContentType()); 

     BufferedReader br = new BufferedReader(new InputStreamReader(
      (conn.getInputStream()))); 

     String output=br.readLine(); 

//  while (output != null) { 
//   output = br.readLine(); 
//  } 

     System.out.println(output); 

     StreamSource ss = new StreamSource(output); 

Исключение в потоке "основной" java.lang.NullPointerException в com.sun.xml.internal.bind.v2.runtime.reflect.Lister $ CollectionLister .addToPack (Неизвестный источник) at com.sun.xml.internal.bind.v2.runtime.reflect.Lister $ CollectionLister.addToPack (Неизвестный источник) at com.sun.xml.internal.bind.v2.runtime.unmarshaller .Scope.add (Неизвестный источник) at com.sun.xml.internal.bind.v2.runtime.property.ArrayERProperty $ ReceiverImpl.receive (Неизвестный источник) at com.sun.xml.internal.bind.v2.runtime.unmarshaller.UnmarshallingContext.endElement (Неизвестный источник) at com.sun.xml.internal.bind.v2.runtime.unmarshaller.SAXConnector.endElement (Неизвестный источник) at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.endElement (Неизвестный источник) at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanEndElement (Неизвестный источник) at com. sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl $ FragmentContentDriver.next (Неизвестный источник) at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl.next (Неизвестный источник) at com.sun. org.apache.xerces.internal.impl.XMLNSDocumentScannerImpl.next (Неизвестный источник) на com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImp l.scanDocument (Неизвестный источник) на com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse (Неизвестный источник) на com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse (Неизвестный источник) at com.sun.org.apache.xerces.internal.parsers.XMLParser.parse (Неизвестный источник) at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.parse (Неизвестный источник) at com.sun.org.apache.xerces.internal.jaxp.SAXParserImpl $ JAXPSAXParser.parse (Неизвестный источник) at com.sun.xml.internal.bind.v2.runtime.unmarshaller.UnmarshallerImpl.unmarshal0 (Неизвестный источник) на com.sun.xml.internal.bind.v2.runtime.unmarshaller.UnmarshallerImpl.распаковать (Unknown Source) в javax.xml.bind.helpers.AbstractUnmarshallerImpl.unmarshal (Unknown Source)

Пожалуйста, помогите мне,

С уважением,

+0

нужно код, чтобы показать, как создается/определяется 'выход'. – BarrySW19

+0

Я добавил код, который просил. – SocketM

+1

Что в мире пытаются выполнить с помощью 'setVariabila'. Как только вы вызываете этот метод, вы теряете все свои ключи карты. Как в мире вы ожидаете волшебного приведения к карте, когда карты уже не существует. Если вам нужна карта, то почему у вас нет поля в списке пользователей, это карта? Почему вы конвертируете его в список? –

ответ

1

Я решил проблему, проблема была на моем классе-оболочке. Я обертывался в ArrayList и использовал карту.

Решение ниже:

@XmlRootElement 
public class UsersList { 


Map<Integer,Users> variabila; 

public UsersList() { 

} 


public void setVariabila(HashMap<Integer,Users> collection) { 
    this.variabila = new ArrayList(collection.values()); 
} 
@XmlElement(name="getusers") 
public ArrayList<Users> getUsers() { 
      return variabila; 
     } 



    }