套接字异常:使用JAXB解组时连接重置

时间:2014-05-07 16:36:00

标签: java xml serialization deserialization unmarshalling

我能够使用FileInputStream从xml文件解组到一个类来读取xml内容,并且我在解组代码中使用InputStream而不是FileInputStream时遇到了问题。

编组:

try {
    JAXBContext jaxbContext = JAXBContext.newInstance(Message.class);
    Marshaller jaxbMarshaller = jaxbContext.createMarshaller();

        JAXBElement<Message> je = 
            new JAXBElement<Message> (new QName(Message.class.getSimpleName()), Message.class, message);

    jaxbMarshaller.marshal(je, os);
} catch (JAXBException e) {
    e.printStackTrace();
}

解组:

JAXBContext jc = null;
try {       
    jc = JAXBContext.newInstance(Message.class);            
    Unmarshaller um = jc.createUnmarshaller();
    JAXBElement<Message> je = (JAXBElement<Message>) um.unmarshal(new StreamSource(is), Message.class);
    message = je.getValue();
} catch (JAXBException | FileNotFoundException e) {
    e.printStackTrace();
}

我得到的错误:

javax.xml.bind.UnmarshalException
 - with linked exception:
[java.net.SocketException: Connection reset]

2 个答案:

答案 0 :(得分:0)

尝试这样的事情。

使用JAXBIntrospector获取值。

String filepath="C:\\somepath";
FileInputStream xml = new FileInputStream(filepath);
Object result = unmarshaller.unmarshaller.unmarshal(xml);
Message msg = (Message) JAXBIntrospector.getValue(result);

StreamSource xml = new StreamSource(filepath);
JAXBElement<Message> msgclass = 
unmarshaller.unmarshal(xml, Message.class);

答案 1 :(得分:0)

'连接重置'与XML,JAXB,解组等无关。它通常是由写入已经被对等方关闭的连接引起的。换句话说,应用程序协议错误。