java.io.IOException: Stream closed
多个线程索引同一个inputstream,当某一个thread在执行完之后,把这个inputstream关闭了;而此时正在从这个inputstream流中读取信息的线程就会抛出java.io.IOException:Streamclosed异常。终于找到这个异常的根源所在,原来是两个页面同时调用一个jsp,这个jsp中的内建对象out在执行out.close()时发生的异常,也就是当某一个thread(对应一个jsp)在执行完之后,把这个stream关闭了;而此时正在从这个stream中读取信息的另一个jsp就会抛出java.io.IOException:Streamclosed异常。
修改前代码:publicObjectsendData(StringjsonStr){
//1.指定WebService的命名空间和调用的方法名
SoapObjectrpc=newSoapObject(NAMESPACE,methodName);
//2.设置调用方法的参数值,这一步是可选的,如果方法没有参数,可以省略这一步
rpc.addProperty("arg000",jsonStr);
//3.生成调用WebService方法的SOAP请求信息。
SoapSerializationEnvelopeenvelope=newSoapSerializationEnvelope(
SoapEnvelope.VER11);
envelope.encodingStyle="UTF-8";
envelope.bodyOut=rpc;
//envelope.setOutputSoapObject(rpc);
//4.
//创建HttpTransportSE对象。通过HttpTransportSE类的构造方法可以指定WebService的WSDL文档的URL
HttpTransportSEht=newHttpTransportSE(URL);
ht.debug=true;
Objectdetail1=null;
try{
//5.使用call方法调用WebService方法
ht.call(null,envelope);
//detail=(SoapObject)envelope.getResponse();
//6.使用getResponse方法获得WebService方法的返回结果
detail1=envelope.getResponse();
}catch(IOExceptione){
//TODOAuto-generatedcatchblock
e.printStackTrace();
}catch(XmlPullParserExceptione){
//TODOAuto-generatedcatchblock
e.printStackTrace();
}
returndetail1;
}
修改后代码:publicObjectsendData(StringjsonStr){
//1.指定WebService的命名空间和调用的方法名
SoapObjectrpc=newSoapObject(NAMESPACE,methodName);
//2.设置调用方法的参数值,这一步是可选的,如果方法没有参数,可以省略这一步
rpc.addProperty("arg000",jsonStr);
//3.生成调用WebService方法的SOAP请求信息。
SoapSerializationEnvelopeenvelope=newSoapSerializationEnvelope(
SoapEnvelope.VER11);
envelope.encodingStyle="UTF-8";
envelope.bodyOut=rpc;
//envelope.setOutputSoapObject(rpc);
//4.
//创建HttpTransportSE对象。通过HttpTransportSE类的构造方法可以指定WebService的WSDL文档的URL
HttpTransportSEht=newHttpTransportSE(URL);
ht.debug=true;
Objectdetail1=null;
try{
//5.使用call方法调用WebService方法
ht.call(null,envelope);
//detail=(SoapObject)envelope.getResponse();
//6.使用getResponse方法获得WebService方法的返回结果
detail1=envelope.getResponse();
}catch(IOExceptione){
//TODOAuto-generatedcatchblock
e.printStackTrace();
System.out.println(newjava.util.Date()+"IOException,resendthedata");
try{
//5.使用call方法调用WebService方法
ht.call(null,envelope);
//detail=(SoapObject)envelope.getResponse();
//6.使用getResponse方法获得WebService方法的返回结果
detail1=envelope.getResponse();
}catch(IOExceptione1){
//TODO自动生成的catch块
e1.printStackTrace();
}catch(XmlPullParserExceptione1){
//TODO自动生成的catch块
e1.printStackTrace();
}
}catch(XmlPullParserExceptione){
//TODOAuto-generatedcatchblock
e.printStackTrace();
}
returndetail1;
}