Shalab,

Firstly, check the API usage for the attachment streams here:
http://svn.apache.org/viewvc/webservices/commons/trunk/modules/axiom/modules/axiom-tests/src/test/java/org/apache/axiom/attachments/IncomingAttachmentInputTest.java

You actually have to read the bytes before getting the next stream.

Second, i don't recommend using the PipedOutputStream/PipedInputStream
the way you have set it up. You will end up consuming huge memory and
will not be able to handle many connections. Please come up with a
concrete implementation of javax.activation.DataSource and use that to
create your DataHandler. The DataSource implkementation can have a
dynamically generated input stream. A quick google search brought up
this sample.

http://xqzone.marklogic.com/pubs/3.2/javadoc/com/marklogic/xcc/examples/doc-files/DynamicContentStream.java.txt

Thanks,
dims

On 6/25/07, Shalab Goel <[EMAIL PROTECTED]> wrote:






Resending my query on sending dynamically generated content as a stream in
SOAP attachment, hoping it will catch an eye that can comment on whether
this is expected to work in Axis, and if not, if there are there suggestions
on trying something alternate.



Thanks

Shalab

 ________________________________


From: Shalab Goel
 Sent: Thursday, June 21, 2007 11:54 AM
 To: [email protected]
 Subject: [Axis2] Streaming dynamically generated large sized content



Hello Everyone,



I am looking for some assistance with streaming large sized dynamically
generated content.



I have defined an 'echoString' operation, which takes two request arguments
a string to repeat, and count of number of times to repeat. This is a
service which replicates somewhat the requirement I am working on – to be
able to stream dynamically generated content (size in order of 50 to 200
MBs).



            public OMElement echoString (String echo, String count) throws
Exception

            {

                        PipedInputStream inStream = new PipedInputStream();

                        PipedOutputStream outStream = new
PipedOutputStream(inStream);



                        DataHandler dh = new DataHandler(inStream,
"text/plain");



                        MessageContext inCtx =
MessageContext.getCurrentMessageContext();

                       OperationContext operationContext =
inCtx.getOperationContext();

                       MessageContext outCtx = operationContext


.getMessageContext(WSDLConstants.MESSAGE_LABEL_OUT_VALUE);



                        String attachmentID = outCtx.addAttachment(dh);



                        OMFactory fac = OMAbstractFactory.getOMFactory();

                        OMNamespace omNs = fac.createOMNamespace(


"http://service.soapwithattachments.sample/xsd";, "swa");

                        OMElement echoStringOp =
fac.createOMElement("echoStringResponse", omNs);

                        OMElement idEle = fac.createOMElement("attchmentID",
omNs);

                        idEle.addAttribute("href",
"cid:"+attachmentID,null);

                        echoStringOp.addChild(idEle);



                        byte bytes[] = strArg.getBytes();

                        try

                        {

                              for (int i=0; i < cntArg; i++)


outStream.write(bytes);

                              outStream.flush();

                              outStream.close();

                        }

                        catch (Exception e) {};



                        return echoStringOp;

            }



In the services.xml, I have added parameter for enabling SWA



         <parameter name="enableSwA">true</parameter>





When I run my client code, I get the following exception trace:



contentID
<0.urn:uuid:[EMAIL PROTECTED]>

Exception in thread "main" java.io.IOException: eosBeforeMarker

      at
org.apache.axiom.attachments.BoundaryDelimitedStream.read(BoundaryDelimitedStream.java:300)

      at
org.apache.axiom.attachments.IncomingAttachmentInputStream.read(IncomingAttachmentInputStream.java:121)

      at
sample.soapwithattachments.client.SWAClient.callEchoManyTimes(SWAClient.java:212)

      at
sample.soapwithattachments.client.SWAClient.main(SWAClient.java:59)





Following is how the attachment is being accessed in client code:



                        MessageContext response = mepClient


.getMessageContext(WSDLConstants.MESSAGE_LABEL_IN_VALUE);

                        Attachments attachments =
response.getAttachmentMap();

                        IncomingAttachmentStreams streams =
attachments.getIncomingAttachmentStreams();

                        IncomingAttachmentInputStream inStream = null;

                        if (streams != null)

                        {

                                    inStream = streams.getNextStream();

                                    System.out.println("contentID " +
inStream.getContentId());

                        }



Following is the SOAP request (in TCPMonitor):

---------------------------------------------------------------------




POST /axis2/services/SWASampleService HTTP/1.1

Content-Type: multipart/related;
boundary=MIMEBoundaryurn_uuid_C2F2DEF18072BF88741182450074533;
type="text/xml";
start="<0.urn:uuid:[EMAIL PROTECTED]>";
charset=UTF-8

SOAPAction: "urn:echoString"

User-Agent: Axis2

Host: 127.0.0.1:8081

Transfer-Encoding: chunked



231

--MIMEBoundaryurn_uuid_C2F2DEF18072BF88741182450074533

Content-Type: text/xml; charset=UTF-8

Content-Transfer-Encoding: 8bit

Content-ID:
<0.urn:uuid:[EMAIL PROTECTED]>

   <?xml version='1.0' encoding='UTF-8'?>

      <soapenv:Envelope
xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/";>

         <soapenv:Body>

            <swa:echoString
xmlns:swa="http://service.soapwithattachments.sample/xsd";>

               <swa:echo>howdy</swa:echo>

               <swa:count>45</swa:count>

            </swa:echoString>

         </soapenv:Body>


</soapenv:Envelope>--MIMEBoundaryurn_uuid_C2F2DEF18072BF88741182450074533—0





Following is the SOAP response (showing Fault)

----------------------------------------------------------------------




HTTP/1.1 200 OK

Server: Apache-Coyote/1.1

Content-Type: multipart/related;
boundary=MIMEBoundaryurn_uuid_DFCA23517587D8F2141182450081761;
type="text/xml";
start="<0.urn:uuid:[EMAIL PROTECTED]>";charset=UTF-8Transfer-Encoding:
chunkedDate: Thu, 21 Jun 2007 18:21:21
GMT29a--MIMEBoundaryurn_uuid_DFCA23517587D8F2141182450081761Content-Type:
text/xml; charset=UTF-8Content-Transfer-Encoding:
8bitContent-ID:

   <0.urn:uuid:[EMAIL PROTECTED]>

      <?xml version='1.0' encoding='UTF-8'?>

         <soapenv:Envelope
xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/";>

            <soapenv:Body>

               <ns:echoStringResponse
xmlns:ns="http://service.soapwithattachments.sample/xsd";>

                  <ns:return>

                     <swa:echoStringResponse
xmlns:swa="http://service.soapwithattachments.sample/xsd";>

                        <swa:attchmentID
href="cid:urn:uuid:DFCA23517587D8F2141182450081744" />

                     </swa:echoStringResponse>

                  </ns:return>

               </ns:echoStringResponse>

            </soapenv:Body>

         </soapenv:Envelope>

38



--MIMEBoundaryurn_uuid_DFCA23517587D8F2141182450081761

1fa

--MIMEBoundaryurn_uuid_DFCA23517587D8F2141182450082013

Content-Type: text/xml; charset=UTF-8

Content-Transfer-Encoding: 8bit

Content-ID:


<0.urn:uuid:[EMAIL PROTECTED]>

            <?xml version='1.0' encoding='UTF-8'?>

               <soapenv:Envelope
xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/";>

                  <soapenv:Body>

                     <soapenv:Fault>


<faultcode>soapenv:Client</faultcode>

                        <faultstring>Error while writing to the
OutputStream.</faultstring>

                        <detail />

                     </soapenv:Fault>

                  </soapenv:Body>

               </soapenv:Envelope>

38



--MIMEBoundaryurn_uuid_DFCA23517587D8F2141182450082013

2

--

0











 ________________________________


From: Shalab Goel
 Sent: Wednesday, June 20, 2007 1:59 PM
 To: '[email protected]'
 Subject: Sample application demo-ing attachments functionality



Hello,



Thanks in advance if this already is available and you can point to the
proper location.



I am looking for a sample web service that would take a file path on server
as request, and respond with contents of the file as a SOAP attachment. Any
pointers on anything similar will be appreciated.



Is streaming of the file contents possible, as the file in my case is
expected to be plus 100 MB potentially?



In the samples/userguide directory of the distribution, I see a little
different variation, where client sends the file contents in attachment, and
web service consumes it.




 If you have received this e-mail in error, please delete it and notify the
sender as soon as possible. The contents of this e-mail may be confidential
and the unauthorized use, copying, or dissemination of it and any
attachments to it, is prohibited. Internet communications are not secure and
Hyperion does not, therefore, accept legal responsibility for the contents
of this message nor for any damage caused by viruses. The views expressed
here do not necessarily represent those of Hyperion. For more information
about Hyperion, please visit our Web site at: www.hyperion.com


--
Davanum Srinivas :: http://davanum.wordpress.com

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to