Java 类com.amazonaws.services.sns.model.GetEndpointAttributesResult 实例源码

项目:spacedog-server    文件:PushResource.java   
String createApplicationEndpoint(String backendId, String appId, PushService service, String token) {

        Optional<PlatformApplication> application = getApplication(appId, service);

        if (!application.isPresent())
            throw Exceptions.illegalArgument(//
                    "push service [%s] of mobile application [%s] not registered in AWS", //
                    appId, service);

        String applicationArn = application.get().getPlatformApplicationArn();

        String endpointArn = null;

        try {
            endpointArn = getSnsClient()
                    .createPlatformEndpoint(//
                            new CreatePlatformEndpointRequest()//
                                    .withPlatformApplicationArn(applicationArn)//
                                    .withToken(token))//
                    .getEndpointArn();

        } catch (InvalidParameterException e) {
            String message = e.getErrorMessage();
            Utils.info("Exception message: %s", message);
            Pattern p = Pattern.compile(".*Endpoint (arn:aws:sns[^ ]+) already exists " + "with the same token.*");
            Matcher m = p.matcher(message);
            if (m.matches()) {
                // The platform endpoint already exists for this token, but with
                // additional custom data that
                // createEndpoint doesn't want to overwrite. Just use the
                // existing platform endpoint.
                endpointArn = m.group(1);
            } else {
                throw e;
            }
        }

        if (endpointArn == null)
            throw new RuntimeException("failed to create device notification endpoint: try again later");

        boolean updateNeeded = false;

        try {
            GetEndpointAttributesResult endpointAttributes = getSnsClient()
                    .getEndpointAttributes(new GetEndpointAttributesRequest().withEndpointArn(endpointArn));

            updateNeeded = !endpointAttributes.getAttributes().get("Token").equals(token)
                    || !endpointAttributes.getAttributes().get("Enabled").equalsIgnoreCase("true");

        } catch (NotFoundException nfe) {
            // We had a stored ARN, but the platform endpoint associated with it
            // disappeared. Recreate it.
            endpointArn = null;
        }

        if (endpointArn == null)
            throw new RuntimeException("failed to create device notification endpoint: try again later");

        if (updateNeeded) {
            // The platform endpoint is out of sync with the current data;
            // update the token and enable it.
            Map<String, String> attribs = new HashMap<>();
            attribs.put("Token", token);
            attribs.put("Enabled", "true");
            getSnsClient().setEndpointAttributes(//
                    new SetEndpointAttributesRequest()//
                            .withEndpointArn(endpointArn)//
                            .withAttributes(attribs));
        }

        return endpointArn;
    }
项目:spacedog-server    文件:PushResource2.java   
String createApplicationEndpoint(String backendId, String appId, PushServices service, String token) {

        PlatformApplication application = getApplication(backendId, appId, service)//
                .orElseThrow(//
                        () -> Exceptions.illegalArgument(//
                                "push service [%s] not registered for mobile    application [%s]", //
                                appId, service));

        String endpointArn = null;
        String applicationArn = application.getPlatformApplicationArn();

        try {
            endpointArn = getSnsClient()
                    .createPlatformEndpoint(//
                            new CreatePlatformEndpointRequest()//
                                    .withPlatformApplicationArn(applicationArn)//
                                    .withToken(token))//
                    .getEndpointArn();

        } catch (InvalidParameterException e) {
            String message = e.getErrorMessage();
            Utils.info("Exception message: %s", message);
            Pattern p = Pattern.compile(".*Endpoint (arn:aws:sns[^ ]+) already exists " + "with the same token.*");
            Matcher m = p.matcher(message);
            if (m.matches()) {
                // The platform endpoint already exists for this token, but with
                // additional custom data that
                // createEndpoint doesn't want to overwrite. Just use the
                // existing platform endpoint.
                endpointArn = m.group(1);
            } else {
                throw e;
            }
        }

        if (endpointArn == null)
            throw new RuntimeException("failed to create device notification endpoint: try again later");

        boolean updateNeeded = false;

        try {
            GetEndpointAttributesResult endpointAttributes = getSnsClient()
                    .getEndpointAttributes(new GetEndpointAttributesRequest().withEndpointArn(endpointArn));

            updateNeeded = !endpointAttributes.getAttributes().get("Token").equals(token)
                    || !endpointAttributes.getAttributes().get("Enabled").equalsIgnoreCase("true");

        } catch (NotFoundException nfe) {
            // We had a stored ARN, but the platform endpoint associated with it
            // disappeared. Recreate it.
            endpointArn = null;
        }

        if (endpointArn == null)
            throw new RuntimeException("failed to create device notification endpoint: try again later");

        if (updateNeeded) {
            // The platform endpoint is out of sync with the current data;
            // update the token and enable it.
            Map<String, String> attribs = new HashMap<String, String>();
            attribs.put("Token", token);
            attribs.put("Enabled", "true");
            getSnsClient().setEndpointAttributes(//
                    new SetEndpointAttributesRequest()//
                            .withEndpointArn(endpointArn)//
                            .withAttributes(attribs));
        }

        return endpointArn;
    }
项目:aws-sdk-java-resources    文件:PlatformEndpointImpl.java   
@Override
public boolean load(GetEndpointAttributesRequest request,
        ResultCapture<GetEndpointAttributesResult> extractor) {

    return resource.load(request, extractor);
}
项目:aws-sdk-java-resources    文件:PlatformEndpoint.java   
/**
 * Makes a call to the service to load this resource's attributes if they
 * are not loaded yet, and use a ResultCapture to retrieve the low-level
 * client response
 * The following request parameters will be populated from the data of this
 * <code>PlatformEndpoint</code> resource, and any conflicting parameter
 * value set in the request will be overridden:
 * <ul>
 *   <li>
 *     <b><code>EndpointArn</code></b>
 *         - mapped from the <code>Arn</code> identifier.
 *   </li>
 * </ul>
 *
 * <p>
 *
 * @return Returns {@code true} if the resource is not yet loaded when this
 *         method was invoked, which indicates that a service call has been
 *         made to retrieve the attributes.
 * @see GetEndpointAttributesRequest
 */
boolean load(GetEndpointAttributesRequest request,
        ResultCapture<GetEndpointAttributesResult> extractor);