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