ネットワークストリーム経由でJava Beanインスタンスを送信しようとしています。私は、JAXB
と通常のOutputStream
のJavaインスタンスをマーシャリング/アンマーシャリングしてネットワーク上にプッシュしたいと思っています。JAXBのソケットとストリーム - リーダーブロック
サーバは非マーシャルポイントで待機していますが、クライアントはすでにさらにアロケーションしています。
サーバー:
inputStream = new BufferedInputStream(this.socket.getInputStream());
outputStream = new BufferedOutputStream(this.socket.getOutputStream());
JAXBContext requestContext = JAXBContext.newInstance(this.requestClass);
Unmarshaller unmarshaller = requestContext.createUnmarshaller();
@SuppressWarnings("unchecked")
K request = (K) unmarshaller.unmarshal(inputStream); //blocks here
respond();
クライアント:
JAXBContext messageContext = JAXBContext.newInstance(message.getClass());
Marshaller marshaller = messageContext.createMarshaller();
out = new BufferedOutputStream(socket.getOutputStream());
marshaller.marshal(message, out);
out.flush();
waitForResponse();// blocks here
EDIT:私は通常の出力ストリームに切り替えたが、それはまだブロック。アンマーシャリングを停止するようにJAXBに指示するために特別な信号を送信する必要がありますか?クライアント出力ストリームを閉じると、メッセージはサーバー側に到着します。
XMLリーダーとライターは不要です(通常の出力ストリームを使用できます)が、ブロッキングの問題は発生しません。ストリーミング中のクラスを投稿してください。 – Perception
ありがとう、編集を参照してください。 unmarshallerがアンマーシャリングを停止するための特別な信号を待っていることができますか? –
あなたはタイトルplsを修正できますか?他の人はこれを後で見つけるでしょうか? – mindandmedia