Remoting NG

Remoting NG Release Notes

Release 2024.2

Summary of Changes

  • Significant improvements to the WSDL/XML Schema code generator (XSDGen), which now allow it to successfully process very complex WSDL and XML Schema documents, including the ONVIF specifications.
  • C++ classes generated for XML elements by XSDGen now provide additional setter functions taking an rvalue reference for move assignment.
  • The SOAP transport now supports WS-Security authentication with the Username Token Profile. On the client side (Poco::RemotingNG::SOAP::Transport), WS-Security is supported by setting the respective authentication mode (AUTH_WSSE_TEXT or AUTH_WSSE_DIGEST).
  • HTTP-based transports (Poco::RemotingNG::HTTP::Transport, Poco::RemotingNG::JSONRPC::Transport, Poco::RemotingNG::REST::Transport, Poco::RemotingNG::SOAP::Transport) now allow setting custom HTTP headers for requests.
  • The SOAP transport library provides a new Poco::RemotingNG::SOAP::SOAPFaultException class, which provides access to all XML elements from the SOAP Fault element. This exception is now thrown instead of a generic Poco::RemotingNG::RemoteException if the server returns a SOAP Fault. The SOAPFaultException class is a subclass of RemoteException to maintain backwards compatibility.
  • The REST transport library provides a new Poco::RemotingNG::REST::RESTServerException class, which provides access to the JSON content that is sent as part of an error response (HTTP status code >= 400) from the server. This exception is now thrown instead of a generic Poco::RemotingNG::RemoteException if the sends a response with an error status code. The RESTServerException class is a subclass of RemoteException to maintain backwards compatibility.

Known Issues

  • None at this time.

Incompatible Changes and Possible Transition Issues

  • The REST and SOAP transports now throw a subclass of Poco::RemotingNG::RemoteException, in case of an error reported by the server, so the exception message will be slightly different.

Release 2024.1

Summary of Changes

  • Support for serialization of std::optional in C++17.
  • The serialization and deserialization code generated by RemoteGen will now serialize struct and class members in order of their declaration, and no longer in lexical order as previously. This is a breaking change and requires action. See the note below for more information, including how to configure previous behavior.
  • The length attribute is now supported for sequences and strings.
  • New xsdType attribute that is used by the SOAP transport (and WSDL/XML Schema code generator) to convey the original XML Schema type to the serializer/deserializer. Currently used for serialization of data, time and dateTime types, which are all mapped to Poco::DateTime.
  • Fixed an issue in the TCP transport that prevented using the TCP transport with Unix domain sockets.
  • RemoteGen now generates more modern-style C++ code.
  • Various minor fixes and improvements.

Known Issues

  • None at this time.

Incompatible Changes and Possible Transition Issues

The serialization and deserialization code generated by RemoteGen will now serialize struct and class members in order of their declaration, and no longer in lexical order as before.

This unfortunately breaks the binary protocol for the TCP and HTTP transports, so if these transports are used, the Remoting code for all clients and servers must be re-generated and rebuilt to prevent serialization/deserialization problems.

Alternatively, it is possible to restore the old serialization behavior by adding an option to the RemoteGen configuration file:

<options>
  <memberSerializationOrder>lexical</memberSerializationOrder>
</options>

The options element must be added under the RemoteGen element, next to the files and output elements. This ensures full compatibility with existing clients and servers using the TCP or HTTP protocol.

Release 2023.1

Summary of Changes

  • RemoteGen now generates a correct isA() member function in the interface class for OSP services.
  • RemoteGen no longer crashes if it encounters a self-referencing type declaration.
  • Added the MinimumIntervalAndDeltaFilter event filter.
  • Improved handling of types defined in the service class.

Known Issues

  • None at this time.

Incompatible Changes and Possible Transition Issues

  • None at this time.

Release 2022.1

Summary of Changes

  • Fixed a long-standing bug with handling attributes, where an empty attribute value would become "true". This was specifically an issue with the SOAPAction attribute, if an empty SOAPAction was specified with the action attribute.
  • RemoteGen: ignore methods and event with @remote attribute explicitly set to false.
  • Do not attempt to include serializers/deserializers for parameters of static member functions.
  • REST: Add support for logging exceptions thrown in service methods.
  • REST: Improve exception message for unexpected null values.
  • REST: RemoteGen supports additional OpenAPI 3.0 attributes (max, min, maxItems, minItems, maxLength, minLength, pattern, multipleOf).
  • Added project and solution files for Visual Studio 2022.

Known Issues

  • None at this time.

Incompatible Changes and Possible Transition Issues

  • The Serializer::serializeFaultMessage() method signature has been changed - the exception parameter is now const. Custom Serializer implementations must be updated accordingly.

Release 2021.1

Summary of Changes

  • RemoteGen now supports the generation of an OpenAPI 3.0 (also known as Swagger) document for REST APIs. This is enabled by adding an openAPI element to the RemoteGen/output element in the RemoteGen configuration file.
  • REST Transport: deserialization of Poco::Optional in query, header or path did not work.
  • C++11 scoped and typed enums (enum class) can now be used in Remoting interfaces.
  • RemoteGen now supports a "skeleton-only" generation mode, which can be used to separate interfaces and server-side skeleton into separate libs.
  • REST and JSONRPC Transports: the maximum depth of JSON documents is restricted to 50 to prevent certain kinds of attacks.
  • XSDGen: Fixed an issue where code for handling arrays of nilable elements was not generated correctly, resulting in e.g. a double SharedPtr like Poco::SharedPtr<Poco::SharedPtr<std::vector<Type>>>.
  • Fixed an issue introduced in 2020.1 where code generated for XML attribute serialization/deserialization missed an using namespace std::string_literals; declaration.
  • CMake build support is now available in addition to Visual Studio project files and GNU Makefiles.

Known Issues

  • None at this time.

Incompatible Changes and Possible Transition Issues

  • None at this time.

Release 2020.1

Summary of Changes

  • The RemotingNG framework now requires a C++14 compiler.
  • Serialization support for C++11 and C++14 types: std::array, std::unordered_set, std::unordered_multiset, std::shared_ptr, std::unique_ptr.
  • Improved deserialization performance of complex types due to use of move assignment.
  • Modernized code base to use C++14 features.
  • Performance improvements due to use of C++14 features such as std::string literals.
  • Simplified the RemotingNG code generator configuration via the RemoteGen.xml configuration file. Compiler configurations, and the list of RemotingNG header files that need to be parsed by the code generator for each project are now in a global configuration file and don't need to be specified for each project.

Known Issues

  • None at this time.

Incompatible Changes and Possible Transition Issues

  • The RemotingNG framework now requires a C++14 compiler (Minimum compiler versions: Visual C++ 2015, GCC 5, Clang 3.4).

Release 2019.2

Summary of Changes

  • REST: It's now possible to use multipart/form-data encoding for passing parameters to REST methods. This includes parameters of type std::vector<char> being transmitted as binary data. This can be enabled by setting the consumes attribute of the method to "multipart/form-data".
  • REST: It's now possible to pass query parameters to POST requests.
  • TCP: Make connection handshake timeout configurable and increase default handshake timeout to 8 seconds.

Known Issues

  • None at this time.

Incompatible Changes and Possible Transition Issues

  • None at this time.

Release 2019.1

Summary of Changes

  • The TCP transport can now also be used with Unix Domain Sockets (which are not TCP at all). In a future release, the TCP transport will therefore be renamed to Socket transport.
  • XSDGen: added support for rpc/literal style WSDL
  • XSDGen: added support for loading WSDL/XSD documents via HTTPS. XSDGen must be compiled with -DPOCO_XSD_ENABLE_HTTPS to enable HTTPS support.

Known Issues

  • None at this time.

Incompatible Changes and Possible Transition Issues

  • None at this time.

Release 2018.1

Summary of Changes

  • Serialization now supports arrays (Poco::Array or std::array).
  • CORS: Send Access-Control-Allow-Headers in preflight response (REST and JSON-RPC transports).
  • REST JSON: fixed serialization/deserialization of a single scalar in the message body
  • REST: Support custom authorization headers (AUTH_CUSTOM).
  • JSON deserialization: fix a potential crash if an object is expected, but an array is present
  • RemoteGen: fixed issues with code generation for events

Known Issues

  • None at this time.

Incompatible Changes and Possible Transition Issues

  • None at this time.

Release 2017.2

Summary of Changes

  • Added HTTP transport, combining HTTP(S) with binary serialization.
  • SOAP Transport: added option flags to Poco::RemotingNG::SOAP::Serializer to control various SOAP envelope and formatting options. These can be set via the setSerializerOptions() method in Poco::RemotingNG::SOAP::Transport.
  • Added new optional attribute, which has the inverse meaning of the mandatory attribute.

Known Issues

  • None at this time.

Incompatible Changes and Possible Transition Issues

  • None at this time.

Release 2017.1

Summary of Changes

  • Added a new framework for authentication and authorization, which replaces the transport-specific authentication support available in previous releases.
  • Support for authentication and authorization in the TCP transport.
  • REST Transport: added support for OAuth2 Bearer Token authentication
  • REST and JSONRPC Transport: Control characters in strings are now properly encoded in JSON strings.
  • RemoteGen bugfix: fix: don't generate () for empty default initialization in Skeleton code
  • RemoteGen bugfix: generate correct code for EventDispatcher and EventSubscriber for classes that inherit events from base classes

Known Issues

  • None at this time.

Incompatible Changes and Possible Transition Issues

  • None at this time.

Release 2016.2

Summary of Changes

  • RemoteGen bugfix: ignore static Poco::BasicEvent<> members in @remote classes.
  • Use Poco::Clock instead of Poco::Timestamp for event subscription timeouts for resiliency against system time changes.
  • Poco::RemotingNG::Listener: add new defaultListener() overload allowing to specify a Poco::RemotingNG::ConnectionManager.
  • The generated ServerHelper classes have a new shutdown() method to explicitly unregister the Skeleton with the ORB. Note that calling it is optional and most servers don't have to do it. This is for use cases that require dynamic registration and unregistration of Skeleton classes. Furthermore, the ServerHelper destructor will no longer unregister the Skeleton.

Known Issues

  • None at this time.

Incompatible Changes and Possible Transition Issues

  • Due to changes in the ServerHelper interface, all ServerHelper files generated by RemoteGen must be re-generated after upgrading to this release by running RemoteGen.

Release 2016.1

Summary of Changes

  • New REST transport for implementing RESTful web services.
  • JSONRPC: error message texts in JSON error documents are now properly escaped.
  • SOAP: added support for document/literal-style web services (in addition to document/literal wrapped; client only).
  • Poco::RemotingNG::ORB has new objectRegistered and objectUnregistered events.
  • Support for server-side event filtering.
  • RemoteGen: properly generate #include's for event type serializers and deserializers.
  • RemoteGen: fixed incorrect code generation for "header" attribute if a parameter direction (in, out, inout) is specified.
  • RemoteGen: generated Remoting Type IDs now include the namespace (period-separated).
  • TCP: added Poco::RemotingNG::TCP::Listener::defaultListener() to obtain a shared EventListener instance for handling remote events.
  • XSDGen: improvements to WSDL/XML Schema parser and code generator to better handle different styles of WSDL and XML Schema documents.

Known Issues

  • None at this time.

Incompatible Changes and Possible Transition Issues

  • Type IDs generated by RemoteGen now include the service class namespace. In previous versions, the type ID was simply the service class name. Namespace parts are separated by a period, e.g.: "Services.TimeService".

Release 2015.2

Summary of Changes

  • Support for void events (Poco::BasicEvent<void>) in RemoteGen
  • RemoteGen.xml fixes (add -DPOCO_NO_GCC_API_ATTRIBUTE) for POCO 1.6
  • XSDGen: added command-line option to force code generation for all bindings

Known Issues

  • None at this time.

Incompatible Changes and Possible Transition Issues

  • None at this time.

Release 2015.1

Summary of Changes

  • No changes since previous release.

Known Issues

  • None at this time.

Incompatible Changes and Possible Transition Issues

  • None at this time.

Release 2014.1B

Summary of Changes

  • Added support for cookies to JSONRPC and SOAP Transport objects.
  • Make HTTPServerRequest and HTTPServerResponse objects available to server code via Context in JSONRPC and SOAP transports.
  • RemoteGen: SingletonHolder in client/server helper is now named sh<class> to avoid name conflicts if multiple source files are combined.

Known Issues

  • None at this time.

Incompatible Changes and Possible Transition Issues

  • None at this time.

Release 2014.1

Summary of Changes

  • Minor changes for compatibility with C++11.
  • TCP transport bugfix: Set up reply stream before closing request to avoid race condition (no reply handler registered) with fast connections.
  • RemoteGen: Do not use inheritance in generated skeleton classes. This fixes a potential crash when invoking a base class method on a derived class, due to a failing cross cast (the RemoteObject classes for base class and derived classes are not related).
  • New ServerHelper class template, which is specialized by generated ServerHelper classes. This allows use of ServerHelper classes in generic code.
  • ServerHelper and ClientHelper instances are now created using a Poco::SingletonHolder.
  • Various minor improvements.

Known Issues

  • None at this time.

Incompatible Changes and Possible Transition Issues

  • None at this time.

Release 2013.2

Summary of Changes

  • Added the Poco::RemotingNG::Context class which allows to pass transport-specific information to service methods via a thread-local object.
  • Added the JSON-RPC transport which implements the JSON-RPC 2.0 protocol
  • XSDGen bugfixes: empty import elements now work, unnamed inner simple type declarations are handled properly and no longer cause an assertion, missing element declarations no longer cause a crash due to a null pointer.

Known Issues

  • None at this time.

Incompatible Changes and Possible Transition Issues

  • None at this time.

Release 2013.1p1

Summary of Changes

  • The SOAP transport now correctly handles SOAP faults sent in MTOM multipart messages.
  • The TypeDeserializer for Poco::DateTime now also parses the time zone, if present, and adjusts the resulting DateTime value accordingly.
  • Fixed a RemoteGen bug where the @header attribute was ignored in case of a renamed method parameter.
  • Fixed a XSDGen bug where header elements would be duplicated in generated C++ classes if both SOAP 1.1 and 1.2 bindings were present in a WSDL document.

Known Issues

  • None at this time.

Incompatible Changes and Possible Transition Issues

  • None at this time.

Release 2013.1

Summary of Changes

  • The Content-Type HTTP header for a MTOM multipart request had compatibility issues with some third party implementations. This is now fixed.
  • Fixed a crasher with serializing MTOM messages if a Serializer instance was used multiple times.
  • Fixed a few XSD/WSDL code generation issues, causing incorrect code to be generated for certain XSD/WSDL constructs.

Known Issues

  • None at this time.

Incompatible Changes and Possible Transition Issues

  • None at this time.

Release 2012.1

Summary of Changes

  • Remoting NG is the successor to the Remoting framework.
  • This is the first official release of Remoting NG. While Remoting NG was included starting with release 2011.1 as part of the Universal Plug and Play framework, with release 2012.1, Remoting NG completely replaces the older Remoting framework, which will no longer be improved.
  • Remoting NG features an improved internal architecture, support for remote events, and new transports. Also included is code generation from WSDL documents.

Known Issues

  • None at this time.

Incompatible Changes and Possible Transition Issues

  • The transition from Remoting to Remoting NG requires some changes to existing code.
  • The generated client helper classes now only have a find() method taking a URI as argument.
  • The programming interfaces for registering listeners and service objects with the server ORB have changed. The generated server helper classes have a different interface as well.
  • The attribute syntax for method parameters has changed.
  • Please refer to the documentation for more information.
Securely control IoT edge devices from anywhere   Connect a Device