X-Road: Message Protocol for REST
Technical Specification
Version: 1.0.3
Doc. ID: PR-REST
Version history
| Date | Version | Description | Author |
|---|---|---|---|
| 02.10.2018 | 0.1.0 | Initial draft version | Ilkka Seppälä |
| 30.10.2018 | 0.2.0 |
|
Ilkka Seppälä Petteri Kivimäki Jarkko Hyöty |
| 11.01.2019 | 0.3.0 |
|
Ilkka Seppälä Petteri Kivimäki Jarkko Hyöty Janne Mattila Lauri Koutaniemi |
| 21.02.2019 | 0.4.0 |
|
Ilkka Seppälä Petteri Kivimäki Jarkko Hyöty |
| 22.03.2019 | 0.5.0 |
|
Ilkka Seppälä Petteri Kivimäki Jarkko Hyöty |
| 22.03.2019 | 0.9.0 | Initial Markdown documentation | Caro Hautamäki |
| 25.04.2019 | 1.0.0 | Update document version number | Jarkko Hyöty |
| 19.05.2020 | 1.0.1 | Added chapter 4.8 Identifier Character Restrictions | Ilkka Seppälä |
| 27.05.2022 | 1.0.2 |
|
Petteri Kivimäki |
| 15.06.2023 | 1.0.3 | Stricter identifier character restrictions | Madis Loitmaa |
License
This document is licensed under the Creative Commons Attribution-ShareAlike 3.0 Unported License. To view a copy of this license, visit http://creativecommons.org/licenses/by-sa/3.0/
Table of Contents
- 1 Introduction
- 2 Definitions
- 3 Scope
- 4 Message Format
- 5 Services
- 6 Examples
- Appendix 1 Example Service Definition
1 Introduction
1.1 Overview
Representational State Transfer [REST] is an architectural style that defines a set of constraints to be used for creating web services. Web services that conform to the [REST] architectural style, or RESTful web services, provide interoperability between computer systems on the Internet. REST-compliant web services allow the requesting systems to access and manipulate representations of web resources by using a uniform and predefined set of stateless operations. In the REST architectural style, the client and server implementations can be independent as long as they know the format of messages to send each other.
This document describes the X-Road Message Protocol for [REST]. The protocol is used in X-Road infrastructure between information systems and X-Road Security Servers to consume and produce REST services. Between the Security Servers there is another protocol called X-Road Message Transport Protocol which is described in its own document [PR-MESSTRANSP].
1.2 REST
In the REST architecture, clients send requests to retrieve, modify or delete resources. Servers send responses to these requests. In general a request consists of
- HTTP verb, which defines the kind of operation to perform
- header, which allows the client to pass along information about the request
- path to a resource
- an optional message body containing data
Typically four different HTTP verbs are used to interact with the resources in REST system
- GET - retrieve a resource
- POST - create new resource
- PUT - update a resource
- DELETE - delete a resource
The most common headers used in RESTful communication are Accept
and Content-Type
. By including the Accept
header
in the request the client specifies the content types it is able to read. When reading the request, the server should
respect the Accept
header and provide the response in the specified format. The server sets the Content-Type
header
in the response message to reveal the actual type of content.
The requests need to specify the path to the resource it is operating on. There are no strict rules how the paths have
to be defined, but there are commonly used recommendations. In RESTful APIs, the paths should be designed logically and
consistently so that the operations are easy to use for the client. For example a
request GET https://petstore.niis.org/v2/pets/1124
will read a certain pet's information
and POST https://petstore.niis.org/v2/pets
will create a new pet.
The response indicates the result of the operation with HTTP status code. The expected status code of success varies depending on the requested operation.
- GET - 200 OK
- POST - 201 CREATED
- PUT - 200 OK
- DELETE - 204 NO CONTENT
Also when the operation fails, the reason is indicated with HTTP status. Some of the most common error codes are listed below.
- 400 BAD REQUEST
- 404 NOT FOUND
- 500 INTERNAL SERVER ERROR
2 Definitions
2.1 Key Words
The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and " OPTIONAL" in this document (in uppercase, as shown) are to be interpreted as described in [RFC2119].
2.2 X-Road Terminology
The X-Road specific terminology such as instance, member class, member and subsystem are described in the document [XROAD-TERMS].
2.3 Versioning
The X-Road Message Protocol for REST uses [SEMANTIC-VERSIONING] rules. After the initial development phase (0.x) there MUST be a strongly justified reason for amending or updating the protocol. Especially new major versions of the protocol SHOULD be extremely rare.
The protocol version identifier comes from the major version of the protocol and is a mandatory part of the request URL. The initial released version of the protocol will have the identifier r1. When the protocol needs to be updated, the most important consideration is backwards compatibility.
A) If the change can be introduced in a backwards compatible manner (i.e. the clients not aware of the change are still able to communicate using the protocol) the major protocol version and the protocol version identifier remain the same. Depending on the scope of the change, the minor or patch version is incremented e.g. 1.0.0 → 1.1.0.
B) If the change requires breaking the backwards compatibility the major protocol version and the protocol version identifier are incremented e.g. 1.2.3 → 2.0.0. The old protocol will be supported for at least a year after releasing the new version.
2.4 References
[REST] Representational state transfer https://en.wikipedia.org/wiki/Representational_state_transfer
[RFC2119] Key words to Indicate Requirement Levels https://www.ietf.org/rfc/rfc2119.txt
[RFC7231] Hypertext Transfer Protocol (HTTP/1.1): Semantics and Content https://tools.ietf.org/html/rfc7231
[UUID] Universally unique identifier https://en.wikipedia.org/wiki/Universally_unique_identifier
[RFC3986] Uniform Resource Identifier (URI): Generic Syntax https://tools.ietf.org/html/rfc3986
[PERCENT-ENCODING] Uniform Resource Identifier (URI): Percent-Encoding https://tools.ietf.org/html/rfc3986#section-2.1
[OPENAPI-INITIATIVE] OpenAPI Initiative https://www.openapis.org/
[OPENAPI3] OpenAPI Specification Version 3.0.0 https://github.com/OAI/OpenAPI-Specification/blob/master/versions/3.0.0.md
[SEMANTIC-VERSIONING] Semantic Versioning https://semver.org/
[HPPP] Testing for HTTP Parameter pollution ( OTG-INPVAL-004) https://www.owasp.org/index.php/Testing_for_HTTP_Parameter_pollution_(OTG-INPVAL-004)
[SSRF] Server Side Request Forgery https://www.owasp.org/index.php/Server_Side_Request_Forgery
[RFC2616] Hypertext Transfer Protocol -- HTTP/1.1 https://tools.ietf.org/html/rfc2616.html
[RFC6265] HTTP State Management Mechanism https://tools.ietf.org/html/rfc6265
[LIST-OF-HTTP-HEADERS] List of HTTP header fields https://en.wikipedia.org/wiki/List_of_HTTP_header_fields
[PR-MESSTRANSP] X-Road: Message Transport Protocol PR-MESSTRANSP
[XROAD-TERMS] X-Road Terms and Abbreviations TA-TERMS
3 Scope
3.1 Scope and Requirements
- X-Road SHALL support both SOAP and REST protocols side by side. This document describes only the X-Road Message Protocol for REST. The X-Road Message Protocol for SOAP and the X-Road Message Transport Protocol are described in other documents.
- Only synchronous request-response messages SHALL be supported. Asynchronous or one-way operations SHALL NOT be possible.
- Any payload type over REST SHALL be supported. The payload MUST NOT be restricted to just JSON or XML.
- The protocol SHALL support any message size. In practice the message size is limited by the Security Server's memory and disk sizes. For security reasons it is RECOMMENDED to introduce a configurable "maximum message size" parameter in the Security Server implementation.
- HTTP/1.1 SHALL be supported.
3.2 Objectives
- The objective of the draft versions (0.x) of the protocol is to develop it openly and utilize a process to receive and integrate feedback from the community.
- The objective of the protocol version 1.x is to is to be future proof so that no protocol level changes are required for X-Road version 7.
- The protocol must have a versioning mechanism, so that new protocol versions can be published when necessary and multiple versions can work in parallel.
4 Message Format
4.1 REST Interface
HTTP version 1.1 is used by the protocol as described in [RFC2616]. The consumer member/subsystem is specified using HTTP headers. The service to be called is encoded as part of the HTTP/HTTPS request URL. Here is the generic form of the REST service call.
Request format
{http-request-method} /{protocol-version}/{serviceId}[/path][?query-parameters]
HTTP request headers
X-Road-Client: {client}
-
{http-request-method} can be one of the request methods defined in [RFC7231]. For example
GET
,POST
,PUT
andDELETE
. -
{protocol-version}: specifies the major version of the X-Road Message Protocol for REST. For the initial
version
r1
MUST be used. -
{client}: specifies the member/subsystem that is used as a service client - an entity that initiates the service
call. The identifier consists of the following
parts:
[X-Road instance]/[member class]/[member code]/[subsystem code]
. Including the subsystem code is OPTIONAL. -
{serviceId} identifies the service that is registered under {provider-subsystem} and invoked by the request.
{serviceId} contains the following parts:
-
[X-Road instance]/[member class]/[member code]/[subsystem code]/[service code]
. Including the subsystem code is OPTIONAL. - The {serviceId} is mapped to an actual service URL by the Security Server (see the example below).
-
- [path] contains the relative path to the service to be called
- [query-parameters] contains the query parameters to be sent to the service
Here is a practical example of an X-Road REST call.
Request example
GET /r1/INSTANCE/CLASS2/MEMBER2/SUBSYSTEM2/BARSERVICE/v1/bar/zyggy?quu=1
HTTP request headers
X-Road-Client: INSTANCE/CLASS1/MEMBER1/SUBSYSTEM1
Breakdown of the request URI:
-
{http-request-method}:
GET
-
{protocol-version}:
/r1
-
{client}:
INSTANCE/CLASS1/MEMBER1/SUBSYSTEM1
-
{serviceId}:
/INSTANCE/CLASS2/MEMBER2/SUBSYSTEM2/BARSERVICE
-
[path]:
/v1/bar/zyggy
-
[query-parameters]:
?quu=1
Assuming that the serviceId maps to the URL https://barservice.example.org/, the provider will see the
request GET https://barservice.example.org/v1/bar/zyggy?quu=1
. The reason for naming the service independently of the
path is that the same provider could have a fooservice as well (https://fooservice.example.org/), in which case it would
be difficult to tell the services apart if the path was the service Id (both services could have paths like "/v1/...")
unless the fooservice was attached to a separate subsystem.
4.2 URI Sanitation
The REST URIs are composed of different parts (e.g. INSTANCE/CLASS/MEMBER/SUBSYSTEM) and some of them may contain characters that can not be used in URIs directly. The URI syntax is described in [RFC3986]. Because of this the consumer information system needs to represent the parts using UTF-8 and encode the parts separately using [PERCENT-ENCODING]. The path separator "/" is used to delimit the parts and must not be encoded, unless the part actually contains the character "/" (not recommended).
Examples
Invalid:
INSTANCE%2FCLASS%2FMEMBER%2FSUBSYSTEM%2FBARSERVICE
Valid:
INSTANCE/CLASS/MEMBER/SUBSYSTEM/BAR%2FSERVICE (where the service code is "BAR/SERVICE")
On the Security Server side the incoming request URIs MUST be strictly validated. Input strings from the user can't be trusted. Lengths of the strings need to be checked and maximum length or the request URI needs to be limited. Although the URI standard does not specify a maximum size of the URL, most clients enforce an arbitrary limit of 2000 characters. The Security Server implementation MAY do this as well. Sending data that is difficult to express in a hierarchical manner, and especially data that is larger than this 2000 character limit, should be transmitted in the body of the request.
The REST URI parsing scenario is particularly vulnerable to [HPPP] (HTTP Parameter Pollution) and [SSRF] (Server-Side Request Forgery) attacks. The Security Server SHOULD explicitly be prepared for them.
4.3 Use of HTTP Headers
There is only one mandatory HTTP header in the protocol that needs to be set by the client. Otherwise the use of headers in X-Road REST service calls is OPTIONAL. The mandatory header and the most common optional header types and their operation are described next.
Note. HTTP headers are not case-sensitive. X-Road-Client
and x-road-client
are both valid header names.
Mandatory X-Road headers in the request
-
X-Road-Client: Specifies the member/subsystem that is used as a service client - an entity that initiates the
service call. The identifier consists of the following
parts:
[X-Road instance]/[member class]/[member code]/[subsystem code]
. Including the subsystem code is OPTIONAL. The identifier parts MUST be represented as UTF-8 and encoded using [PERCENT-ENCODING].- The service client MUST NOT generate multiple
X-Road-Client
headers in the request. If multipleX-Road-Client
headers are present in the request, the Security Server SHOULD use the last defined header as the initiator of the service call.
X-Road-Client: INSTANCE/CLASS/MEMBER/SUBSYSTEM
- The service client MUST NOT generate multiple
X-Road specific headers returned in the response
The response contains some X-Road specific headers that are set by the provider Security Server. The provider service SHOULD NOT set these headers since in that case they will be overwritten.
- X-Road-Client: Specifies the member/subsystem that is used as a service client
- X-Road-Service: Specifies the serviceId that is invoked by the service client
- X-Road-Id: Unique identifier for this message
- X-Road-Request-Hash: For responses, this field contains sha-512 encoded hash of the request message
- X-Road-Error: This header is provided in case there was an error processing the request and it occurred somewhere in X-Road (on the consumer or provider Security Server)
-
X-Road-Request-Id: Unique identifier for the request
X-Road-Client: INSTANCE/CLASS/MEMBER/SUBSYSTEM X-Road-Service: INSTANCE/CLASS/MEMBER/SUBSYSTEM/PETSTORE X-Road-Id: fa2e18a5-c2cb-4d09-b994-f57727f7c3fb X-Road-Request-Hash: 4c519cf0-0e5e-4ccf-b72b-8ed6fe289e6e X-Road-Request-Id: f92591a3-6bf0-49b1-987b-0dd78c034cc3
Request hash header
- X-Road-Request-Hash: For responses, this field SHALL contain the base-64 encoded SHA512(SHA512(headers)+SHA512( body)). If there is no body, then only the headers are included in the calculation i.e. the field contains the base-64 encoded SHA512(headers). This field is automatically filled in by the service provider's Security Server. The field is used to create a strong connection between a request and a response. Thus, it is possible to prove, for example, that a certain registry record is returned in response to a certain query.
- The request hash header MUST be automatically created by the service provider's Security Server and it MUST be verified by the service client's Security Server
- The request message SHOULD NOT contain the request hash header.
- The response message returned by a service provider SHOULD NOT contain the request hash header. If the response
message contains the request hash header, the service provider's Security Server MUST ignore the field and replace it
with the created field.
X-Road-Request-Hash: 14sEri8SmLNy/DJyTob0ZddAskmdRy5ZUyhbr33iLkaA+gLpWcivUH16fzbuIs7hhs2AnA4lJDloyIihXMlVQA==
Content-Type header
- With REST messages that include the request body it is RECOMMENDED that the content's media type is indicated with this header. Additionally it is RECOMMENDED to use the charset parameter to indicate the character encoding used the REST message.
- The REST messages originating from the Security Server (e.g. error messages) MUST include the header and indicate the content's type and character encoding with it.
- If Content-Type header is included in the request message by the consumer information system, it MUST be transported unmodified through X-Road to the provider information system
- If Content-Type header is included in the response message by the provider information system, it MUST be transported
unmodified through X-Road to the consumer information system
Content-Type: application/json; charset=utf-8 Content-Type: multipart/form-data; boundary=something
In case the service consumer does not provide the Content-Type
header (or some of its components), the request message
is anyhow passed to the provider service which can decide what to do with it.
Accept header
- It is RECOMMENDED that the service consumer advertises the content types it is able to understand by including
the
Accept
header in the request message. - If
Accept
header is included in the request message, it MUST be transported unmodified through X-Road to the service provider.Accept: application/xml
In case the service consumer does not provide the Accept header, the Security Server MUST use the default
content-type application/json
.
Security Server, Represented Party and X-Road extension headers
-
X-Road-Security-Server: To send the request to a specific Security Server this header needs to be included. It
contains the following parts:
[X-Road instance]/[member class]/[member code]/[server code]
-
X-Road-Represented-Party: The purpose of this header is to allow sending of additional information to the X-Road
service providers in case when service client represents third party while issuing a query. The query is initiated by
a third party and the results are also forwarded to that third party, but the request itself is signed by a client
identified by the
X-Road-Client
header. It contains the following parts:[member class]/[member code]
- Including the member class is OPTIONAL. If the member class is omitted, also the separator
/
must be omitted:[member code]
- Other X-Road extension headers are not defined in this document. Rather they are just contracts between information
systems and X-Road handles them like any user defined header.
X-Road-Security-Server: INSTANCE/MEMBERCLASS/MEMBERCODE/SERVERCODE X-Road-Represented-Party: MEMBERCLASS/MEMBERCODE
Optional X-Road headers
-
X-Road-Id: Unique identifier for this message. It is RECOMMENDED to use universally unique identifiers
[UUID]. If
X-Road-Id
is not provided, it SHALL be generated by the consumer Security Server. The provider Security Server SHALL include theX-Road-Id
header in the response message. - X-Road-UserId: User whose action initiated the request. The user ID should be prefixed with two-letter ISO country code (e.g., EE12345678901).
-
X-Road-Issue: Identifies received application, issue or document that was the cause of the service request. This
field may be used by the client information system to connect service requests (and responses) to working procedures.
X-Road-Id: fa2e18a5-c2cb-4d09-b994-f57727f7c3fb X-Road-UserId: EE12345678901 X-Road-Issue: MT324223MSD
X-Road error header
- X-Road-Error: This header is provided in case there was an error processing the request and it occurred somewhere in
X-Road (on the consumer or provider Security Server). With it the client can easily distinguish between the errors
occurring on provider services and errors on X-Road Security Servers. Note that the header does not contain detailed
error information but is more like a flag indicator to the interested parties. The header contains only the error type
and the more detailed information such as the HTTP response code, error message body etc. need to be read from the
response body.
Server.ServerProxy.DatabaseError
User defined headers
- User defined HTTP headers (i.e. the headers not mentioned in [LIST-OF-HTTP-HEADERS] or this
document) MUST be passed to recipient unmodified by X-Road Security Server.
X-Powered-By: PHP/5.2.17 X-Pingback: https://example.com/xmlrpc.php
Cache headers
- X-Road does not cache messages. Cache headers MUST be passed as-is and the consumer/provider MAY take advantage of
this information.
Cache-Control: no-cache, no-store, must-revalidate Pragma: no-cache
Cross-origin resource sharing
- Security Server is not designed to be a direct proxy for a web front-end. It does not do anything specific to enable cross-origin resource sharing (CORS).
Filtered headers
Some HTTP headers MUST be rewritten by the Security Server. The original value, if any, will not be passed through. The Security Server will either provide a new value or not send the header at all.
- Hop-by-hop headers
- Connection, Keep-Alive, Proxy-Authenticate, Proxy-Authorization, TE, Trailer, Transfer-Encoding, Upgrade
- Headers that can leak the name or address of the origin host
- Host
- User-Agent
- Server
Specially handled headers
Some HTTP headers are handled by the Security Server and the user should not expect that they are passed through X-Road unmodified.
- Expect
- Expectation
100 Continue
MAY be handled locally at the consumer Security Server. Support for other expectations is OPTIONAL. - (
100 Continue
is the only expectation defined by [RFC7231])
- Expectation
- Content-Length
- The Security Server MAY change the transfer encoding, thus removing or adding a content-length header as necessary.
4.4 HTTP Redirects
The service provider may respond with HTTP redirection. HTTP redirects are responses with a status code of 3xx. There are several types of redirects and they fall into three categories: permanent, temporary and special redirections. X-Road does not follow redirects and passes the redirection unmodified to the service consumer. The service consumer may decide what to do with this response. Generally speaking, the redirects pose a security threat and should not be blindly followed. The default setting for following redirects is recommended to be off.
4.5 Use of Query Parameters
The use of query parameters in the X-Road REST service calls is supported. The query parameters need be encoded [PERCENT-ENCODING] by the consumer information system as described in [RFC3986]. The query parameters MUST be passed unmodified through the X-Road Security Servers to the provider service.
4.6 Error handling
In a normal situation the request reaches the provider service and it returns the response back to the consumer information system. However, the Security Server may encounter technical errors and in these cases it must respond in a predictable manner. When a technical error occurs, the Security Server MUST use HTTP status codes as defined in [RFC7231] to communicate it back to the consumer information system.
[RFC7231] defines over 70 HTTP status codes. Most of the developers do not have them memorized so they have to go to the Internet and look them up. To make it simpler for the developers the X-Road Message Protocol for REST uses only a small subset of HTTP status codes.
When it is boiled down, there are really 4 categories of errors between the client and the Security Server.
- Everything worked in the Security Server's perspective but the provider information system returns an error response.
- The provider information system encounters a technical error and is not able to return a response.
- The consumer information system sends a request that does not comply with the X-Road Message Protocol for REST.
- The Security Server encounters a technical error.
We map these categories to the HTTP status codes and response bodies.
- The status code, response body and HTTP headers are generated by the provider information system and they are returned as-is.
- 500 - The status code, response body and HTTP headers are returned by the Security Server.
- 400 - Bad Request. The status code, response body and HTTP headers are returned by the Security Server.
- 500 - Internal Server Error. The status code, response body and HTTP headers are returned by the Security Server.
Using only the HTTP status codes it is impossible to know if the error occurred on X-Road Security Servers or on the
provider service. The type
field in the response body gives some tools since the X-Road errors start with Client
(
consumer service), Server.ClientProxy
(consumer Security Server) or Server.ServerProxy
(provider Security Server).
To make it easier to distinguish between the errors coming from the X-Road Security Server and the provider service, the
Security Server MUST add an additional HTTP header to the response when the error occurs on the Security Server.
The X-Road-Error
header is specified in chapter 4.3.
When the error occurs on the Security Server, the Security Server implementation SHOULD respect the Accept
header
specified by the consumer information system and return the X-Road error response using the suggested content type,
defaulting to application/json
. Additionally, the Security Server MUST include Content-Type
header in the response
to indicate the media type of the response.
Example 1 (Category 1)
Everything worked in the Security Server's perspective, but the service returned an error. Status code, response body and HTTP headers are generated by the provider information system and they are returned as-is.
HTTP status code:
405
Response body:
{
"timestamp": "2019-03-21T09:45:19.904Z",
"status": 405,
"error": "Method Not Allowed",
"message": "Request method 'PUT' not supported",
"path": "/v3/pet/findByStatus"
}
HTTP headers:
Content-Type: application/json;charset=utf-8
Date: Thu, 21 Mar 2019 09:45:19 GMT
x-road-id: 5ea48ae9-15c1-465a-be15-9b6ef2c7ef4a
x-road-client: DEV/COM/222/TESTCLIENT
x-road-service: DEV/COM/222/TESTSERVICE/petstore
x-road-request-id: f92591a3-6bf0-49b1-987b-0dd78c034cc3
x-road-request-hash: yFOLGuJ0zmLhZSgwp3ooSBQbR9ejSvTc6p6FvBmcSEB2tDD6bxpjiv8sHORxqz4MMgEADH7IcARNprLfEwudNw==
Content-Length: 159
Example 2 (Category 2)
Everything worked in the Security Server's perspective, but the service timed out. The status code, response body and HTTP headers are returned by the Security Server.
HTTP status code:
500
Response body:
{
"type": "Server.ServerProxy.NetworkError",
"message": "Connect to <IP_ADDRESS>:8080 [/<IP_ADDRESS>] failed: Connection timed out (Connection timed out)",
"detail": "9bc95b6e-2f1d-4a41-a7e6-11eda7d734d5"
}
HTTP headers:
Date: Thu, 21 Mar 2019 11:42:03 GMT
Content-Type: application/json;charset=utf-8
X-Road-Error: Server.ServerProxy.NetworkError
Content-Length: 199
Example 3 (Category 3)
The consumer information system sends a request that doesn't conform to the X-Road Message Protocol for REST. The status code, response body and HTTP headers are returned by the Security Server.
HTTP status code:
400
Response body:
{
"type": "Client.BadRequest",
"message": "Error parsing the client's REST request. Please that the request format corresponds to the X-Road Message Protocol for REST (r1).",
"detail": "018cbcae-537e-421b-b6f6-2608dc97bd90"
}
HTTP headers:
Date: Thu, 21 Mar 2019 11:45:12 GMT
Content-Type: application/json;charset=utf-8
X-Road-Error: Client.BadRequest
Content-Length: 167
Example 4 (Category 4)
Error occurred on the provider Security Server. The status code, response body and HTTP headers are returned by the Security Server.
HTTP status code:
500
Response body:
{
"type": "Server.ServerProxy.DatabaseError",
"message": "Error accessing database (serverconf)",
"detail": "3c4d0f08-440f-417f-b935-bc801e103d51"
}
HTTP headers:
Date: Thu, 21 Mar 2019 11:57:11 GMT
Content-Type: application/json;charset=utf-8
X-Road-Error: Server.ServerProxy.DatabaseError
Content-Length: 141
Example 5 (Tracking the source of error)
When an error occurs it is important to be able to track the component that is causing the error. One of the most confusing error responses can be HTTP 500 Internal Error.
HTTP 500 can come from the service provider or from the Security Servers.
A) If the response does not contain the X-Road-Error
header, the source of the error is the provider information
system.
B) If the response contains the X-Road-Error
header the source of the error is X-Road and the more specific
component can be deduced from the type
field in the response body. For example Server.ServerProxy.ServiceFailed
means that the provider Security Server did not get answer from the provider service. Server.ServerProxy.DatabaseError
means that provider Security Server encountered internal error. Server.ClientProxy.OutdatedGlobalConf
points to
consumer Security Server's problem.
4.7 Security
Secure REST services should only provide HTTPS endpoints. This concerns both the consumer Security Server and the provider service. HTTPS protects authentication credentials in transit, for example passwords, API keys or JSON Web Tokens. It also allows clients to authenticate the service and guarantees integrity of the transmitted data.
It is RECOMMENDED to use mutually authenticated client-side certificates in the connections between the Security Server and information systems - both service consumers and service providers, to provide additional protection for highly privileged web services. Security Server MUST support mutually authenticated client-side certificates on both consumer and provider side. Use of JWT tokens as an authentication method between the Security Server and information system is not supported. Instead, sending JWT tokens in HTTP headers from the service consumer to the service provider is supported - X-Road passes the headers unmodified.
4.8 Identifier Character Restrictions
X-Road identifiers include, but are not restricted to:
- Instance id
- Member class
- Member code
- Subsystem code
- Service code
- Service version
- Central service code
- Security server code
X-Road Message Protocol for REST imposes some restrictions on the characters that can be used in X-Road identifiers. Only the following characters MUST be used in the identifier values:
- Letters
A...Z
anda...z
- Numbers
0...9
- Symbols
'()+,-.=?
5 Services
5.1 Describing Services
The REST services that are going to be connected to Security Server SHOULD be described with [OPENAPI3 ]. It is a specification for machine-readable interface files for describing, producing, consuming, and visualizing RESTful web services. The OpenAPI Specification is a community-driven open specification within the [OPENAPI-INITIATIVE], a Linux Foundation Collaborative Project.
An example [OPENAPI3] service definition file is listed in Appendix 1. This service is used in the examples of the next chapter.
6 Examples
6.1 General
The pet store service used in the following examples has an [OPENAPI3] service description file available in Appendix 1. The most important aspects of the service are described in the text but for more details please refer to the aforementioned service description file.
The examples assume that the serviceId
is mapped to https://petstore.niis.org/.
6.2 GET Request and Response
REQUEST
| Service | Method | Description | Parameters |
|---|---|---|---|
| /pets/{petId} | GET | Finds pet by ID | petId - ID of pet to return |
Service called directly
curl -X GET "https://petstore.niis.org/v2/pets/1124" -H "accept: application/json"
Service called through X-Road
curl -X GET "https://{securityserver}/r1/{serviceId}/v2/pets/1124" -H "accept: application/json" -H "X-Road-Client: {client}"
Service response
{
"id": 1124,
"name": "Siddu",
"photoUrls": [],
"tags": [],
"status": "Offline"
}
Service response code
200
Service response headers
Content-Type: application/json;charset=utf-8
Date: Thu, 21 Mar 2019 12:36:39 GMT
x-road-id: 29f4d011-ef17-4f2f-9bb1-0452ce17d3f5
x-road-client: DEV/COM/222/TESTCLIENT
x-road-service: DEV/COM/222/TESTSERVICE/petstore
x-road-request-id: f92591a3-6bf0-49b1-987b-0dd78c034cc3
x-road-request-hash: Xvx9V2U5c5RhDUiXpVLtW7L8vTd5cM2IOBU2n9efEk7/m3ECKyGAp7yTpJpTWpo6HcmwSaGO+cinxMVKjxJTOQ==
Content-Length: 1148
6.3 PUT Request and Response
REQUEST
| Service | Method | Description | Parameters |
|---|---|---|---|
| /pets/{petId} | PUT | Update an existing pet | body - Pet object that will be updated in the store |
Service called directly
curl -X PUT "https://petstore.niis.org/v2/pets/5657082955040009" -H "accept: application/json" -H "Content-Type: application/json" -d '{ "id": 0, "category": { "id": 0, "name": "string" }, "name": "doggie", "photoUrls": [ "string" ], "tags": [ { "id": 0, "name": "string" } ], "status": "available"}'
Service called through X-Road
curl -X PUT "https://{securityserver}/r1/{serviceId}/v2/pets/5657082955040009" -H "accept: application/json" -H "Content-Type: application/json" -H "X-Road-Client: {client}" -d '{ "id": 0, "category": { "id": 0, "name": "string" }, "name": "doggie", "photoUrls": [ "string" ], "tags": [ { "id": 0, "name": "string" } ], "status": "available"}'
Service response
{
"id":<PHONE_NUMBER>040009,
"category": {
"id": 0,
"name": "string"
},
"name": "doggie",
"photoUrls": [
"string"
],
"tags": [
{
"id": 0,
"name": "string"
}
],
"status": "available"
}
Service response code
200
Service response headers
Date: Thu, 21 Mar 2019 12:43:33 GMT
x-road-id: acdb2c7a-c705-41c2-b595-4cd62e78316e
x-road-client: DEV/COM/222/TESTCLIENT
x-road-service: DEV/COM/222/TESTSERVICE/petstore
x-road-request-id: f92591a3-6bf0-49b1-987b-0dd78c034cc3
x-road-request-hash: MOEfTqBjdqYiX3db9hxJ6JvHvCpYqfA6t0Uhdv6g2I29fMY8ld4CbN8tslj6mUQPXoRaUdPm7NdZeAYTg6zi+A==
Content-Length: 0
6.4 POST Request and Response
REQUEST
| Service | Method | Description | Parameters |
|---|---|---|---|
| /pets | POST | Add a new pet to the store | body - Pet object that needs to be added to the store |
Service called directly
curl -X POST "https://petstore.niis.org/v2/pets" -H "accept: application/json" -H "Content-Type: application/json" -d '{ "id": 0, "category": { "id": 0, "name": "string" }, "name": "doggie", "photoUrls": [ "string" ], "tags": [ { "id": 0, "name": "string" } ], "status": "available"}'
Service called through X-Road
curl -X POST "https://{securityserver}/r1/{serviceId}/v2/pets" -H "accept: application/json" -H "Content-Type: application/json" -H "X-Road-Client: {client}" -d '{ "id": 0, "category": { "id": 0, "name": "string" }, "name": "doggie", "photoUrls": [ "string" ], "tags": [ { "id": 0, "name": "string" } ], "status": "available"}'
Service response
{
"id":<PHONE_NUMBER>040122,
"category": {
"id": 0,
"name": "string"
},
"name": "doggie",
"photoUrls": [
"string"
],
"tags": [
{
"id": 0,
"name": "string"
}
],
"status": "available"
}
Service response code
200
Service response headers
Date: Thu, 21 Mar 2019 12:49:38 GMT
x-road-id: dcaaa3a2-a158-41e1-8775-309848052358
x-road-client: DEV/COM/222/TESTCLIENT
x-road-service: DEV/COM/222/TESTSERVICE/petstore
x-road-request-id: f92591a3-6bf0-49b1-987b-0dd78c034cc3
x-road-request-hash: VCNZdwTxl7m3XC6Mpfw1H6qJUtBcm3Y6tfCvg5b3W/fb2RRXsLF9wftR3u6ElclE+RFaiAN/OkSz02fAYbNKaw==
Content-Length: 0
6.5 DELETE Request and Response
REQUEST
| Service | Method | Description | Parameters |
|---|---|---|---|
| /pets/{petId} | DELETE | Deletes a pet | petId - Pet id to delete |
Service called directly
curl -X DELETE "https://petstore.niis.org/v2/pets/1124" -H "accept: application/json"
Service called through X-Road
curl -X DELETE "https://{securityserver}/r1/{serviceId}/v2/pets/1124" -H "accept: application/json" -H "X-Road-Client: {client}"
Service response
Service response code
200
Service response headers
Date: Thu, 21 Mar 2019 12:49:38 GMT
x-road-id: 6209d61b-6ab5-4443-a09a-b8d2a7c491b2
x-road-client: DEV/COM/222/TESTCLIENT
x-road-service: DEV/COM/222/TESTSERVICE/petstore
x-road-request-id: f92591a3-6bf0-49b1-987b-0dd78c034cc3
x-road-request-hash: lQBoldcyuI3BerjHfkleRQ45AyYoFlF7zXSN6yH/RwvTNWEcsTQM18EfqMxYfdkyGGB26oxAjAWv/AcfmZF7og==
Content-Length: 0
6.6 POST Request with Attachments and Response
REQUEST
| Service | Method | Description | Parameters |
|---|---|---|---|
| /pets/{petId}/images | POST | uploads an image | • petId - ID of pet to update • additionalMetadata - Additional data to pass to server • file - file to upload |
Service called directly
curl -X POST "https://petstore.niis.org/v2/pets/1124/images" -H "accept: application/json" -H "Content-Type: multipart/form-data" -F "file=@A-fluffy-cat-looking-funny-surprised-or-concerned.jpg;type=image/jpeg"
Service called through X-Road
curl -X POST "https://{securityserver}/r1/{serviceId}/v2/pets/1124/images" -H "accept: application/json" -H "Content-Type: multipart/form-data" -H "X-Road-client: {client}" -F "file=@A-fluffy-cat-looking-funny-surprised-or-concerned.jpg;type=image/jpeg"
Service response
{
"code": 200,
"type": null,
"message": "additionalMetadata: null\nFile uploaded to ./file, 170025 bytes"
}
Service response code
200
Service response headers
Content-Type: application/json;charset=utf-8
Date: Thu, 21 Mar 2019 13:02:29 GMT
x-road-id: 86e081a6-ec16-4b8d-b729-963f9659a80c
x-road-client: DEV/COM/222/TESTCLIENT
x-road-service: DEV/COM/222/TESTSERVICE/petstore
x-road-request-id: f92591a3-6bf0-49b1-987b-0dd78c034cc3
x-road-request-hash: EycIkZAz4WMvbKgnBvd0wUcN4A4w0RZMvugD36ZJ2PpwwGZuMGfxCoO4C0ZC3c4LBGF0rh61vunL3ssZV6TB3Q==
Content-Length: 100
Appendix 1 Example Service Definition
openapi: 3.0.0
info:
description: >-
This is a sample server Petstore server.
version: 1.0.0
title: Petstore
contact:
email<EMAIL_ADDRESS>license:
name: Apache 2.0
url: 'http://www.apache.org/licenses/LICENSE-2.0.html'
tags:
- name: pet
description: Everything about your Pets
externalDocs:
description: Find out more
url: 'https://niis.org'
- name: store
description: Access to Petstore orders
- name: user
description: Operations about user
externalDocs:
description: Find out more about our store
url: 'https://niis.org'
paths:
/pets:
get:
tags:
- pet
summary: Get pets from store
description: Search pets
operationId: getPets
parameters:
- name: term
in: query
description: search term
required: false
schema:
type: string
responses:
'200':
description: successful operation
content:
application/xml:
schema:
type: array
items:
$ref: '#/components/schemas/Pet'
application/json:
schema:
type: array
items:
$ref: '#/components/schemas/Pet'
'400':
description: Invalid ID supplied
'404':
description: Pet not found
security:
- api_key: [ ]
post:
tags:
- pet
summary: Add a new pet to the store
description: ''
operationId: addPet
responses:
'201':
description: pet created
'405':
description: Invalid input
security:
- petstore_auth:
- 'write:pets'
- 'read:pets'
requestBody:
$ref: '#/components/requestBodies/Pet'
'/pets/{petId}':
get:
tags:
- pet
summary: Find pet by ID
description: Returns a single pet
operationId: getPetById
parameters:
- name: petId
in: path
description: ID of pet to return
required: true
schema:
type: integer
format: int64
responses:
'200':
description: successful operation
content:
application/xml:
schema:
$ref: '#/components/schemas/Pet'
application/json:
schema:
$ref: '#/components/schemas/Pet'
'400':
description: Invalid ID supplied
'404':
description: Pet not found
security:
- api_key: [ ]
put:
tags:
- pet
summary: Update an existing pet
description: ''
operationId: updatePet
parameters:
- name: petId
in: path
description: ID of pet to return
required: true
schema:
type: integer
format: int64
responses:
'200':
description: Pet updated
'400':
description: Invalid ID supplied
'404':
description: Pet not found
'405':
description: Validation exception
security:
- petstore_auth:
- 'write:pets'
- 'read:pets'
requestBody:
$ref: '#/components/requestBodies/Pet'
delete:
tags:
- pet
summary: Deletes a pet
description: ''
operationId: deletePet
parameters:
- name: api_key
in: header
required: false
schema:
type: string
- name: petId
in: path
description: Pet id to delete
required: true
schema:
type: integer
format: int64
responses:
'200':
description: Pet deleted
'400':
description: Invalid ID supplied
'404':
description: Pet not found
security:
- petstore_auth:
- 'write:pets'
- 'read:pets'
'/pets/{petId}/images':
post:
tags:
- pet
summary: Uploads an image
description: ''
operationId: uploadFile
parameters:
- name: petId
in: path
description: ID of pet to update
required: true
schema:
type: integer
format: int64
responses:
'200':
description: successful operation
content:
application/json:
schema:
$ref: '#/components/schemas/ApiResponse'
security:
- petstore_auth:
- 'write:pets'
- 'read:pets'
requestBody:
content:
multipart/form-data:
schema:
type: object
properties:
additionalMetadata:
description: Additional data to pass to server
type: string
file:
description: file to upload
type: string
format: binary
/store/inventories:
get:
tags:
- store
summary: Returns pet inventories by status
description: Returns a map of status codes to quantities
operationId: getInventory
responses:
'200':
description: successful operation
content:
application/json:
schema:
type: object
additionalProperties:
type: integer
format: int32
security:
- api_key: [ ]
/store/orders:
post:
tags:
- store
summary: Place an order for a pet
description: ''
operationId: placeOrder
responses:
'200':
description: successful operation
content:
application/xml:
schema:
$ref: '#/components/schemas/Order'
application/json:
schema:
$ref: '#/components/schemas/Order'
'400':
description: Invalid Order
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/Order'
description: order placed for purchasing the pet
required: true
'/store/orders/{orderId}':
get:
tags:
- store
summary: Find purchase order by ID
description: >-
For valid response try integer IDs with value >= 1 and <= 10.
Other values will generated exceptions
operationId: getOrderById
parameters:
- name: orderId
in: path
description: ID of pet that needs to be fetched
required: true
schema:
type: integer
format: int64
minimum: 1
maximum: 10
responses:
'200':
description: successful operation
content:
application/xml:
schema:
$ref: '#/components/schemas/Order'
application/json:
schema:
$ref: '#/components/schemas/Order'
'400':
description: Invalid ID supplied
'404':
description: Order not found
delete:
tags:
- store
summary: Delete purchase order by ID
description: >-
For valid response try integer IDs with positive integer value.
Negative or non-integer values will generate API errors
operationId: deleteOrder
parameters:
- name: orderId
in: path
description: ID of the order that needs to be deleted
required: true
schema:
type: integer
format: int64
minimum: 1
responses:
'200':
description: Purchase order deleted
'400':
description: Invalid ID supplied
'404':
description: Order not found
/users:
post:
tags:
- user
summary: Create user
description: This can only be done by the logged in user.
operationId: createUser
responses:
default:
description: successful operation
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/User'
description: Created user object
required: true
/users/login:
get:
tags:
- user
summary: Logs user into the system
description: ''
operationId: loginUser
parameters:
- name: username
in: query
description: The user name for login
required: true
schema:
type: string
- name: password
in: query
description: The password for login in clear text
required: true
schema:
type: string
responses:
'200':
description: successful operation
headers:
X-Rate-Limit:
description: calls per hour allowed by the user
schema:
type: integer
format: int32
X-Expires-After:
description: date in UTC when token expires
schema:
type: string
format: date-time
content:
application/xml:
schema:
type: string
application/json:
schema:
type: string
'400':
description: Invalid username/password supplied
/users/logout:
get:
tags:
- user
summary: Logs out current logged in user session
description: ''
operationId: logoutUser
responses:
default:
description: successful operation
'/users/{username}':
get:
tags:
- user
summary: Get user by user name
description: ''
operationId: getUserByName
parameters:
- name: username
in: path
description: 'The name that needs to be fetched. Use user1 for testing. '
required: true
schema:
type: string
responses:
'200':
description: successful operation
content:
application/xml:
schema:
$ref: '#/components/schemas/User'
application/json:
schema:
$ref: '#/components/schemas/User'
'400':
description: Invalid username supplied
'404':
description: User not found
put:
tags:
- user
summary: Updated user
description: This can only be done by the logged in user.
operationId: updateUser
parameters:
- name: username
in: path
description: name that need to be updated
required: true
schema:
type: string
responses:
'200':
description: User updated
'400':
description: Invalid user supplied
'404':
description: User not found
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/User'
description: Updated user object
required: true
delete:
tags:
- user
summary: Delete user
description: This can only be done by the logged in user.
operationId: deleteUser
parameters:
- name: username
in: path
description: The name that needs to be deleted
required: true
schema:
type: string
responses:
'200':
description: User deleted
'400':
description: Invalid username supplied
'404':
description: User not found
externalDocs:
description: Find out more
url: 'https://niis.org'
servers:
- url: 'https://petstore.niis.org/v2'
- url: 'http://petstore.niis.org/v2'
components:
requestBodies:
UserArray:
content:
application/json:
schema:
type: array
items:
$ref: '#/components/schemas/User'
description: List of user object
required: true
Pet:
content:
application/json:
schema:
$ref: '#/components/schemas/Pet'
application/xml:
schema:
$ref: '#/components/schemas/Pet'
description: Pet object that needs to be added to the store
required: true
securitySchemes:
petstore_auth:
type: oauth2
flows:
implicit:
authorizationUrl: 'http://petstore.niis.org/oauth/dialog'
scopes:
'write:pets': modify pets in your account
'read:pets': read your pets
api_key:
type: apiKey
name: api_key
in: header
schemas:
Order:
type: object
properties:
id:
type: integer
format: int64
petId:
type: integer
format: int64
quantity:
type: integer
format: int32
shipDate:
type: string
format: date-time
status:
type: string
description: Order Status
enum:
- placed
- approved
- delivered
complete:
type: boolean
default: false
xml:
name: Order
Category:
type: object
properties:
id:
type: integer
format: int64
name:
type: string
xml:
name: Category
User:
type: object
properties:
id:
type: integer
format: int64
username:
type: string
firstName:
type: string
lastName:
type: string
email:
type: string
password:
type: string
phone:
type: string
userStatus:
type: integer
format: int32
description: User Status
xml:
name: User
Tag:
type: object
properties:
id:
type: integer
format: int64
name:
type: string
xml:
name: Tag
Pet:
type: object
required:
- name
- photoUrls
properties:
id:
type: integer
format: int64
category:
$ref: '#/components/schemas/Category'
name:
type: string
example: doggie
photoUrls:
type: array
xml:
name: photoUrl
wrapped: true
items:
type: string
tags:
type: array
xml:
name: tag
wrapped: true
items:
$ref: '#/components/schemas/Tag'
status:
type: string
description: pet status in the store
enum:
- available
- pending
- sold
xml:
name: Pet
ApiResponse:
type: object
properties:
code:
type: integer
format: int32
type:
type: string
message:
type: string


{% set baseAssetsUrl = view.getAssetManager().getPublishedUrl('@inalgiev/webtexttool/resources/img/', true) %}
Use your {{craft.app.plugins.getPlugin('webtexttool').name}} account credentials to log in the form below.
Please note that these are not your Craft CMS username and password.
If you don't have an account yet, you can easily create one for free here.


Click a square to begin!
New Game: One Player, Player Goes First
New Game: One Player, Computer Goes First
New Game: Two Players


Home
Search
Sign in
0
0
Whoops, something is wrong
We are sorry, but the Web address you have entered is no longer available.
go home
show listings
sign in
Log in
Register new account
Add new listing
Home
Mail us
Call us
Terms and conditions
Newly listed
Keyword
Location
Type country, region or city
Category
Select a category
Vacation
Africa
Europe
Leisure
Gadgets
Electronics
Computers
Clothes
Suits
T-shirts
Show items as gallery / list
Gallery view
List view
Transaction
Any transaction
Sell
Buy
Rent
Exchange
Condition
Any condition
New
Used
Period
Any age
1 day old
2 days old
1 week old
2 weeks old
1 month old
Seller
All sellers
Personal
Company
Only listings with picture
Search
Clean fields


Debate is a formal contest of argumentation between two teams or individuals. More broadly, and more importantly, debate is an essential tool for developing and maintaining democracy and open societies.
Contact:"Extempore" refers to a stage performance that is carried out without preparation or forethought.
Contact:A puzzle is a game, problem, or toy that tests a person's knowledge. In a puzzle, the solver is expected to put pieces together in a logical way, in order to arrive at the correct solution of the puzzle.types- Picture Puzzle,Word Search Puzzle.
Contact:Art Mania is competition for lover of drawing and sketches. Join the competition and so some art skills to us.
Contact:AdMad, the Advertisement making Competition, is a great platform for showcasing that creative zing in you. The different categories of competition – PrintAd, PhotoAd, and TVAd – make sure the event has something for everyone.
Contact:Turncoat is a form of debate where the speaker literally debates against oneself. The speaker starts by taking a stance on the topic and switches sides after a specific duration of time.
Contact:This is the event you were waiting for, if you are a hardcore engineer.Unleash your wild creativity at ALGO'RYTHMIC 2017 and join the fun in creating amazing stuff out of scrap for one and all, the activity is an ideal mesh of education and entertainment.
Contact:


Score: 0
Timer:
Game Loading...
Start
Your name is:
First: Score:
Second: Score:
Third: Score
Time Left:
Player scores


{% extends 'base.html' %} {% set title = 'Page Not Found' %} {% block instructions %}
The requested page was not found.
{% endblock %} {% block subhead %}{% endblock %} {% block exercise %}Use the navigation to find something that exists.
{% endblock %}


Not getting any album downloads
-
jsheehan
I am a new user (just got license) and am using lasted release of Synergy. My experience so far is that I can never get any album art downloads from Amazon. All I get is a question mark. It's a little hard to believe that an item such as The Beatles Abbey Road is not available online. So any thoughts why I am not getting Synergy to look up or find artwork? I do have internet access.
John sheehan
-
Greg Hurrell
Sorry for taking so long to reply; this thread somehow slipped under the radar.
For general troubleshooting information see:
For information specific to the album covers feature and how it works see:
https://wincent.com/a/products/synergy-classic/album-covers/
Finally, it is worth checking that if you have a tool like Little Snitch running that it isn't blocking Synergy's attempts to reach Amazon.
Let me know if you have any further questions.
Reply
This topic is now closed.


Issued: 23 February 2008
Revised: 13 February 2011 (list of facilities altered)
The 'care room' is a room set aside for staff with family responsibilities. It also provides a place for staff who are feeling unwell to rest.
The room is furnished with the following items:
In the interests of childrens' and family members' safety, it is a Delta policy that staff are responsible for the care for their own children or other family members who may accompany them to work, even when another staff member is assisting with that care. Delta does not provide a registered child care centre. In South Australia, people providing care for children not members of their family are required to have police clearance.
Staff caring for family may choose to bring additional toys or childcare equipment to work, however the responsibility for ensuring that these items meet child safety requirements remains the parent's.


{% extends "_base.html" %} {% block title %}Password reset success{% endblock %} {% block body %}
Your email has now been validated, please return to your client to reset your password. You may now close this window.


|
JavaTM 2 Platform Standard Ed. 5.0 |
|||||||||
| PREV LETTER NEXT LETTER | FRAMES NO FRAMES |
FactoryConfigurationError
with no
detail mesage.
FactoryConfigurationError
with
the String
specified as an error message.
FactoryConfigurationError
with a
given Exception
base cause of the error.
FactoryConfigurationError
with the
given Exception
base cause and detail message.
failure
callback is invoked when the RMI
runtime is unable to create a ServerSocket
via the
RMISocketFactory
.
Boolean
object corresponding to the primitive
value false
.
TransformerFactory.getFeature(java.lang.String)
returns true
when passed this value as an argument,
the Transformer
supports Result
output of this type.
TransformerFactory.getFeature(java.lang.String)
returns true when passed this value as an argument,
the Transformer supports Source input of this type.
TransformerFactory.getFeature(java.lang.String)
returns true when passed this value as an argument,
the Transformer supports Result output of this type.
TransformerFactory.getFeature(java.lang.String)
returns true when passed this value as an argument,
the Transformer supports Source input of this type.
TransformerFactory.getFeature(java.lang.String)
returns true when passed this value as an argument,
the TransformerFactory returned from
TransformerFactory.newInstance()
may
be safely cast to a SAXTransformerFactory.
TransformerFactory.getFeature(java.lang.String)
returns true when passed this value as an argument,
the Transformer supports Result output of this type.
TransformerFactory.getFeature(java.lang.String)
returns true when passed this value as an argument,
the Transformer supports Source input of this type.
TransformerFactory.getFeature(java.lang.String)
returns true when passed this value as an argument,
the SAXTransformerFactory.newXMLFilter(Source src)
and SAXTransformerFactory.newXMLFilter(Templates templates)
methods are supported.
FeatureDescriptor
.
Calendar.MONTH
field indicating the
second month of the year.
Field
provides information about, and dynamic access to, a
single field of a class or an interface.get
and set
.
FieldPosition
is a simple class used by Format
and its subclasses to identify fields in formatted output.FieldPosition
object for the given field.
DestinationType
instance to use for
specifying print to file.
File
instance by converting the given
pathname string into an abstract pathname.
File
instance from a parent pathname string
and a child pathname string.
File
instance from a parent abstract
pathname and a child pathname string.
ImageInputStream
that gets its
input from a regular InputStream
.FileCacheImageInputStream
that will read
from a given InputStream
.
ImageOutputStream
that writes its
output to a regular OutputStream
.FileCacheImageOutputStream
that will write
to a given outputStream
.
JFileChooser
.FileDialog
class displays a dialog window
from which the user can select a file.FileFilter
is an abstract class that has no default
implementation.ImageInputStream
that gets its
input from a File
or RandomAccessFile
.FileImageInputStream
that will read
from a given File
.
FileImageInputStream
that will read
from a given RandomAccessFile
.
ImageOutputStream
that writes its
output directly to a File
or
RandomAccessFile
.FileImageOutputStream
that will write
to a given File
.
FileImageOutputStream
that will write
to a given RandomAccessFile
.
FileInputStream
obtains input bytes
from a file in a file system.FileInputStream
by
opening a connection to an actual file,
the file named by the path name name
in the file system.
FileInputStream
by
opening a connection to an actual file,
the file named by the File
object file
in the file system.
FileInputStream
by using the file descriptor
fdObj
, which represents an existing connection to an
actual file in the file system.
FileNotFoundException
with
null
as its error detail message.
FileNotFoundException
with the
specified detail message.
File
or to a FileDescriptor
.name
.
File
object.
File
object.
FileView
defines an abstract class that can be implemented
to provide the filechooser with UI information for a File
.Shape
using the settings of the
Graphics2D
context.
Graphics.fill3DRect
.
Graphics.fillArc
.
Graphics.fillOval
.
Graphics.fillPolygon
.
Graphics.fillRect
.
Graphics.fillRoundRect
.
BufferedImage
and stores the results
in the destination BufferedImage
.
Raster
and stores the results in
the destination Raster
.
Raster
using the matrix specified in the
constructor.
BufferedImage
.
BufferedImage
.
Raster
.
true
if the given
provider
object matches the criterion defined
by this Filter
.
FilteredRowSet
must implement.FilterInputStream
contains
some other input stream, which it uses as
its basic source of data, possibly transforming
the data along the way or providing additional
functionality.FilterInputStream
by assigning the argument in
to the field this.in
so as
to remember it for later use.
RGBImageFilter.filterRGB
.
int
value representing the final
modifier.
Font
object.
ColorModel
once this ColorModel
is no
longer referenced.
ColorModel
once this ColorModel
is no
longer referenced.
close
method of this file input stream is
called when there are no more references to it.
close
method of this file output stream is
called when there are no more references to this stream.
close
method of this ZIP file is
called when there are no more references to it.
ResultSet
column name to its
ResultSet
column index.
offset
matching
tag
.
KeyboardFocusManager.getFocusOwner()
.
string
, starting at offset start
.
URL
objects
representing all the resources with the given name.
finishedPaintingChildren
method on each UI handled by this object.
AbstractListModel
subclasses must call this method
after
one or more elements of the list change.
int
bound indexed property update to any registered
listeners.
boolean
bound indexed property update to any
registered listeners.
AbstractListModel
subclasses must call this method
after
one or more elements are added to the model.
AbstractListModel
subclasses must call this method
after one or more elements are removed from the model.
PopupMenuListener
s that the popup portion of the
combo box has been canceled.
PopupMenuListeners
that this popup menu is
cancelled.
PopupMenuListener
s that the popup portion of the
combo box has become invisible.
PopupMenuListener
s that this popup menu will
become invisible.
PopupMenuListener
s that the popup portion of the
combo box will become visible.
PopupMenuListener
s that this popup menu will
become visible.
JList
ListSelectionListener
s that
the selection model has changed.
ChangeListener
's
stateChanged
method.
ChangeListener
's stateChanged
method.
ChangeEvent
s.
ChangeEvent
, whose source is this
JSpinner
, to each ChangeListener
.
ChangeEvent
, whose source is this tabbedpane,
to each listener.
ChangeListeners
when the views
size, position, or the viewports extent size has changed.
[row, column]
has been updated.
TableModelListeners
that registered
themselves as listeners for this table model.
[firstRow, lastRow]
, inclusive, have been deleted.
[firstRow, lastRow]
, inclusive, have been inserted.
[firstRow, lastRow]
, inclusive, have been updated.
ListSelectionListeners
that the value
of the selection, in the closed interval firstIndex
,
lastIndex
, has changed.
ResultSet
object.
ComponentOrienation
.
ComponentOrienation
.
TypeCode
object.
TypeCode
object.
GlyphVector
has
a complex glyph-to-char mapping (one that does not map glyphs to chars one-to-one in
strictly ascending or descending order matching the run direction).
GlyphVector
has
position adjustments.
GlyphVector
has
per-glyph transforms.
GlyphVector
has
a right-to-left run direction.
NamedValue
object.
FlatteningPathIterator
class returns a flattened view of
another PathIterator
object.FlatteningPathIterator
object that
flattens a path as it iterates over it.
FlatteningPathIterator
object
that flattens a path as it iterates over it.
FlavorEvent
is used to notify interested parties
that available DataFlavor
s have changed in the
Clipboard
(the event source).FlavorEvent
object.
PrintException
can implement to report an error condition
involving a doc flavor or flavors (class DocFlavor
).FlavorEvent
s.Clipboard
of the listener
has changed its available DataFlavor
s.
Float
class wraps a value of primitive type
float
in an object.Float
object that
represents the primitive float
argument.
Float
object that
represents the argument converted to type float
.
Float
object that
represents the floating-point value of type float
represented by the string.
FLOAT
.
SimpleType
instance describing values whose
Java class name is java.lang.Float
.
FloatControl
object provides control over a range of
floating-point values.FloatControl.Type
inner class identifies one kind of
float control.FloatHolder
object with its
value
field initialized to 0.0.
FloatHolder
object for the given
float
.
Byte
as a
float
.
float
value of this
Double
object.
float
value of this Float
object.
Integer
as a
float
.
Long
as a
float
.
float
.
Short
as a
float
.
float
.
double
value that is less than or equal to the
argument and is equal to a mathematical integer.
double
value that is less than or equal to the
argument and is equal to a mathematical integer.
FlowLayout
with a centered alignment and a
default 5-unit horizontal and vertical gap.
FlowLayout
with the specified
alignment and a default 5-unit horizontal and vertical gap.
flush
was called.
Preferences.flush()
.
OutputStream
or
File
.
FocusEvent
object with the
specified temporary state and opposite Component
.
FocusEvent
object and identifies
whether or not the change is temporary.
FocusEvent
object and identifies it
as a permanent change in focus.
Font
class represents fonts, which are used to
render text in a visible way.Font
from the specified name, style and
point size.
Font
with the specified attributes.
Font
from which the font metrics are
created.
null
indicates
font of renderer is to be used.
Font
class to indicate
that the specified font is bad.FontMetrics
class defines a font metrics object, which
encapsulates information about the rendering of a particular font on a
particular screen.FontMetrics
object for finding out
height and width information about the specified Font
and specific character glyphs in that Font
.
FontRenderContext
class is a container for the
information needed to correctly measure text.FontRenderContext
object.
FontRenderContext
object from an
optional AffineTransform
and two boolean
values that determine if the newly constructed object has
anti-aliasing or fractional metrics.
Format
is an abstract base class for formatting locale-sensitive
information such as dates, messages, and numbers.MessageFormat
's
pattern, with format elements replaced by the formatted objects, to the
provided StringBuffer
.
MessageFormat
's
pattern, with format elements replaced by the formatted objects, to the
provided StringBuffer
.
Date
into a date/time string and appends
the result to the given StringBuffer
.
AttributedCharacterIterator
returned
from Format.formatToCharacterIterator
and as
field identifiers in FieldPosition
.Formatter
.Formattable.formatTo()
method and modify the output format for Formattables.formatter
.
AttributedCharacterIterator
.
AttributedCharacterIterator
.
MessageFormat
's pattern, producing an
AttributedCharacterIterator
.
AttributedCharacterIterator
.
Class
object associated with the class or
interface with the given string name.
Class
object associated with the class or
interface with the given string name, using the given class loader.
reply_status
attribute is LOCATION_FORWARD
.
DocumentEvent
to the child views
that need to be notified of the change to the model.
DocumentEvent
to the child views
that need to be notified of the change to the model.
DocumentEvent
to the give child view.
Frame
is a top-level window with a title and a border.Frame
that is
initially invisible.
Frame
with the specified
GraphicsConfiguration
of
a screen device.
Frame
object
with the specified title.
Frame
object
with the specified title and a
GraphicsConfiguration
.
Frame
class.JFrame
properly.
FREE_MEM
exception with a default
minor code of 0 and a completion state of COMPLETED_NO.
FREE_MEM
exception with the specified detail
message, a minor code of 0, and a completion state of COMPLETED_NO.
FREE_MEM
exception with the specified
minor code and completion status.
FREE_MEM
exception with the specified detail
message, minor code, and completion status.
Calendar.DAY_OF_WEEK
field indicating
Friday.
DynAny
object from an Any
object.
CompletionStatus
object from the given int
.
DefinitionKind
instance corresponding to the given code
.
int
to the corresponding
SetOverrideType
instance.
int
to the corresponding
TCKind
instance.
UUID.toString()
method.
JOIN
providing a a full JOIN.
|
JavaTM 2 Platform Standard Ed. 5.0 |
|||||||||
| PREV LETTER NEXT LETTER | FRAMES NO FRAMES |
Copyright © 2004, 2010 Oracle and/or its affiliates. All rights reserved. Use is subject to license terms. Also see the documentation redistribution policy.


We are upper year students who attend Wilfrid Laurier University. Combined we have a strong variety of University experience and knowledge. We created this website with the goal to inform fellow Laurier students about EVERYTHING this school has to offer, both academically and socially. Transitioning to a large institution like Laurier usually overwhelms first years. We want to bring expert knowledge regarding day-to-day life at Laurier and the Waterloo community. We hope by doing this that people will maximize their time and not miss anything.
Everyone has a place at Laurier, and this is why we intend to target any student from 1st to 5th year. This website will inform every viewer on something new or at least promote specific things. Our content is mainly constructed from upper year students, and most of the advice is aimed at helping 1st and 2nd year students. It will not be specific to a certain program or age, and anyone attending Laurier or even in the Waterloo community will have access to this website and our resources will teach you more about life at WLU. Overall we want to be a popular online page were students can go if they have any problems or concerns regarding anything at Laurier. We will also offer a contact us page where students can provide their own advice as well as express misunderstandings with University life.
One of the first and most important tips for success in university is to understand the way in which you learn best. There are three different types of learners: visual, auditory and kinesthetic. Once you have determined which type of learner you are, taking action in how you study and using these methods are crucial.
Laurier students should be aware that there are other ways to access textbooks rather than paying full price at the bookstore. One way to do this is to buy used from the Laurier facebook pages available for students to join. One tip though is to look at the price in the bookstore and if there is an access code that you have to purchase for the course. Make sure that you aren’t overpaying for the textbook that would otherwise come with the access code from the bookstore.
According to a recent survey conducted, Laurier students find the best study locations on campus are the library, the science atrium and in Lazaridis, the new business building.
When it comes to finding the right time to claim your spot in one of these study areas, the earlier in the day you can make it the better. Especially during exams, if you want space on campus to study, going to sleep earlier so you can get up early is the best way to approach finding a seat.
Healthy eating is another vital aspect of your physical health. This is one of those things that can be hard to accomplish because it can take up quite a bit of time and energy to do effectively. A great way to have a handle on this would be to meal prep. This creates a way for you to have healthy meals prepped in advance and ready to eat when you are hungry.
The next huge part of staying healthy while studying is being aware of your mental health. This is something that people tend to overlook and push through while in school because they think that grades are more important. This is NOT true. There are many different resources available for Laurier students, such as the health and wellness centre, that can help in times of distress.
Laurier is one of those schools that is well known for making physical activity a priority. There are so many different ways to make this happen; working out at the gym, participating in intramural sports, taking group exercise classes and so many more.
If you have more idea's of what would help you out as a Laurier student, feel free to give us a call or send an email our way! We'd love to hear from you!
123-456-6789
How to be Social at Laurier
Having a structured academic life as well as a social life is extremely important while living at Laurier. This is the first time most students are living on their own, and it is essential to surround yourself with people that will make you happy and help you to achieve your goals. Doing well in school is obviously the main priority but making lasting connections at university is a once in a lifetime opportunity.
Key Social Events at Laurier
O-Week is a must attend event as a first year! There are also many activities that ae hosted by the school as well as outside promoters to engage upper year student's in the O-Week tradition. O-Week is held during the first week of school every fall semester.
Intramural sports, as mentioned before are a great way to meet people, these are put on by Laurier Athletics.
 There is also opportunity at Laurier to start your own club.
For upper year students, there are prized night clubs as well as bars that most students recommend!
Laurier campus is your new home, and we want you to feel safe, secure and especially want you to have fun. We hope that these ideas get you started with your social journey here at Laurier!!!


Billing Address
Shipping address is the same as my billing address
Save this information for next time
Payment
Credit Card
Debit Card
PayPal
Name on card
Name on card is required
Card Number
Credit card number is required
Expire Date
Expiration date required
Security Number
Security code required
Continue to Checkout


public interface CBuilder
CModel
.| Modifier and Type | Method and Description |
|---|---|
CFrame |
addFrame(CIdentity identity,
boolean hidden)
Creates a new atomic-frame and adds it to the model.
|
void |
addListener(CBuildListener listener)
Adds a listener for events occuring during with the build
process.
|
void |
addSectionBuilder(CSectionBuilder sectionBuilder)
Adds a section-builder to build a section of the model.
|
CModel |
build()
Builds the model, which will incorporate all entities
provided by the various section-building mechanisms.
|
void |
clearSectionBuilders()
Removes all section-builders that have been added.
|
java.util.List<CSectionBuilder> |
getAllSectionBuilders()
Retrieves all section-building mechanisms that will be used
in creating the model.
|
CAnnotationsEditor |
getFrameAnnotationsEditor(CFrame frame)
Provides an editor for annotations on the specified frame.
|
CFrameEditor |
getFrameEditor(CFrame frame)
Provides an editor for the specified frame.
|
CIdentifieds<CFrame> |
getFrames()
Retrieves all frames in the model.
|
CFrameSlotOrders |
getFrameSlotOrders()
Provides the object for defining the required ordering, for
purposes of presentaion to an end-user, of the slots associated
with specific atomic-frames.
|
IEditor |
getIEditor()
Provides the editor that allows "under-the-hood" editing of
model instantiations.
|
CAnnotationsEditor |
getModelAnnotationsEditor()
Provides an editor for annotations on the model itself.
|
CFrame |
getRootFrame()
Provides the unique root-frame for the model.
|
<B extends CSectionBuilder> |
getSectionBuilder(java.lang.Class<B> type)
Retrieves a required section-building mechanism as specified
via the relevant java class.
|
CAnnotationsEditor |
getSlotAnnotationsEditor(CIdentity slotId)
Provides an editor for annotations on the specified slot-set.
|
CSlotEditor |
getSlotEditor(CSlot slot)
Provides an editor for the specified slot.
|
void |
optimiseSubsumptionTesting()
Performs subsumption-check optimisations on partially built
model.
|
boolean |
removeFrame(CIdentity identity)
Removes the specified atomic-frame from the model, if possible.
|
void |
removeListener(CBuildListener listener)
Removes a listener for events occuring during with the build
process.
|
void |
removeSectionBuilder(CSectionBuilder sectionBuilder)
Removes the specified section-builder, if present.
|
void |
removeSectionBuilders(java.lang.Class<? extends CSectionBuilder> type)
Removes any section-builders of the specified type that have been added.
|
CFrame |
resolveFrame(CIdentity identity,
boolean hidden)
Either retrieves an existing atomic-frame with the specified
identity or, if no such frame currently exists, creates a new
atomic-frame and adds it to the model.
|
void |
setAutoUpdate(boolean autoUpdate)
Enables or disables the
IUpdating.autoUpdate facility
for the model. |
void |
setDefaultUpdateOp(IUpdateOp op,
boolean enabled)
Resets default enabled-status for a specific instance-update
operation, as represented via the
IUpdating object
for the model. |
void |
setIReasoner(CFrame frame,
IReasoner iReasoner)
Sets the instance-reasoner object for an existing atomic-frame.
|
void setAutoUpdate(boolean autoUpdate)
IUpdating.autoUpdate
facility
for the model. By default auto-update will be enabled.autoUpdate
- True if auto-update is to be enabledvoid setDefaultUpdateOp(IUpdateOp op, boolean enabled)
IUpdating
object
for the model. If not reset the default enabled-status for each
operation will be true.op
- Relevant instance-update operationenabled
- Default enabled-status of operationvoid addListener(CBuildListener listener)
listener
- Listener to addvoid removeListener(CBuildListener listener)
listener
- Listener to removevoid addSectionBuilder(CSectionBuilder sectionBuilder)
sectionBuilder
- Section-builder to addvoid removeSectionBuilder(CSectionBuilder sectionBuilder)
sectionBuilder
- Section-builder to addvoid removeSectionBuilders(java.lang.Class<? extends CSectionBuilder> type)
type
- Type of section-builder to removevoid clearSectionBuilders()
CFrame addFrame(CIdentity identity, boolean hidden)
identity
- Identify of frame to createhidden
- True if created frame is to be a "hidden" frameuk.ac.manchester.cs.mekon_util.KAccessException
- if frame with specified identity
already existsCFrame resolveFrame(CIdentity identity, boolean hidden)
identity
- Identify of frame to retrieve or createhidden
- True if created frame, or existing frame, is to
be a "hidden" frame (if already defined as hidden, a value of
false will have no effect)boolean removeFrame(CIdentity identity)
CSource.internal()
source. If removed then direct
hierarchical links will be created from each sub-frame to each
super-frame.identity
- Identify of frame to be removedvoid setIReasoner(CFrame frame, IReasoner iReasoner)
frame
- Frame whose instance-reasoner is to be setiReasoner
- Instance-reasoner for frameCFrameSlotOrders getFrameSlotOrders()
java.util.List<CSectionBuilder> getAllSectionBuilders()
<B extends CSectionBuilder> B getSectionBuilder(java.lang.Class<B> type)
B
- Generic version of typetype
- Java class of required section-building mechanismCFrame getRootFrame()
CIdentifieds<CFrame> getFrames()
CFrameEditor getFrameEditor(CFrame frame)
frame
- Frame for which editor is requiredCSlotEditor getSlotEditor(CSlot slot)
slot
- Slot for which editor is requiredCAnnotationsEditor getModelAnnotationsEditor()
CAnnotationsEditor getFrameAnnotationsEditor(CFrame frame)
frame
- Frame for which editor is requiredCAnnotationsEditor getSlotAnnotationsEditor(CIdentity slotId)
slotId
- Identity of slots in slot-set for which editor
is requiredIEditor getIEditor()
CModel build()
CSectionBuilder.supportsIncrementalBuild()
flag is set to perform appropriate incremental updates.void optimiseSubsumptionTesting()


Mail of [[${userId}]]
No.
From
Title
Date
1
userId
No Topic
2016-01-04
[
Top
]
[
Previous
]
[
Next
]
[
Send Mail
]


---
layout: post
title: Using Richfaces 'Suggestion Box' As Combo Box
date: '2009-10-19T11:14:00.000-07:00'
author: Babji Prashanth, Chetty
categories:
- java
- web
tags:
- chetty prashanth
- chetty babji
- richfaces combobox shows ids
- Using Richfaces 'Suggestion Box' As Combo Box or drop down list
- richfaces ajax framework
modified_time: '2011-03-22T16:45:28.731-07:00'
blogger_id: tag:blogger.com,1999:blog-290045043624227719.post-2378397718248021276
blogger_orig_url: http://java-bytes.blogspot.com/2009/10/using-richfaces-suggestion-box-as-combo.html
---
If you had already tried to use Richfaces Combo Box for populating the 'id-value' pairs, you would have noticed that the dropdown/combo box will be populated with id's, rather than values. It's not a bug or a problem with richfaces framework, but a different design. There's a workaround for this, which lets you use the 'Richfaces Suggestion Box' component, to work like a combo box or a dropdown list.
Below is the sample code snippet from a facelets file, which acts like a combo box:
{% highlight xml %}
...............
...............
{% endhighlight %}
In the above code, I'm using a arrow image (down arrow) beside the input text box, to make it look like a combo-box/drop-down list and created a javascript function, which is called on click of that arrow image. This javascript function does nothing special, but clears the text-box and calls the actual 'Suggestion Box' method (creates an AJAX request).
And below is the Javascript code for 'openSuggestion' function:
{% highlight javascript %}
{% endhighlight %}


Journal
To-Do List
Authorize access to Google Calendar API
Authorize
Manage Account
Login
Register
Forgot Password
Resend Activation
Please sign in.
Remember me
Login
Not a member yet? Register here.
Forgot your password?
Resend activation email