PROGRAMMING DOMINO FOR WEB APPLICATIONS
WSDL
'member instances: Dim Carrot_VegetableType As VegetableType 'instance name suffix matches enum class name Dim Lettuce_VegetableType As VegetableType Dim Ketchup_VegetableType As VegetableType
'LotusScript list of members: Dim Enum_VegetableType List As VegetableType ' prefix "Enum_" includes a trailing underscore
'enumeration class: Class VegetableType 'class name matches list name suffix and list type Public Value As String 'first public property; 'type matches constants type above Sub NEW End Sub 'initializer: Sub Initialize (elem As String) Let Value = elem Set Enum_VegetableType(Cstr(Value)) = Me End Sub 'optional helper functions Function Equals (you As VegetableType) As Boolean… Function ToString As String… End Class
[global Sub's] 'initialization (called from Sub NEW of the PortType class) Sub VegetableType_Initialize Set Carrot_VegetableType = New VegetableType Call Carrot_VegetableType.Initialize(VegetableType_Carrot) Set Lettuce_VegetableType = New VegetableType Call Lettuce_VegetableType.Initialize(VegetableType_Lettuce) Set Ketchup_VegetableType = New VegetableType Call Ketchup_VegetableType.Initialize(VegetableType_Ketchup) End Sub
'optional helper functions Function VegetableType_FromValue (value As String) As VegetableType… Public Function VegetableType_FromString (value As String) As VegetableType…
Java enumeration pattern public class VegetableType { private java.lang.String _value_; private static java.util.HashMap _table_ = new java.util.HashMap();
// enum values; type matches private “value” data member type: public static final java.lang.String _Carrot = "Carrot"; public static final java.lang.String _Lettuce = "Lettuce"; public static final java.lang.String _Ketchup = "Ketchup";
public static final VegetableType Carrot = new VegetableType(_Carrot); public static final VegetableType Lettuce = new VegetableType(_Lettuce); public static final VegetableType Ketchup = new VegetableType(_Ketchup);
// return type matches the type of the private “value” data member: public java.lang.String getValue() { return _value_;}
// parameter type matches “getValue” return type: public static VegetableType fromValue( java.lang.String value) throws java.lang.IllegalVegetableException { VegetableType enum = (VegetableType) _table_.get(value); if (enum==null) throw new java.lang.IllegalVegetableException(); return enum; }
public static VegetableType fromString( java.lang.String value ) throws java.lang.IllegalVegetableException { return fromValue(value); }
public java.lang.String toString() { return _value_;}
Example 2: Faults This example shows service method fault handling is the same for both explicit and implicit faults:
LotusScript fault (explicit) Class FaultServicePortType Function getStockQuote( tickerSymbol As String, Fault1 As InvalidSymbolFaultMessage ) As Single … ' WS_FAULT base class properties Call Fault1.setFault(True) ' required for fault activation Call Fault1.setFaultString("getQuote InvalidTickerFaultMessage") ' optional fault message ' fault subclass properties Let Fault1.TickerSymbol = tickerSymbol Let Fault1.ApplicationCode = "12345" End Function End Class
LotusScript fault (implicit) Function getStockQuote( tickerSymbol As String, Fault1 As WS_FAULT ) As Single … ' WS_FAULT base class properties Call Fault1.setFault(True) ' required for fault activation Call Fault1.setFaultString("getQuote InvalidTickerFaultMessage") 'optional fault message End Function
Note Any faults for a LotusScript service implementation method must appear at the end of the method argument (any WS_FAULT base class or its subclasses).
Java fault (explicit) public class FaultServicePortType { public float getStockQuote( java.lang.String tickerSymbol ) throws InvalidSymbolFaultMessage { … throw new InvalidSymbolFaultMessage( tickerSymbol, 12345 ); } }
Java fault (implicit) public float getStockQuote( java.lang.String tickerSymbol ) throws lotus.domino.types.Fault { … java.lang.Exception e = new java.lang.Exception("Thrown exception"); throw lotus.domino.types.Fault.makFault(e); // static factory method }
or even simpler:
public float getStockQuote( java.lang.String tickerSymbol ) throws java.lang.Exception { … throw new java.lang.Exception("Thrown exception"); }
Note Faults for a Java service implementation method appear in the conventional Java throws clause for the method.
Example 3: Lists This example illustrates a list of vegetables, consisting of the three items Carrot, Lettuce, and Ketchup.
Note If the “Public value( )” array member type is a mapped simple type class instead of a LotusScript built-in type, then some pattern statements change accordingly. For example, if the array member type is XSD_NCNAME, then in Sub setListValueFromString, the last statement:
Let Me.value(idx) = Cstr(value)
is replaced by two statements:
Set Me.value(idx) = New XSD_NCNAME 'creates an instance of the simple type class
Call Me.value(idx).setValueFromString(value)
Similarly, the last statement in Sub getListValueAsString is replaced by:
getListValueAsString = value(idx).getValueAsString
Java list pattern public class ListOfVegetabless implements lotus.domino.types.SimpleType { // SimpleType interface private java.lang.String[] value; // private instance member, array, // named “value” // array type maps to a simple type // default constructor public ListOfWords() { } // constructor that accepts the private array member public ListOfWords(java.lang.String[] value) { this.value = value; } // simple type String constructor public ListOfWords(java.lang.String value) { StringTokenizer st = new StringTokenizer(value, "\r\n\t "); this.value = new java.lang.String[st.countTokens()]; for(int i = 0; st.hasMoreTokens(); i++) { this.value[i] = new java.lang.String(st.nextToken()); } } // simple type toString method for serializing the array value public java.lang.String toString() { if (value == null) return null; String ret = new String(); for (int i = 0; i < value.length; i++) { ret += value[i].toString(); if ((i+i) < value.length) ret += " "; } return ret; } // public getter method for private array member public java.lang.String[] getValue() { return value; } // public setter method for private array member public void setValue(java.lang.String[] value) { this.value = value; } // optional helper methods public synchronized boolean equals(java.lang.Object obj) {…} public synchronized int hashCode() {…} }