2013-10-31 48 views
0

我试图Marshall一个对象,首先我创建这个对象(在另一个类),然后我把它Marshall到一个XML文档。虽然这样做,我得到的错误:“无法初始化代理 - 没有会议”。无法初始化代理 - 没有会话

我的对象已经创建因为它已经把我的数据库......

有人可以帮我解决这个问题,请???

发件人类

public class SenderPassage { 
public static void main(String[] args) throws JMSException, JAXBException, IOException  { 
    ActiveMQConnectionFactory connectionFactory = new ActiveMQConnectionFactory("tcp://localhost:61616"); 
    Connection connection = connectionFactory.createConnection(); 
    connection.start(); 
    Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE); 
    Destination destination = session.createQueue("PASSAGE"); 
    MessageProducer producer = session.createProducer(destination); 
    producer.setDeliveryMode(DeliveryMode.NON_PERSISTENT); 

    JAXBContext context = JAXBContext.newInstance(Passage.class); 
    Marshaller marshaller = context.createMarshaller(); 
    marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true); 

    Passage passage = new Passage().RandomPassage(); 

    System.out.println(passage.toString()); 
    System.out.println("Marshalling..."); 

    Writer writer = new FileWriter("passage.xml"); 
    marshaller.marshal(new Passage().RandomPassage(), writer); 

    TextMessage message = session.createTextMessage(writer.toString()); 
    producer.send(message); 

    producer.close(); 
    session.close(); 
    connection.close(); 
    } 
} 

通道类

public Passage RandomPassage() throws UnknownHostException { 
    Session session = persistentie.HibernateUtil.getSessionFactory().getCurrentSession(); 
    Transaction tx = session.beginTransaction(); 
    Random random = new Random(); 

    //random festival genereren 
    Query queryMaxFestivalID = session.createQuery("select count(*) from Festival"); 
    int maxFestivalID = ((Long) queryMaxFestivalID.uniqueResult()).intValue(); 
    int festivalID = random.nextInt(maxFestivalID) + 1; 

    //max zoneID voor random waarde 
    Query queryMaxZoneID = session.createQuery("select count(*) from Zone zone where zone.festival.id = :fID"); 
    queryMaxZoneID.setParameter("fID", festivalID); 
    //max polsbandID voor random waarde 
    Query queryMaxPolsbandID = session.createQuery("select count(*) from RFID rfid where rfid.festival.id = :fID"); 
    queryMaxPolsbandID.setParameter("fID", festivalID); 
    int maxZoneID = ((Long) queryMaxZoneID.uniqueResult()).intValue(); 
    int maxPolsbandID = ((Long) queryMaxPolsbandID.uniqueResult()).intValue(); 

    //passageID 
    Query queryMaxPassageID = session.createQuery("select count(*) from Passage passage where passage.RFID.festival.id = :fID"); 
    queryMaxPassageID.setParameter("fID", festivalID); 
    int maxPassageID = ((Long) queryMaxPassageID.uniqueResult()).intValue(); 

    Passage passage = new Passage(); 

    //generate polsbandID + set 
    int polsbandID = random.nextInt(maxPolsbandID) + 1; 
    Query getPolsband = session.createQuery("select rfid from RFID rfid where rfid.id = :id"); 
    getPolsband.setParameter("id", polsbandID); 
    RFID rfid = (RFID) getPolsband.uniqueResult(); 
    passage.setRFID(rfid); 
    //generate zoneID + set 
    int zoneID = random.nextInt(maxZoneID) + 1; 
    Query getZone = session.createQuery("select zone from Zone zone where zone.id = :id"); 
    getZone.setParameter("id", zoneID); 
    Zone zone = (Zone) getZone.uniqueResult(); 
    passage.setZone(zone); 
    //generate type in of uit + set 
    boolean type = random.nextBoolean(); 
    passage.setType(type); 
    //set date 
    passage.setTijdstip(new Date()); 

    session.saveOrUpdate(passage); 

    tx.commit(); 

    //mongoDB(polsbandID, zoneID, passage.getTijdstip(), type); 


    return passage; 
} 

回答

0

当试图马歇尔,不直接通过实体对象编组。当marshaller试图从对象中获取一个懒惰属性时,它不会有会话来检索lazy属性,此时它会抛出这个异常。

解决方案:1.我的建议是,创建另一个与原始实体相似的数据对象/ POJO,将实体的所有属性复制到此POJO中,并将此POJO发送给编组器以创建一个xml您。

  1. 或者使lazy = false。
相关问题