BTW I was answering ur question about reading the MIME package even after
the SOAP envelope issue...

I always think keeping the MIME parser a level below (in between transport
and XML) than XMLparser is much cleaner, than trying to switch between the
two..


On Tue, Jul 15, 2008 at 10:01 AM, Thilina Gunarathne <[EMAIL PROTECTED]>
wrote:

>
>
>> But the
>> problem with this approach is when the SOAP part is pretty large the
>> whole message (I mean SOAP) is in memory. Is the same thing happens with
>> Axis2/JAVA ?
>
> IIRC Axis2/java does the combination I mentioned above. Use stream as much
> as possible, then buffer it.. Also in Axis2/java even the SOAP part can get
> file cached if it's very large, in which case it will not be in memory.
>
> In any case I would not expect a huge SOAP envelope, specially when
> attachments are used..
>
> thanks,
> Thilina
>
>>
>> Thanks,
>> -Manjula.
>>
>> On Tue, 2008-07-15 at 03:26 -0700, Thilina Gunarathne wrote:
>> > Hi Manjula,
>> > One thing you guys can try to do is to break up the stream at the
>> > MIME() parser level. Then the MIME parser only gives the SOAP Envelope
>> > part to the XML parser and nothing beyond. This can be achieved by
>> > faking a input stream. MIME parser gets the original input stream and
>> > then gives the XML parser a faked inputstream, something which
>> > provides the same interface and functionality as the original
>> > inputstream, but the  MIME parser has control over what goes in to
>> > it.
>> >
>> > For an example, if reading an InputStream is reading a memory pointer
>> > (please excuse my very bad knowledge about C I/O) which gets filled by
>> > the transport layer, then the MIME parser can also write the data in
>> > to some memory location  which will act as the input stream location
>> > for XMLReader.
>> >
>> > If the above is possible, then the MIME parser can stream the actual
>> > input stream directly to the faked inputstream till the SOAP part
>> > boundary is reached or till the user requests another MIME part.
>> > Streaming MIME parsing will happen throughout the process to limit the
>> > FAKED input stream to the contents of the SOAP part.  If the user
>> > requests a MIME part while the XML reader is only half way in to
>> > parsing the SOAP envelope, then the MIME parser should read ahead the
>> > SOAP part, store it in memory and should provide it as needed to the
>> > FAKED input stream. One other way to visualize this is to think MIME
>> > parsing happens at a level below the XML parsing, just like transport
>> > level.
>> >
>> > I'm not sure how hard to do this in Axis2/C (or whether it's
>> > impossible)... Let me know if I'm not clear with the idea.
>>
>>
>> > thanks,
>> > Thilina
>> >
>> >
>> > On Tue, Jul 15, 2008 at 3:04 AM, Supun Kamburugamuva
>> > <[EMAIL PROTECTED]> wrote:
>> >
>> >                 But then again the problem will occur when xml_parser
>> >                 give the control
>> >                 back to mime_parser. Because xml_parser will read
>> >                 beyond the soap part
>> >                 when parsing. So the parser should be modified to
>> >                 return the the
>> >                 unwanted data it read beyond the soap part while
>> >                 parsing. I think
>> >                 Guththila can be modified for this requirement, but
>> >                 does any one know
>> >                 how to do this with libxml2.
>> >
>> >         I assume by "read beyond the soap part" you mean consuming the
>> >         stream beyond the soap part. But I think this is unavoidable
>> >         in any parser.
>> >
>> >         1. Parser don't know where the xml ends.
>> >         2. The parser doesn't read character by chareacter from the
>> >         stream (if it does it'll be very inefficient) and it reads
>> >         chunks of data from the stream.
>> >
>> >         Becuase of the above reasons the parser will consume the
>> >         stream beyond the soap part.
>> >
>> >         Supun..
>> >
>> >
>> >
>> >
>> >
>> >                 On Sat, 2008-07-12 at 21:21 +0530, Manjula Peiris
>> >                 wrote:
>> >                 > On Sat, 2008-07-12 at 19:31 +0530, Milinda Pathirage
>> >                 wrote:
>> >                 > > As Thilina mentioned in above thread Axis2/Java
>> >                 keeps a instance of
>> >                 > > mime parser in it's xml builder. So I think it's
>> >                 ok to follow that
>> >                 > > method. AFAIK, I think if we enable MTOM caching
>> >                 we have to have this
>> >                 > > feature or is anybody have ideas about how to
>> >                 solve this without going
>> >                 > > to this method?. Manjula can you point out the
>> >                 changes we need in the
>> >                 > > parser. Then we can discuss the problem and
>> >                 available solutions. This
>> >                 > > will help us to avoid any problems occur in the
>> >                 future because of the
>> >                 > > changes.
>> >                 > > If we have two methods for xml reader creation,
>> >                 how we can use both of
>> >                 > > them in the Axis2/C engine. Are we going to check
>> >                 the MIME headers and
>> >                 > > create the required xml reader?
>> >                 >
>> >                 > In the MTOM case the serialized message is most
>> >                 probably in the
>> >                 > following format.
>> >                 >
>> >                 > --MimeBoundary
>> >                 > mime_header1:xxxxx
>> >                 > mime_header2:xxxxx
>> >                 >
>> >                 > <soapenv:Envelope>.......</soapenv:Envelope>
>> >                 > --MimeBoundary
>> >                 > mime_header1:xxxx
>> >                 > mime_header2:xxxx
>> >                 >
>> >                 > yyyyyyyyybinarydatayyyyyyyyyyyy
>> >                 > --MimeBoundary--
>> >                 >
>> >                 > We have the information form http_headers whether
>> >                 this is a multipart
>> >                 > message or not. So will call the soap_builder
>> >                 straightaway with a flag
>> >                 > telling this is a multipart message. Since the
>> >                 modified soap_builder
>> >                 > will have a reference to mime_parser instance when
>> >                 seeing this flag it
>> >                 > will call the mime_parser. mime_parser will search
>> >                 for \r\n\r\n sequence
>> >                 > between SOAP part and first mime_headers set. When
>> >                 searching for this it
>> >                 > may read some part of the SOAP. So after this search
>> >                 we can't
>> >                 > straightaway call either xml_reader_create_for_io or
>> >                 > xml_reader_create_for_memory, because none of them
>> >                 will not get correct
>> >                 > xml. So what we need is first read from a buffer and
>> >                 then when that
>> >                 > buffer is finished read from the network stream.
>> >                 This will cause to
>> >                 > define and implement the new xml_reader function and
>> >                 corresponding
>> >                 > modifications at parser level as I mentioned in my
>> >                 previous mail.
>> >                 >
>> >                 > -Manjula.
>> >                 >
>> >                 >
>> >                 > >
>> >                 > > Thanks,
>> >                 > > Milinda...
>> >                 > >
>> >                 > > On Sat, Jul 12, 2008 at 6:53 PM, Manjula Peiris
>> >                 <[EMAIL PROTECTED]>
>> >                 > > wrote:
>> >                 > >         Hi all,
>> >                 > >
>> >                 > >         MTOM caching stuff is finished in both
>> >                 send and receiving
>> >                 > >         sides.It is
>> >                 > >         available here [1]. But due to this [2]
>> >                 problem, it cannot be
>> >                 > >         integrated
>> >                 > >         to Axis2/C trunk.
>> >                 > >
>> >                 > >         In order to solve that problem we need to
>> >                 keep a reference of
>> >                 > >         mime_parser instance in the soap_builder
>> >                 similarly
>> >                 > >         stax_builder. So when
>> >                 > >         parsing the soap part the xml_reader will
>> >                 not just read from
>> >                 > >         the stream,
>> >                 > >         but also need to read from the buffer
>> >                 which will be available
>> >                 > >         after
>> >                 > >         parsing mime_headrs. So we need to create
>> >                 a parser instance
>> >                 > >         which will
>> >                 > >         first read from the buffer and when that
>> >                 buffer is not
>> >                 > >         containing any
>> >                 > >         more data, it will read from the stream.
>> >                 So we may need to add
>> >                 > >         a new
>> >                 > >         function say,
>> >                 > >         xml_reader_create_for_memory_and_io and
>> >                 change some of the
>> >                 > >         logic in
>> >                 > >         parser.
>> >                 > >         Your suggestions are highly appreciated.
>> >                 > >
>> >                 > >
>> >                 [1]
>> https://svn.apache.org/repos/asf/webservices/axis2/branches/c/post_1_4_mtom/c
>> >                 > >
>> >                 > >
>> >                 [2]
>> http://marc.info/?l=axis-c-dev&amp;amp;m=121320959601769&amp;amp;w=2<http://marc.info/?l=axis-c-dev&amp;m=121320959601769&amp;w=2>
>> >                 > >
>> >                 > >         Thanks,
>> >                 > >         -Manjula.
>> >                 > >
>> >                 > >
>> >                 > >         --
>> >                 > >         Manjula Peiris:
>> >                 http://manjula-peiris.blogspot.com/
>> >                 > >
>> >                 > >
>> >                 > >
>> >
>> ---------------------------------------------------------------------
>> >                 > >         To unsubscribe, e-mail:
>> >                 [EMAIL PROTECTED]
>> >                 > >         For additional commands, e-mail:
>> >                 [EMAIL PROTECTED]
>> >                 > >
>> >                 > >
>> >                 > >
>> >                 > >
>> >                 > > --
>> >                 > > http://mpathirage.com
>> >                 > > http://wso2.org "Oxygen for Web Service
>> >                 Developers"
>> >                 > > http://wsaxc.blogspot.com "Web Services With
>> >                 Axis2/C"
>> >                 >
>> >                 >
>> >                 >
>> >
>> ---------------------------------------------------------------------
>> >                 > To unsubscribe, e-mail:
>> >                 [EMAIL PROTECTED]
>> >                 > For additional commands, e-mail:
>> >                 [EMAIL PROTECTED]
>> >                 >
>> >
>> >
>> >
>> ---------------------------------------------------------------------
>> >                 To unsubscribe, e-mail:
>> >                 [EMAIL PROTECTED]
>> >                 For additional commands, e-mail:
>> >                 [EMAIL PROTECTED]
>> >
>> >
>> >
>> >
>> >
>> >
>> >
>> > --
>> > Thilina Gunarathne - http://thilinag.blogspot.com
>>
>>
>> ---------------------------------------------------------------------
>> To unsubscribe, e-mail: [EMAIL PROTECTED]
>> For additional commands, e-mail: [EMAIL PROTECTED]
>>
>>
>
>
> --
> Thilina Gunarathne - http://thilinag.blogspot.com
>



-- 
Thilina Gunarathne - http://thilinag.blogspot.com

Reply via email to