gSOAP 2.5.1 (and higher) WS-I Basic Profile 1.0a Compliance Report

The gSOAP 2.5.1 (and higher) compiler automatically reports Basic Profile compliance warnings to inform the developer about potential interoperability problems before building an application and deploying it. Below follows a check list for application developers. Items indicated in Yellow and Red may need attention.

Legend:
passedCompliance is guaranteed
passedCompliance is guaranteed, but some actions MAY be required by developers
supportedIn principle supports the compliance claim, but REQUIRES some customization by developers
N/ANot applicable

ResolutionStatusCommentAction
R0001passedAutomated
R0002passedNote: conformance claims are not included in messages and documents
R0003passedNote: conformance claims are not included in messages and documents
R0004passedNote: conformance claims are not included in messages and documents
R0005passedNote: conformance claims are not included in messages and documents
R0006passedNote: conformance claims are not included in messages and documents
R0007passedNote: conformance claims are not included in messages and documents
R1000passedAutomated
R1001passedAutomated
R1002passedAutomated
R1003passedAttributes in Fault detail element are ignorednote 1
R1004passedAutomated
R1005passedApplications MUST use literal encodingnote 2
R1006passedAutomated
R1007passedAutomated
R1008passedAutomated
R1009passedAutomated
R1010passedAutomated
R1011passedApplications MUST use literal encoding or SOAP 1.2note 2
R1012passedAutomated
R1013passedAutomated
R1014passedAutomated
R1015passedRelaxed requirement: gSOAP supports SOAP 1.1 and 1.2 Envelopes
R1016passedNote: xml:lang attribute is accepted but not used
R1017passedAutomated
R1018passedAutomated
R1025passedSOAP Header information MUST be processed first before handling Body datanote 4
R1027passedAutomated
R1028passedAutomated
R1029passedAutomated
R1030passedAutomated
R1031passedAutomated
R1107passedAutomated
R1108passedAutomated
R1109passedAutomated
R1110passedAutomated
R1111passedAutomated
R1112passedAutomated
R1113passedAutomated
R1114passedNote: HTTP 405 code is not used by gSOAP (applications MAY use HTTP 405)
R1115passedNote: HTTP 415 code is not used by gSOAP (applications MAY use HTTP 415)
R1119passedAutomated
R1120passedAutomated
R1121passedAutomated
R1122passedApplications SHOULD NOT use HTTP cookies. gSOAP uses older RFC2109 (compliance requires RFC2965)note 5
R1123passedAutomated
R1124passedAutomated
R1125passedAutomated
R1126passedAutomated
R1130passedAutomated
R1131supportedClient applications SHOULD redirect to new endpoint address upon receiving HTTP 307 code (note: HTTP 307 security flaws are not addressed by BP1.0)note 6
R1132passedAutomated
R1140passedAutomated
R1141passedAutomated
R2001passedAutomated
R2002passedAutomated
R2003passedAutomated
R2004passedAutomated
R2005passedAutomated
R2007passedAutomated
R2008passedAutomated
R2009passedAutomated
R2010passedAutomated
R2011passedAutomated
R2020passedAutomated
R2021passedAutomated
R2022passedAutomated
R2023passedAutomated
R2024passedAutomated
R2025passedAutomated
R2026passedAutomated
R2027passedAutomated
R2028passedAutomated
R2029passedAutomated
R2101passedAutomated
R2102passedAutomated
R2105passedAutomated
R2110passedApplications MUST NOT use SOAP arraysnote 3
R2111passedApplications MUST NOT use SOAP arraysnote 3
R2112passedApplications MUST NOT use SOAP arraysnote 3
R2113passedApplications MUST NOT use SOAP arraysnote 3
R2114passedAutomated
R2201passedAutomated
R2202passedAutomated
R2203passedAutomated
R2204passedAutomated
R2205passedAutomated (gSOAP 2.5.1 and higher)
R2206passedAutomated
R2207passedAutomated
R2208passedAutomated
R2209passedAutomated
R2210passedAutomated
R2211passedAutomated
R2301passedAutomated
R2302passedAutomated
R2303passedAutomated
R2304passedNote: Server applications MUST NOT support polymorphic operations (polymorphic data is OK)
R2305passedAutomated
R2306passedAutomated
R2401passedAutomated
R2701passedAutomated
R2702passedAutomated
R2705passedApplications MUST use literal encodingnote 2
R2707passedNote: SOAP Fault, Header, Headerfault are literal
R2709passedAutomated
R2710passedAutomated
R2711passedServer applications MAY NOT use the same endpoint address for different WSDL service portsnote 8
R2712passedDeveloper: need to look into details
R2714passedgSOAP supports one-way synchronous (interoperable) and asynchronous callsnote 9
R2716passedAutomated
R2717passedAutomated
R2718passedAutomated
R2719passedAutomated
R2720passedAutomated
R2721passedAutomated
R2722passedAutomated
R2723passedApplications MUST use literal encodingnote 2
R2724passedAutomated
R2725passedAutomated
R2726passedAutomated
R2727passedgSOAP supports one-way synchronous (interoperable) and asynchronous callsnote 9
R2728passedAutomated
R2729passedAutomated
R2735passedAutomated
R2737passedAutomated
R2738passedApplications MUST send all of the designated SOAP Headers for those operations that have SOAP Header data associated with themnote 7
R2739passedNote: extra SOAP Headers are ignored and mustUnderstand rules are implemented
R2740passedAutomated
R2741passedAutomated
R2742passedNote: extra SOAP detail elements are handled
R2743passedAutomated
R2744passedAutomated
R2745passedAutomated
R2747passedAutomated
R2748passedAutomated
R2749passedAutomated
R2750passedAutomated
R2751passedAutomated
R2752passedAutomated
R2753passedAutomated
R2754passedAutomated
R2800passedAutomated
R2801passedAutomated
R3002N/ANote: no UDDI implementation
R3003N/ANote: no UDDI implementation
R3004N/ANote: no UDDI implementation
R3005N/ANote: no UDDI implementation
R3010N/ANote: no UDDI implementation
R3011N/ANote: no UDDI implementation
R3020N/ANote: no UDDI implementation
R3021N/ANote: no UDDI implementation
R3030N/ANote: no UDDI implementation
R3100N/ANote: no UDDI implementation
R4001passedAutomated
R4002passedAutomated
R4003passedAutomated
R4004passedAutomated
R5000passedAutomated
R5001passedAutomated

Note 1
Specify the required attributes in the SOAP_ENV__Detail struct:
struct SOAP_ENV__Detail
{ @char *someAttribute; // the attribute
  int __type;
  void *value;
  _XML __any;
};
Note 2
Existing applications that use SOAP encoding and that are developed from a WSDL specification (e.g. using wsdl2h) MUST use SOAP encoding and SHOULD NOT use literal encoding to avoid communication protocol mismatches. For new applications however, SOAP RPC/DOC literal SHOULD be considered for compliance with Basic Profile 1.0a. See the gSOAP documentation on the //gsoap ns service encoding: and //gsoap ns service method-encoding: directives.
Note 3
Existing applications that depend on SOAP arrays and that are developed from a WSDL specification (e.g. using wsdl2h) MUST use the SOAP arrays. For new applications however, other data containers should be considered, such as STL vectors or non-SOAP arrays specified as:
struct ns1__FloatArray
{ int __size; // array size
  float *item; // pointer to first array element
};
This defines a new ns1 schema complexType.
Note 4
Applications can use a get() method with the SOAP Header class or the application MUST make sure to process the known header info in the service method implementation before processing the data of the SOAP body.
Note 5
Applications MAY use cookies but SHOULD NOT rely on them for state management.
Note 6
See the gSOAP documentation on HTTP 307 Temporary Redirect.
Note 7
Set the soap.header to the relevant Header struct/class instantiation containing the mandatory header info. The header info can be found with the service method definitions in the gSOAP header file.
Note 8
Avoid using the same endpoint for different services. In a gSOAP header file, all service methods associated with a service namespace can use the same endpoint address. However, service methods in different service namespaces SHOULD NOT use the same endpoint address.
Incorrect:
//gsoap ns1 service endpoint: http://xyz
int ns1__method1(...);
int ns1__method2(...);
...
//gsoap ns2 service endpoint: http://xyz
int ns2__method1(...);
int ns2__method2(...);
...
Correct:
//gsoap ns1 service endpoint: http://abc
int ns1__method1(...);
int ns1__method2(...);
...
//gsoap ns2 service endpoint: http://xyz
int ns2__method1(...);
int ns2__method2(...);
...
Note 9
One-way messaging in gSOAP is supported in two different modes: synchronous request-response message pairs and asynchronous one-way message passing. The former mode is interoperable. However, the latter mode is used by default in gSOAP because it is more flexible by enabling customization of more intricate message exchange patterns. Some customization is necessary to achieve interoperability for one-way messages, which are defined as a function prototype with void response parameter in the gSOAP header file, for example:
int ns__event(enum ns__Event event, void);
Client-side C code:
if (soap_send_ns__event(soap, eventNo) != SOAP_OK || soap_recv_empty_response(soap) != SOAP_OK)
  soap_print_fault(soap, stderr);
Client-side C++ code using proxy:
Event server;
if (server.ns__event(eventNO) != SOAP_OK || soap_recv_empty_response(server.soap) != SOAP_OK)
  soap_print_fault(server.soap, stderr);
Server-side code:
int ns__event(struct soap *soap, enum ns__Event event)
{ ...
  return soap_send_empty_response(soap); // use this instead of SOAP_OK
}