Prosys OPC UA Java SDK 2.1.0
This is a new minor release of the SDK, which fixes several issues in the implementation. This is also the first version that passes the OPC Foundation Compliance Tests and is Certified for Compliance. In practice, it means that the sample applications that are included with the SDK are being certified. It does not mean that all applications built with the SDK are automatically certified, though. But all the features in the SDK now enable certification and all applications built with the SDK should be certifiable.
There is one major change to the use of libraries: logging of the Java Stack and the SDK is now based on SLF4J (Simple Logging Facade for Java), instead of of LOG4J. Since SLF4J is just a facade to various logging libraries, you can continue using LOG4J as the actual logging library and it is still shipped with the SDK and used by the sample applications. Check the readme.txt and the slf4j home page for details on the usage of SLF4J.
OPC Foundation Java Stack changes
- Build 1.02.336.8
- New library dependencies: slf4j-api (and optionally slf4j-log4j12 or some other logging bridge)
- New: ServerSecureChannel.getLocalCertificate()
- New: ServerSecureChannel.getRemoteCertificate()
- New: DateTime.is/setUseLocalTimeInToString()
- New: QualifiedName.isNullOrEmpty()
- Changed: ObjectUtils.printObjectIds & showDataType default changed to false to give prettier printing by default; showByteDataAsHex=true by default
- Changed: AsyncResult to a Generic class - and serviceRequestAsync changed to return AsyncResult
- Fixed: XmlElement.toString() to not throw exception, if the XmlElement is not XML at all
- Fixed: StatusCode.getName() to provide a name for plain "BAD" as well
- Fixed: EndpointDiscoveryService.onGetEndpoints() only handles endpoints bound to the interface from whichthe GetEndpointsRequest is coming from.
- Fixed: Client requires server to use ProtocolVersion=0 - should accept bigger values
- Fixed: let encodedRemoteCertificate from server to be an empty byte array
Changes to both SDK Client and Server
- New: UaAddressSpace.loadModel(InputStream)
- New: UaAddressSpace.getDataTypeConverter() (replaces NodeManagerRoot.getDataTypeConverter(), which was only managing types from the standard namespace)
- Fixed: ModelParser improvements
Changes to SDK Client
- New: UaClient.removeSubscriptionAsync
- New: UaClientListener
- New: MonitoredDataItem constructor alternatives
- Fixed (METHOD RENAME): UaClient.setSessionTimeout(long, TimeUnit), was setSesstionTimeout
- Fixed: AddressSpace.getType() must not throw StatusException (since getNode() does not throw it either any more)
- Improved: PublishRequest/Response handling & createSubscription
Changes to SDK Server
Fixed several issues related to instantiation of code generated nodes, especially to condition type nodes - and optional members.
- New (INTERFACE CHANGE): SubscriptionManagerListener.onModifySubscription
- New: UaServer.is/setEnableIPv6() (default false); on Windows this requires Java 7 or newer
- New: BrowsePath.toArray(), getLast(), removeLast()
- New: UaAddressSpace.getDataTypeConverter() (replaces NodeManagerRoot.getDataTypeConverter(), which was only managing types from the standard namespace)
- New: NodeManagerTable.getType()
- Changed (Internal interface change!): IoManager.readValue/readNonValue/writeValue/writeNonValue() have a new argument, operationContext
- Fixed: Inverse references missing from all condition type components (and other reference targets)
- Fixed: Null values in array data caused NullPointerExceptions in checkDeadband()
- Fixed: Manual additions of modelchanges were ignored (+added optimization to SematicChanges as well)
- Fixed: Initialization of TwoStateVariableTypeNode.value
- Fixed: GeneralModelChangeEventTypeNode did not deliver Changes in the order they are added
- Fixed: Server initialization fails (with NPE), if ServerName=null or empty
- Fixed: NPE in GeneralModelChangeEventTypeNode.setChanges()/addChanges()
- Fixed: Correct error codes are now returned for invalid username/password/algorithm. Client specified algorithm was not supported at all.
- Fixed: StackOverflowError from modifyMonitoredItems()
- Fixed: UaServer.init() now throws UaServerException if no UserTokenPolicies are defined
- Fixed: Server diagnostics were not working at all (since 2.0). Diagnostic data arrays are still not working, though.
- Fixed: UaVariableNode.setValue() no longer checks whether the SourceTimestamp is changed
- Fixed: ServerCapabilities.MaxArray/StringLength are now initialized from UaServer's EndpointConfiguration
- Fixed: ServerCapabilities.ModellingRules are now intialized with all available ModellingRules
- Fixed: SessionManager accepted user identity tokens, even when the respective type (for example Anonymous) was not supported by the server
- Fixed: BaseObject/VariableType classes did not contain the TypeDefinitionId annotation, making them unusable with the NodeBuilder
Changes to the Sample applications
- New: SimpleClient.java
- New: SampleConsoleServer.sendEvent()
- Changed: SampleConsoleClient.showReadValueDataType (determines if the DataType of all values read from the server) is now false by default, but can be changed with a cmd line option (-dt)
- Fixed: SampleConsoleClient expected event fields from SampleConsoleServer
- Fixed: SampleConsoleClient.getCurrentNodeAsString() to use the provided node, instead of the nodeId field
29.01.15