Re: Problem deserializing SOAP response in Axis C++ client
We seem to have a problem with encoding. There are few Jira issues on this. We got to look into XML encoding to solve this problem. Samisa... On 8/6/05, [EMAIL PROTECTED] [EMAIL PROTECTED] wrote: OK, I think I see my mistake. The SOAP response sent by the webservice has character entities (lt; and gt;) instead ofin its xml tags. Thus the line result xsi:type=xsd:stringTEST/result is actually - lt;result xsi:type=xsd:stringgt;TESTlt;/resultgt; SOAP Response from webservice env:Envelope xmlns:env = http://schemas.xmlsoap.org/soap/envelope/; xmlns:xsi = http://www.w3.org/2001/XMLSchema-instance; xmlns:soapenc = http://schemas.xmlsoap.org/soap/encoding/; xmlns:xsd = http://www.w3.org/2001/XMLSchema; env:Body n1:lookupProductResponse xmlns:n1 = http://www.cardinal.com/distribution/webservices;lt;result xsi:type=xsd:stringgt;TESTlt;/resultgt;/n1:lookupProductResponse /env:Body /env:Envelope Any idea how to enable parsing of character entity tags as xml nodes in Axis C++ (actually xerces 2.6) client? There is a function setCreateEntityReferenceNodes(bool) mentioned axis docs (%AXIS_EXTRACT%/xerces-c_2_6_0-windows_nt-msvc_60/doc/html/apiDocs/classAbstractDOMParser.html#z452_5), can this be used in this case? Thanks, Linesh From: [EMAIL PROTECTED] [mailto:[EMAIL PROTECTED] Sent: Friday, August 05, 2005 3:20 PM To: axis-c-user@ws.apache.org Subject: RE: Problem deserializing SOAP response in Axis C++ client Hi Dushshantha, Please find the attached wsdl. When debugged AxisXmlParserXerces code with a xerces-c_2_6D.dll, it stopped throwing exception like xerces-c_2_2_0.dll (the dll which I was using earlier). However, getElementAsString() is now returning 0 value after deserializing result xsi:type=xsd:stringTEST/result. Some pointers - In getElementAsString() function, getXSDType() (SoapDeSerializer.cpp: line # 3110) returns XSD_UNKNOWN. This ultimately results in returning 0 from getElementString (instead of TEST). At line # 3106 in SoapDeSerializer.cpp (m_pNode = m_pParser-next ()) the m_type of node pointer shows END_ELEMENT instead of expected START_ELEMENT. This results in returning type as XSD_UNKNOWN. Also, for some reason pElement-m_pchAttributes array also shows up empty in getXSDType() function. This seems to be a bug. If so, is there any work already done on it? Thanks regards, Linesh From: Dushshantha Chandradasa [mailto:[EMAIL PROTECTED] Sent: Friday, August 05, 2005 1:08 PM To: Apache AXIS C User List Subject: RE: Problem deserializing SOAP response in Axis C++ client Hi Linesh, It would be better if you can attach the wsdl file you are using for that then I can generate the client and test with MockServer. And you can use MockServer for Client side testing. Please refer to ..\ws-axis\c\tests\auto_build\UnitTest_Readme.txt for more information. Thanks, Dushshantha From: [EMAIL PROTECTED] [mailto:[EMAIL PROTECTED] Sent: Friday, August 05, 2005 10:23 AM To: axis-c-user@ws.apache.org Subject: Problem deserializing SOAP response in Axis C++ client Hi, I am trying to communicate with a J2EE webservice running on Bea Weblogic webserver 8.1 SP3. The client side has Axis C++. I am getting error while reading the SOAP response sent by the webservice. The exception occurs on calling getElementAsString function (after checkMessage return successful, line 3105: at m_pNode = m_pParser-next ()). The code is exactly similar to the one provided with C++ samples. if (AXIS_SUCCESS != m_pCall-initialize(CPP_RPC_PROVIDER)) return *Ret; if (NULL==m_pCall-getTransportProperty(SOAPAction,false)) { m_pCall-setTransportProperty(SOAPACTION_HEADER , ProductLookupService#lookupProduct); } m_pCall-setSOAPVersion(SOAP_VER_1_1); setUsername(user); setPassword(password); m_pCall-setOperation(lookupProduct, http://localhost/distribution/webservices;); applyUserPreferences(); m_pCall-addParameter((void*)lpParam, xmlRequest, XSD_STRING); if (AXIS_SUCCESS == m_pCall-invoke()) { if(AXIS_SUCCESS==m_pCall-checkMessage(lookupProductResponse, http://www.cardinal.com/distribution/webservices;)) { char sTemp[1024]=; sprintf(sTemp, m_pCall-getElementAsString(result, 0));// EXCEPTION THROWN HERE*** } The response received is as below (Trapped using Mindreef SOAPScope). Request sent (It sends an XML string in parameter xmlRequest) - ?xml version='1.0' encoding='utf-8' ? SOAP-ENV:Envelope xmlns:SOAP-ENV=http://schemas.xmlsoap.org/soap/envelope
RE: Problem deserializing SOAP response in Axis C++ client
OK, I think I see my mistake. The SOAP response sent by the webservice has character entities (lt; and gt;) instead of "" "" in its xml tags. Thus the line result xsi:type="xsd:string"TEST/result is actually - lt;result xsi:type="xsd:string"gt;TESTlt;/resultgt; SOAP Response from webservice env:Envelope xmlns:env = "http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance" xmlns:soapenc = "http://schemas.xmlsoap.org/soap/encoding/" xmlns:xsd = "http://www.w3.org/2001/XMLSchema" env:Body n1:lookupProductResponse xmlns:n1 = "http://www.cardinal.com/distribution/webservices"lt;result xsi:type="xsd:string"gt;TESTlt;/resultgt;/n1:lookupProductResponse /env:Body/env:Envelope Any ideahow to enable parsing of character entity tagsasxml nodesin Axis C++ (actually xerces 2.6) client? There is a function setCreateEntityReferenceNodes(bool) mentioned axis docs (%AXIS_EXTRACT%/xerces-c_2_6_0-windows_nt-msvc_60/doc/html/apiDocs/classAbstractDOMParser.html#z452_5), can this be used in this case? Thanks, Linesh From: [EMAIL PROTECTED] [mailto:[EMAIL PROTECTED] Sent: Friday, August 05, 2005 3:20 PMTo: axis-c-user@ws.apache.orgSubject: RE: Problem deserializing SOAP response in Axis C++ client Hi Dushshantha, Please find the attached wsdl. When debugged AxisXmlParserXerces code with a xerces-c_2_6D.dll, itstopped throwing exception like xerces-c_2_2_0.dll (the dll which I was using earlier). However, getElementAsString() is now returning 0 value after deserializing result xsi:type="xsd:string"TEST/result. Some pointers - In getElementAsString() function,getXSDType() (SoapDeSerializer.cpp: line # 3110)returns XSD_UNKNOWN. This ultimately results in returning 0 from getElementString (instead of "TEST"). At line # 3106 in SoapDeSerializer.cpp(m_pNode = m_pParser-next ()) the m_type of node pointer shows END_ELEMENT instead of expected START_ELEMENT. This results in returning type as XSD_UNKNOWN. Also, for some reason pElement-m_pchAttributes array also shows up empty in getXSDType() function. This seems to be a bug.If so, is there any work already done on it? Thanks regards, Linesh From: Dushshantha Chandradasa [mailto:[EMAIL PROTECTED] Sent: Friday, August 05, 2005 1:08 PMTo: Apache AXIS C User ListSubject: RE: Problem deserializing SOAP response in Axis C++ client Hi Linesh, It would be better if you can attach the wsdl file you are using for that then I can generate the client and test with MockServer. And you can use MockServer for Client side testing. Please refer to ..\ws-axis\c\tests\auto_build\UnitTest_Readme.txt for more information. Thanks, Dushshantha From: [EMAIL PROTECTED] [mailto:[EMAIL PROTECTED] Sent: Friday, August 05, 2005 10:23 AMTo: axis-c-user@ws.apache.orgSubject: Problem deserializing SOAP response in Axis C++ client Hi, I am trying to communicate with a J2EE webservice running on Bea Weblogic webserver 8.1 SP3.The client side has Axis C++. I am getting error while reading the SOAP response sent by the webservice. Theexception occurs on calling getElementAsString function (after checkMessage return successful, line 3105: atm_pNode = m_pParser-next ()). The code is exactly similar to the one provided with C++ samples. if (AXIS_SUCCESS != m_pCall-initialize(CPP_RPC_PROVIDER)) return *Ret; if (NULL==m_pCall-getTransportProperty("SOAPAction",false)){m_pCall-setTransportProperty(SOAPACTION_HEADER , "ProductLookupService#lookupProduct");}m_pCall-setSOAPVersion(SOAP_VER_1_1); setUsername("user");setPassword("password"); m_pCall-setOperation("lookupProduct", "http://localhost/distribution/webservices");applyUserPreferences();m_pCall-addParameter((void*)lpParam, "xmlRequest", XSD_STRING);if (AXIS_SUCCESS == m_pCall-invoke()) { if(AXIS_SUCCESS==m_pCall-checkMessage("lookupProductResponse","http://www.cardinal.com/distribution/webservices")){char sTemp[1024]="";sprintf(sTemp, m_pCall-getElementAsString("result", 0)); // EXCEPTION THROWN HERE***} The response received is as below (Trapped using Mindreef SOAPScope). Request sent (It sends an XML string in parameter "xmlRequest") - ?xml version='1.0' encoding='utf-8' ?SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"SOAP-ENV:Bodyns1:lookupProduct xmlns:ns1="http://www.cardinal.com/distribution/webservices"xmlRequest xsi:type="xsd:string" ciar:Produ
RE: Problem deserializing SOAP response in Axis C++ client
Hi Linesh, It would be better if you can attach the wsdl file you are using for that then I can generate the client and test with MockServer. And you can use MockServer for Client side testing. Please refer to ..\ws-axis\c\tests\auto_build\UnitTest_Readme.txt for more information. Thanks, Dushshantha From: [EMAIL PROTECTED] [mailto:[EMAIL PROTECTED] Sent: Friday, August 05, 2005 10:23 AM To: axis-c-user@ws.apache.org Subject: Problem deserializing SOAP response in Axis C++ client Hi, I am trying to communicate with a J2EE webservice running on Bea Weblogic webserver 8.1 SP3.The client side has Axis C++. I am getting error while reading the SOAP response sent by the webservice. Theexception occurs on calling getElementAsString function (after checkMessage return successful, line 3105: atm_pNode = m_pParser-next ()). The code is exactly similar to the one provided with C++ samples. if (AXIS_SUCCESS != m_pCall-initialize(CPP_RPC_PROVIDER)) return *Ret; if (NULL==m_pCall-getTransportProperty(SOAPAction,false)) { m_pCall-setTransportProperty(SOAPACTION_HEADER , ProductLookupService#lookupProduct); } m_pCall-setSOAPVersion(SOAP_VER_1_1); setUsername(user); setPassword(password); m_pCall-setOperation(lookupProduct, http://localhost/distribution/webservices); applyUserPreferences(); m_pCall-addParameter((void*)lpParam, xmlRequest, XSD_STRING); if (AXIS_SUCCESS == m_pCall-invoke()) { if(AXIS_SUCCESS==m_pCall-checkMessage(lookupProductResponse,http://www.cardinal.com/distribution/webservices)) { char sTemp[1024]=; sprintf(sTemp, m_pCall-getElementAsString(result, 0)); // EXCEPTION THROWN HERE*** } The response received is as below (Trapped using Mindreef SOAPScope). Request sent (It sends an XML string in parameter xmlRequest) - ?xml version='1.0' encoding='utf-8' ? SOAP-ENV:Envelope xmlns:SOAP-ENV=http://schemas.xmlsoap.org/soap/envelope/ xmlns:xsd=http://www.w3.org/2001/XMLSchema xmlns:xsi=http://www.w3.org/2001/XMLSchema-instance SOAP-ENV:Body ns1:lookupProduct xmlns:ns1=http://www.cardinal.com/distribution/webservices xmlRequest xsi:type=xsd:string ciar:ProductLookupRequest xmlns:ciar=http://ws.cardinal.com/2004/ProductLookupRequest_1_0.xsdProductLookupRequestHeaderTransactionIdAB1234CDEF1A3/TransactionIdClientIdIVR/ClientId/ProductLookupRequestHeaderProductLookupCriteriaListProductLookupCriteriaItemNumber1/ItemNumberItemNumberTypeNDC_UPC/ItemNumberTypeShipToCustomerNumber475744/ShipToCustomerNumberDivisionNumber11/DivisionNumberQuantity1/QuantityUnitOfMeasureEA/UnitOfMeasure/ProductLookupCriteria/ProductLookupCriteriaList/ciar:ProductLookupRequest /xmlRequest /ns1:lookupProduct /SOAP-ENV:Body /SOAP-ENV:Envelope Rsposne received (Output parameter name is result)- env:Envelope xmlns:env=http://schemas.xmlsoap.org/soap/envelope/ xmlns:xsi=http://www.w3.org/2001/XMLSchema-instance xmlns:soapenc=http://schemas.xmlsoap.org/soap/encoding/ xmlns:xsd=http://www.w3.org/2001/XMLSchema env:Body n1:lookupProductResponse xmlns:n1=http://www.cardinal.com/distribution/webservices result xsi:type=xsd:stringTEST/result /n1:lookupProductResponse /env:Body /env:Envelope Thanksin advance, LineshMahadik Confidentiality Notice The information contained in this electronic message and any attachments to this message are intended for the exclusive use of the addressee(s) and may contain confidential or privileged information. If you are not the intended recipient, please notify the sender at Wipro or [EMAIL PROTECTED] immediately and destroy all copies of this message and any attachments.
RE: Problem deserializing SOAP response in Axis C++ client
Hi Dushshantha, Please find the attached wsdl. When debugged AxisXmlParserXerces code with a xerces-c_2_6D.dll, itstopped throwing exception like xerces-c_2_2_0.dll (the dll which I was using earlier). However, getElementAsString() is now returning 0 value after deserializing result xsi:type="xsd:string"TEST/result. Some pointers - In getElementAsString() function,getXSDType() (SoapDeSerializer.cpp: line # 3110)returns XSD_UNKNOWN. This ultimately results in returning 0 from getElementString (instead of "TEST"). At line # 3106 in SoapDeSerializer.cpp(m_pNode = m_pParser-next ()) the m_type of node pointer shows END_ELEMENT instead of expected START_ELEMENT. This results in returning type as XSD_UNKNOWN. Also, for some reason pElement-m_pchAttributes array also shows up empty in getXSDType() function. This seems to be a bug.If so, is there any work already done on it? Thanks regards, Linesh From: Dushshantha Chandradasa [mailto:[EMAIL PROTECTED] Sent: Friday, August 05, 2005 1:08 PMTo: Apache AXIS C User ListSubject: RE: Problem deserializing SOAP response in Axis C++ client Hi Linesh, It would be better if you can attach the wsdl file you are using for that then I can generate the client and test with MockServer. And you can use MockServer for Client side testing. Please refer to ..\ws-axis\c\tests\auto_build\UnitTest_Readme.txt for more information. Thanks, Dushshantha From: [EMAIL PROTECTED] [mailto:[EMAIL PROTECTED] Sent: Friday, August 05, 2005 10:23 AMTo: axis-c-user@ws.apache.orgSubject: Problem deserializing SOAP response in Axis C++ client Hi, I am trying to communicate with a J2EE webservice running on Bea Weblogic webserver 8.1 SP3.The client side has Axis C++. I am getting error while reading the SOAP response sent by the webservice. Theexception occurs on calling getElementAsString function (after checkMessage return successful, line 3105: atm_pNode = m_pParser-next ()). The code is exactly similar to the one provided with C++ samples. if (AXIS_SUCCESS != m_pCall-initialize(CPP_RPC_PROVIDER)) return *Ret; if (NULL==m_pCall-getTransportProperty("SOAPAction",false)){m_pCall-setTransportProperty(SOAPACTION_HEADER , "ProductLookupService#lookupProduct");}m_pCall-setSOAPVersion(SOAP_VER_1_1); setUsername("user");setPassword("password"); m_pCall-setOperation("lookupProduct", "http://localhost/distribution/webservices");applyUserPreferences();m_pCall-addParameter((void*)lpParam, "xmlRequest", XSD_STRING);if (AXIS_SUCCESS == m_pCall-invoke()) { if(AXIS_SUCCESS==m_pCall-checkMessage("lookupProductResponse","http://www.cardinal.com/distribution/webservices")){char sTemp[1024]="";sprintf(sTemp, m_pCall-getElementAsString("result", 0)); // EXCEPTION THROWN HERE***} The response received is as below (Trapped using Mindreef SOAPScope). Request sent (It sends an XML string in parameter "xmlRequest") - ?xml version='1.0' encoding='utf-8' ?SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"SOAP-ENV:Bodyns1:lookupProduct xmlns:ns1="http://www.cardinal.com/distribution/webservices"xmlRequest xsi:type="xsd:string" ciar:ProductLookupRequest xmlns:ciar="http://ws.cardinal.com/2004/ProductLookupRequest_1_0.xsd"ProductLookupRequestHeaderTransactionIdAB1234CDEF1A3/TransactionIdClientIdIVR/ClientId/ProductLookupRequestHeaderProductLookupCriteriaListProductLookupCriteriaItemNumber1/ItemNumberItemNumberTypeNDC_UPC/ItemNumberTypeShipToCustomerNumber475744/ShipToCustomerNumberDivisionNumber11/DivisionNumberQuantity1/QuantityUnitOfMeasureEA/UnitOfMeasure/ProductLookupCriteria/ProductLookupCriteriaList/ciar:ProductLookupRequest /xmlRequest/ns1:lookupProduct/SOAP-ENV:Body/SOAP-ENV:Envelope Rsposne received (Output parameter name is "result")- env:Envelope xmlns:env="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" xmlns:xsd="http://www.w3.org/2001/XMLSchema"env:Body n1:lookupProductResponse xmlns:n1="http://www.cardinal.com/distribution/webservices" result xsi:type="xsd:string"TEST/result /n1:lookupProductResponse/env:Body/env:Envelope Thanksin advance, LineshMahadik Confidentiality Notice The information contained in this electronic message and any attachments to this message are intendedfor the exclusive use of the addressee(s) and may contain confidential or privileged