Web Enabled DDS
Web Enabled DDS
Web-Enabled DDS
Version 1.0
__________________________________________________
OMG Document Number: formal/2016-03-01
Standard document URL: http://www.omg.org/spec/DDS-WEB
Machine Consumable File(s):
Normative:
http://www.omg.org/spec/DDS-WEB/20150901/webdds_rest1.xsd
http://www.omg.org/spec/DDS-WEB/20150901/webdds_websockets1.xsd
http://www.omg.org/spec/DDS-WEB/20131122/webdds_soap1_types.xsd
http://www.omg.org/spec/DDS-WEB/20131122/webdds_soap1.wsdl
http://www.omg.org/spec/DDS-WEB/20131122/webdds_soap1_notify.wsdl
Non-normative:
http://www.omg.org/spec/DDS-WEB/20150901/webdds_rest1_example.xml
http://www.omg.org/spec/DDS-WEB/20150901/webdds_pim_model_v1.eap
_______________________________________________
Copyright © 2013, eProsima
Copyright © 2016, Object Management Group, Inc. (OMG)
Copyright © 2013, Real-Time Innovations, Inc. (RTI)
Copyright © 2013, THALES
LICENSES
The companies listed above have granted to the Object Management Group, Inc. (OMG) a nonexclusive, royalty-free,
paid up, worldwide license to copy and distribute this document and to modify this document and distribute copies of the
modified version. Each of the copyright holders listed above has agreed that no person shall be deemed to have infringed
the copyright in the included material of any such copyright holder by reason of having used the specification set forth
herein or having conformed any computer software to the specification.
Subject to all of the terms and conditions below, the owners of the copyright in this specification hereby grant you a ful-
ly-paid up, non-exclusive, nontransferable, perpetual, worldwide license (without the right to sublicense), to use this
specification to create and distribute software and special purpose specifications that are based upon this specification,
and to use, copy, and distribute this specification as provided under the Copyright Act; provided that: (1) both the copy-
right notice identified above and this permission notice appear on any copies of this specification; (2) the use of the spec-
ifications is for informational purposes and will not be copied or posted on any network computer or broadcast in any
media and will not be otherwise resold or transferred for commercial purposes; and (3) no modifications are made to this
specification. This limited permission automatically terminates without notice if you breach any of these terms or condi-
tions. Upon termination, you will destroy immediately any copies of the specifications in your possession or control.
PATENTS
The attention of adopters is directed to the possibility that compliance with or adoption of OMG specifications may re-
quire use of an invention covered by patent rights. OMG shall not be responsible for identifying patents for which a li-
cense may be required by any OMG specification, or for conducting legal inquiries into the legal validity or scope of
those patents that are brought to its attention. OMG specifications are prospective and advisory only. Prospective users
are responsible for protecting themselves against liability for infringement of patents.
WHILE THIS PUBLICATION IS BELIEVED TO BE ACCURATE, IT IS PROVIDED "AS IS" AND MAY CONTAIN
ERRORS OR MISPRINTS. THE OBJECT MANAGEMENT GROUP AND THE COMPANIES LISTED ABOVE
MAKE NO WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, WITH REGARD TO THIS PUBLICATION, IN-
CLUDING BUT NOT LIMITED TO ANY WARRANTY OF TITLE OR OWNERSHIP, IMPLIED WARRANTY OF
MERCHANTABILITY OR WARRANTY OF FITNESS FOR A PARTICULAR PURPOSE OR USE. IN NO EVENT
SHALL THE OBJECT MANAGEMENT GROUP OR ANY OF THE COMPANIES LISTED ABOVE BE LIABLE
FOR ERRORS CONTAINED HEREIN OR FOR DIRECT, INDIRECT, INCIDENTAL, SPECIAL, CONSEQUEN-
TIAL, RELIANCE OR COVER DAMAGES, INCLUDING LOSS OF PROFITS, REVENUE, DATA OR USE, IN-
CURRED BY ANY USER OR ANY THIRD PARTY IN CONNECTION WITH THE FURNISHING, PERFOR-
MANCE, OR USE OF THIS MATERIAL, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
The entire risk as to the quality and performance of software developed using this specification is borne by you. This
disclaimer of warranty constitutes an essential part of the license granted to you to use this specification.
TRADEMARKS
CORBA®, CORBA logos®, FIBO®, Financial Industry Business Ontology®, FINANCIAL INSTRUMENT GLOBAL
IDENTIFIER®, IIOP®, IMM®, Model Driven Architecture®, MDA®, Object Management Group®, OMG®, OMG
Logo®, SoaML®, SOAML®, SysML®, UAF®, Unified Modeling Language®, UML®, UML Cube Logo®, VSIPL®,
and XMI® are registered trademarks of the Object Management Group, Inc.
For a complete list of trademarks, see: http://www.omg.org/legal/tm_list.htm. All other products or company names men-
tioned are used for identification purposes only, and may be trademarks of their respective owners.
COMPLIANCE
The copyright holders listed above acknowledge that the Object Management Group (acting itself or through its design-
ees) is and shall at all times be the sole entity that may authorize developers, suppliers and sellers of computer software
to use certification marks, trademarks or other special designations to indicate compliance with these materials.
Software developed under the terms of this license may claim compliance or conformance with this specification if and
only if the software compliance is of a nature fully matching the applicable compliance points as stated in the specifica-
tion. Software developed only partially matching the applicable compliance points may claim only that the software was
based on this specification, but may not claim compliance or conformance with this specification. In the event that testing
suites are implemented or approved by Object Management Group, Inc., software developed using this specification may
claim compliance or conformance with the specification only if the software satisfactorily completes the testing suites.
OMG’s Issue Reporting
All OMG specifications are subject to continuous review and improvement. As part of this process we encourage readers
to report any ambiguities, inconsistencies, or inaccuracies they may find by completing the Issue Reporting Form listed
on the main web page http://www.omg.org, under Documents, Report a Bug/Issue.
Table of Contents
Preface ....................................................................................................................................... iii
OMG .................................................................................................................................................. iii
OMG Specifications ............................................................................................................................. iii
Typographical Conventions.................................................................................................................. iv
Issues ................................................................................................................................................. iv
1 Scope .....................................................................................................................................1
1.1 Purpose ...................................................................................................................................... 1
1.2 Background ................................................................................................................................. 1
1.3 Overview of this Specification...................................................................................................... 2
1.3.1 Web-Enabled DDS (WebDDS) Object Model ...................................................................................2
1.3.2 Platform-Specific Mappings ............................................................................................................3
1.4 WebDDS Object Model ................................................................................................................ 3
1.5 Platform-Specific Mappings ......................................................................................................... 4
1.6 Example Scenarios....................................................................................................................... 4
2 Conformance ..........................................................................................................................5
3 Normative References ............................................................................................................5
4 Terms and Definitions .............................................................................................................6
5 Symbols .................................................................................................................................8
6 Additional Information ...........................................................................................................8
6.1 Acknowledgements ..................................................................................................................... 8
7 WebDDS Object Model ...........................................................................................................9
7.1 General ....................................................................................................................................... 9
7.2 Model Overview........................................................................................................................ 10
7.3 Access Control ........................................................................................................................... 11
7.3.1 Class WebDDS::Root ..................................................................................................................... 13
7.3.2 Class WebDDS::AccessController.................................................................................................. 18
7.3.3 Class WebDDS::Client (conceptual) .............................................................................................. 20
7.3.4 Class WebDDS::Application ......................................................................................................... 20
7.4 DDS Proxy classes ...................................................................................................................... 21
7.4.1 ReturnStatus ................................................................................................................................. 22
7.4.2 Access control and permissions ................................................................................................... 23
7.4.3 Class WebDDS::Application (details) ............................................................................................ 23
7.4.4 Class WebDDS::DomainParticipant .............................................................................................. 29
7.4.5 Class WebDDS::Publisher ............................................................................................................. 39
7.4.6 Class WebDDS::Subscriber ........................................................................................................... 42
7.4.7 Class WebDDS::DataWriter........................................................................................................... 46
7.4.8 Class WebDDS::DataReader.......................................................................................................... 49
7.4.9 Class WebDDS::WaitSet ................................................................................................................ 55
7.4.10 Class: WebDDS::QosLibrary ........................................................................................................ 56
7.4.11 Class: WebDDS::QosProfile......................................................................................................... 58
OMG
Founded in 1989, the Object Management Group, Inc. (OMG) is an open membership, not-for-profit computer industry
standards consortium that produces and maintains computer industry specifications for interoperable, portable, and reus-
able enterprise applications in distributed, heterogeneous environments. Membership includes Information Technology
vendors, end users, government agencies, and academia.
OMG member companies write, adopt, and maintain its specifications following a mature, open process. OMG’s specifi-
cations implement the Model Driven Architecture® (MDA®), maximizing ROI through a full-lifecycle approach to
enterprise integration that covers multiple operating systems, programming languages, middleware and networking infra-
structures, and software development environments. OMG’s specifications include: UML® (Unified Modeling Lan-
guage®); CORBA® (Common Object Request Broker Architecture); CWM™ (Common Warehouse Metamodel™); and
industry-specific standards for dozens of vertical markets.
OMG Specifications
As noted, OMG specifications address middleware, modeling and vertical domain frameworks. All OMG Specifications
are available from the OMG website at:
http://www.omg.org/spec
Middleware Specifications
CORBA/IIOP
Data Distribution Services
Specialized CORBA
Modernization Specifications
Platform Independent Model (PIM), Platform Specific Model (PSM), Interface Specifications
CORBAServices
All of OMG’s formal specifications may be downloaded without charge from our website. (Products implementing OMG
specifications are available from individual suppliers.) Copies of specifications, available in PostScript and PDF format,
may be obtained from the Specifications Catalog cited above or by contacting the Object Management Group, Inc. at:
OMG Headquarters
109 Highland Avenue
Needham, MA 02494
USA
Tel: +1-781-444-0404
Fax: +1-781-444-0320
Email: [email protected]
Certain OMG specifications are also available as ISO standards. Please consult http://www.iso.org
Typographical Conventions
The type styles shown below are used in this document to distinguish programming statements from ordinary English.
However, these conventions are not used in tables or headings where no distinction is necessary.
Times/Times New Roman - 10 pt.: Standard body text, table text, bullets
Helvetica/Arial – 9 or 10 pt. Bold: OMG Interface Definition Language (OMG IDL) and syntax elements.
Courier new/Courier – 10 pt. Bold: Programming Languages
1.2 Background
The OMG DDS specification a)[1] defines an API that applications can use to publish and subscribe
to data in a “Global Data Space.” The API defined by the DDS specification must be implemented by
means of local interfaces in each of the supported programming languages. This approach limits the
use of DDS to applications that (a) can link into the application the vendor-provided DDS
implementation libraries, and (b) use one of the programming languages supported by the DDS
implementations. In practice, these limitations mean that no standard APIs or mechanisms to access
the DDS Global Data Space from applications running inside a web browser (e.g., JavaScript
applications), or from remote “client” libraries that leverage commonly used scripting languages,
such as PHP, Perl, Ruby, or Python.
Another important usage scenario is that of disconnected or stateless clients. These are typically
implemented as single-command, short-lived processes, for example shell commands or web-server
CGI scripts. Under this usage scenario, a user starts a client application to execute a very simple
action, such as publishing data on a Topic or receiving the latest data on a Topic. The client executes
the action, returns the output (typically to the stdout), and then exits. This is a common scenario
when integrating with web-server applications that use CGI scripts to execute individual actions.
Disconnected or stateless clients are problematic because of the dynamic, one-to-many nature of
publish-subscribe applications and the fact that DDS does not require the presence of a broker or
centralized server. In order to publish or subscribe to data, a DDS application must join a domain,
discover other participants and other publishers and subscribers, exchange the information, and then
remain present long enough for the reliability protocol to ensure that all subscribers receive the
information. This makes the implementation of a short-lived process challenging. How long should
the process wait to discover all subscribers or publishers? The approach is also inefficient. Each time
the process starts, it must create new DDS entities that then must be discovered by the rest of the
system—only to be destroyed shortly afterwards.
With the increasing adoption of DDS for the integration of large distributed systems, it is desirable to
define standard ways whereby web-based applications can: access DDS; publish and subscribe to
data into the DDS Global Data Space; and benefit from the performance, scalability, and quality of
service offered by DDS implementations. In addition, it is desirable for this approach to support
efficient access to the Global Data Space by disconnected or stateless clients. Note that all these
things were possible before this specification, but the approaches were non-standard.
3. Web clients can access a Web-Enabled DDS service from any location, and therefore it is desirable to have an
access control model that authenticates each client application/principal, controls whether the principal can
access the DDS Global Data Space, and controls which operations each principal can perform (e.g., which DDS
Topics it can read and write).
Because of the existence of multiple popular web technologies and protocols (referred to in this
specification as “web platforms”), each with its own strengths and limitations, the Web-Enabled
DDS specification is not tied to or associated with a single web platform. Instead, it maps the
WebDDS Object Model into several web platforms. The intent of this approach is for all platform
mappings to be equivalent and interoperable.
1
The Web Applications Description Language (WADL) (see http://www.w3.org/Submission/wadl/) has been proposed as a
“member submission” to the W3C, but as of 2012 the W3C has stated it “has no plans to take up work based on this
submission” (see http://www.w3.org/Submission/2009/03/Comment)
The SOAP Platform mapping defines how to access the Object Model using WSDL interfaces and SOAP
messages [WSDL].
As a publisher, a Web application could be used to publish information using a web browser.
Based on the given examples, one could design more complex applications by mixing publishers and
subscribers in a single application.
Conforming implementations must implement the WebDDS Object Model as mapped to the RESTful
Platform.
Conforming implementations may implement one or more additional platform-specific mappings as
described in Clause 0 of this specification. Each of these individually shall represent an optional
compliance point for this specification.
3 Normative References
The following normative documents contain provisions that, through reference in this text, constitute
provisions of this specification. For dated references, subsequent amendments to, or revisions of, any
of these publications do not apply.
[DDS] Data Distribution Service for Real-Time Systems Specification, version 1.2
http://www.omg.org/spec/DDS/1.2
[DDS-CCM] [8] DDS for light-weight CCM specification (DDS4CCM) version 1.0.
http://www.omg.org/spec/dds4ccm/1.1/
[HTTP] Hypertext Transfer Protocol, version 1.1 (IETF RFC 2616); http://tools.ietf.org/rfc/rfc2616.txt.
[HTTP-Auth] “HTTP Authentication: Basic and Digest Access Authentication” IETF RFC 2617
http://tools.ietf.org/html/rfc2617
[XML] Extensible Markup Language (XML), version 1.1, Fifth Edition (W3C recommendation, November
2008). http://www.w3.org/TR/REC-xml/
ATOM platform
For the purposes of this specification, the name ATOM refers to a pair of related standards: (1) the
Atom Syndication Format, which is an XML language used for web feeds published by the IETF as
RFC 4287 and (2) the Atom Publishing Protocol, which is a simple HTTP-based protocol for
creating and updating web resources published by the IETF as RFC 5023.
The mandatory portion of the DDS specification used to provide the functionality required for an
application to publish and subscribe to the values of data objects.
An OMG distributed data communications specification that allows Quality of Service policies to be
specified for data timeliness and reliability. It is independent of implementation languages.
Data representation
A Data Representation is a serialization format for storing and/or transmitting the state of structured
objects. This term is used per [DDS-XTypes].
DDS world
A “DDS world” consists of a collection of peers communicating over the Data Distribution Service
and the collection of data observable by those peers. See also “web world.”
RESTful platform
As described in a dissertation by Roy Fielding, REST is an “architectural style” that exploits the
existing technology and protocols of the Web, including HTTP (Hypertext Transfer Protocol) and
XML. REST is simpler to use than the well-known SOAP (Simple Object Access Protocol)
approach, which requires writing or using a provided server program (to serve data) and a client
program (to request data).
RSS platform
RSS stands for Really Simple Syndication. RSS is a family of web feed formats used to publish
frequently updated works—such as blog entries, news headlines, audio, and video—in a standardized
format. An RSS document (which is called a “feed” or “channel”) includes full or summarized text
plus metadata such as publishing dates and authorship. Feeds benefit publishers by letting them
syndicate content automatically. They benefit readers who want to subscribe to timely updates from
favored websites or to aggregate feeds from many sites into one place. RSS feeds can be read using
software called an “RSS reader,” “feed reader,” or “aggregator,” which can be web-based, desktop-
based, or mobile-device-based. A standardized XML file format allows the information to be
published once and viewed by many different programs.
Generic term used to refer to an application that is accessing the Web-Enabled DDS over standard
web protocols, including but not limited to plain HTTP, SOAP over HTTP, RSS over HTTP, etc.
Web-enabled
Generic term used to indicate that a particular technology is accessible by Web Clients by means of
standard web protocols, including but not limited to plain HTTP, SOAP over HTTP, RSS over HTTP,
etc.
Web socket
WebSocket is a web technology providing bi-directional communications over a single TCP
connection. The WebSocket protocol was standardized by the IETF as RFC 6455 in 2011, and the
WebSocket API in Web IDL is being standardized by the W3C.
Web world
A “web world” consists of a collection of client applications communicating with one another using
web protocols, such as SOAP or REST, in conformance with this specification. These clients
communicate with one another and with the DDS world (see “DDS world”) through a web-enabled
DDS gateway.
WSDL platform
As described by the W3C, WSDL is an XML format for describing network services as a set of
endpoints operating on messages containing either document-oriented or procedure-oriented
information. The operations and messages are described abstractly and then bound to a concrete
network protocol and message format to define an endpoint. Related concrete endpoints are
combined into abstract endpoints (services). WSDL is extensible to allow description of endpoints
and their messages regardless of what message formats or network protocols are used to
communicate; however, the only bindings standardized by the W3C describe how to use WSDL in
conjunction with SOAP, HTTP GET/POST, and MIME. For the purposes of this specification, the
term “WDSL platform” shall refer to the set of standard specifications defined by the WS-I Basic
Profile 1.1 specification.
XMPP platform
The Extensible Messaging and Presence Protocol (XMPP) is an open technology for asynchronous
communication that powers a wide range of applications including instant messaging, presence,
multi-party chat, voice and video calls, collaboration, lightweight middleware, content syndication,
and generalized routing of XML data. The base specifications of the Extensible Messaging and
Presence Protocol (XMPP) formalize the core protocols developed within the Jabber open-source
community in 1999. They are published as IETF RFCs 3920 and 3921.
6 Additional Information
6.1 Acknowledgements
The following companies submitted content that was incorporated into this specification:
eProsima
Real-Time Innovations, Inc. (RTI)
THALES
The following additional companies support this specification:
General Dynamics
Twin Oaks Computing, Inc.
WebDDS DDS
+ AccessController + Condition
+ Application + ContentFilteredTopic
+ Client + DataReader
+ DataReader + DataReaderListener
«use» + DataWriter
+ DataWriter
+ DomainParticipant + DataWriterListener
WebClient «use»
+ Entity + DomainEntity
+ EntityName + DomainParticipant
+ Publisher + DomainParticipantFactory
+ Qos + DomainParticipantListener
+ QosLibrary + Entity
+ QosProfile + GuardCondition
+ RegisteredType + Listener
+ ReturnStatus + Publisher
+ Root + PublisherListener
+ SessionId + QosPolicy
+ Status + QueryCondition
«use»
+ Subscriber + ReadCondition
+ Topic + SampleInfo
+ Type + Status
+ WaitSet + StatusCondition
Qos + Subscriber
+ SubscriberListener
+ DataReaderQos
+ Topic
+ DataWriterQos
+ TopicDescription
+ DomainParticipantQos
+ TopicListener
+ PublisherQos
+ TypeSupport
+ SubscriberQos
+ WaitSet
+ TopicQos
+ Qos
(from DDS)
«value»
WebDDS::Type
WebDDS::QosLibrary
- name :string
- name :string
WebDDS::Client «singleton»
0..* WebDDS::Root WebDDS::AccessController
«use» «use»
0..*
0..*
Entity
WebDDS::
WebDDS::Application
DomainParticipant
0..*
At the highest-level Web-Enabled DDS Object Model consists of 5 classes: The WebDDS::Root
singleton, Client, Application, AccessController, and DomainParticipant.
The WebDDS::Root singleton is the entry point for the service and functions as a root factory and
container for all the Objects managed by the Web-Enabled DDS Service.
The Client class models the user or principal that executes the client application. Each
Application object is associated with a single Client and gets its access rights from those
assigned to the Client.
The Application class models a software application that uses WebDDS service in order to
publish and subscribe data on one or more DDS Domains. An Application can be associated
with zero of more DomainParticipant objects.
The AccessController is responsible for making decisions regarding the resources and
operations a particular Client is allowed to perform. It contains rules that associate a Client
with privileges which determine which DDS domain an application executing on behalf of a client
may join, the DDS Topics it can read and write, etc.
The WebDDS DomainParticipant is a proxy for the DDS DomainParticipant and
models the association with a DDS domain and the capability of the Application to publish and
subscribe to Topics on that domain.
Figure 5—Web Enabled DDS Service operating as gateway to Protected DDS domain
WebDDS::Client «singleton»
WebDDS::Root
- clientAPIKey :string
0..*
WebClient
1
0..*
0..*
Entity
WebDDS::Application
«use»
WebDDS::AccessController
+ check_permissions() :ReturnStatus
0..*
WebDDS::
«use»
DomainParticipant
To understand the purpose of the Application class, it is useful to go back to the traditional DDS
Object Model. The DDS Object Model is intended for use with a local programming API. Using the
DDS programming API applications create DDS entities, which inevitably get destroyed no later
than when the application finishes. Therefore, DDS Entities’ lifetimes are contained within the
application’s own. However, within a web-based distributed system this last assumption is not
always true. Web client applications may ask web servers to instantiate server-side entities and store
their state on the server side. Web clients will potentially be disconnected and reconnected from the
server. Such server-based entities may therefore have a lifetime that goes beyond a single client-
server session. For this reason the management of server-based entities that survive temporary
disconnects is an important issue addressed by this specification. This is precisely the purpose of the
Application class.
«singleton»
«value» WebDDS::Root WebDDS::QosLibrary
WebDDS::Type
+ create_application() :void - name :string
- name :string + delete_application() :void
+ create_qos_profile() :ReturnStatus
+ update_application() :void
+ update_qos_profile() :ReturnStatus
+ get_applications() :void
+ delete_qos_profile() :ReturnStatus
+ create_qos_library() :void
+ get_qos_profile() :ReturnStatus
+ delete_qos_library() :void
+ update_qos_library() :void
+ get_qos_libraries() :void
+ create_type() :void
+ delete_type() :void
+ update_type() :void WebDDS::AccessController «value»
+ get_types() :void WebDDS::
QosProfile
- name :string
0..* 0..* «use»
Entity «value»
WebDDS::Client WebDDS::ReturnStatus
WebDDS::Application
- clientAPIKey :string - returnCode :int
1 0..*
- returnMessage :string
Inputs
returnStatus (ReturnStatus): A numeric code indicating success or failure of the operation and a textual
description in case of failure.
Inputs:
Outputs:
returnStatus (ReturnStatus): A numeric code indicating success or failure of the operation and a textual
description in case of failure.
Deletes an existing WebDDS::Application. This operation performs the following logical steps:
It calls the check_permissions operation to verify that the client application is allowed by the
access control policies to delete the DDS::Application. If the check fails, it returns
PERMISSIONS_ERROR.
Inputs
returnStatus (ReturnStatus): A numeric code indicating success or failure of the operation and a textual
description in case of failure.
This operation returns a representation of the list of all the WebDDS::Application objects
associated with the WebDDS::Client whose name matches the applicationNameExpression. If
the operation fails, it returns GENERIC_SERVICE_ERROR, otherwise it returns OK.
Expression syntax and matching for the publisherNameExpression shall use the syntax and rules of
the POSIX fnmatch() function as specified in POSIX 1003.2-1992, section B.6 [19].
Inputs
Outputs
returnStatus (ReturnStatus): A numeric code indicating success or failure of the operation and a textual
description in case of failure.
Inputs
Outputs
returnStatus (ReturnStatus): A numeric code indicating success or failure of the operation and a textual
description in case of failure.
Inputs
Outputs
returnStatus (ReturnStatus): A numeric code indicating success or failure of the operation and a textual
description in case of failure.
This operation returns a representation of the list of all the WebDDS::QosLibrary objects
associated with the WebDDS::Root whose name matches the qosLibraryNameExpression. If the
operation fails, it returns GENERIC_SERVICE_ERROR, otherwise it returns OK.
Expression syntax and matching for the qosLibraryNameExpression shall use the syntax and rules
of the POSIX fnmatch() function as specified in POSIX 1003.2-1992, section B.6 [19].
Inputs
Outputs
returnStatus (ReturnStatus): A numeric code indicating success or failure of the operation and a textual
description in case of failure.
This operation creates a collection of WebDDS::Type objects including any nested types.
Inputs
typeName (string): The name of the data type. This name must be unique within the scope of the
Application object.
Outputs
returnStatus (ReturnStatus): A numeric code indicating success or failure of the operation and a textual
description in case of failure.
Inputs
Outputs
returnStatus (ReturnStatus): A numeric code indicating success or failure of the operation and a textual
description in case of failure.
If the typeNameExpression is a single type name, the operation checks whether there is already a
pre-existing WebDDS::Type of the specified fully-qualified typeName within the
WebDDS::Root. If the WebDDS::Type does not exist, it returns the INVALID_OBJECT error. If
it does exist, it returns a typeObjectRepresentationList that includes that type and the types it
references up to a maximum reference distance of includeReferencesTypesDepth.
Provide a secure communication channel with the client. For instance, HTTP requests must be performed over
HTTPS.
Provide a way to configure what clients are allowed to use the service.
Authenticate the client application (based on the credentials passed on every operation) to ensure it represent the
client identified by an API key.
Provide a way to configure which DDS domains (identified by the numeric DDS domainId) each client (identi-
fied by an API key) is allowed to join.
Reject any attempts of a client application to join a domain unless the API key provides permission to join the
domain in the service configuration.
Provide a way to configure which DDS Topics (identified by the Topic name) each client can publish on each
DDS domain.
Reject any attempts of a client application to publish to a Topic unless the associated client has been authenti-
cated and given permission to publish that topicName on that domainId by the service configuration.
Provide a way to configure which DDS Topics (identified by the Topic name) each client can subscribe to on
each on each DDS domain.
Reject any attempts of a client application to subscribe to a Topic unless the associated client has been authenti-
cated and given permission to subscribe to that topicName and on that domainId by the service configuration.
WebDDS::Client «singleton»
WebDDS::AccessController
WebDDS::Root
- clientAPIKey :string
0..* + check_permissions() :ReturnStatus
1
«use»
0..*
Entity
WebDDS::Application «use»
0..*
«use»
«use»
WebDDS::
0..* Publisher
WebDDS::
DomainParticipant
WebDDS::
Subscriber
Inputs
operationDetails (string sequence). Representation of the object on which the operation is being
performed and any relevant parameters.
«singleton»
WebDDS::Root WebDDS::QosLibrary
0..*
«value» WebDDS::Application
«value»
WebDDS::Type WebDDS:: «value»
QosProfile WebDDS::Qos
- name :string
- name :string
qos
0..* «use» qos_profile
WebDDS::Topic
WebDDS:: WebDDS::
Publisher Subscriber
WebDDS::
DataWriter WebDDS::
DataReader
The proxy classes are designed as a simplification of the DDS Object Model to (a) reduce the
number of classes and operations and (b) make the operation names and semantics more uniform
across the different classes so that it can be more easily accessed as resources in a REST-style
architecture. The high-level relationship between the proxy classes in the WebDDS Object Model
and the corresponding classes in the DDS Object Model is illustrated in Figure 10.
Entity
DDS::DomainParticipantFactory
WebDDS::Application
«use»
DDS::Condition
«use» 0..*
«use» DDS::Subscriber
WebDDS::Subscriber
WebDDS::Publisher
DDS::Publisher
«use»
WebDDS::DataReader DDS::DataReader
«use»
WebDDS::DataWriter DDS::DataWriter
«use» DDS::TopicDescription
«use»
WebDDS::Topic DDS::Topic
«use»
DDS::ContentFilteredTopic
«use»
(from DDS)
Figure 10—Mapping of WebDDS Object Model classes to DDS Object Model classes
7.4.1 ReturnStatus
The operations on the WebDDS objects return a ReturnStatus containing an integer
ReturnCode specifying whether the operation succeeded and in the case of failure the reason for
the failure. The set of possible ReturnCode values is shown in Table 3 below.
Table 3 ReturnCode values
Value Meaning
OK The operation succeeded
DDS_ERROR An operation on one of the underlying DDS objects returned an error.
OBJECT_ALREADY_EXISTS Request to create an already existing object
PERMISSIONS_ERROR The operation is not permitted by the access control rules that apply to the
client user.
GENERIC_SERVICE_ERROR Unspecified error.
Specific PSMs may map the GENERIC_SERVICE_ERROR value into more specific ReturnCode
values providing finer details for the PSM.
The description of the PIM operations specifies the ReturnStatus of each operation. As a
shortcut the following terminology is used:
The operation “returns OK.” This is a shortcut to specify that the operation shall return a ReturnStatus with
the returnCode attribute set to the value OK.
The operation “returns the XXX error.” This is a shortcut to specify that the operation shall return a
ReturnStatus with the returnCode attribute set to the XXX error and the returnMessage attribute
set to a textual description of the error.
Entity
«value» WebDDS::Application
WebDDS::Type
+ create_participant() :ReturnStatus WebDDS::WaitSet
+ update_participant() :ReturnStatus
+ delete_participant() :ReturnStatus
+ create_waitset() :ReturnStatus
+ update_waitset() :ReturnStatus
+ delete_waitset() :ReturnStatus «use»
DDS::
DomainParticipantFactory
«use»
WebDDS::QosLibrary «use»
WebDDS::AccessController
+ check_permissions() :ReturnStatus
0..*
WebDDS::DomainParticipant «use»
«value»
WebDDS::
DDS::DomainParticipant
QosProfile
«use» «use»
Inputs
participantObjectRepresentation (string) a representation of the WebDDS Participant object
including its name and optionally Qos and contained entities. The format of the representation shall be defined
by each PSM. The name of the participant shall be unique within the scope of the Application object.
Outputs
returnStatus (ReturnStatus): A numeric code indicating success or failure of the operation and a textual
description in case of failure.
Inputs
participantObjectRepresentation (string) a representation of the WebDDS Participant object
including its name and optionally Qos and contained entities. The format of the representation shall be defined
by each PSM. The name of the participant shall correspond to a previously created participant within the
Application object.
Outputs
returnStatus (ReturnStatus): A numeric code indicating success or failure of the operation and a textual
description in case of failure.
For each contained entity that already exists if the participantObjectRepresentation specifies a QoS, the opera-
tion shall call the check_permissions operation to verify that the client is allowed by the access control
policies to change the QoS of that entity.
For each contained entity that does not exist the operation shall call the check_permissions operation to
verify that the client is allowed by the access control policies to create that entity and set its QoS as specified.
The operation checks if any of the entities contained within the WebDDS::DomainParticipant are not
present in the participantObjectRepresentation. For any such entities, the operation
calls check_permissions operation to verify that the client is allowed by the access control
policies to delete that entity.
If any of the calls to check_permissions fails, any actions performed by this operation are
undone and the operation returns the PERMISSIONS_ERROR error.
If all the calls to check_permissions succeed, the operation performs the appropriate actions in
terms of
a) Creating the WebDDS objects specified in the participantObjectRepresentation. This creates any
associated DDS Objects.
b) Changing the QoS of the DDS Objects associated with previously existing objects
c) Deleting the WebDDS in the WebDDS::DomainParticipant which do nor appear in the
participantObjectRepresentation.
If any of the above creation, deletion, or QoS-setting operations fails, any actions performed by this
operation are undone and the operation returns the DDS_ERROR error.
If all the creation or QoS-setting operations succeed, the operation returns OK.
Inputs
Outputs
returnStatus (ReturnStatus): A numeric code indicating success or failure of the operation and a textual
description in case of failure.
Inputs
waitsetName (string): The name of the WaitSet. This name must be unique within the scope of the
Application object.
Outputs
returnStatus (ReturnStatus): A numeric code indicating success or failure of the operation and a textual
description in case of failure.
Inputs
Outputs
returnStatus (ReturnStatus): A numeric code indicating success or failure of the operation and a textual
description in case of failure.
Inputs
waitsetName (string): The name of the participant. This name must be unique within the scope of the
Application object.
Outputs
returnStatus (ReturnStatus): A numeric code indicating success or failure of the operation and a textual
description in case of failure.
class WebDDS_Participant
«value» WebDDS::Application
WebDDS::Type DDS::
«use» DomainParticipantFactory
«use»
«use»
0..*
typeName
WebDDS::DomainParticipant
WebDDS::AccessController
registeredTypeName
class WebDDS_Topic
«interface»
WebDDS::Application «value»
WebDDS::Entity
WebDDS::Type
typeName
0..* «use»
WebDDS::DomainParticipant
WebDDS::RegisteredType
+ register_type() :ReturnStatus
+ unregister_type() :ReturnStatus
+ create_topic() :ReturnStatus
+ update_topic() :ReturnStatus
+ delete_topic() :ReturnStatus
registeredTypeName
WebDDS::Topic TopicDescription
DDS::Topic
«use»
Inputs
registeredTypeName (string): The name the DDS::DomainParticipant should use to refer to this
type.
relatedTypeName (string): The name of the type as specified on a previous successful call to
Application::create_type.
Outputs
returnStatus (ReturnStatus): A numeric code indicating success or failure of the operation and a textual
description in case of failure.
Inputs
Outputs
returnStatus (ReturnStatus): A numeric code indicating success or failure of the operation and a textual
description in case of failure.
Inputs
topicObjectRepresentation (string) a representation of the WebDDS Topic object including the Topic
name (topicName), name of the registered type it is associated with, and optionally a QoS. The format of the
representation shall be defined by each PSM. The topicName of the Topic shall be unique within the scope of
the Participant object.
Outputs
returnStatus (ReturnStatus): A numeric code indicating success or failure of the operation and a textual
description in case of failure.
Inputs
topicObjectRepresentation (string) a representation of the WebDDS Topic object including the Topic
name (topicName) and optionally a qos or QosProfile. The format of the representation shall be defined by each
PSM. The topicName of the Topic shall be unique within the scope of the DomainParticipant object.
Outputs
returnStatus (ReturnStatus): A numeric code indicating success or failure of the operation and a textual
description in case of failure.
Inputs
Inputs
Outputs
returnStatus (ReturnStatus): A numeric code indicating success or failure of the operation and a textual
description in case of failure.
topicRepresentationList (string): An XML representation of the list of Topics whose name matches
the topicNameExpression. The format of the representation shall be defined by each PSM.
This operation returns the list of topic names whose name matches the topicNameExpression
and type matches the registeredTypeNameExpression. If the operation fails, it returns
GENERIC_SERVICE_ERROR, otherwise it returns OK.
Expression syntax and matching for the topicNameExpression and typeNameExpression shall use
the syntax and rules of the POSIX fnmatch() function as specified in POSIX 1003.2-1992, section
B.6 a)[19].
Inputs
returnStatus (ReturnStatus): A numeric code indicating success or failure of the operation and a textual
description in case of failure.
This operation creates a WebDDS::Publisher and the associated DDS::Publisher with the
desired QoS policies and contained entities.
This operation performs the following logical steps:
It checks if there is already a pre-existing WebDDS::Publisher of the specified
publisherName within the WebDDS::DomainParticipant. If the WebDDS::Publisher
already exists, it returns the OBJECT_ALREADY_EXISTS error.
If the publisherObjectRepresentation specifies a set of contained entities, the
check_permissions operation is invoked to verify that the client is allowed by the access
control policies to create those entities with their specified QoS. If the verification fails for any of
them, the WebDDS::Publisher is not created and the operation returns the
PERMISSIONS_ERROR error.
If the permissions checks succeed, the operation creates a WebDDS::Publisher which in turn
creates a DDS::Publisher using the specified QoS. It then creates all the WebDDS entities
specified as part of the publisherObjectRepresentation and their corresponding DDS Entities.
Each of the DDS Entities is created disabled. If the creation of any DDS Entity fails, then all the
created objects are destroyed and the operation returns the DDS_ERROR error.
If all the creations are successful, the DDS::Publisher and all contained entities are enabled and
the operation returns OK.
Inputs
Outputs
returnStatus (ReturnStatus): A numeric code indicating success or failure of the operation and a textual
description in case of failure.
This operation updates the QoS and contained entities of an existing Publisher.
This operation performs the following logical steps:
It locates a WebDDS::Publisher within the WebDDS::DomainParticipant with the
specified publisherName. If the WebDDS::Publisher does not exist, it returns the
INVALID_OBJECT error.
If the publisherObjectRepresentation specifies a QoS or QosProfile, the
For each contained entity that already exists if the publisherObjectRepresentation specifies a QoS the operation
calls check_permissions operation to verify that the client is allowed by the access control policies to
change the Qos of that entity.
For each contained entity that does not exist the operation calls check_permissions operation to verify
that the client is allowed by the access control policies to create that entity and set its Qos as specified.
The operation checks if any of the entities contained within the WebDDS::Publisher are not
present in the publisherObjectRepresentation. For any such entities, the operation calls the
check_permissions operation to verify that the client is allowed by the access control policies
to delete that entity.
If any of the calls to check_permissions fails, any actions performed by this operation are
undone and the operation returns the PERMISSIONS_ERROR error.
If all the calls to check_permissions succeed, the operation performs the appropriate actions in
terms of
a) Creating the WebDDS objects specified in the publisherObjectRepresentation. This creates any
associated DDS Objects.
b) Changing the QoS of the DDS Objects associated with previously existing objects.
c) Deleting the WebDDS entities in the WebDDS::Publisher which do not appear in the
participantObjectRepresentation and their peer objects on the associated DDS::Publisher.
If any of the above creation, deletion, or QoS-setting operations fails, any actions performed by this
operation are undone and the operation returns the DDS_ERROR error.
If all the creation or QoS-setting operations succeed, the operation returns OK.
Inputs
Outputs
returnStatus (ReturnStatus): A numeric code indicating success or failure of the operation and a textual
description in case of failure.
Inputs
Outputs
returnStatus (ReturnStatus): A numeric code indicating success or failure of the operation and a textual
description in case of failure.
This operation returns a representation of the list of all the WebDDS::Publisher objects
belonging to the WebDDS::DomainParticipant whose name matches the
publisherNameExpression. If the operation fails, it returns GENERIC_SERVICE_ERROR,
otherwise it returns OK.
Expression syntax and matching for the publisherNameExpression shall use the syntax and rules of
the POSIX fnmatch() function as specified in POSIX 1003.2-1992, section B.6 a)[19].
Inputs
Outputs
returnStatus (ReturnStatus): A numeric code indicating success or failure of the operation and a textual
description in case of failure.
Inputs
Outputs
returnStatus (ReturnStatus): A numeric code indicating success or failure of the operation and a textual
description in case of failure.
This operation updates the QoS and contained entities of an existing WebDDS::Subscriber.
This operation performs the following logical steps:
It locates a WebDDS::Subscriber within the WebDDS::DomainParticipant with the
specified subscriberName. If the WebDDS::Subscriber does not exist, it returns the
INVALID_OBJECT error.
If the subscriberObjectRepresentation specifies a QoS or QosProfile, the
check_permissions operation is invoked to verify that the client is allowed by the access
control policies to change the DDS::Subscriber QoS. If the verification is successful, it updates
the QoS of the DDS::Subscriber. Otherwise it returns the PERMISSIONS_ERROR error.
If the subscriberObjectRepresentation specifies a set of contained entities
(DataReader objects,) then the operation checks if these contained entities already exist.
For each contained entity that does not exist the operation calls check_permissions operation to verify
that the client is allowed by the access control policies to create that entity and set its Qos as specified.
The operation checks if any of the entities contained within the WebDDS::Subscriber are not
present in the subscriberObjectRepresentation. For any such entities, the operation calls the
check_permissions operation to verify that the client is allowed by the access control policies
to delete that entity.
If any of the calls to check_permissions fails, any actions performed by this operation are
undone and the operation returns the PERMISSIONS_ERROR error.
If all the calls to check_permissions succeed, the operation performs the appropriate actions in
terms of
a) Creating the WebDDS objects specified in the subscriberObjectRepresentation. This creates any
associated DDS Objects.
b) Changing the QoS of the DDS Objects associated with previously existing objects.
c) Deleting the WebDDS entities in the WebDDS::Subscriber which do not appear in the
subscriberObjectRepresentation and their peer objects on the associated DDS::Subscriber.
If any of the above creation, deletion, or QoS-setting operations fails, any actions performed by this
operation are undone and the operation returns the DDS_ERROR error.
If all the creation or QoS-setting operations succeed, the operation returns OK.
Inputs
Outputs
returnStatus (ReturnStatus): A numeric code indicating success or failure of the operation and a textual
description in case of failure.
Deletes an existing WebDDS::Subscriber. This operation performs the following logical steps:
It locates a WebDDS::Subscriber within the WebDDS::DomainParticipant with the
specified subscriberName. If the WebDDS::Subscriber does not exist, it returns the
INVALID_OBJECT error.
It calls the check_permissions operation to verify that the client is allowed by the access
control policies to delete the entities contained within the WebDDS::Subscriber. If the check
fails, it returns PERMISSIONS_ERROR.
If the verification is successful, it deletes the DDS::Subscriber associated with the
Inputs
Outputs
returnStatus (ReturnStatus): A numeric code indicating success or failure of the operation and a textual
description in case of failure.
This operation returns a representation of the list of all the WebDDS::Subscriber objects
belonging to the WebDDS::DomainParticipant whose name matches the
subscriberNameExpression. If the operation fails, it returns GENERIC_SERVICE_ERROR,
otherwise it returns OK.
Expression syntax and matching for the subscriberNameExpression shall use the syntax and rules of
the POSIX fnmatch() function as specified in POSIX 1003.2-1992, section B.6 a)[19].
«interface» WebDDS::
WebDDS::Entity DomainParticipant WebDDS::AccessController
«use»
WebDDS::Publisher
WebDDS::
DataWriter DDS::DataWriter
«use»
Inputs
Outputs
returnStatus (ReturnStatus): A numeric code indicating success or failure of the operation and a textual
description in case of failure.
This operation creates a WebDDS::DataWriter and the associated DDS::DataWriter with the
desired QoS policies.
Inputs
Outputs
returnStatus (ReturnStatus): A numeric code indicating success or failure of the operation and a textual
description in case of failure.
Inputs
Outputs
returnStatus (ReturnStatus): A numeric code indicating success or failure of the operation and a textual
description in case of failure.
Inputs
Outputs
returnStatus (ReturnStatus): A numeric code indicating success or failure of the operation and a textual
description in case of failure.
This operation returns a representation of the list of all the WebDDS::DataWriter objects
belonging to the WebDDS::Publisher whose name matches the datawriterNameExpression. If
the operation fails, it returns GENERIC_SERVICE_ERROR, otherwise it returns OK.
Expression syntax and matching for the datawriterNameExpression shall use the syntax and rules of
the POSIX fnmatch() function as specified in POSIX 1003.2-1992, section B.6 a)[19].
«interface» WebDDS::
WebDDS::Entity
DomainParticipant
- name :string WebDDS::AccessController
«use»
«use»
WebDDS::Subscriber
WebDDS::
DataReader DDS::DataReader
«use»
Inputs
Outputs
returnStatus (ReturnStatus): A numeric code indicating success or failure of the operation and a textual
description in case of failure.
This operation creates a WebDDS::DataReader and the associated DDS::DataReader with the
desired QoS policies.
This operation performs the following logical steps:
Inputs
Outputs
returnStatus (ReturnStatus): A numeric code indicating success or failure of the operation and a textual
description in case of failure.
Inputs
Outputs
returnStatus (ReturnStatus): A numeric code indicating success or failure of the operation and a textual
description in case of failure.
Inputs
Outputs
returnStatus (ReturnStatus): A numeric code indicating success or failure of the operation and a textual
description in case of failure.
This operation returns a representation of the list of all the WebDDS::DataReader objects
belonging to the WebDDS::Subscriber whose name matches the datareaderNameExpression.
If the operation fails, it returns GENERIC_SERVICE_ERROR, otherwise it returns OK.
Expression syntax and matching for the datareaderNameExpression shall use the syntax and rules
of the POSIX fnmatch() function as specified in POSIX 1003.2-1992, section B.6 a)[19].
class WebDDS_DataWriter
«interface» WebDDS::
WebDDS::Entity Publisher
DDS::Publisher
- name :string «use»
WebDDS::DataWriter
+ create_instance() :ReturnStatus
DDS::DataWriter
+ update_instance() :ReturnStatus «use»
+ delete_instance() :ReturnStatus
+ write() :ReturnStatus
WebDDS::Topic
TopicDescription
«use» DDS::Topic
Inputs
sampleData (string): A data-sample represented using the XML format as specified by the DDS-XTYPES.
Only the fields of the data that are defined as key in the associated data type are relevant to this operation.
Outputs
instanceHandleRepresention (string): An opaque handle that can be used to refer to the registered
instance.
returnStatus (ReturnStatus): A numeric code indicating success or failure of the operation and a textual
description in case of failure.
Inputs
sampleData (string): A representation of the data-sample. The format of the representation shall be defined
by each PSM.
Outputs
instanceHandleRepresention (string): An opaque handle that can be used to refer to the registered
instance.
returnStatus (ReturnStatus): A numeric code indicating success or failure of the operation and a textual
description in case of failure.
Inputs
sampleData (string): A representation of the data. Only the fields of the data that are defined as key in the
associated data type are relevant to this operation. The format of the representation shall be defined by each
PSM. This parameter is optional if the writeSampleInfo parameter is present.
Outputs
returnStatus (ReturnStatus): A numeric code indicating success or failure of the operation and a textual
description in case of failure.
Inputs
sampleData (string): A data-sample. The format of the representation shall be defined by each PSM.
returnStatus (ReturnStatus): A numeric code indicating success or failure of the operation and a textual
description in case of failure.
«interface» WebDDS::
WebDDS::Entity Subscriber DDS::Subscriber
«use»
- name :string
WebDDS::DataReader
DDS::DataReader
+ get() :ReturnStatus «use»
DDS::
WebDDS::Topic TopicDescription
«use»
- registeredTypeName :string
- topicName :string
«use»
DDS::Topic
Inputs
sampleSelector (string): An optional filter used to select which samples to access from the DataReader,
the syntax used for the sampleSelector is described in 0.
minSamples (int32): Optional parameter indicating the minimum number of samples to retrieve. If
unspecified, it defaults to one.
maxSamples (int32): Optional parameter indicating the maximum number of samples to retrieve. If
unspecified, it defaults to unlimited.
Outputs
sampleSequence (string): The available data samples along with their respective metadata (corresponding
to the DDS SampleInfo). The format of the representation shall be defined by each PSM. Each sample in the
sequence shall contain the following information:
o sampleData (string): contains a representation of the data accessed from the DDS::DataReader .
returnStatus (ReturnStatus): A numeric code indicating success or failure of the operation and a textual
description in case of failure.
The get operation shall allow the client application to retrieve data received by the
DDS::DataReader associated with the WebDDS::DataReader. The operation offers various
parameters to control the data retrieved and whether it is left in DDS::DataReader cache or
removed from it. If the operation requests data to be removed from the DDS::DataReader cache,
it invokes a “take” operation on the underlying DDS::DataReader. If it requests that the data is
left, it invokes the “read” operation on the underlying DDS::DataReader.
Note that the underlying DDS::DataReader offers many operations to allow access the
DDS::DataReader data in various ways, one at a time, in sequence, selected by the instance, by
the value of the various state flags (sampleState, instanceState, viewState), by content (via DDS
QueryConditions), etc.
This PIM exposes access to all this functionality using only the “get” operation combined with the
parameters to the call. Some (non-normative) examples follow:
To read a single sample leaving it in the DataReader cache you can use removeFromReaderCache=false and
maxSamples=1
To take all the samples for the data instance with a specified instance handle “MyHandle” include the expres-
sion instanceHandle=”MyValue” within the sampleSelector.
To take all the samples with instanceState “NOT_ALIVE_DISPOSED” include the expression instanceState
=” NOT_ALIVE_DISPOSED” within the sampleSelector.
3.1 If the MetadataExpression does not contain an InstanceHandleExpr, then the operation uses the
MetadataExpression to deduce the desired sample_state, view_state, and instance_state.
These states are used as parameters to calling read and/or take to obtain samples that match the desired
states. Other than this the logic is the same as in Case 1.
4.2.2 If the logical operation between the MetadataExpression and the FilterExpression is OR,
then the operation constructs a QueryCondition and the ReadCondition the same way as in 4.1.2.
In addition the operation analyzes the InstanceHandleExpr to deduce the desired instances. Finally
the operation calls read_instance_w_condition (or read_instance_w_condition) on
each of the instances of interest passing the ReadCondition and also calls read_w_condition (or
take_w_condition) passing the QueryCondition. The results are combined. The management of
minSamples and maxWait parameters is the same as per Case 1.
The sampleSelector re-uses the same syntax defined for the DDS SQL FilterExpression (see
Annex A of the DDS specification titled “Annex A: Syntax for DCPS Queries and Filters”) a)[20],
except that the syntax is extended to allow additional selection criteria. The extended syntax is
defined using BNF grammar below:
SampleSelector ::=
FilterExpression
|
MetadataExpression
|
FilterExpression ‘AND’ MetadataExpression
|
FilterExpression ‘OR’ MetadataExpression
.
FilterExpression ::= <<Defined in Annex A of the DDS Spec >>
MetadataExpression ::= MetadataExpression ‘OR’ MetadataExpression
| MetadataExpression ‘AND’ MetadataExpression
| InstanceHandleExpr
| InstanceStateExpr
| SampleStateExpr
| ViewStateExpr
.
class WebDDS_WaitSet
«interface» WebDDS::Application
WebDDS::Entity
+ create_waitset() :ReturnStatus
- name :string + update_waitset() :ReturnStatus
+ delete_waitset() :ReturnStatus
DDS::WaitSet
WebDDS::WaitSet «use»
0..*
+ wait() :ReturnStatus
DDS::Condition
«use»
Inputs
Outputs
conditionNameList (ConditionList): The list of conditions that are active. The format
of the representation shall be defined by each PSM.
returnStatus (ReturnStatus): A numeric code indicating success or failure of the
operation and a textual description in case of failure.
This operation allows the client application to block waiting for a set of conditions to become active,
or else for a timeout to occur. The operation shall return immediately if any of the conditions
associated with the WaitSet are active at the time the operation is called. If no conditions are
active, it shall wait until either a condition becomes active or else a timeout occurs.
Inputs
Outputs
Inputs
Outputs
Inputs
Outputs
Inputs
Outputs
A Qos Profile is a named object containing DDS Qos definitions for each kind of DDS Entity: Do-
mainParticipant, Topic, Publisher, Subscriber, DataWriter, and DataReader.
This grouping under a single Qos Profile object enables applications to specify desired Qos by indi-
cating only the name of the Qos Profile object to use. As DDS Entities are created the proper Qos is
selected based on the kind of DDS entity.
The REST platform maps the WebDDS Object Model into REST resources and operations on those resources.
The SIMPLE-WSDL-SOAP has equivalent functionality and purpose to the SIMPLE-REST platform, except it
is mapped to a WSDL/SOAP platform.
Qos and Qos Profiles may be represented in XML as described in the XML QoS Profiles defined by
[DDS-CCM] a)[9]a)[8].
Data Types may be represented in XML as described in the XML Type Representation defined by
[DDS-XTYPES].
Data may be represented in XML as described in the XML Data Representation defined by [DDS-
XTYPES].
Objects of the classes defined in the WebDDS Object Model that implement the WebDDS::Entity
interface may be represented in XML. Unless defined differently for a specific PSM the XML
representation of these objects uses the XML Data Representation defined by DDS-XTYPES applied
to the objects defined in the following IDL:
1. @Mutable
2. struct named_object {
3. string name;
4. };
5.
6. @Mutable
7. struct entity : named_object {
8. @Optional Qos qos;
9. @Optional string qos_profile;
10. };
11.
12. @Mutable
13. struct topic : entity {
14. @Optional string registered_type_name;
15. };
16.
17. @Mutable
18. struct data_writer : entity {
19. string topic_name;
20. };
21. typedef sequence<data_writer> datawriter_seq;
22.
23. @Mutable
24. struct publisher : entity {
25. @Optional datawriter_seq data_writers;
26. };
27. typedef sequence<publisher> publisher_seq;
28.
29. @Mutable
30. struct condition : named_object {
31. string expression;
32. };
33. typedef sequence<condition> condition_seq;
34.
35. @Mutable
36. struct data_reader : entity {
37. string topic_name;
38. @Optional condition status_condition;
39. @Optional condition_seq read_conditions;
40. @Optional condition_seq query_conditions;
41. };
42. typedef sequence<data_reader> datareader_seq;
Delete operations are mapped into the “DELETE” HTTP method unless they take parameters in which case they
map to a POST.
Operations that do not fit into the above categories are mapped into the POST method.
The parameters to the operations in the WebDDS PIM object are mapped according to the following
rules:
Create (POST) operations receive the parameters in the HTML body. The parameter is the XML representation
of the object being created as defined in 8.2.4.
Delete operations mapped to DELETE operate just on the URI. DELETE receives no parameters in the body.
Delete operations mapped to POST receive the parameters in the HTML body. It receives the XML representa-
tion of the object being deleted minimally containing the name or any fields that form a unique identifier.
Update (PUT) operations receive the parameters in the HTML body. The parameter is an XML representation of
the object. It is the same format as when the object was created
Get (GET) operations receive the parameters as part of the URI. The parameters follow the resource name, sepa-
rated by a “?” character. Each parameter is represented using the format <paramater-
Name>=”<parameterValue>”. Successive parameters are separated by the “&” sign. Non-allowed characters are
encoded using percent-encoding as is customary in URIs.
The WebDDS::ReturnStatus returned by all PIM operations is mapped to the HTTP response Status
line (IETF RFC 2616 a)[13], Section 6.1) and it shall not appear in the body of the HTTP response.
The remaining outputs from the PIM operations are returned in the HTTP response body as specified
in 8.3.3.
The string returnMessage attribute of the WebDDS::ReturnStatus shall be mapped to the Reason-Phrase in the
HTTP Status Line.
The integer returnCode attribute of the WebDDS::ReturnStatus shall be mapped to the HTTP status code in ac-
cordance with the following rules:
The PIM delete operations shall map it to HTTP status 204 No Content
The PIM update operations shall map it to HTTP status 204 No Content
ReturnCode INVALID_INPUT shall be mapped to HTTP status 422 Unprocessable Entity (see IETF RFC
4918 a)[22]).
ReturnCode GENERIC_SERVICE_ERROR shall be mapped to HTTP status 500 Internal Server Error.
ReturnCode DDS_ERROR shall be mapped to HTTP status 500 Internal Server Error.
sampleData <xs:any>
The table below lists the HTTP requests headers used by the WebDDS REST platform.
Table 7 HTTP request headers used by the REST platform
The table below lists the HTTP response headers used by the WebDDS REST platform.
Table 8 HTTP response headers used by the REST platform
«singleton»
WebDDS::User WebDDS::WSDDS WebDDS::AccessController
- userName :string + login() :ReturnStatus
- accessToken :string 0..*
+ logout() :ReturnStatus
1
session_id
«use»
0..*
SimpleWebDDS::Application
- ip_address :long
- ip_port :long
- notification_style :long
- encoding_style :long
+ Notify() :void
Figure 19—Simplified WebDDS Object Model used by the Simple WSDL-SOAP Platform
The Object Model used by the Simple WSDL-SOAP platform shares the Root, Client and
AccessController classes with the WebDDS object Model. The remaining classes are specific
to this model.
Most of the logic in the simplified object model is carried out by the SimpleWebDDS::Application
class which combines the functionality offered by the Application, Participant, Topic, Publisher,
The operations in the Simplified SOAP PSM all include a returnCode and a returnMessage as part of
the operation return. The PSM’s returnString maps directly to the returnMessage attribute of the
WebDDS::ReturnStatus in the PIM. The PSM’s returnCode maps to the returnCode attribute of the
WebDDS::ReturnStatus in the PIM according to the table below.
Table 10 Mapping of Simplified SOAP PSM ReturnCode to PIM ReturnCode
DDS_ERROR DDS_ERROR
SUBSCRIPTION_ALREADY_EXISTS, OBJECT_ALREADY_EXISTS
PUBLICATION_ALREADY_EXISTS
INVALID_SESSION_ID INVALID_SESSION_ID
PERMISSIONS_ERROR, PERMISSIONS_ERROR
NO_RIGHTS_JOINING_DOMAIN,
NO_RIGHTS_CREATING_TOPIC,
NO_RIGHTS_CREATING_UNKNOWN_TOPIC,
NO_RIGHTS_SUBSCRIBING,
NO_RIGHTS_PUBLISHING,
NO_RIGHTS_BEING_NOTIFIED
SERVER_ERROR, GENERIC_SERVICE_ERROR
MAX_SESSION_COUNT_REACHED
The full WSDL interfaces are defined in the normative readable files webdds_soap1_types.xsd,
webdds_soap1.xml, and webdds_soap1_notify.xml.
8.5.2 Operation over Web Sockets (WS) and Secure WebSockets (WSS)
The WebDDS::Client shall initiate the WebSocket connection advertising the web sockets’ sub-
protocol “dds-web”. The WebDDS service: shall accept that sub-protocol.
Non-secured web socket connections shall be identified by the URL schema:
ws://<servername>[:<port>]/dds/v1/<connectionName>
WebDDS::Clients can exchange the following types of messages with the WebDDS service
instances: HELLO, HELLO_OK, HELLO_FAIL, REQUEST, RESPONSE, BIND,
B_REQUEST, Z_REQUEST,, B_PUSH, and Z_PUSH.
All messages shall use Text Data Frames (opcode 0x1. See section 5.6 of IETF RFC 6455).
A WebDDS message may be sent in a single WebSockets frame or split into multiple frames. Each
WebSockets frame shall contain information from a single WebDDS message. All frames of a single
WebDDS message shall be consecutive. That is, it is not allowed to interleave fragments from
multiple WebDDS messages over a single Web Sockets connection.
The HELLO message shall be the first message sent by the WedDDS::Client on each established
WS or WSS connection. The WebDDS service shall not send any messages or process any messages
over a WS/WSS connection until the HELLO message has been received on that connection.
The HELLO message shall be sent in a single WebSocket text-data frame. The format is the same as
the Request Header Fields section in an HTTP message. That is, colon-separated string name-value
pairs, each terminated by a carriage return (CR) and line feed (LF) character sequence.
The following three HTTP Header fields defined in Table 8 shall appear in the HELLO message:
Accept, Content-Type, and OMG-DDS-API-Key. The possible content for those fields is as
defined in Table 7. In addition there shall be a field with name “Version” and value set to “1”.
The HELLO message may contain additional vendor-specific fields.
The WebDDS service implementation shall process the HELLO message as follows:
If any of the specified fields are missing, the WebDDS service shall send a HELLO_FAIL
message and close the connection.
Once the WebSocket connection has been established the WebDDS::Client communicates with
the WebDDS service sending REQUEST messages and receiving RESPONSE messages.
The message content for the REQUEST message is equivalent to the HTTP request messages used to
map the WebDDS PIM to REST methods (see 8.3.3) except that the REQUEST message is no longer
an HTTP message and hence encodes the information slightly differently.
Similarly the message content for the RESPONSE message is equivalent to the HTTP request
messages used to map the WebDDS PIM to REST methods (see subclause 8.3.3), albeit with slightly
different encoding.
If the Content-Type specified application/dds-web+xml, the REQUEST shall be
formatted as the XML element <request> with the syntax defined in the file
webdds_websockets1.xsd. Similarly the RESPONSE message shall be formatted as the XML
element <response> with the syntax also defined in the file webdds_websockets1.xsd.
The XML <request> element contains up to four children: <id>, <uri>, <method> and
<body>. The mapping to the REST+XML platform protocol, resources and resource
representations to the elements in the REQUEST message is defined in the table below:
The XML <response> element contains three children: <id>, <return_code>, and <body>.
The mapping of the RESPONSE message to the REST+XML platform protocol, resources and
resource representations is defined in the table below:
Table 12 WebSockets RESPONSE message for the XML platform
<uri> Maps to the REST resource name. Corresponds to the URI column in Table 5.
<request>
<id>Req-123457</id>
<uri>/applications/MyFirstShapesApplication/domain_participants/SquareRea
derPartici-
pant/subscribers/SquareSubscriber/data_readers/SquareReader</uri>
<method>GET</method>
</request>
<request>
<id>Req-123458</id>
<uri>/applications/MyFirstShapesApplication/domain_participants/MyPartici
pant/publishers/ShapePublisher/data_writers/SquareWriter</uri>
<method>POST</method>
<body>
<write_sample_seq>
<sample>
<write_sample_info>
<source_timestamp>
<sec>10</sec>
<nanosec>20</nanosec>
</source_timestamp>
</write_sample_info>
<data>
<ShapeStruct>
<color>YELLOW</color>
<x>10</x>
<y>20</y>
</ShapeStruct>
</data>
</sample>
</write_sample_seq>
</body>
</request>
<response>
<id>Req-123457</id>
<return_code>OK</return_code>
<body>
<read_sample_seq>
<sample>
<read_sample_info>
<source_timestamp>
<sec>10</sec>
<nanosec>0</nanosec>
</source_timestamp>
<valid_data>true</valid_data>
<instance_handle>0</instance_handle>
<instance_state>ALIVE</instance_state>
<sample_state>NOT_READ</sample_state>
<view_state>NEW</view_state>
</read_sample_info>
<data>
<ShapeStruct>
<color>GREEN</color>
<x>10</x>
<y>20</y>
</ShapeStruct>
</data>
</sample>
</read_sample_seq>
</body>
</response>
<response>
<id>Req-123458</id>
<return_code>OK</return_code>
</response>
Improving performance is one of the key motivations for using WebSockets. Writing and reading
data are the most time critical operations performed by a WebDDS::Client.
For this reason this specification defines an optimized protocol for the WebDDS::Client to write
and receive data.
To enable the optimized read/write operation the WebDDS::Client must send a BIND message to
associate a logical “bind_id” with the URI of a specific DataWriter or DataReader. This
association saves having to send the full DataWriter or DataReader URI on each message.
When using content of type application/dds-web+xml the BIND request message shall be
formatted as the XML element <bind> defined in webdds_websockets1.xsd. A single BIND
message may be used to bind multiple DataWriters and DataReaders.
Example binding of data writers and readers for optimized read/write using XML:
<bind>
<bind_datawriter>
<bind_id>MySquareWriterId</bind_id>
<uri>applications/MyFirstShapesApplication/domain_participants/MyParticip
ant/publishers/ShapePublisher/data_writers/SquareWriter</uri>
</bind_datawriter>
<bind_datareader>
<bind_id>MySquareReaderId</bind_id>
<uri>/applications/MyFirstShapesApplication/domain_participants/SquareRea
derPartici-
pant/subscribers/SquareSubscriber/data_readers/SquareReader</uri>
</bind_datareader>
</bind>
To cancel the binding of a previously-bound resource the WebDDS::Client shall send a BIND
message with the same bind_id and an empty URI.
Once a DataWriter has been bound the WebDDS::Client can write data to the DataWriter
using the optimized B_REQUEST message.
The B_REQUEST message contains a bind_id whose value must correspond to a previously speci-
fied bind_id in a BIND message. This identifies the resource that is being referenced in the re-
quest. The B_REQUEST message also contains a “body” element that is set with the same content
that would have been used for the body of the on-optimized REQUEST message.
<b_req>
The Z_REQUEST message may be used as an alternative “compressed” version of the B_REQUEST.
The use of the compressed version uses less space and therefore increases performance.
The only difference between the Z_REQUEST message and the corresponding B_REQUEST is that
all XML element names except those nested inside the <data> element have their name abbreviat-
ed:
Single-word element names defined as those with no underscore character (‘_’) shall be abbreviated to just the
first character of the name.
Element names with an “_” characters shall be abbreviated to the first letter followed by the first letter that ap-
pears after each underscore character.
For example, element name <body> is abbreviated to <b> and element name
<write_sample_seq> is abbreviated to <wss>.
<br>
<bi>MySquareWriterId</bi>
<b>
<wss>
<s>
<wsi>
<st>
<s>10</s>
<n>20</n>
</st>
</wsi>
<d>
<ShapeStruct>
<color>YELLOW</color>
<x>10</x>
<y>20</y>
</ShapeStruct>
</d>
</s>
</wss>
</b>
</br>
Receiving data is one of the most time critical operations performed by a WebDDS::Client. To
minimize the latency on the data received it is essential to provide a mechanism for the WebDDS
service to “push” data to the WebDDS::Client when it becomes available. That way the client
avoids having to “poll” for data. For this reason this specification defines the B_PUSH message.
Once a DataReader has been bound to a WebSocket the WebDDS service can push data
received on the DataReader to the WebDDS::Client over the WebSocket using the B_PUSH
message.
The B_PUSH message contains a bind_id whose value must correspond to a previously-specified
bind_id in a BIND message. This identifies the resource that is being referenced in the push. In
this case it corresponds to a DataReader. The B_PUSH message also contains a “body” element
that is set with the same content that would have been used for the body of the response message that
would have been sent if the application had issued request using the “GET” method on that resource.
The Z_PUSH message may be used as an alternative “compressed” version of the B_PUSH. Similar
to the motivation for the Z_REQUEST the use of the compressed version of B_PUSH uses less space
and therefore increases performance.
The Z_PUSH message is constructed from the B_PUSH message applying the same rules used to
construct the Z_REQUEST message from the B_REQUEST message.
This specification requests IANA to register the WebSocket DDS-WEB sub-protocol under the
“WebSocket Subprotocol Name” registry with the following data:
[4] Extensible Messaging and Presence Protocol (XMPP): Core. IETF RFC 6120. XMPP
http://xmpp.org/rfcs/rfc6120.html
[5] SOAP Version 1.2 Part 1: Messaging Framework (Second Edition) http://www.w3.org/TR/soap12-part1/
[6] DDS-RTPS: Data-Distribution Service Interoperability Wire Protocol version 2.1, http://www.omg.org/spec/DDS-
RTPS/2.1/
[7] Uniform Resource Identifier (URI): Generic Syntax. IETF RFC 3986. http://tools.ietf.org/html/rfc3986
[8] DDS for light-weight CCM specification (DDS4CCM) version 1.0. http://www.omg.org/spec/dds4ccm/1.1/
[12] Atom Syndication Format (IETF RFC 4287); http://www.ietf.org/rfc/rfc4287.txt. Atom Publishing Protocol (IETF
RFC 5023); http://tools.ietf.org/rfc/rfc5023.txt
[13] Hypertext Transfer Protocol, version 1.1 (IETF RFC 2616); http://tools.ietf.org/rfc/rfc2616.txt
[14] The WebSocket Protocol, version 1.1 (IETF RFC 6455); http://tools.ietf.org/rfc/rfc6455.txt.
[17] Extensible Markup Language (XML), version 1.1, Second Edition (W3C recommendation, August 2006).
[18] HTTP Authentication: Basic and Digest Access Authentication. IETF RFC 2617. http://tools.ietf.org/html/rfc2617
[19] File expression matching syntax for fnmatch() ; POSIX fnmatch API (IEEE 1003.2-1992 section B.6)
[20] DDS Data-Distribution Service fore Real-Time Systems version 1.2, Annex A: Syntax for DCPS Queries and Fil-
ters. http://www.omg.org/spec/DDS/1.2
[23] IETF RFC 2617 “HTTP Authentication: Basic and Digest Access Authentication” http://tools.ietf.org/html/rfc2617
[24] IETF RFC 6648 “Deprecating the “X-“ Prefix and Similar Constructs in Application Protocol”
http://tools.ietf.org/html/rfc6648
[25] IETF RFC 5849 “The OAuth 2.0 Authorization Framework, v2-31” http://tools.ietf.org/html/draft-ietf-oauth-v2-31