码迷,mamicode.com
首页 > 编程语言 > 详细

java.io.IOException: Stream closed 异常的原因和处理

时间:2015-03-04 19:23:37      阅读:1535      评论:0      收藏:0      [点我收藏+]

标签:java.io.ioexception   stream closed   java   

java.io.IOException: Stream closed


多个线程索引同一个input  stream,当某一个thread在执行完之后,把这个inputstream关闭了;而此时正在从这个input  stream流中读取信息的线程就会抛出  java.io.IOException:  Stream  closed  异常。

    终于找到这个异常的根源所在,原来是两个页面同时调用一个jsp,这个jsp中的内建对象
out在执行out.close()时发生的异常,也就是当某一个thread(对应一个jsp)在执行完之
后,把这个stream关闭了;而此时正在从这个stream中读取信息的另一个jsp就会抛出  
java.io.IOException:  Stream  closed  异常。

修改前代码:

public Object sendData(String jsonStr) {
		
		// 1. 指定WebService的命名空间和调用的方法名
		SoapObject rpc = new SoapObject(NAMESPACE, methodName);
		// 2. 设置调用方法的参数值,这一步是可选的,如果方法没有参数,可以省略这一步
		rpc.addProperty("arg000", jsonStr);
		// 3. 生成调用WebService方法的SOAP请求信息。
		SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(
				SoapEnvelope.VER11);
		envelope.encodingStyle = "UTF-8";
		envelope.bodyOut = rpc;
		// envelope.setOutputSoapObject(rpc);
		// 4.
		// 创建HttpTransportSE对象。通过HttpTransportSE类的构造方法可以指定WebService的WSDL文档的URL
		HttpTransportSE ht = new HttpTransportSE(URL);
		ht.debug = true;

		Object detail1 = null;
		
		try {
			// 5. 使用call方法调用WebService方法
			ht.call(null, envelope);
			// detail = (SoapObject) envelope.getResponse();
			// 6. 使用getResponse方法获得WebService方法的返回结果
			detail1 = envelope.getResponse();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (XmlPullParserException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		return detail1;
	}

修改后代码:

public Object sendData(String jsonStr) {
		
		// 1. 指定WebService的命名空间和调用的方法名
		SoapObject rpc = new SoapObject(NAMESPACE, methodName);
		// 2. 设置调用方法的参数值,这一步是可选的,如果方法没有参数,可以省略这一步
		rpc.addProperty("arg000", jsonStr);
		// 3. 生成调用WebService方法的SOAP请求信息。
		SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(
				SoapEnvelope.VER11);
		envelope.encodingStyle = "UTF-8";
		envelope.bodyOut = rpc;
		// envelope.setOutputSoapObject(rpc);
		// 4.
		// 创建HttpTransportSE对象。通过HttpTransportSE类的构造方法可以指定WebService的WSDL文档的URL
		HttpTransportSE ht = new HttpTransportSE(URL);
		ht.debug = true;

		Object detail1 = null;
		
		try {
			// 5. 使用call方法调用WebService方法
			ht.call(null, envelope);
			// detail = (SoapObject) envelope.getResponse();
			// 6. 使用getResponse方法获得WebService方法的返回结果
			detail1 = envelope.getResponse();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
			System.out.println(new java.util.Date() + "IOException, resend the data");
			try {
			// 5. 使用call方法调用WebService方法
				ht.call(null, envelope);
			// detail = (SoapObject) envelope.getResponse();
			// 6. 使用getResponse方法获得WebService方法的返回结果
			detail1 = envelope.getResponse();
			} catch (IOException e1) {
				// TODO 自动生成的 catch 块
				e1.printStackTrace();
			} catch (XmlPullParserException e1) {
				// TODO 自动生成的 catch 块
				e1.printStackTrace();
			}
		} catch (XmlPullParserException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		return detail1;
	}


本文出自 “CarlWu” 博客,请务必保留此出处http://carlwu.blog.51cto.com/2329717/1617275

java.io.IOException: Stream closed 异常的原因和处理

标签:java.io.ioexception   stream closed   java   

原文地址:http://carlwu.blog.51cto.com/2329717/1617275

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!