use of com.helger.xsds.bdxr.smp2.ac.EndpointType in project peppol-commons by phax.
the class IBDXR2ServiceMetadataProvider method getEndpoint.
/**
* Retrieve the service metadata from the provided service group ID and
* document type ID. Than find the matching endpoint from the process ID and
* transport profile.<br>
* This is a specification compliant method.
*
* @param aServiceGroupID
* The service group id of the service metadata to get. May not be
* <code>null</code>.
* @param aDocumentTypeID
* The document type of the service metadata to get. May not be
* <code>null</code>.
* @param aProcessID
* The process ID of the service metadata to get. May not be
* <code>null</code>.
* @param aTransportProfile
* The transport profile of the service metadata to get. May not be
* <code>null</code>.
* @return The endpoint from the signed service metadata object or
* <code>null</code> if no such registration is present.
* @throws SMPClientException
* in case something goes wrong
* @throws SMPClientUnauthorizedException
* A HTTP Forbidden was received, should not happen.
* @throws SMPClientBadRequestException
* The request was not well formed.
* @see #getServiceMetadataOrNull(IParticipantIdentifier,IDocumentTypeIdentifier)
*/
@Nullable
default EndpointType getEndpoint(@Nonnull final IParticipantIdentifier aServiceGroupID, @Nonnull final IDocumentTypeIdentifier aDocumentTypeID, @Nonnull final IProcessIdentifier aProcessID, @Nonnull final ISMPTransportProfile aTransportProfile) throws SMPClientException {
ValueEnforcer.notNull(aServiceGroupID, "ServiceGroupID");
ValueEnforcer.notNull(aDocumentTypeID, "DocumentTypeID");
ValueEnforcer.notNull(aProcessID, "ProcessID");
ValueEnforcer.notNull(aTransportProfile, "TransportProfile");
// Get meta data for participant/documentType
final ServiceMetadataType aSignedServiceMetadata = getServiceMetadataOrNull(aServiceGroupID, aDocumentTypeID);
return aSignedServiceMetadata == null ? null : BDXR2ClientReadOnly.getEndpoint(aSignedServiceMetadata, aProcessID, aTransportProfile);
}
use of com.helger.xsds.bdxr.smp2.ac.EndpointType in project peppol-commons by phax.
the class BDXR2Client method saveServiceEndpoints.
/**
* Saves a service information data object.
*
* @param aServiceGroupID
* The service group ID to use. May not be <code>null</code>.
* @param aDocumentTypeID
* The document type ID to use. May not be <code>null</code>.
* @param aEndpoints
* The endpoints to the created or updated. May not be
* <code>null</code>.
* @param aCredentials
* The user name and password to use as credentials. May not be
* <code>null</code>.
* @throws SMPClientException
* in case something goes wrong
* @throws SMPClientUnauthorizedException
* The user name or password was not correct.
* @throws SMPClientNotFoundException
* A HTTP Not Found was received. This can happen if the service was
* not found.
* @throws SMPClientBadRequestException
* The request was not well formed.
* @see #saveServiceRedirect(ParticipantIDType, IDType, RedirectType,
* BasicAuthClientCredentials)
*/
public void saveServiceEndpoints(@Nonnull final ParticipantIDType aServiceGroupID, @Nonnull final IDType aDocumentTypeID, @Nonnull final List<EndpointType> aEndpoints, @Nonnull final BasicAuthClientCredentials aCredentials) throws SMPClientException {
ValueEnforcer.notNull(aServiceGroupID, "ServiceGroupID");
ValueEnforcer.notNull(aDocumentTypeID, "DocumentTypeID");
ValueEnforcer.notNull(aEndpoints, "Endpoints");
ValueEnforcer.notNull(aCredentials, "Credentials");
final ServiceMetadataType aServiceMetadata = new ServiceMetadataType();
aServiceMetadata.setSMPVersionID("2.0");
aServiceMetadata.setID(aDocumentTypeID);
aServiceMetadata.setParticipantID(aServiceGroupID);
final ProcessMetadataType aPM = new ProcessMetadataType();
aPM.getEndpoint().addAll(aEndpoints);
aServiceMetadata.addProcessMetadata(aPM);
_saveServiceInformation(aServiceMetadata, aCredentials);
}
use of com.helger.xsds.bdxr.smp2.ac.EndpointType in project peppol-commons by phax.
the class BDXR2ClientReadOnly method getEndpoint.
/**
* Extract the Endpoint from the ServiceMetadata that matches the passed
* process ID and the optional required transport profile.
*
* @param aServiceMetadata
* The service meta data object (e.g. from a call to
* {@link #getServiceMetadataOrNull(IParticipantIdentifier, IDocumentTypeIdentifier)}
* . May not be <code>null</code>.
* @param aProcessID
* The process identifier to be looked up. May not be <code>null</code>
* .
* @param aTransportProfile
* The required transport profile to be used. May not be
* <code>null</code>.
* @return <code>null</code> if no matching endpoint was found
*/
@Nullable
public static EndpointType getEndpoint(@Nonnull final ServiceMetadataType aServiceMetadata, @Nonnull final IProcessIdentifier aProcessID, @Nonnull final ISMPTransportProfile aTransportProfile) {
ValueEnforcer.notNull(aServiceMetadata, "SignedServiceMetadata");
ValueEnforcer.notNull(aProcessID, "ProcessID");
ValueEnforcer.notNull(aTransportProfile, "TransportProfile");
// Iterate all processes
for (final ProcessMetadataType aPM : aServiceMetadata.getProcessMetadata()) {
boolean bMatchesProcess = false;
for (final ProcessType aP : aPM.getProcess()) if (SimpleProcessIdentifier.wrap(aP.getID()).hasSameContent(aProcessID)) {
bMatchesProcess = true;
break;
}
if (bMatchesProcess) {
final ICommonsList<EndpointType> aRelevantEndpoints = new CommonsArrayList<>();
for (final EndpointType aEndpoint : aPM.getEndpoint()) if (aTransportProfile.getID().equals(aEndpoint.getTransportProfileIDValue()))
aRelevantEndpoints.add(aEndpoint);
if (aRelevantEndpoints.size() != 1) {
if (LOGGER.isWarnEnabled())
LOGGER.warn("Found " + aRelevantEndpoints.size() + " endpoints for process '" + aProcessID.getURIEncoded() + "' and transport profile '" + aTransportProfile.getID() + "'" + (aRelevantEndpoints.isEmpty() ? "" : ": " + aRelevantEndpoints.toString() + " - using the first one"));
}
// Use the first endpoint or null
final EndpointType ret = aRelevantEndpoints.getFirst();
if (LOGGER.isDebugEnabled())
LOGGER.debug("Found matching endpoint: " + ret);
return ret;
}
}
if (LOGGER.isDebugEnabled())
LOGGER.debug("Found no matching SMP endpoint");
return null;
}
Aggregations