0

I have the below wsdl file (the original one is larger than 1MB, so I only copy the parameters I need): https://pastebin.com/3J23zm7K

However, as Salesforce doesnt support xsd:extension base, I change the following:

        <complexType
          name="AuthentifizierteAnfrageBasis"
          abstract="true">
          <sequence>
            <element
              name="apiKey"
              type="string">
              <annotation>
                <documentation>
                  Der Webdienst-Schlüssel für die Validierung.
                  <m-ex>4fil24gnio2gno24g2…</m-ex>
                </documentation>
              </annotation>
            </element>
          </sequence>
        </complexType>

        <complexType name="GetAnlageEegSolarParameter">
            <complexContent>
            <extension base="mastr:AuthentifizierteAnfrageBasis">
                <sequence>
                <element
                    name="marktakteurMastrNummer"
                    type="mastr:MarktakteurMastrNummerId">
                    <annotation>
                    <documentation>
                        Die MaStR-Nummer des vom Webdienst-Benutzer verwendeten
                        Marktakteurs
                        <m-ex>SNB91234567890</m-ex>
                    </documentation>
                    </annotation>
                </element>
                <element
                    name="eegMastrNummer"
                    type="mastr:EegMastrNummerId">
                    <annotation>
                    <documentation>
                        Die MaStR-Nummer der gewünschten EEG-Anlage
                        <m-ex>EEG91234567890</m-ex>
                    </documentation>
                    </annotation>
                </element>
                </sequence>
            </extension>
            </complexContent>
        </complexType>

to this:

        <complexType name="GetAnlageEegSolarParameter">
            <complexContent>
            <extension base="mastr:AuthentifizierteAnfrageBasis">
                <sequence>
                <element
                  name="apiKey"
                  type="string">
                  <annotation>
                    <documentation>
                      Der Webdienst-Schlüssel für die Validierung.
                      <m-ex>4fil24gnio2gno24g2…</m-ex>
                    </documentation>
                  </annotation>
                </element>

                <element
                    name="marktakteurMastrNummer"
                    type="mastr:MarktakteurMastrNummerId">
                    <annotation>
                    <documentation>
                        Die MaStR-Nummer des vom Webdienst-Benutzer verwendeten
                        Marktakteurs
                        <m-ex>SNB91234567890</m-ex>
                    </documentation>
                    </annotation>
                </element>
                <element
                    name="eegMastrNummer"
                    type="mastr:EegMastrNummerId">
                    <annotation>
                    <documentation>
                        Die MaStR-Nummer der gewünschten EEG-Anlage
                        <m-ex>EEG91234567890</m-ex>
                    </documentation>
                    </annotation>
                </element>
                </sequence>
            </extension>
            </complexContent>
        </complexType>

Then it creates 2 APEX classes:

//Generated by wsdl2apex

public class mastrGenerator1 {
......
    public class GetEinheitBasisParameter {
        public String apiKey;
        public String marktakteurMastrNummer;
        public String einheitMastrNummer;
        private String[] apiKey_type_info = new String[]{'apiKey','https://www.marktstammdatenregister.de/Services/Public/1_1/Modelle',null,'1','1','false'};
        private String[] marktakteurMastrNummer_type_info = new String[]{'marktakteurMastrNummer','https://www.marktstammdatenregister.de/Services/Public/1_1/Modelle',null,'1','1','false'};
        private String[] einheitMastrNummer_type_info = new String[]{'einheitMastrNummer','https://www.marktstammdatenregister.de/Services/Public/1_1/Modelle',null,'1','1','false'};
        private String[] apex_schema_type_info = new String[]{'https://www.marktstammdatenregister.de/Services/Public/1_1/Modelle','true','false'};
        private String[] field_order_type_info = new String[]{'apiKey','marktakteurMastrNummer','einheitMastrNummer'};
    }
    public class GetAnlageEegSolarAntwort {
        public String EegMastrNummer;
        public DateTime LetzteAenderung;
        public Date Meldedatum;
        public Date DatumLetzteAktualisierung;
        public Boolean InanspruchnahmeZahlungNachEeg;
        public String AnlagenschluesselEeg;
        public mastrGenerator1.ErweiterterString AnlagenkennzifferAnlagenregister;
        public Decimal InstallierteLeistung;
        public Date EegInbetriebnahmedatum;
        public mastrGenerator1.ErweiterterString Registrierungsnummer;
        public String MieterstromAngemeldet;
        public Date MieterstromMeldedatum;
        public Date MieterstromErsteZuordnungZuschlag;
        public Boolean AusschreibungZuschlag;
        public Decimal ZugeordneteGebotsmenge;
        public String Zuschlagsnummer;
        public String AnlageBetriebsstatus;
        public mastrGenerator1.VerknuepfteEinheit[] VerknuepfteEinheit;
        private String[] EegMastrNummer_type_info = new String[]{'EegMastrNummer','https://www.marktstammdatenregister.de/Services/Public/1_1/Modelle',null,'1','1','false'};
        private String[] LetzteAenderung_type_info = new String[]{'LetzteAenderung','https://www.marktstammdatenregister.de/Services/Public/1_1/Modelle',null,'1','1','false'};
        private String[] Meldedatum_type_info = new String[]{'Meldedatum','https://www.marktstammdatenregister.de/Services/Public/1_1/Modelle',null,'1','1','false'};
        private String[] DatumLetzteAktualisierung_type_info = new String[]{'DatumLetzteAktualisierung','https://www.marktstammdatenregister.de/Services/Public/1_1/Modelle',null,'1','1','false'};
        private String[] InanspruchnahmeZahlungNachEeg_type_info = new String[]{'InanspruchnahmeZahlungNachEeg','https://www.marktstammdatenregister.de/Services/Public/1_1/Modelle',null,'0','1','false'};
        private String[] AnlagenschluesselEeg_type_info = new String[]{'AnlagenschluesselEeg','https://www.marktstammdatenregister.de/Services/Public/1_1/Modelle',null,'0','1','false'};
        private String[] AnlagenkennzifferAnlagenregister_type_info = new String[]{'AnlagenkennzifferAnlagenregister','https://www.marktstammdatenregister.de/Services/Public/1_1/Modelle',null,'1','1','false'};
        private String[] InstallierteLeistung_type_info = new String[]{'InstallierteLeistung','https://www.marktstammdatenregister.de/Services/Public/1_1/Modelle',null,'0','1','false'};
        private String[] EegInbetriebnahmedatum_type_info = new String[]{'EegInbetriebnahmedatum','https://www.marktstammdatenregister.de/Services/Public/1_1/Modelle',null,'0','1','false'};
        private String[] Registrierungsnummer_type_info = new String[]{'Registrierungsnummer','https://www.marktstammdatenregister.de/Services/Public/1_1/Modelle',null,'1','1','false'};
        private String[] MieterstromAngemeldet_type_info = new String[]{'MieterstromAngemeldet','https://www.marktstammdatenregister.de/Services/Public/1_1/Modelle',null,'0','1','false'};
        private String[] MieterstromMeldedatum_type_info = new String[]{'MieterstromMeldedatum','https://www.marktstammdatenregister.de/Services/Public/1_1/Modelle',null,'0','1','false'};
        private String[] MieterstromErsteZuordnungZuschlag_type_info = new String[]{'MieterstromErsteZuordnungZuschlag','https://www.marktstammdatenregister.de/Services/Public/1_1/Modelle',null,'0','1','false'};
        private String[] AusschreibungZuschlag_type_info = new String[]{'AusschreibungZuschlag','https://www.marktstammdatenregister.de/Services/Public/1_1/Modelle',null,'0','1','false'};
        private String[] ZugeordneteGebotsmenge_type_info = new String[]{'ZugeordneteGebotsmenge','https://www.marktstammdatenregister.de/Services/Public/1_1/Modelle',null,'0','1','false'};
        private String[] Zuschlagsnummer_type_info = new String[]{'Zuschlagsnummer','https://www.marktstammdatenregister.de/Services/Public/1_1/Modelle',null,'0','1','false'};
        private String[] AnlageBetriebsstatus_type_info = new String[]{'AnlageBetriebsstatus','https://www.marktstammdatenregister.de/Services/Public/1_1/Modelle',null,'1','1','false'};
        private String[] VerknuepfteEinheit_type_info = new String[]{'VerknuepfteEinheit','https://www.marktstammdatenregister.de/Services/Public/1_1/Modelle',null,'0','-1','false'};
        private String[] apex_schema_type_info = new String[]{'https://www.marktstammdatenregister.de/Services/Public/1_1/Modelle','true','false'};
        private String[] field_order_type_info = new String[]{'EegMastrNummer','LetzteAenderung','Meldedatum','DatumLetzteAktualisierung','InanspruchnahmeZahlungNachEeg','AnlagenschluesselEeg','AnlagenkennzifferAnlagenregister','InstallierteLeistung','EegInbetriebnahmedatum','Registrierungsnummer','MieterstromAngemeldet','MieterstromMeldedatum','MieterstromErsteZuordnungZuschlag','AusschreibungZuschlag','ZugeordneteGebotsmenge','Zuschlagsnummer','AnlageBetriebsstatus','VerknuepfteEinheit'};
    }
.....
.....
.....

    public class AuthentifizierteAnfrageBasis {
        public String apiKey;
        private String[] apiKey_type_info = new String[]{'apiKey','https://www.marktstammdatenregister.de/Services/Public/1_1/Modelle',null,'1','1','false'};
        private String[] apex_schema_type_info = new String[]{'https://www.marktstammdatenregister.de/Services/Public/1_1/Modelle','true','false'};
        private String[] field_order_type_info = new String[]{'apiKey'};
    }


    public class GetAnlageEegSolarParameter {
        public String apiKey;
        public String marktakteurMastrNummer;
        public String eegMastrNummer;
        private String[] apiKey_type_info = new String[]{'apiKey','https://www.marktstammdatenregister.de/Services/Public/1_1/Modelle',null,'1','1','false'};
        private String[] marktakteurMastrNummer_type_info = new String[]{'marktakteurMastrNummer','https://www.marktstammdatenregister.de/Services/Public/1_1/Modelle',null,'1','1','false'};
        private String[] eegMastrNummer_type_info = new String[]{'eegMastrNummer','https://www.marktstammdatenregister.de/Services/Public/1_1/Modelle',null,'1','1','false'};
        private String[] apex_schema_type_info = new String[]{'https://www.marktstammdatenregister.de/Services/Public/1_1/Modelle','true','false'};
        private String[] field_order_type_info = new String[]{'apiKey','marktakteurMastrNummer','eegMastrNummer'};
    }
public class mastrGenerator2 {
    public class Anlage {
        public String endpoint_x = 'https://www.marktstammdatenregister.de/MaStRApi/Api.svc/Soap11/Anlage';
        public Map<String,String> inputHttpHeaders_x;
        public Map<String,String> outputHttpHeaders_x;
        public String clientCertName_x;
        public String clientCert_x;
        public String clientCertPasswd_x;
        public Integer timeout_x;
        private String[] ns_map_type_info = new String[]{'https://www.marktstammdatenregister.de/Services/Public/1_1/Modelle', 'mastrGenerator1', 'https://www.marktstammdatenregister.de/Services/Public/1_1', 'mastrGenerator2', 'https://www.marktstammdatenregister.de/Services/Public/1_1/Modelle/Anlage', 'mastrGenerator3'};
        public mastrGenerator1.GetAnlageEegSolarAntwort GetAnlageEegSolar(String apiKey,String marktakteurMastrNummer,String eegMastrNummer) {
            mastrGenerator1.GetAnlageEegSolarParameter request_x = new mastrGenerator1.GetAnlageEegSolarParameter();
            request_x.apiKey = apiKey;
            request_x.marktakteurMastrNummer = marktakteurMastrNummer;
            request_x.eegMastrNummer = eegMastrNummer;
            mastrGenerator1.GetAnlageEegSolarAntwort response_x;
            Map<String, mastrGenerator1.GetAnlageEegSolarAntwort> response_map_x = new Map<String, mastrGenerator1.GetAnlageEegSolarAntwort>();
            response_map_x.put('response_x', response_x);
            WebServiceCallout.invoke(
              this,
              request_x,
              response_map_x,
              new String[]{endpoint_x,
              'GetAnlageEegSolar',
              'https://www.marktstammdatenregister.de/Services/Public/1_1/Modelle/Anlage',
              'GetAnlageEegSolarRequest',
              'https://www.marktstammdatenregister.de/Services/Public/1_1/Modelle/Anlage',
              'GetAnlageEegSolarResponse',
              'mastrGenerator1.GetAnlageEegSolarAntwort'}
            );
            response_x = response_map_x.get('response_x');
            return response_x;
        }
        public mastrGenerator1.GetEinheitSolarAntwort GetEinheitSolar() {
            mastrGenerator1.GetEinheitSolarParameter request_x = new mastrGenerator1.GetEinheitSolarParameter();
            mastrGenerator1.GetEinheitSolarAntwort response_x;
            Map<String, mastrGenerator1.GetEinheitSolarAntwort> response_map_x = new Map<String, mastrGenerator1.GetEinheitSolarAntwort>();
            response_map_x.put('response_x', response_x);
            WebServiceCallout.invoke(
              this,
              request_x,
              response_map_x,
              new String[]{endpoint_x,
              'GetEinheitSolar',
              'https://www.marktstammdatenregister.de/Services/Public/1_1/Modelle/Anlage',
              'GetEinheitSolarRequest',
              'https://www.marktstammdatenregister.de/Services/Public/1_1/Modelle/Anlage',
              'GetEinheitSolarResponse',
              'mastrGenerator1.GetEinheitSolarAntwort'}
            );
            response_x = response_map_x.get('response_x');
            return response_x;
        }
    }
}

I tried to make a call from mastrGenerator2 in debug, but it throws this error:

mastrGenerator2.Anlage testEinheit = new mastrGenerator2.Anlage();
public String apiKey = 'Enter Id';
public String marktakteurMastrNummer = 'ID';
public String eegMastrNummer = 'EEG911769853434';
mastrGenerator1.GetAnlageEegSolarAntwort result = testEinheit.GetAnlageEegSolar(apiKey,marktakteurMastrNummer,eegMastrNummer);
System.debug(result);

System.CalloutException: Web service callout failed: WebService returned a SOAP Fault: apiKey fehlt faultcode=s:Receiver.ZugriffVerweigert faultactor=

Any fix to this?

  • 2
    fun with WSDLs... my suggestion: ignore salesforce until you can make a successful call to this API with a client such as SoapUI. Once you can do that... you are ready to figure out your Apex client. You could simply use the successful XML payload from SoapUI as the baseline for an HTTP callout. – krigi Dec 9 '19 at 22:03
  • @krigi I have no experience with SoapUI. Is there any tutorial to generate XML? – Ha An Tran Dec 9 '19 at 22:06
0

You can call the API using HTTP callout instead of consuming the WSDL and generating Apex class from it. Use SOAP UI tool to generate XML and then use it in HTTP Callout.

You can use this link: https://www.soapui.org/soap-and-wsdl/working-with-wsdls.html

Refer the below post for more reference: https://www.forcetalks.com/salesforce-topic/how-to-perform-soap-callout-in-salesforce-using-https/

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.