Class SMPClientReadOnly

All Implemented Interfaces:
com.helger.commons.traits.IGenericImplTrait<SMPClientReadOnly>, ISMPExtendedServiceMetadataProvider, ISMPServiceGroupProvider, ISMPServiceMetadataProvider
Direct Known Subclasses:
SMPClient

This class is used for calling the Peppol SMP REST interface. This particular class only contains the read-only methods including the ones defined in the Peppol SMP specification!
Author:
Philip Helger
  • Field Details

  • Constructor Details

    • SMPClientReadOnly

      public SMPClientReadOnly(@Nonnull ISMPURLProvider aURLProvider, @Nonnull com.helger.peppolid.IParticipantIdentifier aParticipantIdentifier, @Nonnull com.helger.peppol.sml.ISMLInfo aSMLInfo) throws SMPDNSResolutionException
      Constructor with SML lookup
      Parameters:
      aURLProvider - The URL provider to be used. May not be null.
      aParticipantIdentifier - The participant identifier to be used. Required to build the SMP access URI.
      aSMLInfo - The SML to be used. Required to build the SMP access URI.
      Throws:
      SMPDNSResolutionException - if DNS resolution fails
      See Also:
    • SMPClientReadOnly

      public SMPClientReadOnly(@Nonnull ISMPURLProvider aURLProvider, @Nonnull com.helger.peppolid.IParticipantIdentifier aParticipantIdentifier, @Nonnull @Nonempty String sSMLZoneName) throws SMPDNSResolutionException
      Constructor with SML lookup
      Parameters:
      aURLProvider - The URL provider to be used. May not be null.
      aParticipantIdentifier - The participant identifier to be used. Required to build the SMP access URI.
      sSMLZoneName - The SML DNS zone name to be used. Required to build the SMP access URI. Must end with a trailing dot (".") and may neither be null nor empty to build a correct URL. May not start with "http://". Example: sml.peppolcentral.org.
      Throws:
      SMPDNSResolutionException - if DNS resolution fails
      See Also:
    • SMPClientReadOnly

      public SMPClientReadOnly(@Nonnull URI aSMPHost)
      Constructor with a direct SMP URL.
      Remember: must be HTTP and using port 80 only!
      Parameters:
      aSMPHost - The address of the SMP service. Must be port 80 and basic http only (no https!). Example: http://smpcompany.company.org
  • Method Details

    • getServiceGroup

      @Nonnull public com.helger.xsds.peppol.smp1.ServiceGroupType getServiceGroup(@Nonnull com.helger.peppolid.IParticipantIdentifier aServiceGroupID) throws SMPClientException
      Description copied from interface: ISMPServiceGroupProvider
      Returns a service group. A service group references to the service metadata. This is a specification compliant method.
      Specified by:
      getServiceGroup in interface ISMPServiceGroupProvider
      Parameters:
      aServiceGroupID - The ID of the service group to retrieve. May not be null.
      Returns:
      The service group. Maybe null.
      Throws:
      SMPClientException - in case something goes wrong
      See Also:
    • getServiceGroupOrNull

      @Nullable public com.helger.xsds.peppol.smp1.ServiceGroupType getServiceGroupOrNull(@Nonnull com.helger.peppolid.IParticipantIdentifier aServiceGroupID) throws SMPClientException
      Description copied from interface: ISMPServiceGroupProvider
      Returns a service group. A service group references to the service metadata. This is a specification compliant method.
      Specified by:
      getServiceGroupOrNull in interface ISMPServiceGroupProvider
      Parameters:
      aServiceGroupID - The ID of the service group to retrieve. May not be null.
      Returns:
      The service group. Maybe null.
      Throws:
      SMPClientException - in case something goes wrong
      See Also:
    • getAllDocumentTypes

      @Nonnull public static com.helger.commons.collection.impl.ICommonsList<com.helger.peppolid.IDocumentTypeIdentifier> getAllDocumentTypes(@Nullable com.helger.xsds.peppol.smp1.ServiceGroupType aSG)
      Extract all parsable document types from the passed Service group. This method always uses PeppolIdentifierFactory to parse the document type identifiers.
      Parameters:
      aSG - The service group to parse. May be null.
      Returns:
      Never null but a maybe empty list.
      Since:
      8.0.4
      See Also:
    • getAllDocumentTypes

      @Nonnull public static com.helger.commons.collection.impl.ICommonsList<com.helger.peppolid.IDocumentTypeIdentifier> getAllDocumentTypes(@Nullable com.helger.xsds.peppol.smp1.ServiceGroupType aSG, @Nonnull com.helger.peppolid.factory.IIdentifierFactory aIdentifierFactory, @Nullable Consumer<String> aUnhandledHrefHandler)
      Extract all parsable document types from the passed Service group. This method uses the provided IIdentifierFactory to parse the document type identifiers.
      Parameters:
      aSG - The service group to parse. May be null.
      aIdentifierFactory - The identifier factory to be used. May not be null.
      aUnhandledHrefHandler - An optional consumer for Hrefs that could not be parsed into a document type identifier. May be null.
      Returns:
      Never null but a maybe empty list.
      Since:
      8.0.4
    • getServiceMetadata

      @Nonnull public com.helger.xsds.peppol.smp1.SignedServiceMetadataType getServiceMetadata(@Nonnull com.helger.peppolid.IParticipantIdentifier aServiceGroupID, @Nonnull com.helger.peppolid.IDocumentTypeIdentifier aDocumentTypeID) throws SMPClientException
      Gets a signed service metadata object given by its service group id and its document type. This method does not do anything specific with wildcards or so. It simply queries the SMP with the provided data.
      This is a specification compliant method.
      Specified by:
      getServiceMetadata in interface ISMPServiceMetadataProvider
      Parameters:
      aServiceGroupID - The service group id of the service metadata to get. May not be null.
      aDocumentTypeID - The document type of the service metadata to get. May not be null.
      Returns:
      A signed service metadata object. Never null.
      Throws:
      SMPClientException - in case something goes wrong
      SMPClientUnauthorizedException - A HTTP Forbidden was received, should not happen.
      SMPClientParticipantNotFoundException - The service group id does not exist in the network.
      SMPClientNotFoundException - The service group id or document types did not exist.
      SMPClientBadRequestException - The request was not well formed.
      Since:
      v8.0.0
      See Also:
    • getServiceMetadataOrNull

      @Nullable public com.helger.xsds.peppol.smp1.SignedServiceMetadataType getServiceMetadataOrNull(@Nonnull com.helger.peppolid.IParticipantIdentifier aServiceGroupID, @Nonnull com.helger.peppolid.IDocumentTypeIdentifier aDocumentTypeID) throws SMPClientException
      Gets a signed service metadata object given by its service group id and its document type.
      This is a specification compliant method.
      Specified by:
      getServiceMetadataOrNull in interface ISMPServiceMetadataProvider
      Parameters:
      aServiceGroupID - The service group id of the service metadata to get. May not be null.
      aDocumentTypeID - The document type of the service metadata to get. May not be null.
      Returns:
      A signed service metadata object or null if no such registration is present.
      Throws:
      SMPClientException - in case something goes wrong
      SMPClientUnauthorizedException - A HTTP Forbidden was received, should not happen.
      SMPClientBadRequestException - The request was not well formed.
      Since:
      v8.0.0
      See Also:
    • getEndpoint

      @Nullable public static com.helger.xsds.peppol.smp1.EndpointType getEndpoint(@Nonnull com.helger.xsds.peppol.smp1.SignedServiceMetadataType aSignedServiceMetadata, @Nonnull com.helger.peppolid.IProcessIdentifier aProcessID, @Nonnull com.helger.peppol.smp.ISMPTransportProfile aTransportProfile)
      Extract the Endpoint from the signedServiceMetadata that matches the passed process ID and the optional required transport profile. This method checks the validity of the endpoint at the current point in time.
      Parameters:
      aSignedServiceMetadata - The signed service meta data object (e.g. from a call to getServiceMetadataOrNull(IParticipantIdentifier, IDocumentTypeIdentifier) . May not be null.
      aProcessID - The process identifier to be looked up. May not be null .
      aTransportProfile - The required transport profile to be used. May not be null.
      Returns:
      null if no matching endpoint was found
      See Also:
    • getEndpointAt

      @Nullable public static com.helger.xsds.peppol.smp1.EndpointType getEndpointAt(@Nonnull com.helger.xsds.peppol.smp1.SignedServiceMetadataType aSignedServiceMetadata, @Nonnull com.helger.peppolid.IProcessIdentifier aProcessID, @Nonnull com.helger.peppol.smp.ISMPTransportProfile aTransportProfile, @Nonnull LocalDateTime aCheckDT)
      Extract the Endpoint from the signedServiceMetadata that matches the passed process ID and the optional required transport profile.
      Parameters:
      aSignedServiceMetadata - The signed service meta data object (e.g. from a call to getServiceMetadataOrNull(IParticipantIdentifier, IDocumentTypeIdentifier) . May not be null.
      aProcessID - The process identifier to be looked up. May not be null .
      aTransportProfile - The required transport profile to be used. May not be null.
      aCheckDT - The date and time for when the endpoint is meant to be valid if the end point contains a ServiceActivationDate and/or a ServiceExpirationDate. May not be null.
      Returns:
      null if no matching endpoint was found
      Since:
      8.7.3
    • getEndpoint

      @Nullable public static com.helger.xsds.peppol.smp1.EndpointType getEndpoint(@Nonnull com.helger.xsds.peppol.smp1.ServiceMetadataType aServiceMetadata, @Nonnull com.helger.peppolid.IProcessIdentifier aProcessID, @Nonnull com.helger.peppol.smp.ISMPTransportProfile aTransportProfile)
      Extract the Endpoint from the ServiceMetadata that matches the passed process ID and the optional required transport profile. This method checks the validity of the endpoint at the current point in time.
      Parameters:
      aServiceMetadata - The unsigned service meta data object. May not be null.
      aProcessID - The process identifier to be looked up. May not be null .
      aTransportProfile - The required transport profile to be used. May not be null.
      Returns:
      null if no matching endpoint was found
      Since:
      8.2.6
    • isEndpointValidAt

      public static boolean isEndpointValidAt(@Nonnull com.helger.xsds.peppol.smp1.EndpointType aEndpoint, @Nonnull LocalDateTime aCheckDT)
      Check if the provided SMP endpoint is valid at the provided date and time. This is to ensure the ServiceActionDate and ServiceExpirationDate values are honoured according to the changes in the Peppol SMP 1.2.0 specification.
      Parameters:
      aEndpoint - The SMP endpoint to check. May not be null.
      aCheckDT - The date and time at which the check is performed. May not be null.
      Returns:
      true if the endpoint is valid, false if not.
      Since:
      8.7.3
    • getEndpointAt

      @Nullable public static com.helger.xsds.peppol.smp1.EndpointType getEndpointAt(@Nonnull com.helger.xsds.peppol.smp1.ServiceMetadataType aServiceMetadata, @Nonnull com.helger.peppolid.IProcessIdentifier aProcessID, @Nonnull com.helger.peppol.smp.ISMPTransportProfile aTransportProfile, @Nonnull LocalDateTime aCheckDT)
      Extract the Endpoint from the ServiceMetadata that matches the passed process ID and the optional required transport profile.
      Parameters:
      aServiceMetadata - The unsigned service meta data object. May not be null.
      aProcessID - The process identifier to be looked up. May not be null .
      aTransportProfile - The required transport profile to be used. May not be null.
      aCheckDT - The date and time for when the endpoint is meant to be valid if the end point contains a ServiceActivationDate and/or a ServiceExpirationDate. May not be null.
      Returns:
      null if no matching endpoint was found
      Since:
      8.7.3
    • getEndpointAddress

      @Nullable public static String getEndpointAddress(@Nullable com.helger.xsds.peppol.smp1.EndpointType aEndpoint)
      Get the endpoint address URI from the provided SMP endpoint.
      Parameters:
      aEndpoint - The endpoint to be used. May be null.
      Returns:
      null if the endpoint is null if the endpoint has no address URI.
    • getEndpointCertificateString

      @Nullable public static String getEndpointCertificateString(@Nullable com.helger.xsds.peppol.smp1.EndpointType aEndpoint)
      Get the certificate string from the provided SMP endpoint.
      Parameters:
      aEndpoint - The endpoint to be used. May be null.
      Returns:
      null if the endpoint is null if the endpoint has no certificate.
    • getEndpointCertificate

      @Nullable public static X509Certificate getEndpointCertificate(@Nullable com.helger.xsds.peppol.smp1.EndpointType aEndpoint) throws CertificateException
      Get the certificate bytes from the specified endpoint.
      Parameters:
      aEndpoint - The endpoint to be used. May be null.
      Returns:
      null if no such endpoint exists, or if the endpoint has no certificate
      Throws:
      CertificateException - In case the conversion from byte to X509 certificate failed
    • getSchemeSpecificServiceMetadata

      @Nullable public com.helger.xsds.peppol.smp1.SignedServiceMetadataType getSchemeSpecificServiceMetadata(@Nonnull com.helger.peppolid.IParticipantIdentifier aServiceGroupID, @Nonnull com.helger.peppolid.IDocumentTypeIdentifier aDocumentTypeID) throws SMPClientException
      Throws:
      SMPClientException
    • getSchemeSpecificServiceMetadataOrNull

      @Nullable public com.helger.xsds.peppol.smp1.SignedServiceMetadataType getSchemeSpecificServiceMetadataOrNull(@Nonnull com.helger.peppolid.IParticipantIdentifier aServiceGroupID, @Nonnull com.helger.peppolid.IDocumentTypeIdentifier aDocumentTypeID) throws SMPClientException
      Description copied from interface: ISMPExtendedServiceMetadataProvider
      This API is to resolve the Service Metadata based on the provided Document Type ID following the Peppol Policy for use of Identifiers 4.3.0.
      • For busdox-docid-qns only exact match is supported. Here it will directly query the Service Metadata. (1 SMP query in total)
      • For peppol-doctype both exact match and best match are supported. The wildcard indicator may or may not be present. Here it will first query the SMP for list of all document types, find the best match document type and finally do the SMP query Service Metadata. (2 SMP queries in total)
      Specified by:
      getSchemeSpecificServiceMetadataOrNull in interface ISMPExtendedServiceMetadataProvider
      Parameters:
      aServiceGroupID - The participant ID to lookup. May not be null.
      aDocumentTypeID - The document type to lookup. May not be null.
      Returns:
      null if no such service metadata could be found.
      Throws:
      SMPClientException - In case of error
      See Also:
    • getWildcardServiceMetadataOrNull

      public com.helger.xsds.peppol.smp1.SignedServiceMetadataType getWildcardServiceMetadataOrNull(@Nonnull com.helger.xsds.peppol.smp1.ServiceGroupType aServiceGroup, @Nonnull com.helger.peppolid.IParticipantIdentifier aServiceGroupID, @Nonnull com.helger.peppolid.IDocumentTypeIdentifier aDocumentTypeID, @Nonnull PeppolWildcardSelector.EMode eSelectionMode) throws SMPClientException
      Description copied from interface: ISMPExtendedServiceMetadataProvider
      Wildcard aware SMP lookup for PFUOI 4.2. It interprets the wildcard character (*) appropriately and tries all possibilities. Internally it searches the closest possible match using the provided selection algorithm (mode).
      Specified by:
      getWildcardServiceMetadataOrNull in interface ISMPExtendedServiceMetadataProvider
      Parameters:
      aServiceGroup - The service group previously queried. May not be null.
      aServiceGroupID - Receiver ID. May not be null.
      aDocumentTypeID - Source document type ID. May not be null. The document type may use any document type identifier scheme.
      eSelectionMode - The Wildcard selection mode to use. Must not be null.
      Returns:
      null if no matching SMP entry was found
      Throws:
      SMPClientException - In case of error
      See Also:
    • getWildcardServiceMetadataOrNull

      public com.helger.xsds.peppol.smp1.SignedServiceMetadataType getWildcardServiceMetadataOrNull(@Nonnull com.helger.peppolid.IParticipantIdentifier aServiceGroupID, @Nonnull com.helger.peppolid.IDocumentTypeIdentifier aDocumentTypeID, @Nonnull PeppolWildcardSelector.EMode eSelectionMode) throws SMPClientException
      Description copied from interface: ISMPExtendedServiceMetadataProvider
      Wildcard aware SMP lookup for PFUOI 4.2. It interprets the wildcard character (*) appropriately and tries all possibilities. Internally it works by first querying all the document types via ISMPServiceGroupProvider.getServiceGroupOrNull(IParticipantIdentifier) and afterwards find the closest possible match using the provided selection algorithm (mode). So this method calls each SMP twice.
      Specified by:
      getWildcardServiceMetadataOrNull in interface ISMPExtendedServiceMetadataProvider
      Parameters:
      aServiceGroupID - Receiver ID. May not be null.
      aDocumentTypeID - Source document type ID. May not be null. The document type may use any document type identifier scheme.
      eSelectionMode - The Wildcard selection mode to use. Must not be null.
      Returns:
      null if no matching SMP entry was found
      Throws:
      SMPClientException - In case of error
      See Also:
    • getServiceGroupByDNS

      @Nonnull public static com.helger.xsds.peppol.smp1.ServiceGroupType getServiceGroupByDNS(@Nonnull ISMPURLProvider aURLProvider, @Nonnull com.helger.peppol.sml.ISMLInfo aSMLInfo, @Nonnull com.helger.peppolid.IParticipantIdentifier aServiceGroupID) throws SMPClientException, SMPDNSResolutionException
      Returns a service group. A service group references to the service metadata.
      Parameters:
      aURLProvider - The URL provider to be used. May not be null.
      aSMLInfo - The SML object to be used
      aServiceGroupID - The service group id corresponding to the service group which one wants to get.
      Returns:
      The service group
      Throws:
      SMPClientException - in case something goes wrong
      SMPDNSResolutionException - If DNS resolution fails
      SMPClientUnauthorizedException - A HTTP Forbidden was received, should not happen.
      SMPClientParticipantNotFoundException - The service group id does not exist in the network.
      SMPClientNotFoundException - The service group id or document types did not exist.
      SMPClientBadRequestException - The request was not well formed.
    • getServiceRegistrationByDNS

      @Nonnull public static com.helger.xsds.peppol.smp1.SignedServiceMetadataType getServiceRegistrationByDNS(@Nonnull ISMPURLProvider aURLProvider, @Nonnull com.helger.peppol.sml.ISMLInfo aSMLInfo, @Nonnull com.helger.peppolid.IParticipantIdentifier aServiceGroupID, @Nonnull com.helger.peppolid.IDocumentTypeIdentifier aDocumentTypeID) throws SMPClientException, SMPDNSResolutionException
      Gets a signed service metadata object given by its service group id and its document type.
      Parameters:
      aURLProvider - The URL provider to be used. May not be null.
      aSMLInfo - The SML object to be used
      aServiceGroupID - The service group id of the service metadata to get.
      aDocumentTypeID - The document type of the service metadata to get.
      Returns:
      A signed service metadata object.
      Throws:
      SMPClientException - in case something goes wrong
      SMPDNSResolutionException - if DNS resolution fails
      SMPClientUnauthorizedException - A HTTP Forbidden was received, should not happen.
      SMPClientParticipantNotFoundException - The service group id does not exist in the network.
      SMPClientNotFoundException - The service group id or document types did not exist.
      SMPClientBadRequestException - The request was not well formed.