prolog(编组)不允许内容

时间:2013-10-31 22:32:48

标签: xml jaxb marshalling

我正在将一个XML文件(作为TextMessage)发送到队列并在另一个类中接收它。在那里,我想将此文件解组到我的对象(Passage)。但通过这样做我得到这个错误: prolog中不允许使用内容。

有人可以帮我这个吗?这是一个学校项目,我真的不知道如何解决这个错误。谢谢!

发件人类

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...");

    StringWriter writer = new StringWriter();
    marshaller.marshal(passage, writer);
    System.out.println(writer.toString());
    String xml = writer.toString();
    TextMessage message = session.createTextMessage(xml);
    System.out.println(message);
    producer.send(message);

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

接收器类

public class ReceiverPassage {
public static void main(String[] args) throws JMSException, MarshalException, ValidationException, FileNotFoundException, JAXBException {
    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");
    MessageConsumer consumer = session.createConsumer(destination);

    JAXBContext context = JAXBContext.newInstance(Passage.class);
    Unmarshaller unmarshaller = context.createUnmarshaller();

    TextMessage message = (TextMessage) consumer.receive();
    //String m = message.toString();
    //m = m.toString().trim().replaceFirst("^([\\W]+)<","<");
    //System.out.println(m);
    Passage passage = (Passage) unmarshaller.unmarshal(new StringReader(message.toString()));
    System.out.println(passage.toString());
    //Passage passage = (Passage) Unmarshaller.unmarshal(Passage.class, message);
    //Passage passage = (Passage) Unmarshaller.unmarshal(new StringReader(StringWriter));
    //TextMessage textMessage = (TextMessage) consumer.receive();

    //System.out.println(passage.toString());



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

0 个答案:

没有答案