Examples: Web services

Example one: Web service without complex data types

Here is a Web service with two operations. Each operation has an input message with 2 parts and an output message.

Property box settings

  • PortType class = WebServiceOne
  • Programming model = RPC
  • SOAP message format = RPC/encoded
  • Port type name = WebServiceOne
  • Service element name = WebServiceOneService
  • Service port name = Domino

LotusScript:

%INCLUDE "lsxsd.lss"
Class WebServiceOne
  
  Sub NEW
  End Sub
  
  Function operation1(input1 As String, input2 As String) As String
  End Function
  
  Function operation2(input1 As String, input2 As String) As String
  End Function
  
End Class

Java:

import lotus.domino.*;
import lotus.domino.types.*;

public class WebServiceOne {
  public java.lang.String operation1(
    java.lang.String input1,
    java.lang.String input2) {
      return null;
  }
  public java.lang.String operation2(
    java.lang.String input1,
    java.lang.String input2) {
      return null;
  }
}

WSDL

<?xml version="1.0" encoding="UTF-8" ?>
<wsdl:definitions targetNamespace="urn:DefaultNamespace"
 xmlns="http://schemas.xmlsoap.org/wsdl/"
 xmlns:apachesoap="http://xml.apache.org/xml-soap"
 xmlns:impl="urn:DefaultNamespace" xmlns:intf="urn:DefaultNamespace"
 xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/"
 xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
 xmlns:wsdlsoap="http://schemas.xmlsoap.org/wsdl/soap/"
 xmlns:xsd="http://www.w3.org/2001/XMLSchema">
 <wsdl:message name="OPERATION2Request"> 
  <wsdl:part name="INPUT1" type="xsd:string" />
  <wsdl:part name="INPUT2" type="xsd:string" />
 </wsdl:message>
 <wsdl:message name="OPERATION1Response">
  <wsdl:part name="OPERATION1Return" type="xsd:string" />
 </wsdl:message>
 <wsdl:message name="OPERATION1Request">
  <wsdl:part name="INPUT1" type="xsd:string" />
  <wsdl:part name="INPUT2" type="xsd:string" />
 </wsdl:message>
 <wsdl:message name="OPERATION2Response">
  <wsdl:part name="OPERATION2Return" type="xsd:string" />
 </wsdl:message>
 <wsdl:portType name="WebServiceOne">
  <wsdl:operation name="OPERATION1" parameterOrder="INPUT1 INPUT2">
   <wsdl:input message="impl:OPERATION1Request"
    name="OPERATION1Request" />
   <wsdl:output message="impl:OPERATION1Response"
    name="OPERATION1Response" />
  </wsdl:operation>
  <wsdl:operation name="OPERATION2" parameterOrder="INPUT1 INPUT2">
   <wsdl:input message="impl:OPERATION2Request"
    name="OPERATION2Request" />
   <wsdl:output message="impl:OPERATION2Response"
    name="OPERATION2Response" />
  </wsdl:operation>
 </wsdl:portType>
 <wsdl:binding name="DominoSoapBinding" type="impl:WebServiceOne">
  <wsdlsoap:binding style="rpc"
   transport="http://schemas.xmlsoap.org/soap/http" />
  <wsdl:operation name="OPERATION1">
   <wsdlsoap:operation soapAction="" />
   <wsdl:input name="OPERATION1Request">
    <wsdlsoap:body
     encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"
     namespace="urn:DefaultNamespace" use="encoded" />
   </wsdl:input>
   <wsdl:output name="OPERATION1Response">
    <wsdlsoap:body
     encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"
     namespace="urn:DefaultNamespace" use="encoded" />
   </wsdl:output>
  </wsdl:operation>
  <wsdl:operation name="OPERATION2">
   <wsdlsoap:operation soapAction="" />
   <wsdl:input name="OPERATION2Request">
    <wsdlsoap:body
     encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"
     namespace="urn:DefaultNamespace" use="encoded" />
   </wsdl:input>
   <wsdl:output name="OPERATION2Response">
    <wsdlsoap:body
     encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"
     namespace="urn:DefaultNamespace" use="encoded" />
   </wsdl:output>
  </wsdl:operation>
 </wsdl:binding>
 <wsdl:service name="WebServiceOneService">
  <wsdl:port binding="impl:DominoSoapBinding" name="Domino">
   <wsdlsoap:address location="http://localhost" />
  </wsdl:port>
 </wsdl:service>
</wsdl:definitions>

Example two: Accessing a Domino session

This example demonstrates Example 1 with code added to access a Domino session.

LotusScript:

%INCLUDE "lsxsd.lss"

Dim session As NotesSession
Dim db As NotesDatabase

Class WebServiceOne
  
  Sub NEW
    Set session = New NotesSession
    Set db = session.GetCurrentDatabase
  End Sub
  
  Function operation1(input1 As String, input2 As String) As String
  End Function
  
  Function operation2(input1 As String, input2 As String) As String
  End Function
  
End Class

Java:

import lotus.domino.*;
import lotus.domino.types.*;

public class WebServiceOne {

  private Session session;
  private AgentContext ac;
  private Database db;
  
  public WebServiceOne() throws NotesException {
    session = WebServiceBase.getCurrentSession();
    ac = session.getAgentContext();
    db = ac.getCurrentDatabase();
  }
  
  public java.lang.String operation1(
    java.lang.String input1,
    java.lang.String input2) {
      return null;
  }
  public java.lang.String operation2(
    java.lang.String input1,
    java.lang.String input2) {
      return null;
  }
}

Example three: Array

This example demonstrates the coding for an array of type float:

LotusScript

() As Single

Java

float[]

WSDL for a Domino 8 "encoded" service:

<complexType name="ArrayOf_xsd_float">
   <complexContent>
      <restriction base="soapenc:Array">
         <attribute ref="soapenc:arrayType"
            wsdl:arrayType="xsd:float[]"/>
      </restriction>
   </complexContent>
</complexType>

WSDL for a Domino 8 "literal" service:

<complexType name="xsd_floatArray">
   <sequence>
      <element name="item" minOccurs="0" maxOccurs="unbounded" type="xsd:float"/>
   </sequence>
</complexType>

Example four: Complex data element

This example demonstrates the coding for a data element that contains two strings:

WSDL

<complexType name="TwoStrings">
   <sequence>
      <element name="string1" nillable="true" type="xsd:string" /> 
      <element name="string2" nillable="true" type="xsd:string" /> 
   </sequence>
</complexType>

LotusScript

Note that string1 and string2 must be public.

%INCLUDE "lsxsd.lss"
Class TwoStrings
  
  Public string1 As XSD_STRING
  Public string2 As XSD_STRING
  
  Sub NEW
  End Sub
  
End Class

Java

public class TwoStrings  {
  private java.lang.String string1;
  private java.lang.String string2;

  public TwoStrings() {
  }

  public java.lang.String getString1() {
    return string1;
  }

  public void setString1(java.lang.String string1) {
    this.string1 = string1;
  }

  public java.lang.String getString2() {
    return string2;
  }

  public void setString2(java.lang.String string2) {
    this.string2 = string2;
  }
}