Hallo liebe Leute.
Folgendes Problem. Ich habe in einem WSDL folgenden Abschnitt:
<xs:element name="RetrieveDocumentsResponse">
<xs:complexType>
<xs:choice>
<xs:element name="Success">
<xs:complexType>
<xs:sequence>
<xs:element ref="das:Document" minOccurs="0" maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="Error" type="das:Error"/>
</xs:choice>
</xs:complexType>
</xs:element>
Woraus mir der Domino-WSDL-Importer (8.5.1) folgenden Lotusscript-Code baut:
Class RetrieveDocumentsResponse_n0 As XSD_ANYTYPE
Public Success As RetrieveDocumentsResponse_Success_n0
Public Error As Error_n0
Sub New
End Sub
End Class
Die Kollegen, welche die Antwort verarbeiten müssen, mokieren sich nun zurecht darüber, dass ich immer auch ein leeres Error-Element mitschicke.
<ns0:RetrieveDocumentsResponse xmlns:ns0="uri:xxx.at/DAS/v1.0#">
<ns0:Success>
<ns0:Document>
<ns0:Element1>.....
</ns0:Document>
</ns0:Success>
<ns0:Error/>
</ns0:RetrieveDocumentsResponse>
Um das zu Beheben, habe ich die Doku nochmal durchgeackert und bin auf folgendes "Gem" gestoßen:
Unsupported constructs
For this release, the following WSDL or XML Schema constructs have limited or no supported mappings to LotusScript or Java, and are rejected (or ignored, if indicated) by the Designer “Import WSDL” feature:
+) choice element, if nested, optional, or maxOccurs > 1 (arrays)
+) sequence element, if maxOccurs > 1 (arrays)
Das kann es doch bitte nicht sein, oder?
Hat wer eine Idee, wie ich das "korrekt" abfackeln könnte?
Ich baue mir für solche sachen immer eine Fault-Element und die Messages dafür
<complexType name="FaultElement">
<sequence>
<element name="faultContent" type="impl:FaultType"/>
</sequence>
</complexType>
<complexType name="FaultType">
<xsd:annotation>
<xsd:documentation>Fehlermeldung.</xsd:documentation>
</xsd:annotation>
<sequence>
<element name="code" type="xsd:string"/>
</sequence>
</complexType>
Das binde ich dann in Elemente ein. Für jede Function ein eigenes Fault-Element
<element name="getFunctionNameFault" type="impl:FaultElement" />
Das wiederum in den messages
<wsdl:message name="getFunctionName_faultMsg">
<wsdl:documentation>Fehler Status</wsdl:documentation>
<wsdl:part name="fault"/>
</wsdl:message>
Dass wiederum in den PortTypes
<wsdl:portType name="WebServiceName">
<wsdl:operation name="getFunctionName">
<wsdl:documentation>Was macht diese Funktion</wsdl:documentation>
<wsdl:input message="impl:getFunctionNameRequest"/>
<wsdl:output message="impl:getFunctionNameResponse"/>
<wsdl:fault name="fault" message="impl:getFunctionName_faultMsg"/>
</wsdl:operation>
</wsdl:portType>
Somit habe ich ein Errorhandling in jeder meiner Funktionen. Und generiert wird mir:
Function getFunctionName(parameters As GetFunctionRequest, Fault1 As FaultElement) As GetFunctionResponse
On Error GoTo FaultElement
...
FaultElement:
Call Fault1.setFault(True)
Call Fault1.setFaultString("getFunctionName fault")
End Function
Und wenn meine Function fehlschlägt, bekommt der WebServiceClient die von mir im Fault1.setFaultString festgelegt Meldung.
Ich hoffe wir reden nicht aneinander vorbei.
mfg
Kjeld