[ 
https://issues.apache.org/jira/browse/AXIS2-5487?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Espen Rydningen updated AXIS2-5487:
-----------------------------------

    Affects Version/s:     (was: 1.6.2)
    
> Attempted read on closed stream - II
> ------------------------------------
>
>                 Key: AXIS2-5487
>                 URL: https://issues.apache.org/jira/browse/AXIS2-5487
>             Project: Axis2
>          Issue Type: Bug
>          Components: client-api
>    Affects Versions: 1.6.1
>         Environment: Windows XP SP2, JDK 1.6, AXIS2-1.6.2, Jboss 4.0
>            Reporter: Espen Rydningen
>            Priority: Blocker
>              Labels: axiom_1.2.12, axiom_1.2.13, axis2_1.6.1, axis2_1.6.2, 
> webservice_download_client
>
> When trying to download the large binary file getting the exception 
> "org.apache.axiom.om.OMException: java.io.IOException: Attempted read on 
> closed stream."
> Have the following properties in axis2.xml
>     <parameter name="enableMTOM">true</parameter>
>     <parameter name="enableSwA">false</parameter>
> WSDL is
> ========
> <?xml version="1.0" encoding="UTF-8"?>
> <wsdl:definitions xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/";
>       xmlns:ns1="http://org.apache.axis2/xsd"; 
> xmlns:ns="http://sample.com/sample/SampleService";
>       xmlns:wsaw="http://www.w3.org/2006/05/addressing/wsdl"; 
> xmlns:http="http://schemas.xmlsoap.org/wsdl/http/";
>       xmlns:ax21="http://sample.com/sample/SampleService/xsd"; 
> xmlns:xs="http://www.w3.org/2001/XMLSchema";
>       xmlns:mime="http://schemas.xmlsoap.org/wsdl/mime/"; 
> xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/";
>       xmlns:soap12="http://schemas.xmlsoap.org/wsdl/soap12/"; 
> targetNamespace="http://sample.com/sample/SampleService";>
>       <wsdl:documentation>
>               Please Type your service description here
>       </wsdl:documentation>
>       <wsdl:types>
>         <xs:schema elementFormDefault="qualified" 
> targetNamespace="http://sample.com/sample/SampleService";>
>               
>                       <xs:complexType name="SampleRequestType">
>                               <xs:sequence>
>                                       <xs:element name="fileName" 
> type="xs:string" minOccurs="1" maxOccurs="1"/>
>                                       <xs:element name="contentType" 
> type="xs:string" minOccurs="0" maxOccurs="1"/>
>                               </xs:sequence>
>                       </xs:complexType>
>               <xs:complexType name="SampleResponseType">
>               <xs:sequence>
>                       <xs:element name="fileName" type="xs:string" 
> minOccurs="1" maxOccurs="1" />
>                     <xs:element name="content" type="xs:base64Binary" 
> minOccurs="0" maxOccurs="1" />
>                               </xs:sequence>
>             </xs:complexType>
>               
>                       <xs:element name="SampleRequest" 
> type="ns:SampleRequestType" />
>                       <xs:element name="SampleResponse" 
> type="ns:SampleResponseType" />
>         </xs:schema>
>     </wsdl:types>
>       <wsdl:message name="SampleRequest">
>               <wsdl:part name="parameters" element="ns:SampleRequest" />
>       </wsdl:message>
>       <wsdl:message name="SampleResponse">
>               <wsdl:part name="parameters" element="ns:SampleResponse" />
>       </wsdl:message>
>       <wsdl:portType name="SampleServicePortType">
>               <wsdl:operation name="SampleRequest">
>                       <wsdl:input message="ns:SampleRequest" 
> wsaw:Action="urn:SampleRequest" />
>                       <wsdl:output message="ns:SampleResponse" 
> wsaw:Action="urn:SampleResponse" />
>               </wsdl:operation>
>       </wsdl:portType>
>       <wsdl:binding name="SampleServiceSoap11Binding" 
> type="ns:SampleServicePortType">
>               <soap:binding transport="http://schemas.xmlsoap.org/soap/http";
>                       style="document" />
>               <wsdl:operation name="SampleRequest">
>                       <soap:operation soapAction="urn:SampleRequest" 
> style="document" />
>                       <wsdl:input>
>                               <soap:body use="literal" />
>                       </wsdl:input>
>                       <wsdl:output>
>                               <soap:body use="literal" />
>                       </wsdl:output>
>               </wsdl:operation>
>       </wsdl:binding>
>       <wsdl:binding name="SampleServiceSoap12Binding" 
> type="ns:SampleServicePortType">
>               <soap12:binding 
> transport="http://schemas.xmlsoap.org/soap/http"; style="document" />
>               <wsdl:operation name="SampleRequest">
>                       <soap12:operation soapAction="urn:SampleRequest" 
> style="document" />
>                       <wsdl:input>
>                               <soap12:body use="literal" />
>                       </wsdl:input>
>                       <wsdl:output>
>                               <soap12:body use="literal" />
>                       </wsdl:output>
>               </wsdl:operation>
>       </wsdl:binding>
>       <wsdl:binding name="SampleServiceHttpBinding" 
> type="ns:SampleServicePortType">
>               <http:binding verb="POST" />
>               <wsdl:operation name="SampleRequest">
>                       <http:operation location="SampleRequest" />
>                       <wsdl:input>
>                               <mime:content type="text/xml" part="parameters" 
> />
>                       </wsdl:input>
>                       <wsdl:output>
>                               <mime:content type="text/xml" part="parameters" 
> />
>                       </wsdl:output>
>               </wsdl:operation>
>       </wsdl:binding>
>       <wsdl:service name="SampleService">
>               <wsdl:port name="SampleServiceHttpSoap11Endpoint" 
> binding="ns:SampleServiceSoap11Binding">
>                       <soap:address
>                               
> location="http://localhost:8080/SampleService/services/SampleService.SampleServiceHttpSoap11Endpoint/";
>  />
>               </wsdl:port>
>               <wsdl:port name="SampleServiceHttpSoap12Endpoint" 
> binding="ns:SampleServiceSoap12Binding">
>                       <soap12:address
>                               
> location="http://localhost:8080/SampleService/services/SampleService.SampleServiceHttpSoap12Endpoint/";
>  />
>               </wsdl:port>
>               <wsdl:port name="SampleServiceHttpEndpoint" 
> binding="ns:SampleServiceHttpBinding">
>                       <http:address
>                               
> location="http://localhost:8080/SampleService/services/SampleService.SampleServiceHttpEndpoint/";
>  />
>               </wsdl:port>
>       </wsdl:service>
> </wsdl:definitions>
> Service class
> ============
> public SampleResponse sampleRequest(SampleRequest req) {
> try {
>       SampleResponse response = new SampleResponse();
>       SampleResponseType type = new SampleResponseType();
>       FileInputStream fis = new 
> FileInputStream("c:/tmp/"+req.getSampleRequest().getFileName());
>       DataHandler dh = new DataHandler(new StreamDataSource(fis, 
> req.getSampleRequest().getContentType()));
>       type.setContent(dh);
>       type.setFileName(req.getSampleRequest().getFileName());
>       response.setSampleResponse(type);
>       return response;
> } catch (Exception e) {
> e.printStackTrace();
> }
> return null;
> }
> client code is 
> public static void main(String[] args) throws Exception{
>               
> EndpointReference epr = new 
> EndpointReference("http://localhost:8080/SampleService/services/SampleService.SampleServiceHttpSoap12Endpoint/";);
>       ServiceClient sc = new ServiceClient();
>       sc.setTargetEPR(epr);
>               
>       SampleRequestType type = new SampleRequestType();
>       type.setFileName("server.log");
>       type.setContentType("text/plain");
>       SampleRequest request = new SampleRequest();
>       request.setSampleRequest(type);
>       OMElement ele = 
> sc.sendReceive(request.getOMElement(SampleRequest.MY_QNAME, 
> OMAbstractFactory.getOMFactory()));
>               
>       Options options = new Options();
>                 options.setTo(epr);
>                 options.setAction("getDocumentRequest");
>                 options.setProperty(Constants.Configuration.ENABLE_MTOM, 
> Constants.VALUE_TRUE);
>                 
> options.setProperty(Constants.Configuration.CACHE_ATTACHMENTS,Constants.VALUE_TRUE);
>  
>                 
> options.setProperty(Constants.Configuration.ATTACHMENT_TEMP_DIR,"c:/tmmp"); 
>                 
> options.setProperty(Constants.Configuration.FILE_SIZE_THRESHOLD, 
> "4000000000"); 
>         
>                sc.setOptions(options);
>               OMElement element = sc.sendReceive(ele);
> }
> Error trace is
> Exception in thread "main" org.apache.axiom.om.OMException: 
> java.io.IOException: Attempted read on closed stream.
>       at 
> org.apache.axiom.om.impl.MTOMXMLStreamWriter.flush(MTOMXMLStreamWriter.java:259)
>       at 
> org.apache.axiom.om.impl.llom.OMSerializableImpl.serializeAndConsume(OMSerializableImpl.java:190)
>       at 
> org.apache.axis2.transport.http.SOAPMessageFormatter.writeTo(SOAPMessageFormatter.java:74)
>       at 
> org.apache.axis2.transport.http.AxisRequestEntity.writeRequest(AxisRequestEntity.java:84)
>       at 
> org.apache.commons.httpclient.methods.EntityEnclosingMethod.writeRequestBody(EntityEnclosingMethod.java:499)
>       at 
> org.apache.commons.httpclient.HttpMethodBase.writeRequest(HttpMethodBase.java:2114)
>       at 
> org.apache.commons.httpclient.HttpMethodBase.execute(HttpMethodBase.java:1096)
>       at 
> org.apache.commons.httpclient.HttpMethodDirector.executeWithRetry(HttpMethodDirector.java:398)
>       at 
> org.apache.commons.httpclient.HttpMethodDirector.executeMethod(HttpMethodDirector.java:171)
>       at 
> org.apache.commons.httpclient.HttpClient.executeMethod(HttpClient.java:397)
>       at 
> org.apache.axis2.transport.http.AbstractHTTPSender.executeMethod(AbstractHTTPSender.java:621)
>       at 
> org.apache.axis2.transport.http.HTTPSender.sendViaPost(HTTPSender.java:193)
>       at org.apache.axis2.transport.http.HTTPSender.send(HTTPSender.java:75)
>       at 
> org.apache.axis2.transport.http.CommonsHTTPTransportSender.writeMessageWithCommons(CommonsHTTPTransportSender.java:404)
>       at 
> org.apache.axis2.transport.http.CommonsHTTPTransportSender.invoke(CommonsHTTPTransportSender.java:231)
>       at org.apache.axis2.engine.AxisEngine.send(AxisEngine.java:443)
>       at 
> org.apache.axis2.description.OutInAxisOperationClient.send(OutInAxisOperation.java:406)
>       at 
> org.apache.axis2.description.OutInAxisOperationClient.executeImpl(OutInAxisOperation.java:229)
>       at 
> org.apache.axis2.client.OperationClient.execute(OperationClient.java:165)
>       at 
> org.apache.axis2.client.ServiceClient.sendReceive(ServiceClient.java:555)
>       at 
> org.apache.axis2.client.ServiceClient.sendReceive(ServiceClient.java:531)
>       at com.sample.sampleservice.client.Client.main(Client.java:71)
> Caused by: java.io.IOException: Attempted read on closed stream.
>       at 
> org.apache.commons.httpclient.AutoCloseInputStream.isReadAllowed(AutoCloseInputStream.java:183)
>       at 
> org.apache.commons.httpclient.AutoCloseInputStream.read(AutoCloseInputStream.java:107)
>       at java.io.FilterInputStream.read(FilterInputStream.java:111)
>       at 
> org.apache.axiom.om.util.DetachableInputStream.read(DetachableInputStream.java:147)
>       at 
> org.apache.james.mime4j.io.BufferedLineReaderInputStream.fillBuffer(BufferedLineReaderInputStream.java:111)
>       at 
> org.apache.james.mime4j.io.MimeBoundaryInputStream.fillBuffer(MimeBoundaryInputStream.java:223)
>       at 
> org.apache.james.mime4j.io.MimeBoundaryInputStream.read(MimeBoundaryInputStream.java:157)
>       at 
> org.apache.james.mime4j.io.BufferedLineReaderInputStream.fillBuffer(BufferedLineReaderInputStream.java:111)
>       at 
> org.apache.james.mime4j.io.BufferedLineReaderInputStream.read(BufferedLineReaderInputStream.java:158)
>       at 
> org.apache.james.mime4j.io.LineReaderInputStreamAdaptor.read(LineReaderInputStreamAdaptor.java:67)
>       at java.io.FilterInputStream.read(FilterInputStream.java:111)
>       at 
> org.apache.axiom.om.util.DetachableInputStream.read(DetachableInputStream.java:147)
>       at java.io.FilterInputStream.read(FilterInputStream.java:90)
>       at 
> org.apache.axiom.om.util.DetachableInputStream.read(DetachableInputStream.java:159)
>       at 
> org.apache.axiom.attachments.impl.BufferUtils.inputStream2OutputStream(BufferUtils.java:84)
>       at 
> org.apache.axiom.om.impl.MTOMXMLStreamWriter.flush(MTOMXMLStreamWriter.java:248)
>       ... 21 more
> now changed the client code to the following
> SampleServiceStub stub = new SampleServiceStub();
> stub._getServiceClient().getOptions().setProperty(Constants.Configuration.ENABLE_MTOM,
>  Constants.VALUE_TRUE);
> stub._getServiceClient().getOptions().setTimeOutInMilliSeconds(1000*60*10 );
> stub._getServiceClient().getOptions().setProperty(Constants.Configuration.CACHE_ATTACHMENTS,
>  Constants.VALUE_TRUE);
> stub._getServiceClient().getOptions().setProperty(Constants.Configuration.ATTACHMENT_TEMP_DIR,
>  "c:/tmp");
> stub._getServiceClient().getOptions().setProperty(Constants.Configuration.FILE_SIZE_THRESHOLD,
>  "400000");
>       
> SampleRequestType type = new SampleRequestType();
> type.setFileName("server.log");
> type.setContentType("text/plain");
>                       
> SampleRequest request = new SampleRequest();
> request.setSampleRequest(type);
>                       
> SampleResponse response = stub.sampleRequest(request);
> InputStream in = response.getSampleResponse().getContent().getInputStream();
> This time got the following
> org.apache.axiom.om.OMException: org.apache.axiom.ext.io.StreamCopyException: 
> Error reading from source
>       at 
> org.apache.axiom.attachments.PartContentFactory.createPartContent(PartContentFactory.java:153)
>       at org.apache.axiom.attachments.PartImpl.fetch(PartImpl.java:176)
>       at org.apache.axiom.attachments.PartImpl.getContent(PartImpl.java:149)
>       at 
> org.apache.axiom.attachments.PartImpl.getInputStream(PartImpl.java:224)
>       at 
> org.apache.axiom.attachments.PartDataSource.getInputStream(PartDataSource.java:44)
>       at javax.activation.DataHandler.getInputStream(DataHandler.java:237)
>       at com.sample.sampleservice.client.Client.main(Client.java:109)
> Caused by: org.apache.axiom.ext.io.StreamCopyException: Error reading from 
> source
>       at 
> org.apache.axiom.attachments.utils.BAAOutputStream.readFrom(BAAOutputStream.java:114)
>       at 
> org.apache.axiom.attachments.impl.BufferUtils.inputStream2OutputStream(BufferUtils.java:107)
>       at 
> org.apache.axiom.attachments.PartContentFactory.createPartContent(PartContentFactory.java:125)
>       ... 6 more
> Caused by: java.io.IOException: Attempted read on closed stream.
>       at 
> org.apache.commons.httpclient.AutoCloseInputStream.isReadAllowed(AutoCloseInputStream.java:183)
>       at 
> org.apache.commons.httpclient.AutoCloseInputStream.read(AutoCloseInputStream.java:107)
>       at java.io.FilterInputStream.read(FilterInputStream.java:111)
>       at 
> org.apache.axiom.om.util.DetachableInputStream.read(DetachableInputStream.java:147)
>       at 
> org.apache.james.mime4j.io.BufferedLineReaderInputStream.fillBuffer(BufferedLineReaderInputStream.java:111)
>       at 
> org.apache.james.mime4j.io.MimeBoundaryInputStream.fillBuffer(MimeBoundaryInputStream.java:223)
>       at 
> org.apache.james.mime4j.io.MimeBoundaryInputStream.read(MimeBoundaryInputStream.java:157)
>       at 
> org.apache.james.mime4j.io.BufferedLineReaderInputStream.fillBuffer(BufferedLineReaderInputStream.java:111)
>       at 
> org.apache.james.mime4j.io.BufferedLineReaderInputStream.read(BufferedLineReaderInputStream.java:158)
>       at 
> org.apache.james.mime4j.io.LineReaderInputStreamAdaptor.read(LineReaderInputStreamAdaptor.java:67)
>       at 
> org.apache.axiom.attachments.utils.BAAOutputStream.readFrom(BAAOutputStream.java:112)
>       ... 8 more

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators
For more information on JIRA, see: http://www.atlassian.com/software/jira

---------------------------------------------------------------------
To unsubscribe, e-mail: java-dev-unsubscr...@axis.apache.org
For additional commands, e-mail: java-dev-h...@axis.apache.org

Reply via email to