0

I've been working on implementing a SOAP service to use on Ericsson EDA server. I have the service running on the EDA server and I'm using SOAP-UI for testing purposes. But I keep running into this error when I try to invoke the method. If I create mockService in SOAP-UI and test it it works.

What am I doing wrong?

Error message

<S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/" xmlns:cai3g="http://schemas.ericsson.com/cai3g1.2/">
   <S:Header>
      <cai3g:SessionId>0987654321778</cai3g:SessionId>
   </S:Header>
   <S:Body>
      <ns2:Fault xmlns:ns2="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns3="http://www.w3.org/2003/05/soap-envelope">
         <faultcode>ns2:Client</faultcode>
         <faultstring>Cannot find dispatch method for {http://schemas.ericsson.com/cai3g1.2/}CFU</faultstring>
      </ns2:Fault>
   </S:Body>
</S:Envelope>

My SOAP-UI request

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:cai3="http://schemas.ericsson.com/cai3g1.2/" xmlns:gsm="http://schemas.ericsson.com/ma/CA/gsmCallForwardService/">
   <soapenv:Header>
      <cai3:SessionId>0987654321778</cai3:SessionId>
   </soapenv:Header>
   <soapenv:Body>
      <cai3:CFU>
         <cai3:MOType>Subscriber@http://schemas.ericsson.com/ma/CA/gsmCallForwardService/</cai3:MOType>
         <cai3:MOId>
            <gsm:imsi>123456789012345</gsm:imsi>
         </cai3:MOId>
         <cai3:MOAttributes>
            <gsm:SetSubscriberCfu imsi="123456789012345">
               <gsm:imsi>123456789012345</gsm:imsi>
               <gsm:msisdn>7770101</gsm:msisdn>
               <gsm:fnum>7770202</gsm:fnum>
            </gsm:SetSubscriberCfu>
         </cai3:MOAttributes>
      </cai3:CFU>
   </soapenv:Body>
</soapenv:Envelope>

I have added my WSDL and XSD files below if they are of any use to solve the issue.

gsmCallForwardService.wsdl

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<definitions xmlns="http://schemas.xmlsoap.org/wsdl/" xmlns:cai3g="http://schemas.ericsson.com/cai3g1.2/" xmlns:http="http://schemas.xmlsoap.org/wsdl/http/" xmlns:pg="http://schemas.ericsson.com/pg/1.0" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:xs="http://www.w3.org/2001/XMLSchema" targetNamespace="http://schemas.ericsson.com/cai3g1.2/">
    <jaxws:bindings xmlns:jaxws="http://java.sun.com/xml/ns/jaxws">
        <!-- disable wrapper style generation -->
        <jaxws:enableWrapperStyle>false</jaxws:enableWrapperStyle>
    </jaxws:bindings>
    <types>
        <xs:schema xmlns="http://schemas.ericsson.com/cai3g1.2/" xmlns:gsmCallForwardService="http://schemas.ericsson.com/ma/CA/gsmCallForwardService/" attributeFormDefault="unqualified" elementFormDefault="qualified" targetNamespace="http://schemas.ericsson.com/cai3g1.2/">
            <xs:import namespace="http://schemas.ericsson.com/ma/CA/gsmCallForwardService/" schemaLocation="../schemas/gsmCallForwardService.xsd"/>
            <xs:import namespace="http://schemas.ericsson.com/pg/1.0" schemaLocation="../schemas/PGFault.xsd"/>
            <xs:element name="CFU">
                <xs:complexType>
                    <xs:sequence>
                        <xs:element fixed="Subscriber@http://schemas.ericsson.com/ma/CA/gsmCallForwardService/" name="MOType" type="xs:string"/>
                        <xs:element name="MOId">
                            <xs:complexType>
                                <xs:sequence>
                                    <xs:element ref="gsmCallForwardService:imsi"/>
                                </xs:sequence>
                            </xs:complexType>
                        </xs:element>
                        <xs:element minOccurs="1" name="MOAttributes">
                            <xs:complexType>
                                <xs:sequence>
                                    <xs:element ref="gsmCallForwardService:SetSubscriberCfu"/>
                                </xs:sequence>
                            </xs:complexType>
                        </xs:element>
                    </xs:sequence>
                </xs:complexType>
            </xs:element>
            <xs:element name="CreateResponse">
                <xs:complexType>
                    <xs:sequence>
                        <xs:element name="MOId">
                            <xs:complexType>
                                <xs:sequence>
                                    <xs:element ref="gsmCallForwardService:imsi"/>
                                </xs:sequence>
                            </xs:complexType>
                        </xs:element>
                        <xs:element minOccurs="1" name="MOAttributes">
                            <xs:complexType>
                                <xs:sequence>
                                    <xs:element ref="gsmCallForwardService:SetCfResponseSubscriber"/>
                                </xs:sequence>
                            </xs:complexType>
                        </xs:element>
                    </xs:sequence>
                </xs:complexType>
            </xs:element>
            <xs:element name="Cai3gFault">
                <xs:complexType>
                    <xs:sequence>
                        <xs:element name="faultcode" type="xs:integer"/>
                        <xs:element name="faultreason">
                            <xs:complexType>
                                <xs:sequence>
                                    <xs:element maxOccurs="unbounded" name="reasonText" type="xs:string"/>
                                </xs:sequence>
                            </xs:complexType>
                        </xs:element>
                        <xs:element name="faultrole" type="xs:string"/>
                        <xs:element minOccurs="0" name="details">
                            <xs:complexType>
                                <xs:sequence>
                                    <xs:element ref="pg:PGFault"/>
                                </xs:sequence>
                            </xs:complexType>
                        </xs:element>
                    </xs:sequence>
                </xs:complexType>
            </xs:element>
            <xs:element name="SessionId" type="SessionIdType"/>
            <xs:element name="TransactionId" type="xs:unsignedLong"/>
            <xs:element name="SequenceId" type="xs:unsignedLong"/>
            <xs:simpleType name="SessionIdType">
                <xs:restriction base="xs:string">
                    <xs:pattern value="[\d\w]{1,}"/>
                </xs:restriction>
            </xs:simpleType>
            <xs:complexType name="HeaderFaultType">
                <xs:sequence>
                    <xs:element name="faultactor" type="xs:string"/>
                    <xs:element name="description" type="xs:string"/>
                </xs:sequence>
            </xs:complexType>
            <xs:element name="SessionIdFault">
                <xs:complexType>
                    <xs:complexContent>
                        <xs:extension base="HeaderFaultType">
                            <xs:sequence>
                                <xs:element name="faultcode">
                                    <xs:simpleType>
                                        <xs:restriction base="xs:string">
                                            <xs:enumeration value="Invalid SessionId"/>
                                            <xs:enumeration value="Session Timeout"/>
                                            <xs:enumeration value="SessionId Syntax Error"/>
                                        </xs:restriction>
                                    </xs:simpleType>
                                </xs:element>
                            </xs:sequence>
                        </xs:extension>
                    </xs:complexContent>
                </xs:complexType>
            </xs:element>
            <xs:element name="SequenceIdFault">
                <xs:complexType>
                    <xs:complexContent>
                        <xs:extension base="HeaderFaultType">
                            <xs:sequence>
                                <xs:element name="faultcode">
                                    <xs:simpleType>
                                        <xs:restriction base="xs:string">
                                            <xs:enumeration value="Invalid SequenceId"/>
                                        </xs:restriction>
                                    </xs:simpleType>
                                </xs:element>
                            </xs:sequence>
                        </xs:extension>
                    </xs:complexContent>
                </xs:complexType>
            </xs:element>
            <xs:element name="TransactionIdFault">
                <xs:complexType>
                    <xs:complexContent>
                        <xs:extension base="HeaderFaultType">
                            <xs:sequence>
                                <xs:element name="faultcode">
                                    <xs:simpleType>
                                        <xs:restriction base="xs:string">
                                            <xs:enumeration value="Invalid TransactionId"/>
                                        </xs:restriction>
                                    </xs:simpleType>
                                </xs:element>
                            </xs:sequence>
                        </xs:extension>
                    </xs:complexContent>
                </xs:complexType>
            </xs:element>
        </xs:schema>
    </types>
    <message name="CreateRequest">
        <part element="cai3g:CFU" name="parameters"/>
    </message>
    <message name="CreateResponse">
        <part element="cai3g:CreateResponse" name="parameters"/>
    </message>
    <message name="HeadInfo">
        <part element="cai3g:SessionId" name="sessionId"/>
        <part element="cai3g:TransactionId" name="transactionId"/>
        <part element="cai3g:SequenceId" name="sequenceId"/>
    </message>
    <message name="Cai3gFault">
        <part element="cai3g:Cai3gFault" name="parameters"/>
    </message>
    <message name="Cai3gHeaderFault">
        <part element="cai3g:SessionIdFault" name="sessionIdFault"/>
        <part element="cai3g:TransactionIdFault" name="transactionIdFault"/>
        <part element="cai3g:SequenceIdFault" name="sequenceIdFault"/>
    </message>
    <portType name="Subscriber">
        <operation name="CFU">
            <input message="cai3g:CreateRequest"/>
            <output message="cai3g:CreateResponse"/>
            <fault message="cai3g:Cai3gFault" name="Cai3gFault"/>
        </operation>
    </portType>
    <binding name="Subscriber" type="cai3g:Subscriber">
        <soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/>
        <operation name="CFU">
            <soap:operation soapAction="CAI3G#CFU" style="document"/>
            <input>
                <soap:body use="literal"/>
                <soap:header message="cai3g:HeadInfo" part="sessionId" use="literal"/>
                <soap:header message="cai3g:HeadInfo" part="transactionId" use="literal"/>
                <soap:header message="cai3g:HeadInfo" part="sequenceId" use="literal"/>
            </input>
            <output>
                <soap:body use="literal"/>
                <soap:header message="cai3g:HeadInfo" part="sessionId" use="literal">
                    <soap:headerfault message="cai3g:Cai3gHeaderFault" part="sessionIdFault" use="literal"/>
                </soap:header>
                <soap:header message="cai3g:HeadInfo" part="transactionId" use="literal">
                    <soap:headerfault message="cai3g:Cai3gHeaderFault" part="transactionIdFault" use="literal"/>
                </soap:header>
                <soap:header message="cai3g:HeadInfo" part="sequenceId" use="literal">
                    <soap:headerfault message="cai3g:Cai3gHeaderFault" part="sequenceIdFault" use="literal"/>
                </soap:header>
            </output>
            <fault name="Cai3gFault">
                <soap:fault name="Cai3gFault" use="literal"/>
            </fault>
        </operation>
    </binding>
    <service name="Provisioning">
        <port binding="cai3g:Subscriber" name="Subscriber">
            <soap:address location="http://127.0.0.1:8080/CAI3G1.2/services/CAI3G1.2"/>
        </port>
    </service>
</definitions>

gsmCallForwardService.xsd

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns="http://schemas.ericsson.com/ma/CA/gsmCallForwardService/" xmlns:cai3g="http://schemas.ericsson.com/cai3g1.2/" xmlns:jaxb="http://java.sun.com/xml/ns/jaxb" xmlns:ns1="http://schemas.ericsson.com/ma/CA/gsmCallForwardService/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" attributeFormDefault="unqualified" elementFormDefault="qualified" jaxb:version="2.0" targetNamespace="http://schemas.ericsson.com/ma/CA/gsmCallForwardService/">
    <xs:include schemaLocation="gsmCallForwardService_types.xsd"/>
    <xs:element name="imsi" type="ns1:imsiType"/>
    <xs:element name="msisdn" type="ns1:msisdnType"/>
    <xs:element name="fnum" type="ns1:fnumType"/>
    <xs:element name="responseCode" type="ns1:responseCodeType"/>
    <xs:element name="SetSubscriberCfu">
        <xs:complexType>
            <xs:sequence>
                <xs:element name="imsi" type="ns1:imsiType"/>
                <xs:element name="msisdn" type="ns1:msisdnType"/>
                <xs:element name="fnum" type="ns1:fnumType"/>
            </xs:sequence>
            <xs:attribute name="imsi" type="ns1:imsiType" use="required">
                <xs:annotation>
                    <xs:appinfo>
                        <jaxb:property name="imsiAttr"/>
                    </xs:appinfo>
                </xs:annotation>
            </xs:attribute>
        </xs:complexType>
    </xs:element>
    <xs:element name="SetCfResponseSubscriber">
        <xs:complexType>
            <xs:sequence>
                <xs:element name="responseCode" type="ns1:responseCodeType"/>
            </xs:sequence>
        </xs:complexType>
    </xs:element>
</xs:schema>

gsmCallForwardService_types.xsd

<?xml version="1.0" encoding="UTF-8" standalone="no"?><xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" attributeFormDefault="unqualified" elementFormDefault="qualified">
    <!-- General types. -->
    <xs:simpleType name="msisdnType">
        <xs:restriction base="xs:string">
            <xs:minLength value="5"/>
            <xs:maxLength value="15"/>
            <xs:pattern value="[0-9]*"/>
        </xs:restriction>
    </xs:simpleType>
    <xs:simpleType name="imsiType">
        <xs:restriction base="xs:string">
            <xs:minLength value="6"/>
            <xs:maxLength value="15"/>
            <xs:pattern value="[0-9]*"/>
        </xs:restriction>
    </xs:simpleType>
    <xs:simpleType name="responseCodeType">
        <xs:restriction base="xs:string">
            <xs:minLength value="1"/>
            <xs:maxLength value="6"/>
            <xs:pattern value="[0-9]*"/>
        </xs:restriction>
    </xs:simpleType>
    <xs:simpleType name="fnumType">
        <xs:restriction base="xs:string">
            <xs:minLength value="5"/>
            <xs:maxLength value="15"/>
            <xs:pattern value="[0-9]*"/>
        </xs:restriction>
    </xs:simpleType>
</xs:schema>

PGFault.xsd

<?xml version="1.0" encoding="UTF-8" standalone="no"?><xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns="http://schemas.ericsson.com/pg/1.0" attributeFormDefault="unqualified" elementFormDefault="qualified" targetNamespace="http://schemas.ericsson.com/pg/1.0">
    <xs:element name="PGFault">
        <xs:complexType>
            <xs:sequence>
                <xs:element name="errorcode" type="xs:integer"/>
                <xs:element name="errormessage" type="xs:string"/>
                <xs:choice>
                    <xs:element name="errordetails" type="xs:string"/>
                    <xs:element maxOccurs="unbounded" ref="failinformation"/>
                </xs:choice>
            </xs:sequence>
        </xs:complexType>
    </xs:element>
    <xs:element name="failinformation">
        <xs:complexType>
            <xs:sequence>
                <xs:element name="errorcode" type="xs:integer"/>
                <xs:element name="errormessage" type="xs:string"/>
                <xs:choice>
                    <xs:element name="errordetails" type="xs:string"/>
                    <xs:element maxOccurs="unbounded" ref="failinformation"/>
                </xs:choice>
            </xs:sequence>
            <xs:attribute name="taskname" type="xs:string" use="required"/>
            <xs:attribute name="action" type="xs:string" use="required"/>
        </xs:complexType>
    </xs:element>   
</xs:schema>
Gunnlaugur
  • 341
  • 1
  • 8
  • 19
  • `SequenceId` and `TransactionId` are numbers but you are sending `?`. The error messages says something else but it's worth checking. Are you sure you are sending the correct message to the web service (i.e. proper XML namespaces and elements, proper values, etc)? – Bogdan Jun 29 '21 at 11:08
  • @Bogdan I updated the input and output above. The SequenceId and TransactionId are not the problem I'm facing. I suspect it's related to incorrect XML namespaces, elements, types or something like that. But I'm not that seasoned in WSDL/XSD and haven't been able to figure out what is causing this. Side note, If I import the wsdl and xsd files into soap-ui there are no visible errors or warnings, so I'm little bit lost. – Gunnlaugur Jun 29 '21 at 13:39
  • After importing the WSDL into SoapUI, have you uses its generated request samples to fill them with data and make calls? Do those calls work? – Bogdan Jun 30 '21 at 10:42
  • Yes, I've done that and they work. – Gunnlaugur Jul 01 '21 at 09:50
  • Then you must be doing something wrong in your client implementation. I suggest you follow the troubleshooting steps from this answer to see what's different from the calls that work: https://stackoverflow.com/questions/68073458/unable-to-retrieve-data-from-sabre-pricequoteservicesrq-4-10-soap-api-xml-reque/68081437#68081437 – Bogdan Jul 01 '21 at 13:53

0 Answers0