0

Whenever I try to execute a service getContractHdr using online test tools like :

http://www.soapclient.com/soaptest.html

I get the error listed below. The type (of inTENANTREFNO ) is an INTEGER. Even when I place something like 33 in for the field inTENANTREFNO, I still get the error of "type mismatch". Additionally, the message states that the variable inTENANTREFNO is associated with the namespace of am but I do not see why gsoap is making this assignment.

Question

How can I fix this so that I no longer get the error? Is there a way to configure this so that the namespaces are not used at all? Why am I getting it in the first place? I have seen this message here but it is not clear as to whether or not implementing this would resolve the problem in this case

Note: All works fine whenever I use the sample generated .xml files. I fill out the fields of course.The service runs and I get data (correct) back. I execute it with "ServerName < testfile.xml"

When I attempt to execute the service from one of the online testing areas (as mentioned above). It does not work citing a "type mismatch".

<SOAP-ENV:Envelope
  xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"
  xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xmlns:xsd="http://www.w3.org/2001/XMLSchema"
  xmlns:ns="urn:conmony">
 <SOAP-ENV:Body>
  <ns:getContractHdr>
   <ns:inLogonID></ns:inLogonID>
   <ns:inLogonPassword></ns:inLogonPassword>
   <ns:inTENANTREFNO>0</ns:inTENANTREFNO>
   <ns:incallhost></ns:incallhost>
   <ns:incallpid>0</ns:incallpid>
   <ns:incallfilename></ns:incallfilename>
   <ns:incalllineno>0</ns:incalllineno>
  </ns:getContractHdr>
 </SOAP-ENV:Body>
</SOAP-ENV:Envelope>

Error message

SOAP-ENV:ClientValidation constraint violation: invalid value in element 'am:inTENANTREFNO'

Error Message With SOAP Fault

<?xml version="1.0" encoding="UTF-8"?>
<SOAP-ENV:Envelope xmlns:am="urn:conmony" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/" xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/">
<SOAP-ENV:Body>
<SOAP-ENV:Fault>
<faultcode>SOAP-ENV:Client</faultcode>
<faultstring>Validation constraint violation: invalid value in element 'am:inTENANTREFNO'</faultstring>
</SOAP-ENV:Fault>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>

Ran soapcpp2 -c -n -pdukmony - AND - soapcpp2 -c on a file with the contents below

//gsoap am service name: conmony 
//gsoap am service style: document 
//gsoap am service encoding: literal 
//gsoap am service location: http://99.33.23.2232:8075 
//gsoap am schema  namespace: urn:conmony

typedef char            *xsd__string; 
typedef char            *xsd__anyURI; 
typedef float           xsd__float; 
typedef long            xsd__int; 
typedef double          xsd__double; 
typedef unsigned        long long xsd__positiveInteger;

typedef struct  am__struct_DBCONTRACTHDR{
        xsd__int        TENANTREFNO;
        xsd__string     FirstName;
        xsd__string     MiddleName;
        xsd__string     LastName;
        xsd__string     EMail;
        xsd__string     CellPhoneNo;
        xsd__string     HomePhoneNo;
        xsd__string     AsgnLogonID;
        xsd__string     WebPicLocation;
        xsd__int        ReturnCode;
        xsd__double     KeyID;
        xsd__string     Message; };

typedef struct am__CONTRACTHDRItems {
        struct am__struct_DBCONTRACTHDR  *__ptr;
        int __size;
        int __offset; };
inTENANTREFNO
int am__getContractHdr(
        xsd__int        inTENANTREFNO,
        xsd__string     inLogonID,
        xsd__string     inLogonPassword,
        xsd__string     incallhost,
        xsd__int        incallpid,
        xsd__string     incallfilename,
        xsd__int        incalllineno,
        struct am__CONTRACTHDRItems *DBListing);

The result is the conmony.wsdl file

<definitions xmlns:tns="urn:conmony/conmony.wsdl" xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:am="urn:conmony" xmlns:SOAP="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:HTTP="http://schemas.xmlsoap.org/wsdl/http/" xmlns:MIME="http://schemas.xmlsoap.org/wsdl/mime/" xmlns:DIME="http://schemas.xmlsoap.org/ws/2002/04/dime/wsdl/" xmlns:WSDL="http://schemas.xmlsoap.org/wsdl/" xmlns="http://schemas.xmlsoap.org/wsdl/" name="conmony" targetNamespace="urn:conmony/conmony.wsdl">
<types>
<schema xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:am="urn:conmony" xmlns="http://www.w3.org/2001/XMLSchema" targetNamespace="urn:conmony" elementFormDefault="qualified" attributeFormDefault="unqualified">
<import namespace="http://schemas.xmlsoap.org/soap/encoding/"/>
<complexType name="struct-DBCONTRACTHDR">
<!--  am__struct_DBCONTRACTHDR  -->
<sequence>
<element name="TENANTREFNO" type="xsd:int" minOccurs="1" maxOccurs="1"/>
<!--  am__struct_DBCONTRACTHDR::TENANTREFNO  -->
<element name="FirstName" type="xsd:string" minOccurs="0" maxOccurs="1" nillable="true"/>
<!--  am__struct_DBCONTRACTHDR::FirstName  -->
<element name="MiddleName" type="xsd:string" minOccurs="0" maxOccurs="1" nillable="true"/>
<!--  am__struct_DBCONTRACTHDR::MiddleName  -->
<element name="LastName" type="xsd:string" minOccurs="0" maxOccurs="1" nillable="true"/>
<!--  am__struct_DBCONTRACTHDR::LastName  -->
<element name="EMail" type="xsd:string" minOccurs="0" maxOccurs="1" nillable="true"/>
<!--  am__struct_DBCONTRACTHDR::EMail  -->
<element name="CellPhoneNo" type="xsd:string" minOccurs="0" maxOccurs="1" nillable="true"/>
<!--  am__struct_DBCONTRACTHDR::CellPhoneNo  -->
<element name="HomePhoneNo" type="xsd:string" minOccurs="0" maxOccurs="1" nillable="true"/>
<!--  am__struct_DBCONTRACTHDR::HomePhoneNo  -->
<element name="AsgnLogonID" type="xsd:string" minOccurs="0" maxOccurs="1" nillable="true"/>
<!--  am__struct_DBCONTRACTHDR::AsgnLogonID  -->
<element name="WebPicLocation" type="xsd:string" minOccurs="0" maxOccurs="1" nillable="true"/>
<!--  am__struct_DBCONTRACTHDR::WebPicLocation  -->
<element name="ReturnCode" type="xsd:int" minOccurs="1" maxOccurs="1"/>
<!--  am__struct_DBCONTRACTHDR::ReturnCode  -->
<element name="KeyID" type="xsd:double" minOccurs="1" maxOccurs="1"/>
<!--  am__struct_DBCONTRACTHDR::KeyID  -->
<element name="Message" type="xsd:string" minOccurs="0" maxOccurs="1" nillable="true"/>
<!--  am__struct_DBCONTRACTHDR::Message  -->
</sequence>
</complexType>
<complexType name="CONTRACTHDRItems">
<!--  am__CONTRACTHDRItems  -->
<sequence>
<element name="item" type="am:struct-DBCONTRACTHDR" minOccurs="0" maxOccurs="unbounded" nillable="false"/>
</sequence>
</complexType>
<!--  operation request element  -->
<element name="getContractHdr">
<complexType>
<sequence>
<element name="inTENANTREFNO" type="xsd:int" minOccurs="1" maxOccurs="1"/>
<!--  am__getContractHdr::inTENANTREFNO  -->
<element name="inLogonID" type="xsd:string" minOccurs="0" maxOccurs="1" nillable="true"/>
<!--  am__getContractHdr::inLogonID  -->
<element name="inLogonPassword" type="xsd:string" minOccurs="0" maxOccurs="1" nillable="true"/>
<!--  am__getContractHdr::inLogonPassword  -->
<element name="incallhost" type="xsd:string" minOccurs="0" maxOccurs="1" nillable="true"/>
<!--  am__getContractHdr::incallhost  -->
<element name="incallpid" type="xsd:int" minOccurs="1" maxOccurs="1"/>
<!--  am__getContractHdr::incallpid  -->
<element name="incallfilename" type="xsd:string" minOccurs="0" maxOccurs="1" nillable="true"/>
<!--  am__getContractHdr::incallfilename  -->
<element name="incalllineno" type="xsd:int" minOccurs="1" maxOccurs="1"/>
<!--  am__getContractHdr::incalllineno  -->
</sequence>
</complexType>
</element>
<!--  operation response element  -->
<element name="getContractHdrResponse">
<complexType>
<sequence>
<element name="DBListing" type="am:CONTRACTHDRItems" minOccurs="0" maxOccurs="1" nillable="true"/>
<!--  am__getContractHdr::DBListing  -->
</sequence>
</complexType>
</element>
</schema>
</types>
<message name="getContractHdrRequest">
<part name="Body" element="am:getContractHdr"/>
<!--  am__getContractHdr::am__getContractHdr  -->
</message>
<message name="getContractHdrResponse">
<part name="Body" element="am:getContractHdrResponse"/>
</message>
<portType name="conmonyPortType">
<operation name="getContractHdr">
<documentation>Service definition of function am__getContractHdr</documentation>
<input message="tns:getContractHdrRequest"/>
<output message="tns:getContractHdrResponse"/>
</operation>
</portType>
<binding name="conmony" type="tns:conmonyPortType">
<SOAP:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/>
<operation name="getContractHdr">
<SOAP:operation soapAction=""/>
<input>
<SOAP:body parts="Body" use="literal"/>
</input>
<output>
<SOAP:body parts="Body" use="literal"/>
</output>
</operation>
</binding>
<service name="conmony">
<documentation>gSOAP 2.8.26 generated service definition</documentation>
<port name="conmony" binding="tns:conmony">
<SOAP:address location="http://99.33.23.2232:8075"/>
</port>
</service>
</definitions>

UPDATE: Changed header portion of file that soapcpp2 is ran upon to:

//gsoap ns service name: conmony Special SOAP SErvices
//gsoap ns service protocol:    SOAP
//gsoap ns service style: document
//gsoap ns service encoding: literal
//gsoap ns service namespace: http://99.33.23.2232:8075?conmony.wsdl
//gsoap ns service location:  http://99.33.23.2232:8075
//gsoap ns schema  namespace: urn:conmony

and still got the same issue But still getting data when filling out the sample req.xml files generated

<?xml version="1.0" encoding="UTF-8"?>
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:ns="urn:conmony"><SOAP-ENV:Body><ns:getContractHdrResponse><ns:DBListing><ns:item><ns:TENANTREFNO>8288</ns:TENANTREFNO><ns:FirstName>Test</ns:FirstName><ns:MiddleName></ns:MiddleName><ns:LastName>Last</ns:LastName><ns:EMail>testing@last.com</ns:EMail><ns:CellPhoneNo>210-444-2212</ns:CellPhoneNo><ns:HomePhoneNo>210-444-2212</ns:HomePhoneNo><ns:AsgnLogonID>w10testing</ns:AsgnLogonID><ns:WebPicLocation>stuff</ns:WebPicLocation><ns:ReturnCode>0</ns:ReturnCode><ns:KeyID>0.000000</ns:KeyID><ns:Message> testing ...</ns:Message></ns:item></ns:DBListing></ns:getContractHdrResponse></SOAP-ENV:Body></SOAP-ENV:Envelope>

Everything in the ".h file" and ".c" file was changed so that it used "ns" namespace and not the "am" namespace

Casey Harrils
  • 2,793
  • 12
  • 52
  • 93
  • The validation constrain violation arises when there is a mismatch between the xml content and the client wsdl. It would be useful to copy here the request xml. – thahgr May 30 '17 at 15:01
  • The testing is being ran with this tool: http://www.soapclient.com/soaptest.html - The wsdl file is listed above. This worked about a month ago - but no longer works now. There seems to be an issue with the namespaces (where it was not before). How can one compile this so that namespces are not an issue? – Casey Harrils May 30 '17 at 15:14
  • Was attempting to debug with client testing tools and saw the following as well: "Failed to execute 'write' on 'Document': It isn't possible to write into a document from an asynchronously-loaded external script unless it is explicitly opened." – Casey Harrils May 30 '17 at 15:24
  • BTW, this works *fine* whenever I use the sample xml files that have been generated. – Casey Harrils May 30 '17 at 15:25
  • i am not sure this has to do with namespaces, it seems the this web client does not produce the correct xml. I would suggest capturing the network traffic on the server side with a tool like tcpdump, so we can check exactly the request. – thahgr May 30 '17 at 15:43
  • for example, the error would appear if you didnt send the TENANTREFNO at all, and it is mandatory since its not nillable. – thahgr May 30 '17 at 15:44
  • 1
    Hi and thanks - to solve the problem, I changed the ".h" file so that it was similar to the one in the calc.h example. The only thing I changed was the name being used (it was not "calc" but "conmony". Then, I changed ALL of the services so that they were defined with "ns__" in the ".h" file and not "am__". Everything worked afterwards (though I do not understand why) – Casey Harrils Jun 02 '17 at 15:47
  • It helps to view the log files generated by the gSOAP engine (compile -DDEBUG to produce a server in DEBUG mode that saves log files). Perhaps the test XML doc is incorrect? Changing am__ to ns__ should not make a difference. Or perhaps the wrong .nsmap file is used in the code? Make sure to use the soapcpp2-generated .nsmap file and #include it in your code. This table binds prefixes such as "am" to the XML namespace URIs. – Dr. Alex RE Jun 06 '17 at 00:45

0 Answers0