From 8dbd1466609e87b52567108d8f40c57a01e0b4aa Mon Sep 17 00:00:00 2001 From: ayeshLK Date: Fri, 11 Jun 2021 13:36:42 +0530 Subject: [PATCH 1/9] Log error returns from remote functions --- .../stdlib/websubhub/NativeHttpToWebsubhubAdaptor.java | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/websubhub-native/src/main/java/io/ballerina/stdlib/websubhub/NativeHttpToWebsubhubAdaptor.java b/websubhub-native/src/main/java/io/ballerina/stdlib/websubhub/NativeHttpToWebsubhubAdaptor.java index fb2e2c78..d0eaabb4 100644 --- a/websubhub-native/src/main/java/io/ballerina/stdlib/websubhub/NativeHttpToWebsubhubAdaptor.java +++ b/websubhub-native/src/main/java/io/ballerina/stdlib/websubhub/NativeHttpToWebsubhubAdaptor.java @@ -138,6 +138,10 @@ private static Object invokeRemoteFunction(Environment env, BObject bHubService, env.getRuntime().invokeMethodAsync(bHubService, remoteFunctionName, null, metadata, new Callback() { @Override public void notifySuccess(Object result) { + if (result instanceof BError) { + BError err = (BError) result; + + } balFuture.complete(result); } From 10aa85ff8aaf6b22b4707fda09b7ee6ed4dfe846 Mon Sep 17 00:00:00 2001 From: ayeshLK Date: Fri, 11 Jun 2021 14:05:44 +0530 Subject: [PATCH 2/9] Ignore logs for module-defined errors --- .../ballerina/stdlib/websubhub/Constants.java | 15 ++++++++++ .../NativeHttpToWebsubhubAdaptor.java | 28 +++++++++++++++++-- 2 files changed, 41 insertions(+), 2 deletions(-) create mode 100644 websubhub-native/src/main/java/io/ballerina/stdlib/websubhub/Constants.java diff --git a/websubhub-native/src/main/java/io/ballerina/stdlib/websubhub/Constants.java b/websubhub-native/src/main/java/io/ballerina/stdlib/websubhub/Constants.java new file mode 100644 index 00000000..f8ff6a9f --- /dev/null +++ b/websubhub-native/src/main/java/io/ballerina/stdlib/websubhub/Constants.java @@ -0,0 +1,15 @@ +package io.ballerina.stdlib.websubhub; + +public interface Constants { + String PACKAGE_ORG = "ballerina"; + String PACKAGE_NAME = "websubhub"; + + String TOPIC_REGISTRATION_ERROR = "TopicRegistrationError"; + String TOPIC_DEREGISTRATION_ERROR = "TopicDeregistrationError"; + String UPDATE_MESSAGE_ERROR = "UpdateMessageError"; + String BAD_SUBSCRIPTION_ERROR = "BadSubscriptionError"; + String SUBSCRIPTION_INTERNAL_ERROR = "InternalSubscriptionError"; + String SUBSCRIPTION_DENIED_ERROR = "SubscriptionDeniedError"; + String UNSUBSCRIPTION_INTERNAL_ERROR = "InternalUnsubscriptionError"; + String UNSUBSCRIPTION_DENIED_ERROR = "UnsubscriptionDeniedError"; +} diff --git a/websubhub-native/src/main/java/io/ballerina/stdlib/websubhub/NativeHttpToWebsubhubAdaptor.java b/websubhub-native/src/main/java/io/ballerina/stdlib/websubhub/NativeHttpToWebsubhubAdaptor.java index d0eaabb4..a98f2cc8 100644 --- a/websubhub-native/src/main/java/io/ballerina/stdlib/websubhub/NativeHttpToWebsubhubAdaptor.java +++ b/websubhub-native/src/main/java/io/ballerina/stdlib/websubhub/NativeHttpToWebsubhubAdaptor.java @@ -26,6 +26,7 @@ import io.ballerina.runtime.api.creators.ErrorCreator; import io.ballerina.runtime.api.creators.ValueCreator; import io.ballerina.runtime.api.types.MethodType; +import io.ballerina.runtime.api.types.Type; import io.ballerina.runtime.api.utils.StringUtils; import io.ballerina.runtime.api.values.BArray; import io.ballerina.runtime.api.values.BError; @@ -34,6 +35,7 @@ import io.ballerina.runtime.api.values.BString; import java.util.ArrayList; +import java.util.List; import static io.ballerina.runtime.api.utils.StringUtils.fromString; @@ -42,6 +44,15 @@ */ public class NativeHttpToWebsubhubAdaptor { private static final String SERVICE_OBJECT = "WEBSUBHUB_SERVICE_OBJECT"; + private static final List moduleDefinedErrors; + static { + moduleDefinedErrors = List.of( + Constants.TOPIC_REGISTRATION_ERROR, Constants.TOPIC_DEREGISTRATION_ERROR, + Constants.UPDATE_MESSAGE_ERROR, Constants.BAD_SUBSCRIPTION_ERROR, + Constants.SUBSCRIPTION_INTERNAL_ERROR, Constants.SUBSCRIPTION_DENIED_ERROR, + Constants.UNSUBSCRIPTION_INTERNAL_ERROR, Constants.UNSUBSCRIPTION_DENIED_ERROR + ); + } public static void externInit(BObject adaptor, BObject serviceObj) { adaptor.addNativeData(SERVICE_OBJECT, serviceObj); @@ -139,9 +150,12 @@ private static Object invokeRemoteFunction(Environment env, BObject bHubService, @Override public void notifySuccess(Object result) { if (result instanceof BError) { - BError err = (BError) result; - + BError error = (BError) result; + if (!isModuleDefinedError(error)) { + error.printStackTrace(); + } } + balFuture.complete(result); } @@ -155,4 +169,14 @@ public void notifyFailure(BError bError) { }, args); return null; } + + private static boolean isModuleDefinedError(BError error) { + Type errorType = error.getType(); + String errorName = errorType.getName(); + Module packageDetails = errorType.getPackage(); + String orgName = packageDetails.getOrg(); + String packageName = packageDetails.getName(); + return moduleDefinedErrors.contains(errorName) + && Constants.PACKAGE_ORG.equals(orgName) && Constants.PACKAGE_NAME.equals(packageName); + } } From 111b89e191493f6d49e89663b3c12d2fab56918d Mon Sep 17 00:00:00 2001 From: ayeshLK Date: Fri, 11 Jun 2021 14:35:03 +0530 Subject: [PATCH 3/9] Fix build issue due to spotbug verification error --- websubhub-native/spotbugs-exclude.xml | 2 +- .../ballerina/stdlib/websubhub/Constants.java | 38 ++++++++-- .../stdlib/websubhub/HubCallback.java | 54 ++++++++++++++ .../NativeHttpToWebsubhubAdaptor.java | 73 ++++--------------- 4 files changed, 98 insertions(+), 69 deletions(-) create mode 100644 websubhub-native/src/main/java/io/ballerina/stdlib/websubhub/HubCallback.java diff --git a/websubhub-native/spotbugs-exclude.xml b/websubhub-native/spotbugs-exclude.xml index f0e03fab..693c2343 100644 --- a/websubhub-native/spotbugs-exclude.xml +++ b/websubhub-native/spotbugs-exclude.xml @@ -18,7 +18,7 @@ - + diff --git a/websubhub-native/src/main/java/io/ballerina/stdlib/websubhub/Constants.java b/websubhub-native/src/main/java/io/ballerina/stdlib/websubhub/Constants.java index f8ff6a9f..b67d5a37 100644 --- a/websubhub-native/src/main/java/io/ballerina/stdlib/websubhub/Constants.java +++ b/websubhub-native/src/main/java/io/ballerina/stdlib/websubhub/Constants.java @@ -1,15 +1,37 @@ +/* + * Copyright (c) 2021 WSO2 Inc. (http://www.wso2.org) All Rights Reserved. + * + * WSO2 Inc. licenses this file to you under the Apache License, + * Version 2.0 (the "License"); you may not use this file except + * in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + package io.ballerina.stdlib.websubhub; +import java.util.List; + +/** + * {@code Constants} contains the public constants to be used. + */ public interface Constants { String PACKAGE_ORG = "ballerina"; String PACKAGE_NAME = "websubhub"; - String TOPIC_REGISTRATION_ERROR = "TopicRegistrationError"; - String TOPIC_DEREGISTRATION_ERROR = "TopicDeregistrationError"; - String UPDATE_MESSAGE_ERROR = "UpdateMessageError"; - String BAD_SUBSCRIPTION_ERROR = "BadSubscriptionError"; - String SUBSCRIPTION_INTERNAL_ERROR = "InternalSubscriptionError"; - String SUBSCRIPTION_DENIED_ERROR = "SubscriptionDeniedError"; - String UNSUBSCRIPTION_INTERNAL_ERROR = "InternalUnsubscriptionError"; - String UNSUBSCRIPTION_DENIED_ERROR = "UnsubscriptionDeniedError"; + List MODULE_DEFINED_ERRORS = List.of( + "TopicRegistrationError", "TopicDeregistrationError", "UpdateMessageError", "BadSubscriptionError", + "InternalSubscriptionError", "SubscriptionDeniedError", "BadUnsubscriptionError", + "InternalUnsubscriptionError", "UnsubscriptionDeniedError" + ); + + String SERVICE_OBJECT = "WEBSUBHUB_SERVICE_OBJECT"; } diff --git a/websubhub-native/src/main/java/io/ballerina/stdlib/websubhub/HubCallback.java b/websubhub-native/src/main/java/io/ballerina/stdlib/websubhub/HubCallback.java new file mode 100644 index 00000000..3fd57f53 --- /dev/null +++ b/websubhub-native/src/main/java/io/ballerina/stdlib/websubhub/HubCallback.java @@ -0,0 +1,54 @@ +package io.ballerina.stdlib.websubhub; + +import io.ballerina.runtime.api.Future; +import io.ballerina.runtime.api.Module; +import io.ballerina.runtime.api.async.Callback; +import io.ballerina.runtime.api.creators.ErrorCreator; +import io.ballerina.runtime.api.types.Type; +import io.ballerina.runtime.api.values.BError; +import io.ballerina.runtime.api.values.BString; + +import static io.ballerina.runtime.api.utils.StringUtils.fromString; + +/** + * {@code HubCallback} used to handle the websubhub remote method invocation results. + */ +public class HubCallback implements Callback { + private final Future future; + private final Module module; + + public HubCallback(Future future, Module module) { + this.future = future; + this.module = module; + } + + @Override + public void notifySuccess(Object result) { + if (result instanceof BError) { + BError error = (BError) result; + if (!isModuleDefinedError(error)) { + error.printStackTrace(); + } + } + + future.complete(result); + } + + @Override + public void notifyFailure(BError bError) { + BString errorMessage = fromString("service method invocation failed: " + bError.getErrorMessage()); + BError invocationError = ErrorCreator.createError(module, "ServiceExecutionError", + errorMessage, bError, null); + future.complete(invocationError); + } + + private boolean isModuleDefinedError(BError error) { + Type errorType = error.getType(); + String errorName = errorType.getName(); + Module packageDetails = errorType.getPackage(); + String orgName = packageDetails.getOrg(); + String packageName = packageDetails.getName(); + return Constants.MODULE_DEFINED_ERRORS.contains(errorName) + && Constants.PACKAGE_ORG.equals(orgName) && Constants.PACKAGE_NAME.equals(packageName); + } +} diff --git a/websubhub-native/src/main/java/io/ballerina/stdlib/websubhub/NativeHttpToWebsubhubAdaptor.java b/websubhub-native/src/main/java/io/ballerina/stdlib/websubhub/NativeHttpToWebsubhubAdaptor.java index a98f2cc8..baff2b07 100644 --- a/websubhub-native/src/main/java/io/ballerina/stdlib/websubhub/NativeHttpToWebsubhubAdaptor.java +++ b/websubhub-native/src/main/java/io/ballerina/stdlib/websubhub/NativeHttpToWebsubhubAdaptor.java @@ -21,45 +21,27 @@ import io.ballerina.runtime.api.Environment; import io.ballerina.runtime.api.Future; import io.ballerina.runtime.api.Module; -import io.ballerina.runtime.api.async.Callback; import io.ballerina.runtime.api.async.StrandMetadata; -import io.ballerina.runtime.api.creators.ErrorCreator; import io.ballerina.runtime.api.creators.ValueCreator; import io.ballerina.runtime.api.types.MethodType; -import io.ballerina.runtime.api.types.Type; import io.ballerina.runtime.api.utils.StringUtils; import io.ballerina.runtime.api.values.BArray; -import io.ballerina.runtime.api.values.BError; import io.ballerina.runtime.api.values.BMap; import io.ballerina.runtime.api.values.BObject; import io.ballerina.runtime.api.values.BString; import java.util.ArrayList; -import java.util.List; - -import static io.ballerina.runtime.api.utils.StringUtils.fromString; /** * {@code NativeHttpToWebsubhubAdaptor} is a wrapper object used for service method execution. */ public class NativeHttpToWebsubhubAdaptor { - private static final String SERVICE_OBJECT = "WEBSUBHUB_SERVICE_OBJECT"; - private static final List moduleDefinedErrors; - static { - moduleDefinedErrors = List.of( - Constants.TOPIC_REGISTRATION_ERROR, Constants.TOPIC_DEREGISTRATION_ERROR, - Constants.UPDATE_MESSAGE_ERROR, Constants.BAD_SUBSCRIPTION_ERROR, - Constants.SUBSCRIPTION_INTERNAL_ERROR, Constants.SUBSCRIPTION_DENIED_ERROR, - Constants.UNSUBSCRIPTION_INTERNAL_ERROR, Constants.UNSUBSCRIPTION_DENIED_ERROR - ); - } - public static void externInit(BObject adaptor, BObject serviceObj) { - adaptor.addNativeData(SERVICE_OBJECT, serviceObj); + adaptor.addNativeData(Constants.SERVICE_OBJECT, serviceObj); } public static BArray getServiceMethodNames(BObject adaptor) { - BObject bHubService = (BObject) adaptor.getNativeData(SERVICE_OBJECT); + BObject bHubService = (BObject) adaptor.getNativeData(Constants.SERVICE_OBJECT); ArrayList methodNamesList = new ArrayList<>(); for (MethodType method : bHubService.getType().getMethods()) { methodNamesList.add(StringUtils.fromString(method.getName())); @@ -69,7 +51,7 @@ public static BArray getServiceMethodNames(BObject adaptor) { public static Object callRegisterMethod(Environment env, BObject adaptor, BMap message, BObject bHttpHeaders) { - BObject bHubService = (BObject) adaptor.getNativeData(SERVICE_OBJECT); + BObject bHubService = (BObject) adaptor.getNativeData(Constants.SERVICE_OBJECT); Object[] args = new Object[]{message, true, bHttpHeaders, true}; return invokeRemoteFunction(env, bHubService, args, "callRegisterMethod", "onRegisterTopic"); @@ -77,7 +59,7 @@ public static Object callRegisterMethod(Environment env, BObject adaptor, public static Object callDeregisterMethod(Environment env, BObject adaptor, BMap message, BObject bHttpHeaders) { - BObject bHubService = (BObject) adaptor.getNativeData(SERVICE_OBJECT); + BObject bHubService = (BObject) adaptor.getNativeData(Constants.SERVICE_OBJECT); Object[] args = new Object[]{message, true, bHttpHeaders, true}; return invokeRemoteFunction(env, bHubService, args, "callDeregisterMethod", "onDeregisterTopic"); @@ -85,7 +67,7 @@ public static Object callDeregisterMethod(Environment env, BObject adaptor, public static Object callOnUpdateMethod(Environment env, BObject adaptor, BMap message, BObject bHttpHeaders) { - BObject bHubService = (BObject) adaptor.getNativeData(SERVICE_OBJECT); + BObject bHubService = (BObject) adaptor.getNativeData(Constants.SERVICE_OBJECT); Object[] args = new Object[]{message, true, bHttpHeaders, true}; return invokeRemoteFunction(env, bHubService, args, "callOnUpdateMethod", "onUpdateMessage"); @@ -93,7 +75,7 @@ public static Object callOnUpdateMethod(Environment env, BObject adaptor, public static Object callOnSubscriptionMethod(Environment env, BObject adaptor, BMap message, BObject bHttpHeaders) { - BObject bHubService = (BObject) adaptor.getNativeData(SERVICE_OBJECT); + BObject bHubService = (BObject) adaptor.getNativeData(Constants.SERVICE_OBJECT); Object[] args = new Object[]{message, true, bHttpHeaders, true}; return invokeRemoteFunction(env, bHubService, args, "callOnSubscriptionMethod", "onSubscription"); @@ -101,7 +83,7 @@ public static Object callOnSubscriptionMethod(Environment env, BObject adaptor, public static Object callOnSubscriptionValidationMethod(Environment env, BObject adaptor, BMap message, BObject bHttpHeaders) { - BObject bHubService = (BObject) adaptor.getNativeData(SERVICE_OBJECT); + BObject bHubService = (BObject) adaptor.getNativeData(Constants.SERVICE_OBJECT); Object[] args = new Object[]{message, true, bHttpHeaders, true}; return invokeRemoteFunction(env, bHubService, args, "callOnSubscriptionValidationMethod", "onSubscriptionValidation"); @@ -109,7 +91,7 @@ public static Object callOnSubscriptionValidationMethod(Environment env, BObject public static Object callOnSubscriptionIntentVerifiedMethod(Environment env, BObject adaptor, BMap message, BObject bHttpHeaders) { - BObject bHubService = (BObject) adaptor.getNativeData(SERVICE_OBJECT); + BObject bHubService = (BObject) adaptor.getNativeData(Constants.SERVICE_OBJECT); Object[] args = new Object[]{message, true, bHttpHeaders, true}; return invokeRemoteFunction(env, bHubService, args, "callOnSubscriptionIntentVerifiedMethod", @@ -118,7 +100,7 @@ public static Object callOnSubscriptionIntentVerifiedMethod(Environment env, BOb public static Object callOnUnsubscriptionMethod(Environment env, BObject adaptor, BMap message, BObject bHttpHeaders) { - BObject bHubService = (BObject) adaptor.getNativeData(SERVICE_OBJECT); + BObject bHubService = (BObject) adaptor.getNativeData(Constants.SERVICE_OBJECT); Object[] args = new Object[]{message, true, bHttpHeaders, true}; return invokeRemoteFunction(env, bHubService, args, "callOnUnsubscriptionMethod", "onUnsubscription"); @@ -126,7 +108,7 @@ public static Object callOnUnsubscriptionMethod(Environment env, BObject adaptor public static Object callOnUnsubscriptionValidationMethod(Environment env, BObject adaptor, BMap message, BObject bHttpHeaders) { - BObject bHubService = (BObject) adaptor.getNativeData(SERVICE_OBJECT); + BObject bHubService = (BObject) adaptor.getNativeData(Constants.SERVICE_OBJECT); Object[] args = new Object[]{message, true, bHttpHeaders, true}; return invokeRemoteFunction(env, bHubService, args, "callOnUnsubscriptionValidationMethod", "onUnsubscriptionValidation"); @@ -134,7 +116,7 @@ public static Object callOnUnsubscriptionValidationMethod(Environment env, BObje public static Object callOnUnsubscriptionIntentVerifiedMethod(Environment env, BObject adaptor, BMap message, BObject bHttpHeaders) { - BObject bHubService = (BObject) adaptor.getNativeData(SERVICE_OBJECT); + BObject bHubService = (BObject) adaptor.getNativeData(Constants.SERVICE_OBJECT); Object[] args = new Object[]{message, true, bHttpHeaders, true}; return invokeRemoteFunction(env, bHubService, args, "callOnUnsubscriptionIntentVerifiedMethod", "onUnsubscriptionIntentVerified"); @@ -146,37 +128,8 @@ private static Object invokeRemoteFunction(Environment env, BObject bHubService, Module module = ModuleUtils.getModule(); StrandMetadata metadata = new StrandMetadata(module.getOrg(), module.getName(), module.getVersion(), parentFunctionName); - env.getRuntime().invokeMethodAsync(bHubService, remoteFunctionName, null, metadata, new Callback() { - @Override - public void notifySuccess(Object result) { - if (result instanceof BError) { - BError error = (BError) result; - if (!isModuleDefinedError(error)) { - error.printStackTrace(); - } - } - - balFuture.complete(result); - } - - @Override - public void notifyFailure(BError bError) { - BString errorMessage = fromString("service method invocation failed: " + bError.getErrorMessage()); - BError invocationError = ErrorCreator.createError(module, "ServiceExecutionError", - errorMessage, bError, null); - balFuture.complete(invocationError); - } - }, args); + env.getRuntime().invokeMethodAsync(bHubService, remoteFunctionName, null, metadata, + new HubCallback(balFuture, module), args); return null; } - - private static boolean isModuleDefinedError(BError error) { - Type errorType = error.getType(); - String errorName = errorType.getName(); - Module packageDetails = errorType.getPackage(); - String orgName = packageDetails.getOrg(); - String packageName = packageDetails.getName(); - return moduleDefinedErrors.contains(errorName) - && Constants.PACKAGE_ORG.equals(orgName) && Constants.PACKAGE_NAME.equals(packageName); - } } From 8a8d379bc713c3e48d1e67c4ef1332e92a1cf415 Mon Sep 17 00:00:00 2001 From: ayeshLK Date: Fri, 11 Jun 2021 14:35:14 +0530 Subject: [PATCH 4/9] Update change log --- changelog.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/changelog.md b/changelog.md index 04c4769e..c1d650f8 100644 --- a/changelog.md +++ b/changelog.md @@ -7,6 +7,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ## [Unreleased] - Multipart content delivery using websubhub-client. - Subscription Lease seconds expired event. +- [Log error when return from the remote method leads to an error](https://github.com/ballerina-platform/ballerina-standard-library/issues/1449) +- [WebSubHub Compiler Plugin does not allow additional methods inside service declaration](https://github.com/ballerina-platform/ballerina-standard-library/issues/1417) ## [0.2.0-beta.1] - 2021-05-06 From c3445c06448e285d2790ed75eb4a54da23e1af40 Mon Sep 17 00:00:00 2001 From: ayeshLK Date: Fri, 11 Jun 2021 16:27:23 +0530 Subject: [PATCH 5/9] Fix spotbug configuration issue --- websubhub-native/spotbugs-exclude.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/websubhub-native/spotbugs-exclude.xml b/websubhub-native/spotbugs-exclude.xml index 693c2343..5d815dd6 100644 --- a/websubhub-native/spotbugs-exclude.xml +++ b/websubhub-native/spotbugs-exclude.xml @@ -18,7 +18,7 @@ - + From 97df11d4cb864674db8b23348432f3c56dacfa38 Mon Sep 17 00:00:00 2001 From: ayeshLK Date: Fri, 11 Jun 2021 16:32:13 +0530 Subject: [PATCH 6/9] Add missing copyright statement --- .../stdlib/websubhub/HubCallback.java | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/websubhub-native/src/main/java/io/ballerina/stdlib/websubhub/HubCallback.java b/websubhub-native/src/main/java/io/ballerina/stdlib/websubhub/HubCallback.java index 3fd57f53..2061f3be 100644 --- a/websubhub-native/src/main/java/io/ballerina/stdlib/websubhub/HubCallback.java +++ b/websubhub-native/src/main/java/io/ballerina/stdlib/websubhub/HubCallback.java @@ -1,3 +1,21 @@ +/* + * Copyright (c) 2021, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. + * + * WSO2 Inc. licenses this file to you under the Apache License, + * Version 2.0 (the "License"); you may not use this file except + * in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + package io.ballerina.stdlib.websubhub; import io.ballerina.runtime.api.Future; From dfd15b9a7071281b3ec609a31d21919fea5bb402 Mon Sep 17 00:00:00 2001 From: ayeshLK Date: Mon, 14 Jun 2021 11:20:58 +0530 Subject: [PATCH 7/9] Incorporate review suggestions --- .../tests/hub_with_error_return_types.bal | 40 ++++++++----------- .../ballerina/stdlib/websubhub/Constants.java | 8 ---- .../stdlib/websubhub/HubCallback.java | 5 +-- .../NativeHttpToWebsubhubAdaptor.java | 24 ++++++----- 4 files changed, 31 insertions(+), 46 deletions(-) diff --git a/websubhub-ballerina/tests/hub_with_error_return_types.bal b/websubhub-ballerina/tests/hub_with_error_return_types.bal index 3a805dc6..473c38c1 100644 --- a/websubhub-ballerina/tests/hub_with_error_return_types.bal +++ b/websubhub-ballerina/tests/hub_with_error_return_types.bal @@ -23,48 +23,40 @@ listener Listener hubWithErrorReturnTypesListener = new(9101); service /websubhub on hubWithErrorReturnTypesListener { - isolated remote function onRegisterTopic(TopicRegistration message) - returns TopicRegistrationSuccess|TopicRegistrationError|error { - return error Error("Registration Failed!"); + isolated remote function onRegisterTopic(TopicRegistration message) returns error { + return error ("Registration Failed!"); } - isolated remote function onDeregisterTopic(TopicDeregistration message) - returns TopicDeregistrationSuccess|TopicDeregistrationError|error { - return error Error("Topic Deregistration Failed!"); + isolated remote function onDeregisterTopic(TopicDeregistration message) returns error { + return error ("Topic Deregistration Failed!"); } - isolated remote function onUpdateMessage(UpdateMessage msg) - returns Acknowledgement|UpdateMessageError|error { - return error UpdateMessageError("Error in accessing content"); + isolated remote function onUpdateMessage(UpdateMessage msg) returns error { + return error ("Error in accessing content"); } - isolated remote function onSubscription(Subscription msg) - returns SubscriptionAccepted|SubscriptionPermanentRedirect|SubscriptionTemporaryRedirect - |BadSubscriptionError|InternalSubscriptionError|error { - return error Error("Error occurred while processing subscription"); + isolated remote function onSubscription(Subscription msg) returns error { + return error ("Error occurred while processing subscription"); } - isolated remote function onSubscriptionValidation(Subscription msg) - returns SubscriptionDeniedError|error? { - return error Error("Denied subscription with Hub"); + isolated remote function onSubscriptionValidation(Subscription msg) returns error? { + return error ("Denied subscription with Hub"); } isolated remote function onSubscriptionIntentVerified(VerifiedSubscription msg) returns error? { - return error Error("Error occcurred while verifying subscription intent"); + return error ("Error occcurred while verifying subscription intent"); } - isolated remote function onUnsubscription(Unsubscription msg) - returns UnsubscriptionAccepted|BadUnsubscriptionError|InternalUnsubscriptionError|error { - return error Error("Denied unsubscription for topic '" + msg.hubTopic + "'"); + isolated remote function onUnsubscription(Unsubscription msg) returns error { + return error ("Denied unsubscription for topic '" + msg.hubTopic + "'"); } - isolated remote function onUnsubscriptionValidation(Unsubscription msg) - returns UnsubscriptionDeniedError|error? { - return error UnsubscriptionDeniedError("Denied subscription with Hub"); + isolated remote function onUnsubscriptionValidation(Unsubscription msg) returns error? { + return error ("Denied subscription with Hub"); } isolated remote function onUnsubscriptionIntentVerified(VerifiedUnsubscription msg) returns error? { - return error Error("Error occcurred while verifying unsubscription intent"); + return error ("Error occcurred while verifying unsubscription intent"); } } diff --git a/websubhub-native/src/main/java/io/ballerina/stdlib/websubhub/Constants.java b/websubhub-native/src/main/java/io/ballerina/stdlib/websubhub/Constants.java index b67d5a37..4a05761a 100644 --- a/websubhub-native/src/main/java/io/ballerina/stdlib/websubhub/Constants.java +++ b/websubhub-native/src/main/java/io/ballerina/stdlib/websubhub/Constants.java @@ -18,8 +18,6 @@ package io.ballerina.stdlib.websubhub; -import java.util.List; - /** * {@code Constants} contains the public constants to be used. */ @@ -27,11 +25,5 @@ public interface Constants { String PACKAGE_ORG = "ballerina"; String PACKAGE_NAME = "websubhub"; - List MODULE_DEFINED_ERRORS = List.of( - "TopicRegistrationError", "TopicDeregistrationError", "UpdateMessageError", "BadSubscriptionError", - "InternalSubscriptionError", "SubscriptionDeniedError", "BadUnsubscriptionError", - "InternalUnsubscriptionError", "UnsubscriptionDeniedError" - ); - String SERVICE_OBJECT = "WEBSUBHUB_SERVICE_OBJECT"; } diff --git a/websubhub-native/src/main/java/io/ballerina/stdlib/websubhub/HubCallback.java b/websubhub-native/src/main/java/io/ballerina/stdlib/websubhub/HubCallback.java index 2061f3be..db80aa75 100644 --- a/websubhub-native/src/main/java/io/ballerina/stdlib/websubhub/HubCallback.java +++ b/websubhub-native/src/main/java/io/ballerina/stdlib/websubhub/HubCallback.java @@ -54,6 +54,7 @@ public void notifySuccess(Object result) { @Override public void notifyFailure(BError bError) { + bError.printStackTrace(); BString errorMessage = fromString("service method invocation failed: " + bError.getErrorMessage()); BError invocationError = ErrorCreator.createError(module, "ServiceExecutionError", errorMessage, bError, null); @@ -62,11 +63,9 @@ public void notifyFailure(BError bError) { private boolean isModuleDefinedError(BError error) { Type errorType = error.getType(); - String errorName = errorType.getName(); Module packageDetails = errorType.getPackage(); String orgName = packageDetails.getOrg(); String packageName = packageDetails.getName(); - return Constants.MODULE_DEFINED_ERRORS.contains(errorName) - && Constants.PACKAGE_ORG.equals(orgName) && Constants.PACKAGE_NAME.equals(packageName); + return Constants.PACKAGE_ORG.equals(orgName) && Constants.PACKAGE_NAME.equals(packageName); } } diff --git a/websubhub-native/src/main/java/io/ballerina/stdlib/websubhub/NativeHttpToWebsubhubAdaptor.java b/websubhub-native/src/main/java/io/ballerina/stdlib/websubhub/NativeHttpToWebsubhubAdaptor.java index baff2b07..3407f715 100644 --- a/websubhub-native/src/main/java/io/ballerina/stdlib/websubhub/NativeHttpToWebsubhubAdaptor.java +++ b/websubhub-native/src/main/java/io/ballerina/stdlib/websubhub/NativeHttpToWebsubhubAdaptor.java @@ -32,16 +32,18 @@ import java.util.ArrayList; +import static io.ballerina.stdlib.websubhub.Constants.SERVICE_OBJECT; + /** * {@code NativeHttpToWebsubhubAdaptor} is a wrapper object used for service method execution. */ public class NativeHttpToWebsubhubAdaptor { public static void externInit(BObject adaptor, BObject serviceObj) { - adaptor.addNativeData(Constants.SERVICE_OBJECT, serviceObj); + adaptor.addNativeData(SERVICE_OBJECT, serviceObj); } public static BArray getServiceMethodNames(BObject adaptor) { - BObject bHubService = (BObject) adaptor.getNativeData(Constants.SERVICE_OBJECT); + BObject bHubService = (BObject) adaptor.getNativeData(SERVICE_OBJECT); ArrayList methodNamesList = new ArrayList<>(); for (MethodType method : bHubService.getType().getMethods()) { methodNamesList.add(StringUtils.fromString(method.getName())); @@ -51,7 +53,7 @@ public static BArray getServiceMethodNames(BObject adaptor) { public static Object callRegisterMethod(Environment env, BObject adaptor, BMap message, BObject bHttpHeaders) { - BObject bHubService = (BObject) adaptor.getNativeData(Constants.SERVICE_OBJECT); + BObject bHubService = (BObject) adaptor.getNativeData(SERVICE_OBJECT); Object[] args = new Object[]{message, true, bHttpHeaders, true}; return invokeRemoteFunction(env, bHubService, args, "callRegisterMethod", "onRegisterTopic"); @@ -59,7 +61,7 @@ public static Object callRegisterMethod(Environment env, BObject adaptor, public static Object callDeregisterMethod(Environment env, BObject adaptor, BMap message, BObject bHttpHeaders) { - BObject bHubService = (BObject) adaptor.getNativeData(Constants.SERVICE_OBJECT); + BObject bHubService = (BObject) adaptor.getNativeData(SERVICE_OBJECT); Object[] args = new Object[]{message, true, bHttpHeaders, true}; return invokeRemoteFunction(env, bHubService, args, "callDeregisterMethod", "onDeregisterTopic"); @@ -67,7 +69,7 @@ public static Object callDeregisterMethod(Environment env, BObject adaptor, public static Object callOnUpdateMethod(Environment env, BObject adaptor, BMap message, BObject bHttpHeaders) { - BObject bHubService = (BObject) adaptor.getNativeData(Constants.SERVICE_OBJECT); + BObject bHubService = (BObject) adaptor.getNativeData(SERVICE_OBJECT); Object[] args = new Object[]{message, true, bHttpHeaders, true}; return invokeRemoteFunction(env, bHubService, args, "callOnUpdateMethod", "onUpdateMessage"); @@ -75,7 +77,7 @@ public static Object callOnUpdateMethod(Environment env, BObject adaptor, public static Object callOnSubscriptionMethod(Environment env, BObject adaptor, BMap message, BObject bHttpHeaders) { - BObject bHubService = (BObject) adaptor.getNativeData(Constants.SERVICE_OBJECT); + BObject bHubService = (BObject) adaptor.getNativeData(SERVICE_OBJECT); Object[] args = new Object[]{message, true, bHttpHeaders, true}; return invokeRemoteFunction(env, bHubService, args, "callOnSubscriptionMethod", "onSubscription"); @@ -83,7 +85,7 @@ public static Object callOnSubscriptionMethod(Environment env, BObject adaptor, public static Object callOnSubscriptionValidationMethod(Environment env, BObject adaptor, BMap message, BObject bHttpHeaders) { - BObject bHubService = (BObject) adaptor.getNativeData(Constants.SERVICE_OBJECT); + BObject bHubService = (BObject) adaptor.getNativeData(SERVICE_OBJECT); Object[] args = new Object[]{message, true, bHttpHeaders, true}; return invokeRemoteFunction(env, bHubService, args, "callOnSubscriptionValidationMethod", "onSubscriptionValidation"); @@ -91,7 +93,7 @@ public static Object callOnSubscriptionValidationMethod(Environment env, BObject public static Object callOnSubscriptionIntentVerifiedMethod(Environment env, BObject adaptor, BMap message, BObject bHttpHeaders) { - BObject bHubService = (BObject) adaptor.getNativeData(Constants.SERVICE_OBJECT); + BObject bHubService = (BObject) adaptor.getNativeData(SERVICE_OBJECT); Object[] args = new Object[]{message, true, bHttpHeaders, true}; return invokeRemoteFunction(env, bHubService, args, "callOnSubscriptionIntentVerifiedMethod", @@ -100,7 +102,7 @@ public static Object callOnSubscriptionIntentVerifiedMethod(Environment env, BOb public static Object callOnUnsubscriptionMethod(Environment env, BObject adaptor, BMap message, BObject bHttpHeaders) { - BObject bHubService = (BObject) adaptor.getNativeData(Constants.SERVICE_OBJECT); + BObject bHubService = (BObject) adaptor.getNativeData(SERVICE_OBJECT); Object[] args = new Object[]{message, true, bHttpHeaders, true}; return invokeRemoteFunction(env, bHubService, args, "callOnUnsubscriptionMethod", "onUnsubscription"); @@ -108,7 +110,7 @@ public static Object callOnUnsubscriptionMethod(Environment env, BObject adaptor public static Object callOnUnsubscriptionValidationMethod(Environment env, BObject adaptor, BMap message, BObject bHttpHeaders) { - BObject bHubService = (BObject) adaptor.getNativeData(Constants.SERVICE_OBJECT); + BObject bHubService = (BObject) adaptor.getNativeData(SERVICE_OBJECT); Object[] args = new Object[]{message, true, bHttpHeaders, true}; return invokeRemoteFunction(env, bHubService, args, "callOnUnsubscriptionValidationMethod", "onUnsubscriptionValidation"); @@ -116,7 +118,7 @@ public static Object callOnUnsubscriptionValidationMethod(Environment env, BObje public static Object callOnUnsubscriptionIntentVerifiedMethod(Environment env, BObject adaptor, BMap message, BObject bHttpHeaders) { - BObject bHubService = (BObject) adaptor.getNativeData(Constants.SERVICE_OBJECT); + BObject bHubService = (BObject) adaptor.getNativeData(SERVICE_OBJECT); Object[] args = new Object[]{message, true, bHttpHeaders, true}; return invokeRemoteFunction(env, bHubService, args, "callOnUnsubscriptionIntentVerifiedMethod", "onUnsubscriptionIntentVerified"); From 753c9b9759f5faa60dcf246a1a41a0c7f2f14282 Mon Sep 17 00:00:00 2001 From: ayeshLK Date: Mon, 14 Jun 2021 11:32:51 +0530 Subject: [PATCH 8/9] Update change log --- changelog.md | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/changelog.md b/changelog.md index c1d650f8..52bf2bcf 100644 --- a/changelog.md +++ b/changelog.md @@ -5,8 +5,9 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). ## [Unreleased] -- Multipart content delivery using websubhub-client. -- Subscription Lease seconds expired event. + +### Fixed + - [Log error when return from the remote method leads to an error](https://github.com/ballerina-platform/ballerina-standard-library/issues/1449) - [WebSubHub Compiler Plugin does not allow additional methods inside service declaration](https://github.com/ballerina-platform/ballerina-standard-library/issues/1417) From fba155f7f8c1a573bb85d99ed197337430a1415b Mon Sep 17 00:00:00 2001 From: ayeshLK Date: Mon, 14 Jun 2021 14:49:18 +0530 Subject: [PATCH 9/9] Update string-template usage according to latest guidelines --- websubhub-ballerina/commons.bal | 2 +- websubhub-ballerina/hub_client.bal | 2 +- .../kafka-hub/hub/modules/config/configurations.bal | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/websubhub-ballerina/commons.bal b/websubhub-ballerina/commons.bal index d7c2548e..7ed7444a 100644 --- a/websubhub-ballerina/commons.bal +++ b/websubhub-ballerina/commons.bal @@ -350,7 +350,7 @@ isolated function isSuccessStatusCode(int statusCode) returns boolean { # + topic - Name of the `topic` # + return - a `string` containing the value for `HTTP Link Header` isolated function generateLinkUrl(string hubUrl, string topic) returns string { - return string`${hubUrl}; rel=\"hub\", ${topic}; rel=\"self\"`; + return string `${hubUrl}; rel=\"hub\", ${topic}; rel=\"self\"`; } # Converts {@code websubhub:ClientConfiguration} to {@code http:ClientConfiguration} diff --git a/websubhub-ballerina/hub_client.bal b/websubhub-ballerina/hub_client.bal index fdb5aaa7..0678783a 100644 --- a/websubhub-ballerina/hub_client.bal +++ b/websubhub-ballerina/hub_client.bal @@ -100,7 +100,7 @@ public client class HubClient { } else { hash = check retrievePayloadSignature(self.secret, msg.content); } - request.setHeader(X_HUB_SIGNATURE, string`${SHA256_HMAC}=${hash.toBase16()}`); + request.setHeader(X_HUB_SIGNATURE, string `${SHA256_HMAC}=${hash.toBase16()}`); } http:Response|error response = self.httpClient->post("/", request); diff --git a/websubhub-examples/kafka-hub/hub/modules/config/configurations.bal b/websubhub-examples/kafka-hub/hub/modules/config/configurations.bal index 5f40174b..f97512c6 100644 --- a/websubhub-examples/kafka-hub/hub/modules/config/configurations.bal +++ b/websubhub-examples/kafka-hub/hub/modules/config/configurations.bal @@ -51,4 +51,4 @@ public configurable int MESSAGE_DELIVERY_COUNT = 3; # The message delivery timeout public configurable decimal MESSAGE_DELIVERY_TIMEOUT = 10; -public final string CONSTRUCTED_SERVER_ID = string`${SERVER_ID}-${util:generateRandomString()}`; +public final string CONSTRUCTED_SERVER_ID = string `${SERVER_ID}-${util:generateRandomString()}`;