Scenario

Tiny Telecom provides mobile phone services to California residents.  In addition to the five types of basic account that Tiny offers: personal, personal anytime, family, corporate, and prepaid, subscribers are offered a full range of options which are generally handled by Tiny's partners or subsidiaries.  These options include voice mail, caller ID, call forwarding, text messaging, e-mail, long-distance, handset options, and a comprehensive friends and family calling plan.  To create a basic account, Tiny requires the subscriber's full name, a user name, a credit card number (and expiration), and a valid California driver's license number.  Subscribers may also provide an e-mail address for notification of changes in the account policy or for opt-in notification of special offers from partners.  Basic plans have a two year term and for a limited time all new accounts receive free caller ID as part of a promotion by one of Tiny's partners.  

The friends and family plan is one of the most popular options and allows subscribers to select a set of 10 contacts that may be called at a significant discount.  To identify these contacts, subscribers are required to provide their names and phone numbers. 

Tiny has implemented a provisioning service that manages their basic accounts and also allows partner services to be provisioned.  A typical usage scenario for the service is the implementation of the self-service facility on Tiny's website.  The account registration processing is performed by a Java servlet that goes through the following sequence of operations:
1. Offer the user a selection of provisionable services offered by Tiny and partners
2. Query the schema of the services requested
3. Present a form allowing the user to enter the required and optional fields
4. Submit the provisioning request for the services
5. Notify the user of the success or failure of the request

For the purposes of this scenario, assume that the subscriber requests voice mail, e-mail, text messaging, and lists two family members in the friends and family plan.  The user also selects the default handset which they will receive by mail.  When the account is activated, a password is automatically assigned to access voice mail.  Before the phone is received by the user, they return to the self-service website to check the status of the request.  The self-service facility allows the user to retrieve details of the account which now reflects the fact that an account has been activated, provides access to the voicemail password, and notifies the user that the request for text messaging has been denied for technical reasons.

Message Sequence

The scenario translates into the following sequence of messages between the request servlet that interacts with the user (equivalent to the Requesting Authority or RA in the PSTC Use Cases) and the provisioning service (equivalent to the Provisioning Service Point or PSP in the PSTC Use Cases) when the user is requesting services:

When the user returns to get the account status, the following sequence of messages is generated:

Notes on the Examples

The locations of the schema and interface documents are listed in the references section at the end of this document.  These are central to the understanding of the message contents in these examples.  Most of the URLs in the examples are fictitious but the raw XML documents are available for reference and validation. 

These examples reflect something approaching a real world situation but the schemas used by the provisioning service are not very normalized.  In reality, more effort might be expended to reuse common schema elements.  The target schemas are also less complicated than those that you might find in a real system.  In particular, there has been no attempt to define relationships between targets which might be a common problem in practice.  Again, factoring of common definitions into a shared schema would probably be the best approach in these kinds of situations.  Related to this issue is the fact that the approach taken in the implementation has been from the point of view of a service aggregator who acts as a conduit between partners and the consumer.  Tiny could have elected to consolidate the disparate targets into a single schema where, for example, a basic account would have an association with each of the services that could be associated with the account. This approach is entirely possible but it was felt that the complexity of aggregating services into a hierarchy of subscriptions, and the use of multiple targets, might provide a more interesting example.  However, to illustrate how an integrated approach would be implemented, caller ID has been incorporated into Tiny's BasicAccount schema.

Security is not addressed in this scenario both for reasons of simplicity and because it is assumed that authentication and authorization are out of scope.  Generally, transport level security (e.g. HTTPS) is assumed.

1. getAvailableTargets

The TinyProvisioning service implements the PSTC Provisioning Service Point (PSP) interface as defined in the PSP WSDL interface specification (see references).  TinyProvisioning supports targets for Tiny's basic services and federates services from Tiny's partners.  The getAvailableTargets implementation does not return schema information from all targets to minimize the size of the resulting messages - Tiny expects to eventually offer hundreds if not thousands of services.

POST /services/provisioningServicePoint HTTP/1.1
Host: www.tiny.com
Content-Type: text/xml; charset="utf-8"
Content-Length: nnnn
SOAPAction: "urn:oasis:names:tc:SPML:0.1:provisioning:psp:getAvailableTargets"

<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" 
 SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
   <SOAP-ENV:Body>
       <psp:getAvailableTargets xmlns:psp="urn:oasis:names:tc:SPML:0.1:provisioning:psp"/>
   </SOAP-ENV:Body>
</SOAP-ENV:Envelope>

The request results in the following HTTP/SOAP(1.1) response.

HTTP/1.1 200 OK
Content-Type: text/xml; charset="utf-8"
Content-Length: nnnn

<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"
    SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
   <SOAP-ENV:Body>
     <psp:getAvailableTargetsResponse xmlns:psp="urn:oasis:names:tc:SPML:0.1:provisioning:psp">
        <ProvisioningServiceStatus xmlns="urn:oasis:names:tc:SPML:0.1:provisioning:spml">
            <code>success</code>
        </ProvisioningServiceStatus>     
        <ProvisioningTargets xmlns="urn:oasis:names:tc:SPML:0.1:provisioning:spml">
            <ProvisioningTarget name="Basic Account">
                <identifier name="basic_account:123a"/>
                <description>Tiny's basic account.  Select a plan to fit your pocket and the services you need for your busy lifestyle.</description>
            </ProvisioningTarget>
            <ProvisioningTarget name="Voice Mail">
                <identifier name="vocamail_account"/>
                <description>Access voice mail from anywhere.  VocaMail accounts are reliable and easy to use.</description>
            </ProvisioningTarget>
            <ProvisioningTarget name="SMS">
                <identifier name="text_messaging"/>
                <description>SMS text messaging - the cheap and easy way to stay in touch.</description>
            </ProvisioningTarget>
            <ProvisioningTarget name="EMail">
                <identifier name="e_mail_service"/>
                <description>Receive e-mail straight to your phone.</description>
            </ProvisioningTarget>
            <ProvisioningTarget name="Call Forwarding">
                <identifier name="forwarding_service"/>
                <description>Never miss a call with call forwarding.</description>
            </ProvisioningTarget>
            <ProvisioningTarget name="Long Distance">
                <identifier name="long_distance_service"/>
                <description>Tiny's not just for Califonia anymore.</description>
            </ProvisioningTarget>
            <ProvisioningTarget name="Friends and Family">
                <identifier name="friends_and_family_service"/>
                <description>You don't need to wait until the weekend.  Low rates any time for your 10 most frequently called numbers.</description>
            </ProvisioningTarget>
            <ProvisioningTarget name="Handsets">
                <identifier name="handset_service"/>
                <description>We have the widest selection of high-tech phones available.</description>
            </ProvisioningTarget>
        </ProvisioningTargets>
      </psp:getAvailableTargetsResponse>
    </SOAP-ENV:Body>
</SOAP-ENV:Envelope> 

 

2. getTarget

Because the implementation of queryAvailableTargets has elected to return minimal target information, the self-service servlet has been constructed to perform a getTarget exchange when the user chooses to apply for specific services, to get all of the target information.  As an illustrative example of the conversation, the first request is for the basic service:

POST /services/provisioningServicePoint HTTP/1.1
Host: www.tiny.com
Content-Type: text/xml; charset="utf-8"
Content-Length: nnnn
SOAPAction: "urn:oasis:names:tc:SPML:0.1:provisioning:psp:getTarget"

<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"
 SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
   <SOAP-ENV:Body>
       <psp:getTarget xmlns:psp="urn:oasis:names:tc:SPML:0.1:provisioning:psp">
            <spml:identifier name="basic_account:123a" xmlns:spml="urn:oasis:names:tc:SPML:0.1:provisioning:spml"/>
       </psp:getTarget>
   </SOAP-ENV:Body>
</SOAP-ENV:Envelope>

The response message will look something like the following.  For purposes of brevity, the SOAP/HTTP encapsulation is omitted in the following messages.

<ProvisioningTarget name="Basic Account" xmlns="urn:oasis:names:tc:SPML:0.1:provisioning:spml"
           xmlns:acct="http://www.tiny.com/schema/basicAccount"
           xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
           xsi:schemaLocation="urn:oasis:names:tc:SPML:0.1:provisioning:spml http://schemas.oasis-open.org/spml/spml.xsd">
    <identifier name="basic_account:123a"/>
    <description>Tiny's basic account.  Select a plan to fit your pocket and the services you need for your busy lifestyle.</description>
    <schema element="acct:BasicAccount">
        <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" targetNamespace="http://www.tiny.com/schema/basicAccount">
            <xsd:simpleType name="BasicPlan">
                <xsd:restriction base="xsd:string">
                    <xsd:enumeration value="personal"/>
                    <xsd:enumeration value="personal anytime"/>
                    <xsd:enumeration value="corporate"/>
                    <xsd:enumeration value="family"/>
                    <xsd:enumeration value="prepaid"/>
                </xsd:restriction>
            </xsd:simpleType>
            <xsd:simpleType name="CaliforniaDriversLicense">
                <xsd:restriction base="xsd:string">
                    <xsd:pattern value="([A-Z]\d{7})"/>
                </xsd:restriction>
            </xsd:simpleType>
            <xsd:simpleType name="CreditCardNumber">
                <xsd:restriction base="xsd:string">
                    <xsd:pattern value="(\d{15})"/>
                </xsd:restriction>
            </xsd:simpleType>
            <xsd:simpleType name="CreditCardExpiration">
                <xsd:restriction base="xsd:string">
                    <xsd:pattern value="(\d{2}/\d{2})"/>
                </xsd:restriction>
            </xsd:simpleType>
            <xsd:simpleType name="EMailAddress">
                <xsd:restriction base="xsd:string">
                    <xsd:pattern value="(\w+@\w+\.\w+)"/>
                </xsd:restriction>
            </xsd:simpleType>
            <xsd:complexType name="CallerId">
                <xsd:sequence>
                    <xsd:element name="blocking_selected" type="xsd:boolean" minOccurs="1" maxOccurs="1"/>
                    <xsd:element name="blocking_blocking_selected" type="xsd:boolean" minOccurs="1" maxOccurs="1"/>
                </xsd:sequence>
            </xsd:complexType>
            <xsd:complexType name="BasicAccountType">
                <xsd:sequence>
                    <xsd:element name="plan" type="acct:BasicPlan" minOccurs="1" maxOccurs="1"/>
                    <xsd:element name="firstname" type="xsd:string" minOccurs="1" maxOccurs="1"/>
                    <xsd:element name="lastname" type="xsd:string" minOccurs="1" maxOccurs="1"/>
                    <xsd:element name="username" type="xsd:string" minOccurs="1" maxOccurs="1"/>
                    <xsd:element name="initial" type="xsd:string" minOccurs="0" maxOccurs="1"/>
                    <xsd:element name="email" type="acct:EMailAddress" minOccurs="0" maxOccurs="1"/>
                    <xsd:element name="opt-in" type="xsd:boolean" minOccurs="0" maxOccurs="1"/>
                    <xsd:element name="license" type="acct:CaliforniaDriversLicense" minOccurs="1" maxOccurs="1"/>
                    <xsd:element name="credit_card" type="acct:CreditCardNumber" minOccurs="1" maxOccurs="1"/>
                    <xsd:element name="credit_card_expiration" type="acct:CreditCardExpiration" minOccurs="1" maxOccurs="1"/>
                    <xsd:element name="caller_id" type="acct:CallerId" minOccurs="1" maxOccurs="1"/>
                </xsd:sequence>
            </xsd:complexType>
            <xsd:element name="BasicAccount" type="acct:BasicAccountType"/>
        </xsd:schema>
    </schema>
</ProvisioningTarget>

This example highlights some important points.  The schema is expressed in XML-Schema embedded in the target schema element.  The target's schema element has a mandatory attribute that identifies the schema element which represents the root element of the target.  As the schema shows, the BasicAccount has a set of attributes including the plan name, some minimal information about the user, and the user's credit card information for billing purposes.  The driver's license number, credit card number, expiration and e-mail address all have format patterns defined.  As mentioned earlier, caller ID schema is integrated into the basic account schema in this example.

3. getTarget

Following the request for details about the Basic Service, the servlet proceeds to ask for the details for the other services requested by the user.  The following shows what the getTarget() response for the Friends and Family service might look like:

<ProvisioningTarget xmlns="urn:oasis:names:tc:SPML:0.1:provisioning:spml"
        xmlns:fnf="http://www.tiny.com/schema/friendsAndFamily"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="urn:oasis:names:tc:SPML:0.1:provisioning:spml http://schema/oasis-open.org/spml/spml.xsd"
        name="Friends and Family">
    <identifier name="friends_and_family_service"/>
    <description>You don't need to wait until the weekend.  Low rates any time for your 10 most frequently called numbers.</description>
    <schema element="fnf:FriendsAndFamilyAccount">
        <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" targetNamespace="http://www.tiny.com/schema/friendsAndFamily" elementFormDefault="qualified">
            <xsd:simpleType name="PhoneNumber">
                <xsd:restriction base="xsd:string">
                    <xsd:pattern value="(\(\d{3}\)\d{3}-\d{4})"/>
                </xsd:restriction>
            </xsd:simpleType>
            <xsd:element name="Contact" type="fnf:ContactType"/>
            <xsd:complexType name="ContactType">
                <xsd:sequence>
                    <xsd:element name="firstname" type="xsd:string" minOccurs="1" maxOccurs="1"/>
                    <xsd:element name="lastname" type="xsd:string" minOccurs="1" maxOccurs="1"/>
                    <xsd:element name="initial" type="xsd:string" minOccurs="0" maxOccurs="1"/>
                    <xsd:element name="nickname" type="xsd:string" minOccurs="0" maxOccurs="1"/>
                    <xsd:element name="phone" type="fnf:PhoneNumber" minOccurs="1" maxOccurs="1"/>
                </xsd:sequence>
            </xsd:complexType>
            <xsd:complexType name="ContactList">
                <xsd:sequence>
                    <xsd:element ref="fnf:Contact" minOccurs="0" maxOccurs="10"/>
                </xsd:sequence>
            </xsd:complexType>
            <xsd:complexType name="FriendsAndFamilyAccountType">
                <xsd:sequence>
                    <xsd:element name="contacts" type="fnf:ContactList" minOccurs="0" maxOccurs="1"/>
                </xsd:sequence>
            </xsd:complexType>
            <xsd:element name="FriendsAndFamilyAccount" type="fnf:FriendsAndFamilyAccountType"/>
        </xsd:schema>
    </schema>
</ProvisioningTarget>

The schema for a FriendsAndFamilyAccount has some interesting features.  Contact uses a complex type, having five fields, and the collection used to hold contacts is limited to a cardinality of ten so this is an example of how a target might express a constrained one-to-many relationship.

4. getTarget

The e-mail account information is quite simple:

<ProvisioningTarget xmlns="urn:oasis:names:tc:SPML:0.1:provisioning:spml"
        xmlns:email="http://www.tiny.com/schema/emailAccount"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="urn:oasis:names:tc:SPML:0.1:provisioning:spml http://schema.oasis-open.org/spml/spml.xsd"
        name="EMail">
    <identifier name="e_mail_service"/>
    <description>Receive e-mail straight to your phone.</description>
    <schema element="email:EMailAccount">
        <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" targetNamespace="http://www.tiny.com/schema/emailAccount">
            <xsd:simpleType name="EMailAddress">
                <xsd:restriction base="xsd:string">
                    <xsd:pattern value="(\w+@\w+\.\w+)"/>
                </xsd:restriction>
            </xsd:simpleType>
            <xsd:complexType name="EMailAccountType">
                <xsd:sequence>
                    <xsd:element name="firstname" type="xsd:string" minOccurs="1" maxOccurs="1"/>
                    <xsd:element name="lastname" type="xsd:string" minOccurs="1" maxOccurs="1"/>
                    <xsd:element name="address" type="email:EMailAddress" minOccurs="0" maxOccurs="1"/>
                    <xsd:element name="limit" type="xsd:int" minOccurs="0" maxOccurs="1"/>
                </xsd:sequence>
            </xsd:complexType>
            <xsd:element name="EMailAccount" type="email:EMailAccountType"/>
        </xsd:schema>
    </schema>
</ProvisioningTarget>

The user also requests a handset and text messaging but those exchanges are not shown here. 

5. createSubscription

In the final step of the request process, the servlet submits the information collected from the form to TinyProvisioning, at which point the application enters Tiny's account processing workflow.  The user is notified that the request has been successfully submitted and that the phone should arrive within 5 working days.  A voicemail account has been set up with an assigned password.  The additional services will be activated as the partners process the request.

<ProvisioningServiceSubscription xmlns="urn:oasis:names:tc:SPML:0.1:provisioning:spml"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="urn:oasis:names:tc:SPML:0.1:provisioning:spml http://schemas.oasis-open.org/spml/spml.xsd">
    <identifier name="WT400956"/>
    <children>
        <ProvisioningServiceSubscription>
            <identifier name="WT400956.1"/>
            <target>
                <identifier name="basic_account:123a"/>
            </target>
            <parameters>
                <BasicAccount xmlns="http://www.tiny.com/schema/basicAccount">
                    <plan>personal</plan>
                    <firstname>Wally</firstname>
                    <lastname>Ledbetter</lastname>
                    <initial>J</initial>
                    <email>wjl@customer.com</email>
                    <opt-in>1</opt-in>
                    <license>A78932456</license>
                    <credit_card>123456789012345</credit_card>
                    <credit_card_expiration>03/06</credit_card_expiration>
                    <caller_id>
                        <blocking_selected>0</blocking_selected>
                        <blocking_blocking_selected>1</blocking_blocking_selected>
                    </caller_id>
                </BasicAccount>
            </parameters>
        </ProvisioningServiceSubscription>
        <ProvisioningServiceSubscription>
            <identifier name="WT400956.2"/>
            <target>
                <identifier name="e_mail_service"/>
            </target>
            <parameters>
                <EMailAccount xmlns="http://www.tiny.com/schema/emailAccount">
                    <firstname>Wally</firstname>
                    <lastname>Ledbetter</lastname>
                    <address>wjl@tiny.com</address>
                </EMailAccount>
            </parameters>
        </ProvisioningServiceSubscription>
        <ProvisioningServiceSubscription>
            <identifier name="WT400956.3"/>
            <target>
                <identifier name="friends_and_family_service"/>
            </target>
            <parameters>
                <FriendsAndFamilyAccount xmlns="http://www.tiny.com/schema/friendsAndFamily">
                    <contacts>
                        <Contact>
                            <firstname>Milly</firstname>
                            <lastname>Ledbetter</lastname>
                            <nickname>Mom</nickname>
                            <phone>(323)555-1234</phone>
                        </Contact>
                        <Contact>
                            <firstname>Silly</firstname>
                            <lastname>Ledbetter</lastname>
                            <nickname>Bro</nickname>
                            <phone>(213)621-1234</phone>
                        </Contact>
                    </contacts>
                </FriendsAndFamilyAccount>
            </parameters>
        </ProvisioningServiceSubscription>
        <ProvisioningServiceSubscription>
            <identifier name="WT400956.4"/>
            <target>
                <identifier name="vocamail_account"/>
            </target>
            <parameters>
                <VoiceMail xmlns="http://schemas.vocamail.com/schema56_v2"/>
            </parameters>
        </ProvisioningServiceSubscription>
        <ProvisioningServiceSubscription>
            <identifier name="WT400956.5"/>
            <target>
                <identifier name="handset_service"/>
            </target>
            <parameters>
                <HandSet xmlns="http://www.phonesrus.com/schema/handsets">
                    <Nokia model="nk12345"/>
                </HandSet>
            </parameters>
        </ProvisioningServiceSubscription>
        <ProvisioningServiceSubscription>
            <identifier name="WT400956.6"/>
            <target>
                <identifier name="text_messaging"/>
            </target>
            <parameters>
                <SMSService xmlns="http://www.textual.com/schema/SMS"/>
            </parameters>
        </ProvisioningServiceSubscription>
    </children>
</ProvisioningServiceSubscription>

For brevity, the response message is not shown.  It will be very similar to the querySubscription response message in the next section however.

6. querySubscription

The user returns to the site and logs in.  The status page allows the user to query the current status of the provisioning request.  The servlet retrieves the user's subscription identifier and submits the query:

POST /services/provisioningServicePoint HTTP/1.1
Host: www.tiny.com
Content-Type: text/xml; charset="utf-8"
Content-Length: nnnn
SOAPAction: "urn:oasis:names:tc:SPML:0.1:provisioning:psp:querySubscription"

<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"
 SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
   <SOAP-ENV:Body>
       <psp:querySubscription xmlns:psp="urn:oasis:names:tc:SPML:0.1:provisioning:psp">
            <spml:identifier name="WT400956" xmlns:spml="urn:oasis:names:tc:SPML:0.1:provisioning:spml"/>
       </psp:querySubscription>
   </SOAP-ENV:Body>
</SOAP-ENV:Envelope>

The response message reflects the state of the provisioning requests for all of the user's services.  This is quite a large document so for clarity, again, the SOAP and HTTP data has been omitted.

<ProvisioningServiceSubscription xmlns="urn:oasis:names:tc:SPML:0.1:provisioning:spml"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="urn:oasis:names:tc:SPML:0.1:provisioning:spml http://schema.oasis-open.org/spml/spml.xsd">
    <identifier name="WT400956"/>
    <state>pending</state>
    <lifecycle>
        <ProvisioningSubscriptionEvent>
            <state>created</state>
            <date>2003-04-04T09:30:47-08:00</date>
            <description>Initial request</description>
            <actor name="SelfServiceServlet"/>
        </ProvisioningSubscriptionEvent>
    </lifecycle>
    <children>
        <ProvisioningServiceSubscription>
            <identifier name="WT400956.1"/>
            <target name="Basic Account">
                <identifier name="basic_account:123a"/>
            </target>
            <state>active</state>
            <lifecycle>
                <ProvisioningSubscriptionEvent>
                    <state>active</state>
                    <date>2003-04-04T09:30:47-08:00</date>
                    <description>Initial account creation</description>
                    <actor name="SelfServiceServlet"/>
                </ProvisioningSubscriptionEvent>
                <ProvisioningSubscriptionEvent>
                    <state>suspended</state>
                    <date>2005-04-04T09:30:47-08:00</date>
                    <description>Expiration of account contract</description>
                </ProvisioningSubscriptionEvent>
            </lifecycle>
        </ProvisioningServiceSubscription>
        <ProvisioningServiceSubscription>
            <identifier name="WT400956.2"/>
            <target>
                <identifier name="e_mail_service"/>
            </target>
            <state>active</state>
            <lifecycle>
                <ProvisioningSubscriptionEvent>
                    <state>active</state>
                    <date>2003-04-04T09:30:48-08:00</date>
                    <description>Initial account creation</description>
                    <actor name="SelfServiceServlet"/>
                </ProvisioningSubscriptionEvent>
            </lifecycle>
            <parameters>
                <EMailAccount xmlns="http://www.tiny.com/schema/emailAccount">
                    <firstname>Wally</firstname>
                    <lastname>Ledbetter</lastname>
                    <address>wjl@tiny.com</address>
                    <limit>50</limit>
                </EMailAccount>
            </parameters>
        </ProvisioningServiceSubscription>
        <ProvisioningServiceSubscription>
            <identifier name="WT400956.3"/>
            <target>
                <identifier name="friends_and_family_service"/>
            </target>
            <state>active</state>
            <lifecycle>
                <ProvisioningSubscriptionEvent>
                    <state>requested</state>
                    <date>2003-04-04T09:30:48-08:00</date>
                    <description>Initial account creation</description>
                    <actor name="SelfServiceServlet"/>
                </ProvisioningSubscriptionEvent>
                <ProvisioningSubscriptionEvent>
                    <state>active</state>
                    <date>2003-04-04T09:45:42-08:00</date>
                </ProvisioningSubscriptionEvent>
            </lifecycle>
            <parameters>
                <FriendsAndFamilyAccount xmlns="http://www.tiny.com/schema/friendsAndFamily">
                    <contacts>
                        <Contact>
                            <firstname>Milly</firstname>
                            <lastname>Ledbetter</lastname>
                            <nickname>Mom</nickname>
                            <phone>(323)555-1234</phone>
                        </Contact>
                        <Contact>
                            <firstname>Silly</firstname>
                            <lastname>Ledbetter</lastname>
                            <nickname>Bro</nickname>
                            <phone>(213)621-1234</phone>
                        </Contact>
                    </contacts>
                </FriendsAndFamilyAccount>
            </parameters>
        </ProvisioningServiceSubscription>
        <ProvisioningServiceSubscription>
            <identifier name="WT400956.4"/>
            <target>
                <identifier name="vocamail_account"/>
            </target>
            <state>active</state>
            <lifecycle>
                <ProvisioningSubscriptionEvent>
                    <state>requested</state>
                    <date>2003-04-04T09:30:48-08:00</date>
                    <description>Initial handset selection</description>
                    <actor name="SelfServiceServlet"/>
                </ProvisioningSubscriptionEvent>
                <ProvisioningSubscriptionEvent>
                    <state>active</state>
                    <date>2003-04-04T10:00:15-08:00</date>
                </ProvisioningSubscriptionEvent>
            </lifecycle>
            <parameters>
                <VoiceMail xmlns="http://schemas.vocamail.com/schema56_v2">
                    <password>1gh465hy</password>
                </VoiceMail>
            </parameters>
        </ProvisioningServiceSubscription>
        <ProvisioningServiceSubscription>
            <identifier name="WT400956.5"/>
            <target>
                <identifier name="handset_service"/>
            </target>
            <state>active</state>
            <lifecycle>
                <ProvisioningSubscriptionEvent>
                    <state>requested</state>
                    <date>2003-04-04T09:30:48-08:00</date>
                    <description>Initial handset selection</description>
                    <actor name="SelfServiceServlet"/>
                </ProvisioningSubscriptionEvent>
                <ProvisioningSubscriptionEvent>
                    <state>active</state>
                    <date>2003-06-04T13:46:48-08:00</date>
                </ProvisioningSubscriptionEvent>
            </lifecycle>
            <parameters>
                <HandSet xmlns="http://www.phonesrus.com/schema/handsets">
                    <Nokia model="nk12345"/>
                </HandSet>
            </parameters>
        </ProvisioningServiceSubscription>
        <ProvisioningServiceSubscription>
            <identifier name="WT400956.6"/>
            <target>
                <identifier name="text_messaging"/>
            </target>
            <state>unavailable</state>
            <lifecycle>
                <ProvisioningSubscriptionEvent>
                    <state>requested</state>
                    <date>2003-04-04T09:30:48-08:00</date>
                    <description>Initial account request</description>
                    <actor name="SelfServiceServlet"/>
                </ProvisioningSubscriptionEvent>
                <ProvisioningSubscriptionEvent>
                    <state>unavailable</state>
                    <date>2003-04-04T09:45:48-08:00</date>
                    <actor name="http://www.textual.com/SMSServiceServlet"/>
                    <reason>
                        <code>targetReportedError</code>
                        <message xml:lang="fr">Je ne comprend pas</message>
                        <message xml:lang="en-us">No Dice Buddy</message>
                        <data>
                            <sms:Error xmlns:sms="http://www.textual.com/schema/SMS">
                                <sms:ErrorCode>missingParameter</sms:ErrorCode>
                                <sms:ErrorValue>limit</sms:ErrorValue>
                            </sms:Error>
                        </data>
                    </reason>
                </ProvisioningSubscriptionEvent>
            </lifecycle>
        </ProvisioningServiceSubscription>
    </children>
</ProvisioningServiceSubscription> 

Points of note in the response include the notion of state of the subscription.  The ProvisioningSubscription class may have a lifecycle element which holds the set of state changes for the subscription.  In addition, the current state is reflected in the state element.  Although not included in this scenario, modification of a subscription may also include a state change such as, for example, a transition to suspended if the RA wishes to request the suspension of an account. 

Another important aspect of this message is the error information returned for the text messaging subscription.  The request to the partner system failed so the service now has a state of unavailable.  The details of the state change, available in the lifecycle, show why the request was refused.  Apparently, we ignored the fact that the service requires a limit value. 

References

[1] Draft proposed SPML core schema 

[2] Draft proposed PSP interface specification

[3] Draft proposed PSP SOAP bindings