リーダーとライターのマーシャリングとアンマーシャリングに問題があります。それで、ここにあります。これは、PrintWriter に何かをマーシャリングする方法です。
try {
JAXBContext jaxbContext = JAXBContext.newInstance(XMLProtocol.class);
Marshaller jaxbMarshaller = jaxbContext.createMarshaller();
//jaxbMarshaller.setProperty(, value)
//jaxbMarshaller.setProperty(Marshaller.JAXB_FRAGMENT, true);
jaxbMarshaller.marshal(protocol, out);
} catch (JAXBException e) {
LOG.error("Error while processing protocol"+e);
}
これは私がそれを得る方法です:
private BufferedReader in;
private PrintWriter out;
private String buffer;
private StringBuffer stringBuffer;
public ServerThread(Socket s) throws IOException {
socket = s;
in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
out = new PrintWriter(new BufferedWriter(new OutputStreamWriter(socket.getOutputStream())), true);
start();
}
public void run() {
try {
while (true) {
// LOG.trace("Waiting for input stream ready");
/*
* if (in.readLine().endsWith(">")) {
* LOG.trace("here we go"+buffer);
* JAXBContext jaxbContext = JAXBContext.newInstance(XMLProtocol.class);
* Unmarshaller jaxbUnmarshaller = jaxbContext.createUnmarshaller();
* XMLProtocol protocol = (XMLProtocol) jaxbUnmarshaller.unmarshal(in);
* LOG.trace("Nop it no the end " + protocol.getContent());
* }
*/
if (in.ready()) {
LOG.trace("BufferedReader - ready");
buffer += in.readLine();
if (buffer.endsWith("</XMLProtocol>")) {
LOG.trace("Wish you were here1"+in);
JAXBContext jaxbContext = JAXBContext.newInstance(XMLProtocol.class);
Unmarshaller jaxbUnmarshaller = jaxbContext.createUnmarshaller();
XMLProtocol protocol = (XMLProtocol) jaxbUnmarshaller.unmarshal(in);
LOG.trace("Getting message from user " + protocol.getContent());
} else {
LOG.trace("Nop it no the end " + buffer);
}
}
}
} catch (IOException e) {
e.printStackTrace();
} catch (JAXBException e) {
e.printStackTrace();
} finally {
try {
socket.close();
LOG.trace("Socket closed");
} catch (IOException e) {
LOG.error("Socket no closed" + e);
}
}
}
次に、このアンマーシャル操作がハングします。そして、例外さえも何も表示しません。