axis-c-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Thomas Gentsch ...@e-tge.de>
Subject Re: XML reader/writer buffer size problem?
Date Fri, 04 Feb 2011 10:53:14 GMT

Hi all,

sorry, I have to re-open this, the corrupted XML was my fault (while
editing the test data).
Basically it still does not work. In my real prog I have added some more
printouts (also in Axis code):

axiom_node_t * SOAPServer::invokeFunc(const axutil_env_t * env,
                                      axiom_node_t * n)
{
  DataObjectPtr req = sdoFromAxiom(n);

  DataObjectPtr resp = doTheWork(req);

  printf("TGE: SDO Resp:\n");
  dumpSDO(resp);

  axiom_node_t * ax = sdoToAxiom(resp);
  printf("TGE: Axiom Resp:\n");
  dumpAxiom(ax);

  return ax;
}

Now what I see is that the incoming request gets transformed from Axiom
to SDO nicely, will be processed, and I also see the response SDO "resp"
as complete printed out (dumpSDO).
Then, in sdoToAxiom() I convert the response SDO back to an Axiom node
(as stated earlier, using the SDO AxiomHelper) and print it to stdout
(see below). Here I have added a printout into the guththila XML writer
and can see that *all* tags are properly written.
Now something funny happens:
In dumpAxiom() I originally had this:

axiom_xml_writer_t * w = axiom_xml_writer_create_for_memory(env,
  NULL, AXIS2_TRUE, 0, AXIS2_XML_PARSER_TYPE_BUFFER);
axiom_output_t     * om_output = axiom_output_create(env, w);
axiom_node_serialize(n, env, om_output);
axis2_char_t * buf = (axis2_char_t *) axiom_xml_writer_get_xml(w, env);
fprintf(f, "\nData: '%s'\n", buf);

which yields a truncated output string:
 Data: '<listresponse ... <tns3:num300000000>24<//^M'
However, note the closing single quote which is part of the fprintf
above.
Now, (before noticing that) I have added:
 fflush(f);
after the fprintf and voila, the printout was complete. Does not make
any sense to me ... :-|

However, now, still my Axis2c client prog receives a truncated response
only, even (now the next interesting piece), again the guththila XML
writer runs again in the server (serializing the Axiom into the socket,
I guess ...) after the fprintf above and I can see all XML tags written
correctly.

Is it possible that this is not a question of the XML reader/writer but
rather that the SOAP client is not fast enough reading the response
while the server already closes the connection or something like this?
I'm still digging further, but any hints are welcome! :-)

Rgds,
  tge

On Sun, 2011-01-30 at 13:21 +0100, Thomas Gentsch wrote:
> Hi all,
> 
> sorry, not Axis' fault ... the input.xml is wrong. Hard to spot, but
> there was an opening tag <num50000000> missing.
> However
>  - still unclear why the two writer types behave that differently ??
>  - the error message in the log might be a bit better (my input.xml 
>    consists of *one* line of a length of 460000 chars, hence line 1 :-) 
>    maybe a char offset might have helped)
> I'll update Jira ...
> 
> Rgds,
>   tge
> 
> On Thu, 2011-01-27 at 18:43 +0100, Thomas Gentsch wrote:
> > Hi Damitha,
> > 
> > if you refer to AXIS2C-448 - I have that in.
> > 
> > Besides of that I haven't found anything :-| (searching for
> > axiom_xml_reader or axiom_xml_writer)
> > I'll dig more but into it but of course I could save that effort of
> > somebody else had an idea :-)
> > 
> > Also, might be interesting to run that against 1.7 ...
> > 
> > Rgds + thx,
> >   tge
> > 
> > On Thu, 2011-01-27 at 22:26 +0530, Damitha Kumarage wrote:
> > > Hi Thomas,
> > > I remember similar problem appeared in a previous thread. Could you 
> > > please search in mail archives?
> > > 
> > > Thanks,
> > > Damitha
> > > Thomas Gentsch wrote:
> > > > Just opened AXIS2C-1534 and attached the test progs + data.
> > > > Any help is appreciated!!
> > > > Rgds,
> > > >   tge
> > > >
> > > > On Thu, 2011-01-27 at 13:16 +0100, Thomas Gentsch wrote:
> > > >   
> > > >> Minor correction in the code below (I merged two functions) ...
> > > >>
> > > >> On Thu, 2011-01-27 at 13:03 +0100, Thomas Gentsch wrote:
> > > >>     
> > > >>> Hi all,
> > > >>>
> > > >>> I'm still with Axis2c 1.6 and have a problem (de)serializing an
XML
> > > >>> string. Is there anything know about such a problem (haven't found
> > > >>> anything in Jira)?
> > > >>>
> > > >>> The essential piece is a string buffer containing an XML structure,
> > > >>> which is created from a Tuscany SDO. Then that string buffer gets
> > > >>> converted to an Axiom Node (using the Tuscany AxiomHelper) to
be
> > > >>> returned to the calling Axis2c client. Normally this works nicely,
but
> > > >>> if the XML is very long (in my example 484460 bytes), it gets
truncated.
> > > >>>
> > > >>> I can see the string buffer "str" (below) as still intact. Then,
> > > >>> essentially the following happens:
> > > >>> ===========
> > > >>> AxiomHelper::toAxiomNode()
> > > >>> {
> > > >>> ...
> > > >>> axiom_xml_reader_t * reader =
> > > >>> axiom_xml_reader_create_for_memory(
> > > >>>   the_env, (void*)str, strlen(str),
> > > >>>   (const axis2_char_t *)"UTF-8", AXIS2_XML_PARSER_TYPE_BUFFER);
> > > >>> axiom_stax_builder_t* builder =
> > > >>>   axiom_stax_builder_create(the_env, reader);
> > > >>> axiom_document_t* document =
> > > >>>   axiom_stax_builder_get_document(builder, the_env);
> > > >>> axiom_node_t* root_node =
> > > >>>   axiom_document_get_root_element(document, the_env);
> > > >>> axiom_document_build_all(document, the_env);
> > > >>>       
> > > >> The code above is function1 and returns "document".
> > > >> Below is function2 dealing with that document.
> > > >>
> > > >>     
> > > >>> axiom_node_t* root_node =
> > > >>>   axiom_document_get_root_element(doc, the_env);
> > > >>> return  root_node;
> > > >>> }
> > > >>>
> > > >>> Now I have the Axiom node "n" and dump it (just for testing):
> > > >>>
> > > >>> axiom_xml_writer_t * w = axiom_xml_writer_create_for_memory(env,
> > > >>>   NULL, AXIS2_TRUE, 0, AXIS2_XML_PARSER_TYPE_BUFFER);
> > > >>> axiom_output_t * om_output = axiom_output_create(env, w);
> > > >>> axiom_node_serialize(n, env, om_output);
> > > >>> axis2_char_t * buf = (axis2_char_t *) axiom_xml_writer_get_xml(w,
env);
> > > >>>
> > > >>> fprintf(f, "\nData: '%s'\n", buf);
> > > >>> =============
> > > >>>
> > > >>> and the output is truncated to 17253 bytes ending with some control
> > > >>> characters.
> > > >>> As said, that code has been working for months/years now w/o any
> > > >>> problems, so I believe that it is OK in general and I rather suspect
the
> > > >>> Axis2c XML handling in conjunction with large buffers ...
> > > >>>
> > > >>> I'll extract the pieces into a standalone testprog for easier
> > > >>> troubleshooting - but still: Any ideas?
> > > >>>
> > > >>> Many thx!!!
> > > >>>   tge
> > > >>>
> > > >>>       
> > > >>
> 



---------------------------------------------------------------------
To unsubscribe, e-mail: c-user-unsubscribe@axis.apache.org
For additional commands, e-mail: c-user-help@axis.apache.org


Mime
View raw message