Autor Thema: Domino Webservice-Consumer: Umgang mit 'choice' und 'sequence' Elementen  (Gelesen 2254 mal)

Offline m3

  • Freund des Hauses!
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 8.102
  • Geschlecht: Männlich
  • Non ex transverso sed deorsum!
    • leyrers online pamphlet
Hallo liebe Leute.

Folgendes Problem. Ich habe in einem WSDL folgenden Abschnitt:
Code
	<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:
Code
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.
Code
      <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:

Zitat
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?
HTH
m³ aka. Martin -- leyrers online pamphlet | LEYON - All things Lotus (IBM Collaborations Solutions)

All programs evolve until they can send email.
Except Microsoft Exchange.
    - Memorable Quotes from Alt.Sysadmin.Recovery

"Lotus Notes ist wie ein Badezimmer, geht ohne Kacheln, aber nicht so gut." -- Peter Klett

"If there isn't at least a handful of solutions for any given problem, it isn't IBM"™ - @notessensai

Offline gossifu

  • Senior Mitglied
  • ****
  • Beiträge: 352
  • Geschlecht: Männlich
  • Dummheit schafft Freizeit
Die Frage ist, was möchtest Du erreichen? Da Du im choice Tag beide Elemente (Success, Error) hast, werden Dir auch diese umgesetzt.
Und muss man in dem ComplexType einen anderen verschachteln?

mfg

Kjeld
Immer lustig und vergnügt, bis der A.... im Sarge liegt. ;-)

Offline m3

  • Freund des Hauses!
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 8.102
  • Geschlecht: Männlich
  • Non ex transverso sed deorsum!
    • leyrers online pamphlet
Ja, aber choice bedeutet - so zumindest unsere Tibco-Leute - dass NUR ein Success ODER ein Error Element zurück kommt, nicht beides.
Und das bekomm ich einfach nicht hin.
HTH
m³ aka. Martin -- leyrers online pamphlet | LEYON - All things Lotus (IBM Collaborations Solutions)

All programs evolve until they can send email.
Except Microsoft Exchange.
    - Memorable Quotes from Alt.Sysadmin.Recovery

"Lotus Notes ist wie ein Badezimmer, geht ohne Kacheln, aber nicht so gut." -- Peter Klett

"If there isn't at least a handful of solutions for any given problem, it isn't IBM"™ - @notessensai

Offline gossifu

  • Senior Mitglied
  • ****
  • Beiträge: 352
  • Geschlecht: Männlich
  • Dummheit schafft Freizeit
Ich baue mir für solche sachen immer eine Fault-Element und die Messages dafür

Code
            <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

Code
<element name="getFunctionNameFault" type="impl:FaultElement" />

Das wiederum in den messages
Code
<wsdl:message name="getFunctionName_faultMsg">
        <wsdl:documentation>Fehler Status</wsdl:documentation>
        <wsdl:part name="fault"/>
</wsdl:message>

Dass wiederum in den PortTypes
Code
<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:

Code
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
Immer lustig und vergnügt, bis der A.... im Sarge liegt. ;-)

Offline m3

  • Freund des Hauses!
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 8.102
  • Geschlecht: Männlich
  • Non ex transverso sed deorsum!
    • leyrers online pamphlet
Kjeld, ja das wäre die Idee, wenn ich das machen würde.
Das WSDL/XSD wird aber von unseren "Architekten" erstellt ...  :-X

Ich hab dazu mittlerweile auch schon einen PMR aufgemacht, und den Hinweis auf die Technote #1318039 "Imported WSDL <choice> tag serializes invalid SOAP data." bekommen. Hab ich natürlich gleich ausprobiert, die hilft aber in meinem Fall nicht, da wir in dem choice complextype drinnen haben und keine Strings. :(

Aber mal schaun, was die Jungs in Irland zusammenbringen, beim 2nd Level bin ich schon. :)

Der erwähnte "SPR# JGRN79MHVM" ist übrigens im (no na ned) "not enough customer interest" Status. Is ja eh wurscht, dass man den Standarts nicht enspricht, braucht ja kein Customer.  >:D
HTH
m³ aka. Martin -- leyrers online pamphlet | LEYON - All things Lotus (IBM Collaborations Solutions)

All programs evolve until they can send email.
Except Microsoft Exchange.
    - Memorable Quotes from Alt.Sysadmin.Recovery

"Lotus Notes ist wie ein Badezimmer, geht ohne Kacheln, aber nicht so gut." -- Peter Klett

"If there isn't at least a handful of solutions for any given problem, it isn't IBM"™ - @notessensai

 

Impressum Atnotes.de  -  Powered by Syslords Solutions  -  Datenschutz