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; }
时间: 2024-10-13 18:59:11