SOAP message validation 400-error body or envelope problem

We’re facing a problem with a SOAP-service validation throwing a 400 bad request error. We are calling a service and using a passthrough-API in Apigee. The xml-message is coming from a backend system so we can’t change the xml of the request. What happens is that when we send the xml directly to the service we’re calling, everything is fine but the validation in Apigee seems to be more strict and throws the following error:

(((envelope not equals "Envelope") or ((body not equals "Body") or (messagevalidation.failed equals true))) and (request.verb not equals "GET"))

We are not allowed to turn the validation off and need to use the passthrough (company regulations). We tried some stuff by editing the wsdl within Apigee but not getting the desired result. We think it has to do with the definitions in the wsdl (about versioning?) but can’t get it right. Can anybody help us with this?

The top of the request-xml:

<?xml version="1.0" encoding="UTF-8"?> <soapenv:Envelope xmlns:soapenv="http://www.w3.org/2003/05/soap-envelope" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">     <soapenv:Body>         <FrissByXml4 xmlns="http://friss/qis/v1">             <username>***</username>             <password>***</password>             <resulttype>3</resulttype>             <xml>                 <frissRequest xmlns="">                     <externalIdentifier xsi:nil="true"/>... 

The wsdl-code:

<wsdl:definitions targetNamespace="http://friss/qis/v1" xmlns:s="http://www.w3.org/2001/XMLSchema" xmlns:soap12="http://schemas.xmlsoap.org/wsdl/soap12/" xmlns:tns="http://friss/qis/v1" xmlns:s1="http://friss/service/detectie/reply/v33" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/">  <wsdl:documentation xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/">Friss QIS Web Service</wsdl:documentation> <wsdl:types> <s:schema elementFormDefault="qualified" targetNamespace="http://friss/qis/v1"> <s:import namespace="http://friss/service/detectie/reply/v33"/> <s:complexType name="DetectionResponse"> <s:sequence> <s:element minOccurs="1" maxOccurs="1" name="Score" type="s:int"/> <s:element minOccurs="1" maxOccurs="1" name="AlertId" type="s:unsignedLong"/> <s:element minOccurs="0" maxOccurs="1" name="Argumentation" type="s:string"/> <s:element minOccurs="0" maxOccurs="1" name="Indicators" type="tns:ArrayOfIndicator"/> <s:element minOccurs="0" maxOccurs="1" name="LogVariables" type="tns:ArrayOfLog"/> <s:element minOccurs="0" maxOccurs="1" name="Warnings" type="tns:ArrayOfWarning"/> <s:element minOccurs="0" maxOccurs="1" name="SubScores" type="tns:ArrayOfSubScore"/> <s:element minOccurs="0" maxOccurs="1" name="Type" type="tns:ResponseType"/> </s:sequence> </s:complexType> <s:complexType name="ArrayOfIndicator"> <s:sequence> <s:element minOccurs="0" maxOccurs="unbounded" name="Indicator" nillable="true" type="tns:Indicator"/> </s:sequence> </s:complexType> <s:complexType name="Indicator"> <s:sequence> <s:element minOccurs="1" maxOccurs="1" name="Id" type="s:unsignedInt"/> <s:element minOccurs="0" maxOccurs="1" name="Name" type="s:string"/> <s:element minOccurs="1" maxOccurs="1" name="Value" type="s:int"/> <s:element minOccurs="0" maxOccurs="1" name="Argumentation" type="s:string"/> <s:element minOccurs="0" maxOccurs="1" name="ArgumentationId" type="s:string"/> </s:sequence> </s:complexType> <s:complexType name="ArrayOfLog"> <s:sequence> <s:element minOccurs="0" maxOccurs="unbounded" name="Log" nillable="true" type="tns:Log"/> </s:sequence> </s:complexType> <s:complexType name="Log"> <s:sequence> <s:element minOccurs="0" maxOccurs="1" name="Name" type="s:string"/> <s:element minOccurs="0" maxOccurs="1" name="Value" type="s:string"/> <s:element minOccurs="1" maxOccurs="1" name="FrissType" type="tns:FrissType"/> </s:sequence> </s:complexType> <s:simpleType name="FrissType"> <s:restriction base="s:string"> <s:enumeration value="Text"/> <s:enumeration value="Numeric"/> <s:enumeration value="DateTime"/> <s:enumeration value="Base64"/> </s:restriction> </s:simpleType> <s:complexType name="ArrayOfWarning"> <s:sequence> <s:element minOccurs="0" maxOccurs="unbounded" name="Warning" nillable="true" type="tns:Warning"/> </s:sequence> </s:complexType> <s:complexType name="Warning"> <s:sequence> <s:element minOccurs="1" maxOccurs="1" name="Id" type="s:unsignedInt"/> <s:element minOccurs="0" maxOccurs="1" name="Message" type="s:string"/> <s:element minOccurs="0" maxOccurs="1" name="Decription" type="s:string"/> </s:sequence> </s:complexType> <s:complexType name="ArrayOfSubScore"> <s:sequence> <s:element minOccurs="0" maxOccurs="unbounded" name="SubScore" nillable="true" type="tns:SubScore"/> </s:sequence> </s:complexType> <s:complexType name="SubScore"> <s:sequence> <s:element minOccurs="0" maxOccurs="1" name="ReferenceName" type="s:string"/> <s:element minOccurs="1" maxOccurs="1" name="Score" type="s:int"/> <s:element minOccurs="0" maxOccurs="1" name="ReferenceId" type="s:string"/> </s:sequence> </s:complexType> <s:simpleType name="ResponseType"> <s:restriction base="s:string"> <s:enumeration value="Underwriting"/> <s:enumeration value="Claims"/> <s:enumeration value="Ubo"/> </s:restriction> </s:simpleType> <s:element name="FrissByXml4"> <s:complexType> <s:sequence> <s:element minOccurs="0" maxOccurs="1" name="username" type="s:string"/> <s:element minOccurs="0" maxOccurs="1" name="password" type="s:string"/> <s:element minOccurs="1" maxOccurs="1" name="resulttype" type="s:int"/> <s:element minOccurs="0" maxOccurs="1" name="xml"> <s:complexType> <s:sequence> <s:any/> </s:sequence> </s:complexType> </s:element> <s:element minOccurs="1" maxOccurs="1" name="includePdf" type="s:boolean"/> </s:sequence> </s:complexType> </s:element> <s:element name="FrissByXml4Response"> <s:complexType> <s:sequence> <s:element minOccurs="0" maxOccurs="1" name="FrissByXml4Result" type="tns:ArrayOfDetectionResponse"/> </s:sequence> </s:complexType> </s:element> <s:complexType name="ArrayOfDetectionResponse"> <s:sequence> <s:element minOccurs="0" maxOccurs="unbounded" name="DetectionResponse" nillable="true" type="tns:DetectionResponse"/> </s:sequence> </s:complexType> </s:schema> <s:schema elementFormDefault="qualified" targetNamespace="http://friss/service/detectie/reply/v33"> <s:element name="frissdetectieresultaat" nillable="true" type="s1:Resultaat"/> <s:complexType name="Resultaat"> <s:sequence> <s:element minOccurs="0" maxOccurs="unbounded" name="indicatoren" type="s1:Indicatoren"/> <s:element minOccurs="0" maxOccurs="unbounded" name="log" type="s1:Log"/> <s:element minOccurs="0" maxOccurs="unbounded" name="foutmeldingen" type="s1:Foutmeldingen"/> </s:sequence> <s:attribute name="eindresultaat" type="s:int" use="required"/> <s:attribute name="argument" type="s:string"/> </s:complexType> <s:complexType name="Indicatoren"> <s:attribute name="id" type="s:int" use="required"/> <s:attribute name="naam" type="s:string"/> <s:attribute name="waarde" type="s:int" use="required"/> <s:attribute name="argument" type="s:string"/> <s:attribute name="argumentid" type="s:string"/> </s:complexType> <s:complexType name="Log"> <s:attribute name="naam" type="s:string"/> <s:attribute name="waarde" type="s:string"/> </s:complexType> <s:complexType name="Foutmeldingen"> <s:attribute name="id" type="s:int" use="required"/> <s:attribute name="naam" type="s:string"/> <s:attribute name="omschrijving" type="s:string"/> </s:complexType> </s:schema> </wsdl:types> <wsdl:message name="FrissByXml4SoapIn"> <wsdl:part name="parameters" element="tns:FrissByXml4"/> </wsdl:message> <wsdl:message name="FrissByXml4SoapOut"> <wsdl:part name="parameters" element="tns:FrissByXml4Response"/> </wsdl:message> <wsdl:portType name="FrissQisSoap"> <wsdl:operation name="FrissByXml4"> <wsdl:documentation xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"> Method for calling FRISS by Keylane | Quinity QIS Insurance Package XML format, this Method returns an array of FRISS service 4 responses which includes the AlertID as well as type to identify the Claim, Underwriting or UBO message. Set includePdf to true and resulttype to three for receiving base64 encoded pdf in [sys.pdf] </wsdl:documentation> <wsdl:input message="tns:FrissByXml4SoapIn"/> <wsdl:output message="tns:FrissByXml4SoapOut"/> </wsdl:operation> </wsdl:portType> <wsdl:binding name="FrissQisSoap" type="tns:FrissQisSoap"> <soap:binding transport="http://schemas.xmlsoap.org/soap/http"/> <wsdl:operation name="FrissByXml4"> <soap:operation soapAction="http://friss/qis/v1/FrissByXml4" style="document"/> <wsdl:input> <soap:body use="literal"/> </wsdl:input> <wsdl:output> <soap:body use="literal"/> </wsdl:output> </wsdl:operation> </wsdl:binding> <wsdl:binding name="FrissQisSoap12" type="tns:FrissQisSoap"> <soap12:binding transport="http://schemas.xmlsoap.org/soap/http"/> <wsdl:operation name="FrissByXml4"> <soap12:operation soapAction="http://friss/qis/v1/FrissByXml4" style="document"/> <wsdl:input> <soap12:body use="literal"/> </wsdl:input> <wsdl:output> <soap12:body use="literal"/> </wsdl:output> </wsdl:operation> </wsdl:binding> <wsdl:service name="FrissQis"> <wsdl:documentation xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/">Friss QIS WebService</wsdl:documentation> <wsdl:port name="FrissQisSoap" binding="tns:FrissQisSoap"> <soap:address location="http://aegon.acc.frissplatform.eu/DetectionServices/FrissQis.asmx"/> </wsdl:port> <wsdl:port name="FrissQisSoap12" binding="tns:FrissQisSoap12"> <soap12:address location="http://aegon.acc.frissplatform.eu/DetectionServices/FrissQis.asmx"/> </wsdl:port> </wsdl:service> </wsdl:definitions>``` 
Add Comment
0 Answer(s)

Your Answer

By posting your answer, you agree to the privacy policy and terms of service.