axis-c-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Bill Mitchell (JIRA)" <j...@apache.org>
Subject [jira] Commented: (AXIS2C-834) guththila_xml_writer has problems with default namespace
Date Tue, 22 Jan 2008 00:26:35 GMT

    [ https://issues.apache.org/jira/browse/AXIS2C-834?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12561179#action_12561179
] 

Bill Mitchell commented on AXIS2C-834:
--------------------------------------

Lahiru, AXIS2C-891 identified a guththila problem with default namespaces in received messages;
this defect describes a problem in guththila sending messages when a default namespace has
been identified.  I reverted to the checked-in versions of the guththila_xml_writer and guththila_xml_writer_wrapper.
 As you can see from the crash below, the problem I described still exists.  

At the time I wrote this, ADB code generation was not working for me.  With changes to the
ADB code generation since this defect was written, it has become a little more work to reproduce
the problem.  The generated stubs assign a prefix "n" to the namespace from the WSDL, so the
default namespace case does not arise directly with them.  To verify the behavior of the underlying
code, I modified the stub to use axiom_element_declare_default_namespace() to assign the URI
of the namespace (see AXIS2C-927), commenting out the generated stub code that creates a namespace
hash and creates a namespace with a prefix value "n".  As you can see from the traceback below,
when guththila_xml_writer_wrapper_write_namespace() is called with a prefix pointer of 0,
a seg fault occurs in guththila_write_namespace.  

>	msvcr80d.dll!strlen(unsigned char * buf=0x0272d0fc)  Line 81	Asm
 	guththila.dll!guththila_write_namespace(guththila_xml_writer_s * wr=0x027e43d8, char * prefix=0x00000000,
char * uri=0x027e8f90, const axutil_env * env=0x0172b450)  Line 794 + 0x9 bytes	C
 	axis2_parser.dll!guththila_xml_writer_wrapper_write_namespace(axiom_xml_writer * writer=0x027e21c8,
const axutil_env * env=0x0172b450, char * prefix=0x00000000, char * namespace_uri=0x027e8f90)
 Line 539	C
 	axis2_parser.dll!axiom_xml_writer_write_namespace(axiom_xml_writer * writer=0x027e21c8,
const axutil_env * env=0x0172b450, char * prefix=0x00000000, char * namespace_uri=0x027e8f90)
 Line 173	C
 	axiom.dll!axiom_output_write(axiom_output * om_output=0x027eafb8, const axutil_env * env=0x0172b450,
axiom_types_t type=AXIOM_NAMESPACE, int no_of_args=2, ...)  Line 532 + 0x17 bytes	C
 	axiom.dll!axiom_namespace_serialize(axiom_namespace * om_namespace=0x027e8970, const axutil_env
* env=0x0172b450, axiom_output * om_output=0x027eafb8)  Line 194 + 0x23 bytes	C
 	axiom.dll!axiom_element_serialize_start_part(axiom_element * om_element=0x027e8340, const
axutil_env * env=0x0172b450, axiom_output * om_output=0x027eafb8, axiom_node * ele_node=0x027e7d88)
 Line 805 + 0x11 bytes	C
 	axiom.dll!axiom_node_serialize(axiom_node * om_node=0x027e7d88, const axutil_env * env=0x0172b450,
axiom_output * om_output=0x027eafb8)  Line 383 + 0x18 bytes	C
 	axiom.dll!axiom_soap_envelope_serialize(axiom_soap_envelope * soap_envelope=0x027e5180,
const axutil_env * env=0x0172b450, axiom_output * om_output=0x027eafb8, int cache=0)  Line
330	C
 	axis2_http_sender.dll!axis2_libcurl_send(axis2_libcurl * data=0x0172ec40, axiom_output *
om_output=0x027eafb8, const axutil_env * env=0x0172b450, axis2_msg_ctx * msg_ctx=0x027e7fc8,
axiom_soap_envelope * out=0x027e5180, const char * str_url=0x0172b6a8, const char * soap_action=0x027ea180)
 Line 207	C
 	axis2_http_sender.dll!axis2_libcurl_http_send(axis2_libcurl * curl=0x0172ec40, axis2_http_sender
* sender=0x027da9b0, const axutil_env * env=0x0172b450, axis2_msg_ctx * msg_ctx=0x027e7fc8,
axiom_soap_envelope * out=0x027e5180, const char * str_url=0x0172b6a8, const char * soap_action=0x027ea180)
 Line 2355	C
 	axis2_http_sender.dll!axis2_http_transport_sender_write_message(axis2_transport_sender *
transport_sender=0x0172ebe8, const axutil_env * env=0x0172b450, axis2_msg_ctx * msg_ctx=0x027e7fc8,
axis2_endpoint_ref * epr=0x0172b4a8, axiom_soap_envelope * out=0x027e5180, axiom_output *
om_output=0x027eafb8)  Line 726 + 0x24 bytes	C
 	axis2_http_sender.dll!axis2_http_transport_sender_invoke(axis2_transport_sender * transport_sender=0x0172ebe8,
const axutil_env * env=0x0172b450, axis2_msg_ctx * msg_ctx=0x027e7fc8)  Line 310 + 0x1d bytes
C
 	axis2_engine.dll!axis2_engine_send(axis2_engine * engine=0x027e9de0, const axutil_env *
env=0x0172b450, axis2_msg_ctx * msg_ctx=0x027e7fc8)  Line 179	C
 	axis2_engine.dll!axis2_op_client_two_way_send(const axutil_env * env=0x0172b450, axis2_msg_ctx
* msg_ctx=0x027e7fc8)  Line 1134 + 0x11 bytes	C
 	axis2_engine.dll!axis2_op_client_execute(axis2_op_client * op_client=0x027e34e8, const axutil_env
* env=0x0172b450, const int block=1)  Line 483 + 0xd bytes	C
 	axis2_engine.dll!axis2_svc_client_send_receive_with_op_qname(axis2_svc_client * svc_client=0x01755028,
const axutil_env * env=0x0172b450, const axutil_qname * op_qname=0x027ea260, const axiom_node
* payload=0x027e7d88)  Line 807	C
 	mysqld.exe!axis2_stub_op_FramewareService_browse(axis2_stub * stub=0x0172b718, const axutil_env
* env=0x0172b450, adb_browse * _browse=0x027e4df0)  Line 829 + 0x18 bytes	C
...

So you can see that problem(1) in my issue description still applies.  You should be able
to verify by code inspection that problem (2) and problem (3) still apply as well.  I am able
to force the path through these by modifying the generated stub code to specify a prefix of
NULL/"" instead of "n" when declaring the namespace explicitly.  After applying the suggested
fix to problem (3), I still see the malformed XML described in problem  (2) above.  

> guththila_xml_writer has problems with default namespace
> --------------------------------------------------------
>
>                 Key: AXIS2C-834
>                 URL: https://issues.apache.org/jira/browse/AXIS2C-834
>             Project: Axis2-C
>          Issue Type: Bug
>          Components: guththila, xml/parser
>    Affects Versions: Current (Nightly)
>         Environment: Windows XP, Visual Studio 2005, guththila parser, libcurl transport
>            Reporter: Bill Mitchell
>         Attachments: guththila_xml_writer_diff, guththila_xml_writer_wrapper_diff
>
>
> The guththila xml writer appears to have several problems related to the default namespace.
 These appear when attempting to use the ADB stubs for the elements in the SOAP request messages,
as the Axis data bindings fill in the default namespace from the WSDL.  
> (1) In guththila_xml_writer_wrapper, guththila_xml_writer_wrap_namespace() has a comment
indicating that the prefix is null on the default namespace.  Yet it goes ahead and calls
guththila_write_namespace() which requires both a prefix and a namespace URI.  
> (2) In guththila_xml_wrapper.c, the routine guththila_write_start_element_with_namespace()
does not understand the default namespace.  It searches the table of namespaces to determine
the prefix that goes with this namespace.  If the namespace is not found, no XML is generated,
so no element is started although the outer code assumes it is.  This results in malformed
XML as below:
> <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
> <soapenv:Header></soapenv:Header>
> <soapenv:Body name="customer" exemplarHandle="master" xmlns="http://frameware.xcentrisity.com/services/"></soapenv:Body>
> </soapenv:Envelope></
> Yes, the trailing </ is not a typo.  When the XML writer tries to close off 3 elements
in the stack without having started one of the elements, this is the outcome.  
> (3) After fixing the above problems, I discovered that the generated XML for the element
inside the SOAP Body incorrectly had the URI of the namespace as the name of the element,
rather than the name itself.  I.e., the message contained a structure like:
> <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
> <soapenv:Header></soapenv:Header>
> <soapenv:Body>
> <http://frameware.xcentrisity.com/services/ name="customer" exemplarHandle="master"
xmlns="http://frameware.xcentrisity.com/services/"></http://frameware.xcentrisity.com/services/>
> </soapenv:Body>
> </soapenv:Envelope>
> The problem is that guththila_xml_writer_wrapper_start_element_with_namespace() is not
flipping the order of the parameters as is correctly done in guththila_xml_writer_wrapper_start_element_with_namespace_prefix().
 

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.


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


Mime
View raw message