This is an automated email from the ASF dual-hosted git repository. davsclaus pushed a commit to branch main in repository https://gitbox.apache.org/repos/asf/camel.git
The following commit(s) were added to refs/heads/main by this push: new e76830f293f camel-twitter - Upgrade to twitter4j 4.1.2 e76830f293f is described below commit e76830f293f7b1fbd87fa195fa4a9c17d28bbe1b Author: Claus Ibsen <claus.ib...@gmail.com> AuthorDate: Wed Jul 12 21:01:54 2023 +0200 camel-twitter - Upgrade to twitter4j 4.1.2 --- .../twitter/util/TwitterConverterLoader.java | 20 ++--- .../twitter/timeline/twitter-timeline.json | 2 +- .../twitter/AbstractTwitterComponent.java | 10 --- .../twitter/TwitterComponentVerifierExtension.java | 95 ---------------------- .../component/twitter/TwitterConfiguration.java | 41 ++++------ .../camel/component/twitter/TwitterHelper.java | 2 +- .../consumer/AbstractTwitterConsumerHandler.java | 8 +- .../camel/component/twitter/data/TimelineType.java | 1 - .../DirectMessageConsumerHandler.java | 10 +-- .../directmessage/DirectMessageProducer.java | 6 +- .../twitter/search/SearchConsumerHandler.java | 30 +++---- .../component/twitter/search/SearchProducer.java | 22 ++--- .../timeline/AbstractStatusConsumerHandler.java | 2 +- .../twitter/timeline/HomeConsumerHandler.java | 10 +-- .../twitter/timeline/MentionsConsumerHandler.java | 10 +-- .../twitter/timeline/RetweetsConsumerHandler.java | 47 ----------- .../twitter/timeline/TwitterTimelineEndpoint.java | 3 - .../twitter/timeline/UserConsumerHandler.java | 10 +-- .../twitter/timeline/UserListConsumerHandler.java | 12 +-- .../component/twitter/timeline/UserProducer.java | 8 +- .../component/twitter/util/TwitterConverter.java | 10 +-- .../component/twitter/util/TwitterSorter.java | 4 +- .../AbstractComponentVerifierExtensionIT.java | 94 --------------------- .../twitter/AbstractComponentVerifierIT.java | 90 -------------------- .../component/twitter/UriConfigurationTest.java | 4 - .../component/twitter/UserProducerInOutIT.java | 2 +- ...rDirectmessageComponentVerifierExtensionIT.java | 29 ------- .../TwitterDirectmessageComponentVerifierIT.java | 29 ------- .../TwitterSearchComponentVerifierExtensionIT.java | 84 ------------------- .../search/TwitterSearchComponentVerifierIT.java | 83 ------------------- ...witterTimelineComponentVerifierExtensionIT.java | 29 ------- .../TwitterTimelineComponentVerifierIT.java | 29 ------- parent/pom.xml | 2 +- 33 files changed, 100 insertions(+), 738 deletions(-) diff --git a/components/camel-twitter/src/generated/java/org/apache/camel/component/twitter/util/TwitterConverterLoader.java b/components/camel-twitter/src/generated/java/org/apache/camel/component/twitter/util/TwitterConverterLoader.java index cd4a8ee5d26..4ac91ce6426 100644 --- a/components/camel-twitter/src/generated/java/org/apache/camel/component/twitter/util/TwitterConverterLoader.java +++ b/components/camel-twitter/src/generated/java/org/apache/camel/component/twitter/util/TwitterConverterLoader.java @@ -41,16 +41,16 @@ public final class TwitterConverterLoader implements TypeConverterLoader, CamelC } private void registerConverters(TypeConverterRegistry registry) { - addTypeConverter(registry, java.lang.String.class, twitter4j.DirectMessage.class, false, - (type, exchange, value) -> org.apache.camel.component.twitter.util.TwitterConverter.toString((twitter4j.DirectMessage) value)); - addTypeConverter(registry, java.lang.String.class, twitter4j.Status.class, false, - (type, exchange, value) -> org.apache.camel.component.twitter.util.TwitterConverter.toString((twitter4j.Status) value)); - addTypeConverter(registry, java.lang.String.class, twitter4j.Trend.class, false, - (type, exchange, value) -> org.apache.camel.component.twitter.util.TwitterConverter.toString((twitter4j.Trend) value)); - addTypeConverter(registry, java.lang.String.class, twitter4j.Trends.class, false, - (type, exchange, value) -> org.apache.camel.component.twitter.util.TwitterConverter.toString((twitter4j.Trends) value)); - addTypeConverter(registry, java.lang.String.class, twitter4j.UserList.class, false, - (type, exchange, value) -> org.apache.camel.component.twitter.util.TwitterConverter.toString((twitter4j.UserList) value)); + addTypeConverter(registry, java.lang.String.class, twitter4j.v1.DirectMessage.class, false, + (type, exchange, value) -> org.apache.camel.component.twitter.util.TwitterConverter.toString((twitter4j.v1.DirectMessage) value)); + addTypeConverter(registry, java.lang.String.class, twitter4j.v1.Status.class, false, + (type, exchange, value) -> org.apache.camel.component.twitter.util.TwitterConverter.toString((twitter4j.v1.Status) value)); + addTypeConverter(registry, java.lang.String.class, twitter4j.v1.Trend.class, false, + (type, exchange, value) -> org.apache.camel.component.twitter.util.TwitterConverter.toString((twitter4j.v1.Trend) value)); + addTypeConverter(registry, java.lang.String.class, twitter4j.v1.Trends.class, false, + (type, exchange, value) -> org.apache.camel.component.twitter.util.TwitterConverter.toString((twitter4j.v1.Trends) value)); + addTypeConverter(registry, java.lang.String.class, twitter4j.v1.UserList.class, false, + (type, exchange, value) -> org.apache.camel.component.twitter.util.TwitterConverter.toString((twitter4j.v1.UserList) value)); } private static void addTypeConverter(TypeConverterRegistry registry, Class<?> toType, Class<?> fromType, boolean allowNull, SimpleTypeConverter.ConversionMethod method) { diff --git a/components/camel-twitter/src/generated/resources/org/apache/camel/component/twitter/timeline/twitter-timeline.json b/components/camel-twitter/src/generated/resources/org/apache/camel/component/twitter/timeline/twitter-timeline.json index aaec867c346..e14139ad7f1 100644 --- a/components/camel-twitter/src/generated/resources/org/apache/camel/component/twitter/timeline/twitter-timeline.json +++ b/components/camel-twitter/src/generated/resources/org/apache/camel/component/twitter/timeline/twitter-timeline.json @@ -39,7 +39,7 @@ "CamelTwitterEventType": { "index": 0, "kind": "header", "displayName": "", "group": "common", "label": "", "required": false, "javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The type of event. The supported values are the values of the enum org.apache.camel.component.twitter.consumer.TwitterEventType", "constantName": "org.apache.camel.component.twitter.TwitterConstants#TWITTER_EVENT_TYPE" } }, "properties": { - "timelineType": { "index": 0, "kind": "path", "displayName": "Timeline Type", "group": "common", "label": "", "required": true, "type": "object", "javaType": "org.apache.camel.component.twitter.data.TimelineType", "enum": [ "PUBLIC", "HOME", "USER", "MENTIONS", "RETWEETSOFME", "LIST", "UNKNOWN" ], "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The timeline type to produce\/consume." }, + "timelineType": { "index": 0, "kind": "path", "displayName": "Timeline Type", "group": "common", "label": "", "required": true, "type": "object", "javaType": "org.apache.camel.component.twitter.data.TimelineType", "enum": [ "PUBLIC", "HOME", "USER", "MENTIONS", "LIST", "UNKNOWN" ], "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The timeline type to produce\/consume." }, "list": { "index": 1, "kind": "parameter", "displayName": "List", "group": "common", "label": "", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "description": "The list name when using timelineType=list" }, "user": { "index": 2, "kind": "parameter", "displayName": "User", "group": "common", "label": "", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "description": "The username when using timelineType=user" }, "sendEmptyMessageWhenIdle": { "index": 3, "kind": "parameter", "displayName": "Send Empty Message When Idle", "group": "consumer", "label": "consumer", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": false, "description": "If the polling consumer did not poll any files, you can enable this option to send an empty message (no body) instead." }, diff --git a/components/camel-twitter/src/main/java/org/apache/camel/component/twitter/AbstractTwitterComponent.java b/components/camel-twitter/src/main/java/org/apache/camel/component/twitter/AbstractTwitterComponent.java index 8faf8a4e462..d278b2ecc55 100644 --- a/components/camel-twitter/src/main/java/org/apache/camel/component/twitter/AbstractTwitterComponent.java +++ b/components/camel-twitter/src/main/java/org/apache/camel/component/twitter/AbstractTwitterComponent.java @@ -20,7 +20,6 @@ import java.util.Map; import org.apache.camel.CamelContext; import org.apache.camel.Endpoint; -import org.apache.camel.component.extension.ComponentVerifierExtension; import org.apache.camel.spi.Metadata; import org.apache.camel.support.DefaultComponent; @@ -51,8 +50,6 @@ public abstract class AbstractTwitterComponent extends DefaultComponent { protected AbstractTwitterComponent(CamelContext context, String componentVerifierScheme) { super(context); - - registerExtension(() -> new TwitterComponentVerifierExtension(componentVerifierScheme)); } @Override @@ -169,11 +166,4 @@ public abstract class AbstractTwitterComponent extends DefaultComponent { return httpProxyPort; } - /** - * Get a verifier for the component. - */ - public ComponentVerifierExtension getVerifier() { - return (scope, parameters) -> getExtension(ComponentVerifierExtension.class) - .orElseThrow(UnsupportedOperationException::new).verify(scope, parameters); - } } diff --git a/components/camel-twitter/src/main/java/org/apache/camel/component/twitter/TwitterComponentVerifierExtension.java b/components/camel-twitter/src/main/java/org/apache/camel/component/twitter/TwitterComponentVerifierExtension.java deleted file mode 100644 index 9602891ecd2..00000000000 --- a/components/camel-twitter/src/main/java/org/apache/camel/component/twitter/TwitterComponentVerifierExtension.java +++ /dev/null @@ -1,95 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF 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 org.apache.camel.component.twitter; - -import java.util.Map; - -import org.apache.camel.component.extension.verifier.DefaultComponentVerifierExtension; -import org.apache.camel.component.extension.verifier.ResultBuilder; -import org.apache.camel.component.extension.verifier.ResultErrorBuilder; -import org.apache.camel.component.extension.verifier.ResultErrorHelper; -import twitter4j.Twitter; -import twitter4j.TwitterException; - -public final class TwitterComponentVerifierExtension extends DefaultComponentVerifierExtension { - - public TwitterComponentVerifierExtension() { - this("twitter"); - } - - public TwitterComponentVerifierExtension(String scheme) { - super(scheme); - } - - // ********************************* - // Parameters validation - // ********************************* - - @Override - protected Result verifyParameters(Map<String, Object> parameters) { - ResultBuilder builder = ResultBuilder.withStatusAndScope(Result.Status.OK, Scope.PARAMETERS) - .error(ResultErrorHelper.requiresOption("accessToken", parameters)) - .error(ResultErrorHelper.requiresOption("accessTokenSecret", parameters)) - .error(ResultErrorHelper.requiresOption("consumerKey", parameters)) - .error(ResultErrorHelper.requiresOption("consumerSecret", parameters)); - - // Validate using the catalog - super.verifyParametersAgainstCatalog(builder, parameters); - - return builder.build(); - } - - // ********************************* - // Connectivity validation - // ********************************* - - @Override - protected Result verifyConnectivity(Map<String, Object> parameters) { - return ResultBuilder.withStatusAndScope(Result.Status.OK, Scope.CONNECTIVITY) - .error(parameters, this::verifyCredentials) - .build(); - } - - private void verifyCredentials(ResultBuilder builder, Map<String, Object> parameters) throws Exception { - try { - TwitterConfiguration configuration = setProperties(new TwitterConfiguration(), parameters); - Twitter twitter = configuration.getTwitter(); - - twitter.verifyCredentials(); - } catch (TwitterException e) { - // verifyCredentials throws TwitterException when Twitter service or - // network is unavailable or if supplied credential is wrong - ResultErrorBuilder errorBuilder = ResultErrorBuilder - .withCodeAndDescription(VerificationError.StandardCode.AUTHENTICATION, e.getErrorMessage()) - .detail("twitter_error_code", e.getErrorCode()) - .detail("twitter_status_code", e.getStatusCode()) - .detail("twitter_exception_code", e.getExceptionCode()) - .detail("twitter_exception_message", e.getMessage()) - .detail("twitter_exception_caused-by-network-issue", e.isCausedByNetworkIssue()) - .detail(VerificationError.ExceptionAttribute.EXCEPTION_CLASS, e.getClass().getName()) - .detail(VerificationError.ExceptionAttribute.EXCEPTION_INSTANCE, e); - - // For a complete list of error codes see: - // https://dev.twitter.com/overview/api/response-codes - if (e.getErrorCode() == 89) { - errorBuilder.parameterKey("accessToken"); - } - - builder.error(errorBuilder.build()); - } - } -} diff --git a/components/camel-twitter/src/main/java/org/apache/camel/component/twitter/TwitterConfiguration.java b/components/camel-twitter/src/main/java/org/apache/camel/component/twitter/TwitterConfiguration.java index 76f0d49b4b7..c4c8b02db7b 100644 --- a/components/camel-twitter/src/main/java/org/apache/camel/component/twitter/TwitterConfiguration.java +++ b/components/camel-twitter/src/main/java/org/apache/camel/component/twitter/TwitterConfiguration.java @@ -21,9 +21,6 @@ import org.apache.camel.spi.UriParam; import org.apache.camel.spi.UriParams; import org.apache.camel.util.ObjectHelper; import twitter4j.Twitter; -import twitter4j.TwitterFactory; -import twitter4j.conf.Configuration; -import twitter4j.conf.ConfigurationBuilder; @UriParams public class TwitterConfiguration { @@ -92,37 +89,29 @@ public class TwitterConfiguration { } /** - * Builds a Twitter4J Configuration using the OAuth params. - * - * @return Configuration + * Builds {@link Twitter} with the current configuration. */ - public Configuration getConfiguration() { + protected Twitter buildTwitter() { checkComplete(); - ConfigurationBuilder confBuilder = new ConfigurationBuilder(); - confBuilder.setOAuthConsumerKey(consumerKey); - confBuilder.setOAuthConsumerSecret(consumerSecret); - confBuilder.setOAuthAccessToken(accessToken); - confBuilder.setOAuthAccessTokenSecret(accessTokenSecret); - confBuilder.setTweetModeExtended(isExtendedMode()); - if (getHttpProxyHost() != null) { - confBuilder.setHttpProxyHost(getHttpProxyHost()); - } - if (getHttpProxyUser() != null) { - confBuilder.setHttpProxyUser(getHttpProxyUser()); - } - if (getHttpProxyPassword() != null) { - confBuilder.setHttpProxyPassword(getHttpProxyPassword()); - } - if (httpProxyPort != null) { - confBuilder.setHttpProxyPort(httpProxyPort); + + Twitter.TwitterBuilder builder = Twitter.newBuilder() + .oAuthConsumer(consumerKey, consumerSecret) + .oAuthAccessToken(accessToken, accessTokenSecret) + .tweetModeExtended(isExtendedMode()) + .httpProxyHost(getHttpProxyHost()) + .httpProxyUser(getHttpProxyUser()) + .httpProxyPassword(getHttpProxyPassword()); + + if (getHttpProxyPort() != null) { + builder.httpProxyPort(getHttpProxyPort()); } - return confBuilder.build(); + return builder.build(); } public Twitter getTwitter() { if (twitter == null) { - twitter = new TwitterFactory(getConfiguration()).getInstance(); + twitter = buildTwitter(); } return twitter; } diff --git a/components/camel-twitter/src/main/java/org/apache/camel/component/twitter/TwitterHelper.java b/components/camel-twitter/src/main/java/org/apache/camel/component/twitter/TwitterHelper.java index 6fb9395df71..e454bed70b4 100644 --- a/components/camel-twitter/src/main/java/org/apache/camel/component/twitter/TwitterHelper.java +++ b/components/camel-twitter/src/main/java/org/apache/camel/component/twitter/TwitterHelper.java @@ -22,7 +22,7 @@ import org.apache.camel.Message; import org.apache.camel.Processor; import org.apache.camel.component.twitter.consumer.AbstractTwitterConsumerHandler; import org.apache.camel.component.twitter.consumer.DefaultTwitterConsumer; -import twitter4j.User; +import twitter4j.v1.User; public final class TwitterHelper { private TwitterHelper() { diff --git a/components/camel-twitter/src/main/java/org/apache/camel/component/twitter/consumer/AbstractTwitterConsumerHandler.java b/components/camel-twitter/src/main/java/org/apache/camel/component/twitter/consumer/AbstractTwitterConsumerHandler.java index 8660936b853..1e7447908be 100644 --- a/components/camel-twitter/src/main/java/org/apache/camel/component/twitter/consumer/AbstractTwitterConsumerHandler.java +++ b/components/camel-twitter/src/main/java/org/apache/camel/component/twitter/consumer/AbstractTwitterConsumerHandler.java @@ -22,9 +22,9 @@ import org.apache.camel.Exchange; import org.apache.camel.component.twitter.TwitterEndpoint; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import twitter4j.Paging; import twitter4j.Twitter; import twitter4j.TwitterException; +import twitter4j.v1.Paging; public abstract class AbstractTwitterConsumerHandler { @@ -85,11 +85,11 @@ public abstract class AbstractTwitterConsumerHandler { Integer pages = endpoint.getProperties().getNumberOfPages(); Integer count = endpoint.getProperties().getCount(); if (pages != null && count != null) { - return new Paging(pages, count, lastId); + return Paging.ofPage(pages).count(count).sinceId(lastId); } else if (pages != null) { - return new Paging(pages, lastId); + return Paging.ofPage(pages).sinceId(lastId); } else { - return new Paging(lastId); + return Paging.ofSinceId(lastId); } } } diff --git a/components/camel-twitter/src/main/java/org/apache/camel/component/twitter/data/TimelineType.java b/components/camel-twitter/src/main/java/org/apache/camel/component/twitter/data/TimelineType.java index ff795a54cf2..efcfabc7892 100644 --- a/components/camel-twitter/src/main/java/org/apache/camel/component/twitter/data/TimelineType.java +++ b/components/camel-twitter/src/main/java/org/apache/camel/component/twitter/data/TimelineType.java @@ -23,7 +23,6 @@ public enum TimelineType { HOME, USER, MENTIONS, - RETWEETSOFME, LIST, UNKNOWN; diff --git a/components/camel-twitter/src/main/java/org/apache/camel/component/twitter/directmessage/DirectMessageConsumerHandler.java b/components/camel-twitter/src/main/java/org/apache/camel/component/twitter/directmessage/DirectMessageConsumerHandler.java index 97f4c6b9623..de484802aee 100644 --- a/components/camel-twitter/src/main/java/org/apache/camel/component/twitter/directmessage/DirectMessageConsumerHandler.java +++ b/components/camel-twitter/src/main/java/org/apache/camel/component/twitter/directmessage/DirectMessageConsumerHandler.java @@ -23,9 +23,9 @@ import org.apache.camel.Exchange; import org.apache.camel.component.twitter.TwitterEndpoint; import org.apache.camel.component.twitter.consumer.AbstractTwitterConsumerHandler; import org.apache.camel.component.twitter.consumer.TwitterEventType; -import twitter4j.DirectMessage; -import twitter4j.DirectMessageList; import twitter4j.TwitterException; +import twitter4j.v1.DirectMessage; +import twitter4j.v1.DirectMessageList; /** * Consumes a user's direct messages @@ -49,15 +49,15 @@ public class DirectMessageConsumerHandler extends AbstractTwitterConsumerHandler private DirectMessageList directMessages(String previousCursor, String cursor) throws TwitterException { // https://developer.twitter.com/en/docs/direct-messages/sending-and-receiving/api-reference/list-events - // if there are more DM to retrieve the the next_cursor parameter is set. + // if there are more DM to retrieve the next_cursor parameter is set. // however next_cursor is always set in the response, so we must handle pagination correctly // after the first call, there is always a second call to check if there is new DM and we compare // the previous and current next_cursor, if not equals there is pagination. DirectMessageList directMessages; if (cursor != null) { - directMessages = getTwitter().getDirectMessages(endpoint.getProperties().getCount(), cursor); + directMessages = getTwitter().v1().directMessages().getDirectMessages(endpoint.getProperties().getCount(), cursor); } else { - directMessages = getTwitter().getDirectMessages(endpoint.getProperties().getCount()); + directMessages = getTwitter().v1().directMessages().getDirectMessages(endpoint.getProperties().getCount()); } String nextCursor = directMessages.getNextCursor(); diff --git a/components/camel-twitter/src/main/java/org/apache/camel/component/twitter/directmessage/DirectMessageProducer.java b/components/camel-twitter/src/main/java/org/apache/camel/component/twitter/directmessage/DirectMessageProducer.java index 9f2c3be1e20..f2abb80d9ae 100644 --- a/components/camel-twitter/src/main/java/org/apache/camel/component/twitter/directmessage/DirectMessageProducer.java +++ b/components/camel-twitter/src/main/java/org/apache/camel/component/twitter/directmessage/DirectMessageProducer.java @@ -24,7 +24,7 @@ import org.apache.camel.support.DefaultProducer; import org.apache.camel.util.ObjectHelper; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import twitter4j.User; +import twitter4j.v1.User; /** * Produces text as a direct message. @@ -55,8 +55,8 @@ public class DirectMessageProducer extends DefaultProducer { throw new CamelExchangeException("Username not configured on TwitterEndpoint", exchange); } else { LOG.debug("Sending to: {} message: {}", toUsername, text); - User userStatus = endpoint.getProperties().getTwitter().showUser(toUsername); - endpoint.getProperties().getTwitter().sendDirectMessage(userStatus.getId(), text); + User userStatus = endpoint.getProperties().getTwitter().v1().users().showUser(toUsername); + endpoint.getProperties().getTwitter().v1().directMessages().sendDirectMessage(userStatus.getId(), text); } } diff --git a/components/camel-twitter/src/main/java/org/apache/camel/component/twitter/search/SearchConsumerHandler.java b/components/camel-twitter/src/main/java/org/apache/camel/component/twitter/search/SearchConsumerHandler.java index c1c90b37942..53ef379d5ba 100644 --- a/components/camel-twitter/src/main/java/org/apache/camel/component/twitter/search/SearchConsumerHandler.java +++ b/components/camel-twitter/src/main/java/org/apache/camel/component/twitter/search/SearchConsumerHandler.java @@ -26,13 +26,13 @@ import org.apache.camel.component.twitter.consumer.TwitterEventType; import org.apache.camel.util.ObjectHelper; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import twitter4j.GeoLocation; -import twitter4j.Query; -import twitter4j.Query.Unit; -import twitter4j.QueryResult; -import twitter4j.Status; import twitter4j.Twitter; import twitter4j.TwitterException; +import twitter4j.v1.GeoLocation; +import twitter4j.v1.Query; +import twitter4j.v1.Query.Unit; +import twitter4j.v1.QueryResult; +import twitter4j.v1.Status; /** * Consumes search requests @@ -55,15 +55,15 @@ public class SearchConsumerHandler extends AbstractTwitterConsumerHandler { Query query; if (keywords != null && keywords.trim().length() > 0) { - query = new Query(keywords); + query = Query.of(keywords); LOG.debug("Searching twitter with keywords: {}", keywords); } else { - query = new Query(); + query = Query.of(""); LOG.debug("Searching twitter without keywords."); } if (endpoint.getProperties().isFilterOld()) { - query.setSinceId(getLastId()); + query.sinceId(getLastId()); } return search(query); @@ -75,7 +75,7 @@ public class SearchConsumerHandler extends AbstractTwitterConsumerHandler { if (keywords == null || keywords.trim().length() == 0) { return Collections.emptyList(); } - Query query = new Query(keywords); + Query query = Query.of(keywords); LOG.debug("Searching twitter with keywords: {}", keywords); return search(query); @@ -85,11 +85,11 @@ public class SearchConsumerHandler extends AbstractTwitterConsumerHandler { Integer numberOfPages = 1; if (ObjectHelper.isNotEmpty(endpoint.getProperties().getLang())) { - query.setLang(endpoint.getProperties().getLang()); + query.lang(endpoint.getProperties().getLang()); } if (ObjectHelper.isNotEmpty(endpoint.getProperties().getCount())) { - query.setCount(endpoint.getProperties().getCount()); + query.count(endpoint.getProperties().getCount()); } if (ObjectHelper.isNotEmpty(endpoint.getProperties().getNumberOfPages())) { @@ -100,8 +100,8 @@ public class SearchConsumerHandler extends AbstractTwitterConsumerHandler { && ObjectHelper.isNotEmpty(endpoint.getProperties().getLongitude()) && ObjectHelper.isNotEmpty(endpoint.getProperties().getRadius())) { GeoLocation location - = new GeoLocation(endpoint.getProperties().getLatitude(), endpoint.getProperties().getLongitude()); - query.setGeoCode(location, endpoint.getProperties().getRadius(), + = GeoLocation.of(endpoint.getProperties().getLatitude(), endpoint.getProperties().getLongitude()); + query.geoCode(location, endpoint.getProperties().getRadius(), Unit.valueOf(endpoint.getProperties().getDistanceMetric())); LOG.debug("Searching with additional geolocation parameters."); @@ -110,7 +110,7 @@ public class SearchConsumerHandler extends AbstractTwitterConsumerHandler { LOG.debug("Searching with {} pages.", numberOfPages); Twitter twitter = getTwitter(); - QueryResult qr = twitter.search(query); + QueryResult qr = twitter.v1().search().search(query); List<Status> tweets = qr.getTweets(); for (int i = 1; i < numberOfPages; i++) { @@ -118,7 +118,7 @@ public class SearchConsumerHandler extends AbstractTwitterConsumerHandler { break; } - qr = twitter.search(qr.nextQuery()); + qr = twitter.v1().search().search(qr.nextQuery()); tweets.addAll(qr.getTweets()); } diff --git a/components/camel-twitter/src/main/java/org/apache/camel/component/twitter/search/SearchProducer.java b/components/camel-twitter/src/main/java/org/apache/camel/component/twitter/search/SearchProducer.java index 9de61b8a303..d4afd63ca19 100644 --- a/components/camel-twitter/src/main/java/org/apache/camel/component/twitter/search/SearchProducer.java +++ b/components/camel-twitter/src/main/java/org/apache/camel/component/twitter/search/SearchProducer.java @@ -26,10 +26,10 @@ import org.apache.camel.support.DefaultProducer; import org.apache.camel.util.ObjectHelper; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import twitter4j.Query; -import twitter4j.QueryResult; -import twitter4j.Status; import twitter4j.Twitter; +import twitter4j.v1.Query; +import twitter4j.v1.QueryResult; +import twitter4j.v1.Status; public class SearchProducer extends DefaultProducer { @@ -59,11 +59,11 @@ public class SearchProducer extends DefaultProducer { throw new CamelExchangeException("No keywords to use for query", exchange); } - Query query = new Query(queryKeywords); + Query query = Query.of(queryKeywords); // filter of older tweets if (endpoint.getProperties().isFilterOld() && myLastId != 0) { - query.setSinceId(myLastId); + query.sinceId(myLastId); } // since id @@ -72,13 +72,13 @@ public class SearchProducer extends DefaultProducer { sinceId = endpoint.getProperties().getSinceId(); } if (ObjectHelper.isNotEmpty(sinceId)) { - query.setSinceId(sinceId); + query.sinceId(sinceId); } // max id Long maxId = exchange.getIn().getHeader(TwitterConstants.TWITTER_MAXID, Long.class); if (ObjectHelper.isNotEmpty(maxId)) { - query.setMaxId(maxId); + query.maxId(maxId); } // language @@ -88,7 +88,7 @@ public class SearchProducer extends DefaultProducer { } if (ObjectHelper.isNotEmpty(lang)) { - query.setLang(lang); + query.lang(lang); } // number of elements per page @@ -97,7 +97,7 @@ public class SearchProducer extends DefaultProducer { count = endpoint.getProperties().getCount(); } if (ObjectHelper.isNotEmpty(count)) { - query.setCount(count); + query.count(count); } // number of pages @@ -108,7 +108,7 @@ public class SearchProducer extends DefaultProducer { Twitter twitter = endpoint.getProperties().getTwitter(); LOG.debug("Searching twitter with keywords: {}", queryKeywords); - QueryResult results = twitter.search(query); + QueryResult results = twitter.v1().search().search(query); List<Status> list = results.getTweets(); for (int i = 1; i < numberOfPages; i++) { @@ -116,7 +116,7 @@ public class SearchProducer extends DefaultProducer { break; } LOG.debug("Fetching page"); - results = twitter.search(results.nextQuery()); + results = twitter.v1().search().search(results.nextQuery()); list.addAll(results.getTweets()); } diff --git a/components/camel-twitter/src/main/java/org/apache/camel/component/twitter/timeline/AbstractStatusConsumerHandler.java b/components/camel-twitter/src/main/java/org/apache/camel/component/twitter/timeline/AbstractStatusConsumerHandler.java index ac545d8b7a3..77585b1bfa4 100644 --- a/components/camel-twitter/src/main/java/org/apache/camel/component/twitter/timeline/AbstractStatusConsumerHandler.java +++ b/components/camel-twitter/src/main/java/org/apache/camel/component/twitter/timeline/AbstractStatusConsumerHandler.java @@ -22,8 +22,8 @@ import org.apache.camel.Exchange; import org.apache.camel.component.twitter.TwitterEndpoint; import org.apache.camel.component.twitter.consumer.AbstractTwitterConsumerHandler; import org.apache.camel.component.twitter.consumer.TwitterEventType; -import twitter4j.Status; import twitter4j.TwitterException; +import twitter4j.v1.Status; /** * Consumes the user's home timeline. diff --git a/components/camel-twitter/src/main/java/org/apache/camel/component/twitter/timeline/HomeConsumerHandler.java b/components/camel-twitter/src/main/java/org/apache/camel/component/twitter/timeline/HomeConsumerHandler.java index bcc34a0f217..d464c525846 100644 --- a/components/camel-twitter/src/main/java/org/apache/camel/component/twitter/timeline/HomeConsumerHandler.java +++ b/components/camel-twitter/src/main/java/org/apache/camel/component/twitter/timeline/HomeConsumerHandler.java @@ -19,9 +19,9 @@ package org.apache.camel.component.twitter.timeline; import java.util.List; import org.apache.camel.component.twitter.TwitterEndpoint; -import twitter4j.Paging; -import twitter4j.Status; import twitter4j.TwitterException; +import twitter4j.v1.Paging; +import twitter4j.v1.Status; /** * Consumes the user's home timeline. @@ -35,13 +35,13 @@ public class HomeConsumerHandler extends AbstractStatusConsumerHandler { @Override protected List<Status> doPoll() throws TwitterException { Paging paging = getLastIdPaging(); - log.trace("doPoll.getHomeTimeline(sinceId={})", paging.getSinceId()); - return getTwitter().getHomeTimeline(paging); + log.trace("doPoll.getHomeTimeline(sinceId={})", paging.sinceId); + return getTwitter().v1().timelines().getHomeTimeline(paging); } @Override protected List<Status> doDirect() throws TwitterException { log.trace("doDirect.getHomeTimeline()"); - return getTwitter().getHomeTimeline(); + return getTwitter().v1().timelines().getHomeTimeline(); } } diff --git a/components/camel-twitter/src/main/java/org/apache/camel/component/twitter/timeline/MentionsConsumerHandler.java b/components/camel-twitter/src/main/java/org/apache/camel/component/twitter/timeline/MentionsConsumerHandler.java index f76a1ea5358..290c79db509 100644 --- a/components/camel-twitter/src/main/java/org/apache/camel/component/twitter/timeline/MentionsConsumerHandler.java +++ b/components/camel-twitter/src/main/java/org/apache/camel/component/twitter/timeline/MentionsConsumerHandler.java @@ -19,9 +19,9 @@ package org.apache.camel.component.twitter.timeline; import java.util.List; import org.apache.camel.component.twitter.TwitterEndpoint; -import twitter4j.Paging; -import twitter4j.Status; import twitter4j.TwitterException; +import twitter4j.v1.Paging; +import twitter4j.v1.Status; /** * Consumes tweets in which the user has been mentioned. @@ -35,13 +35,13 @@ public class MentionsConsumerHandler extends AbstractStatusConsumerHandler { @Override protected List<Status> doPoll() throws TwitterException { Paging paging = getLastIdPaging(); - log.trace("doPoll.getMentionsTimeline(sinceId={})", paging.getSinceId()); - return getTwitter().getMentionsTimeline(paging); + log.trace("doPoll.getMentionsTimeline(sinceId={})", paging.sinceId); + return getTwitter().v1().timelines().getMentionsTimeline(paging); } @Override protected List<Status> doDirect() throws TwitterException { log.trace("doDirect.getMentionsTimeline()"); - return getTwitter().getMentionsTimeline(); + return getTwitter().v1().timelines().getMentionsTimeline(); } } diff --git a/components/camel-twitter/src/main/java/org/apache/camel/component/twitter/timeline/RetweetsConsumerHandler.java b/components/camel-twitter/src/main/java/org/apache/camel/component/twitter/timeline/RetweetsConsumerHandler.java deleted file mode 100644 index 89e26f88a53..00000000000 --- a/components/camel-twitter/src/main/java/org/apache/camel/component/twitter/timeline/RetweetsConsumerHandler.java +++ /dev/null @@ -1,47 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF 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 org.apache.camel.component.twitter.timeline; - -import java.util.List; - -import org.apache.camel.component.twitter.TwitterEndpoint; -import twitter4j.Paging; -import twitter4j.Status; -import twitter4j.TwitterException; - -/** - * Consumes a user's tweets that have been retweeted - */ -public class RetweetsConsumerHandler extends AbstractStatusConsumerHandler { - - public RetweetsConsumerHandler(TwitterEndpoint endpoint) { - super(endpoint); - } - - @Override - protected List<Status> doPoll() throws TwitterException { - Paging paging = getLastIdPaging(); - log.trace("doPoll.getRetweetsOfMe(sinceId={})", paging.getSinceId()); - return getTwitter().getRetweetsOfMe(paging); - } - - @Override - protected List<Status> doDirect() throws TwitterException { - log.trace("doDirect.getRetweetsOfMe("); - return getTwitter().getRetweetsOfMe(); - } -} diff --git a/components/camel-twitter/src/main/java/org/apache/camel/component/twitter/timeline/TwitterTimelineEndpoint.java b/components/camel-twitter/src/main/java/org/apache/camel/component/twitter/timeline/TwitterTimelineEndpoint.java index a27c48ef5c3..ba234ff6381 100644 --- a/components/camel-twitter/src/main/java/org/apache/camel/component/twitter/timeline/TwitterTimelineEndpoint.java +++ b/components/camel-twitter/src/main/java/org/apache/camel/component/twitter/timeline/TwitterTimelineEndpoint.java @@ -98,9 +98,6 @@ public class TwitterTimelineEndpoint extends AbstractTwitterEndpoint { case MENTIONS: handler = new MentionsConsumerHandler(this); break; - case RETWEETSOFME: - handler = new RetweetsConsumerHandler(this); - break; case LIST: handler = new UserListConsumerHandler(this, user, list); break; diff --git a/components/camel-twitter/src/main/java/org/apache/camel/component/twitter/timeline/UserConsumerHandler.java b/components/camel-twitter/src/main/java/org/apache/camel/component/twitter/timeline/UserConsumerHandler.java index 3d5ed1268cc..9de9b79caee 100644 --- a/components/camel-twitter/src/main/java/org/apache/camel/component/twitter/timeline/UserConsumerHandler.java +++ b/components/camel-twitter/src/main/java/org/apache/camel/component/twitter/timeline/UserConsumerHandler.java @@ -19,9 +19,9 @@ package org.apache.camel.component.twitter.timeline; import java.util.List; import org.apache.camel.component.twitter.TwitterEndpoint; -import twitter4j.Paging; -import twitter4j.Status; import twitter4j.TwitterException; +import twitter4j.v1.Paging; +import twitter4j.v1.Status; /** * Consumes the timeline of a given user. @@ -38,13 +38,13 @@ public class UserConsumerHandler extends AbstractStatusConsumerHandler { @Override protected List<Status> doPoll() throws TwitterException { Paging paging = getLastIdPaging(); - log.trace("doPoll.getUserTimeline(user={}, sinceId={})", user, paging.getSinceId()); - return getTwitter().getUserTimeline(user, paging); + log.trace("doPoll.getUserTimeline(user={}, sinceId={})", user, paging.sinceId); + return getTwitter().v1().timelines().getUserTimeline(user, paging); } @Override protected List<Status> doDirect() throws TwitterException { log.trace("doDirect.getUserTimeline(user={})", user); - return getTwitter().getUserTimeline(user); + return getTwitter().v1().timelines().getUserTimeline(user); } } diff --git a/components/camel-twitter/src/main/java/org/apache/camel/component/twitter/timeline/UserListConsumerHandler.java b/components/camel-twitter/src/main/java/org/apache/camel/component/twitter/timeline/UserListConsumerHandler.java index 29290b15b54..dc44310422a 100644 --- a/components/camel-twitter/src/main/java/org/apache/camel/component/twitter/timeline/UserListConsumerHandler.java +++ b/components/camel-twitter/src/main/java/org/apache/camel/component/twitter/timeline/UserListConsumerHandler.java @@ -19,9 +19,9 @@ package org.apache.camel.component.twitter.timeline; import java.util.List; import org.apache.camel.component.twitter.TwitterEndpoint; -import twitter4j.Paging; -import twitter4j.Status; import twitter4j.TwitterException; +import twitter4j.v1.Paging; +import twitter4j.v1.Status; public class UserListConsumerHandler extends AbstractStatusConsumerHandler { private final String user; @@ -37,13 +37,13 @@ public class UserListConsumerHandler extends AbstractStatusConsumerHandler { @Override protected List<Status> doPoll() throws TwitterException { Paging paging = getLastIdPaging(); - log.trace("doPoll.getUserListStatuses(user={}, list={}, sinceId={})", user, list, paging.getSinceId()); - return getTwitter().getUserListStatuses(user, list, paging); + log.trace("doPoll.getUserListStatuses(user={}, list={}, sinceId={})", user, list, paging.sinceId); + return getTwitter().v1().list().getUserListStatuses(user, list, paging); } @Override protected List<Status> doDirect() throws TwitterException { - Paging paging = new Paging(getLastId()); - return getTwitter().getUserListStatuses(user, list, paging); + Paging paging = Paging.ofSinceId(getLastId()); + return getTwitter().v1().list().getUserListStatuses(user, list, paging); } } diff --git a/components/camel-twitter/src/main/java/org/apache/camel/component/twitter/timeline/UserProducer.java b/components/camel-twitter/src/main/java/org/apache/camel/component/twitter/timeline/UserProducer.java index 3d74ce9cd4a..6d750dce7ec 100644 --- a/components/camel-twitter/src/main/java/org/apache/camel/component/twitter/timeline/UserProducer.java +++ b/components/camel-twitter/src/main/java/org/apache/camel/component/twitter/timeline/UserProducer.java @@ -22,8 +22,8 @@ import org.apache.camel.support.DefaultProducer; import org.apache.camel.support.ExchangeHelper; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import twitter4j.Status; -import twitter4j.StatusUpdate; +import twitter4j.v1.Status; +import twitter4j.v1.StatusUpdate; /** * Produces text as a status update. @@ -62,14 +62,14 @@ public class UserProducer extends DefaultProducer { } private Status updateStatus(StatusUpdate status) throws Exception { - Status response = endpoint.getProperties().getTwitter().updateStatus(status); + Status response = endpoint.getProperties().getTwitter().v1().tweets().updateStatus(status); LOG.debug("Updated status: {}", status); LOG.debug("Status id: {}", response.getId()); return response; } private Status updateStatus(String status) throws Exception { - Status response = endpoint.getProperties().getTwitter().updateStatus(status); + Status response = endpoint.getProperties().getTwitter().v1().tweets().updateStatus(status); LOG.debug("Updated status: {}", status); LOG.debug("Status id: {}", response.getId()); return response; diff --git a/components/camel-twitter/src/main/java/org/apache/camel/component/twitter/util/TwitterConverter.java b/components/camel-twitter/src/main/java/org/apache/camel/component/twitter/util/TwitterConverter.java index f77f6dc2d7a..6a8341d8a4b 100644 --- a/components/camel-twitter/src/main/java/org/apache/camel/component/twitter/util/TwitterConverter.java +++ b/components/camel-twitter/src/main/java/org/apache/camel/component/twitter/util/TwitterConverter.java @@ -17,11 +17,11 @@ package org.apache.camel.component.twitter.util; import org.apache.camel.Converter; -import twitter4j.DirectMessage; -import twitter4j.Status; -import twitter4j.Trend; -import twitter4j.Trends; -import twitter4j.UserList; +import twitter4j.v1.DirectMessage; +import twitter4j.v1.Status; +import twitter4j.v1.Trend; +import twitter4j.v1.Trends; +import twitter4j.v1.UserList; /** * Utility for converting between Twitter4J and camel-twitter data layers. diff --git a/components/camel-twitter/src/main/java/org/apache/camel/component/twitter/util/TwitterSorter.java b/components/camel-twitter/src/main/java/org/apache/camel/component/twitter/util/TwitterSorter.java index d5579f7b1df..613e1a4ab25 100644 --- a/components/camel-twitter/src/main/java/org/apache/camel/component/twitter/util/TwitterSorter.java +++ b/components/camel-twitter/src/main/java/org/apache/camel/component/twitter/util/TwitterSorter.java @@ -20,7 +20,7 @@ import java.util.List; import java.util.stream.Collectors; import org.apache.camel.Exchange; -import twitter4j.Status; +import twitter4j.v1.Status; /** * To sort tweets. @@ -31,7 +31,7 @@ public final class TwitterSorter { } /** - * Sorts the tweets by {@link Status#getId()}. + * Sorts the tweets status id */ public static List<Exchange> sortByStatusId(List<Exchange> exchanges) { return exchanges.stream().sorted((e1, e2) -> { diff --git a/components/camel-twitter/src/test/java/org/apache/camel/component/twitter/AbstractComponentVerifierExtensionIT.java b/components/camel-twitter/src/test/java/org/apache/camel/component/twitter/AbstractComponentVerifierExtensionIT.java deleted file mode 100644 index 69cddd7e721..00000000000 --- a/components/camel-twitter/src/test/java/org/apache/camel/component/twitter/AbstractComponentVerifierExtensionIT.java +++ /dev/null @@ -1,94 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF 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 org.apache.camel.component.twitter; - -import java.util.Map; - -import org.apache.camel.Component; -import org.apache.camel.component.extension.ComponentVerifierExtension; -import org.junit.jupiter.api.Test; -import org.junit.jupiter.api.condition.EnabledIfSystemProperty; - -import static org.junit.jupiter.api.Assertions.assertEquals; - -@EnabledIfSystemProperty(named = "enable.twitter.itests", matches = "true", - disabledReason = "Likely has API limits, so it's better to keep it off by default") -public abstract class AbstractComponentVerifierExtensionIT extends CamelTwitterITSupport { - - protected abstract String getComponentScheme(); - - @Override - public boolean isUseRouteBuilder() { - return false; - } - - @Test - public void testConnectivity() { - Component component = context.getComponent(getComponentScheme()); - ComponentVerifierExtension verifier - = component.getExtension(ComponentVerifierExtension.class).orElseThrow(IllegalStateException::new); - - Map<String, Object> parameters = getParameters(); - ComponentVerifierExtension.Result result = verifier.verify(ComponentVerifierExtension.Scope.CONNECTIVITY, parameters); - - assertEquals(ComponentVerifierExtension.Result.Status.OK, result.getStatus()); - } - - @Test - public void testInvalidKeyConfiguration() { - Component component = context().getComponent(getComponentScheme()); - ComponentVerifierExtension verifier - = component.getExtension(ComponentVerifierExtension.class).orElseThrow(IllegalStateException::new); - - Map<String, Object> parameters = getParameters(); - parameters.put("consumerKey", "invalid"); - - ComponentVerifierExtension.Result result = verifier.verify(ComponentVerifierExtension.Scope.CONNECTIVITY, parameters); - - assertEquals(ComponentVerifierExtension.Result.Status.ERROR, result.getStatus()); - assertEquals(1, result.getErrors().size()); - assertEquals(ComponentVerifierExtension.VerificationError.StandardCode.AUTHENTICATION, - result.getErrors().get(0).getCode()); - assertEquals(401, result.getErrors().get(0).getDetails() - .get(ComponentVerifierExtension.VerificationError.asAttribute("twitter_status_code"))); - assertEquals(32, result.getErrors().get(0).getDetails() - .get(ComponentVerifierExtension.VerificationError.asAttribute("twitter_error_code"))); - } - - @Test - public void testInvalidTokenConfiguration() { - Component component = context().getComponent(getComponentScheme()); - ComponentVerifierExtension verifier - = component.getExtension(ComponentVerifierExtension.class).orElseThrow(IllegalStateException::new); - - Map<String, Object> parameters = getParameters(); - parameters.put("accessToken", "invalid"); - - ComponentVerifierExtension.Result result = verifier.verify(ComponentVerifierExtension.Scope.CONNECTIVITY, parameters); - - assertEquals(ComponentVerifierExtension.Result.Status.ERROR, result.getStatus()); - assertEquals(1, result.getErrors().size()); - assertEquals(ComponentVerifierExtension.VerificationError.StandardCode.AUTHENTICATION, - result.getErrors().get(0).getCode()); - assertEquals(401, result.getErrors().get(0).getDetails() - .get(ComponentVerifierExtension.VerificationError.asAttribute("twitter_status_code"))); - assertEquals(89, result.getErrors().get(0).getDetails() - .get(ComponentVerifierExtension.VerificationError.asAttribute("twitter_error_code"))); - assertEquals(1, result.getErrors().get(0).getParameterKeys().size()); - assertEquals("accessToken", result.getErrors().get(0).getParameterKeys().iterator().next()); - } -} diff --git a/components/camel-twitter/src/test/java/org/apache/camel/component/twitter/AbstractComponentVerifierIT.java b/components/camel-twitter/src/test/java/org/apache/camel/component/twitter/AbstractComponentVerifierIT.java deleted file mode 100644 index bf5df7923ea..00000000000 --- a/components/camel-twitter/src/test/java/org/apache/camel/component/twitter/AbstractComponentVerifierIT.java +++ /dev/null @@ -1,90 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF 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 org.apache.camel.component.twitter; - -import java.util.Map; - -import org.apache.camel.component.extension.ComponentVerifierExtension; -import org.junit.jupiter.api.Test; -import org.junit.jupiter.api.condition.EnabledIfSystemProperty; - -import static org.junit.jupiter.api.Assertions.assertEquals; - -@EnabledIfSystemProperty(named = "enable.twitter.itests", matches = "true", - disabledReason = "Likely has API limits, so it's better to keep it off by default") -public abstract class AbstractComponentVerifierIT extends CamelTwitterITSupport { - - protected abstract String getComponentScheme(); - - @Override - public boolean isUseRouteBuilder() { - return false; - } - - @Test - public void testConnectivity() { - AbstractTwitterComponent component = context().getComponent(getComponentScheme(), AbstractTwitterComponent.class); - ComponentVerifierExtension verifier = component.getVerifier(); - - Map<String, Object> parameters = getParameters(); - ComponentVerifierExtension.Result result = verifier.verify(ComponentVerifierExtension.Scope.CONNECTIVITY, parameters); - - assertEquals(ComponentVerifierExtension.Result.Status.OK, result.getStatus()); - } - - @Test - public void testInvalidKeyConfiguration() { - AbstractTwitterComponent component = context().getComponent(getComponentScheme(), AbstractTwitterComponent.class); - ComponentVerifierExtension verifier = component.getVerifier(); - - Map<String, Object> parameters = getParameters(); - parameters.put("consumerKey", "invalid"); - - ComponentVerifierExtension.Result result = verifier.verify(ComponentVerifierExtension.Scope.CONNECTIVITY, parameters); - - assertEquals(ComponentVerifierExtension.Result.Status.ERROR, result.getStatus()); - assertEquals(1, result.getErrors().size()); - assertEquals(ComponentVerifierExtension.VerificationError.StandardCode.AUTHENTICATION, - result.getErrors().get(0).getCode()); - assertEquals(401, result.getErrors().get(0).getDetails() - .get(ComponentVerifierExtension.VerificationError.asAttribute("twitter_status_code"))); - assertEquals(32, result.getErrors().get(0).getDetails() - .get(ComponentVerifierExtension.VerificationError.asAttribute("twitter_error_code"))); - } - - @Test - public void testInvalidTokenConfiguration() { - AbstractTwitterComponent component = context().getComponent(getComponentScheme(), AbstractTwitterComponent.class); - ComponentVerifierExtension verifier = component.getVerifier(); - - Map<String, Object> parameters = getParameters(); - parameters.put("accessToken", "invalid"); - - ComponentVerifierExtension.Result result = verifier.verify(ComponentVerifierExtension.Scope.CONNECTIVITY, parameters); - - assertEquals(ComponentVerifierExtension.Result.Status.ERROR, result.getStatus()); - assertEquals(1, result.getErrors().size()); - assertEquals(ComponentVerifierExtension.VerificationError.StandardCode.AUTHENTICATION, - result.getErrors().get(0).getCode()); - assertEquals(401, result.getErrors().get(0).getDetails() - .get(ComponentVerifierExtension.VerificationError.asAttribute("twitter_status_code"))); - assertEquals(89, result.getErrors().get(0).getDetails() - .get(ComponentVerifierExtension.VerificationError.asAttribute("twitter_error_code"))); - assertEquals(1, result.getErrors().get(0).getParameterKeys().size()); - assertEquals("accessToken", result.getErrors().get(0).getParameterKeys().iterator().next()); - } -} diff --git a/components/camel-twitter/src/test/java/org/apache/camel/component/twitter/UriConfigurationTest.java b/components/camel-twitter/src/test/java/org/apache/camel/component/twitter/UriConfigurationTest.java index ac44c97bfd5..c541f89ad2a 100644 --- a/components/camel-twitter/src/test/java/org/apache/camel/component/twitter/UriConfigurationTest.java +++ b/components/camel-twitter/src/test/java/org/apache/camel/component/twitter/UriConfigurationTest.java @@ -98,10 +98,6 @@ public class UriConfigurationTest { assertTrue(endpoint instanceof TwitterTimelineEndpoint, "Endpoint not a TwitterTimelineEndpoint: " + endpoint); timelineEndpoint = (TwitterTimelineEndpoint) endpoint; assertEquals(TimelineType.MENTIONS, timelineEndpoint.getTimelineType()); - endpoint = context.getEndpoint("twitter-timeline:retweetsofme"); - assertTrue(endpoint instanceof TwitterTimelineEndpoint, "Endpoint not a TwitterTimelineEndpoint: " + endpoint); - timelineEndpoint = (TwitterTimelineEndpoint) endpoint; - assertEquals(TimelineType.RETWEETSOFME, timelineEndpoint.getTimelineType()); endpoint = context.getEndpoint("twitter-timeline:user"); assertTrue(endpoint instanceof TwitterTimelineEndpoint, "Endpoint not a TwitterTimelineEndpoint: " + endpoint); timelineEndpoint = (TwitterTimelineEndpoint) endpoint; diff --git a/components/camel-twitter/src/test/java/org/apache/camel/component/twitter/UserProducerInOutIT.java b/components/camel-twitter/src/test/java/org/apache/camel/component/twitter/UserProducerInOutIT.java index 058f6d89df5..c078182da36 100644 --- a/components/camel-twitter/src/test/java/org/apache/camel/component/twitter/UserProducerInOutIT.java +++ b/components/camel-twitter/src/test/java/org/apache/camel/component/twitter/UserProducerInOutIT.java @@ -29,7 +29,7 @@ import org.junit.jupiter.api.Test; import org.junit.jupiter.api.condition.EnabledIfSystemProperty; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import twitter4j.Status; +import twitter4j.v1.Status; import static org.hamcrest.MatcherAssert.assertThat; import static org.hamcrest.core.Is.is; diff --git a/components/camel-twitter/src/test/java/org/apache/camel/component/twitter/directmessage/TwitterDirectmessageComponentVerifierExtensionIT.java b/components/camel-twitter/src/test/java/org/apache/camel/component/twitter/directmessage/TwitterDirectmessageComponentVerifierExtensionIT.java deleted file mode 100644 index fdb78f7e30f..00000000000 --- a/components/camel-twitter/src/test/java/org/apache/camel/component/twitter/directmessage/TwitterDirectmessageComponentVerifierExtensionIT.java +++ /dev/null @@ -1,29 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF 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 org.apache.camel.component.twitter.directmessage; - -import org.apache.camel.component.twitter.AbstractComponentVerifierExtensionIT; -import org.junit.jupiter.api.condition.EnabledIfSystemProperty; - -@EnabledIfSystemProperty(named = "enable.twitter.itests", matches = "true", - disabledReason = "Likely has API limits, so it's better to keep it off by default") -public class TwitterDirectmessageComponentVerifierExtensionIT extends AbstractComponentVerifierExtensionIT { - @Override - protected String getComponentScheme() { - return "twitter-directmessage"; - } -} diff --git a/components/camel-twitter/src/test/java/org/apache/camel/component/twitter/directmessage/TwitterDirectmessageComponentVerifierIT.java b/components/camel-twitter/src/test/java/org/apache/camel/component/twitter/directmessage/TwitterDirectmessageComponentVerifierIT.java deleted file mode 100644 index f3f42a83309..00000000000 --- a/components/camel-twitter/src/test/java/org/apache/camel/component/twitter/directmessage/TwitterDirectmessageComponentVerifierIT.java +++ /dev/null @@ -1,29 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF 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 org.apache.camel.component.twitter.directmessage; - -import org.apache.camel.component.twitter.AbstractComponentVerifierIT; -import org.junit.jupiter.api.condition.EnabledIfSystemProperty; - -@EnabledIfSystemProperty(named = "enable.twitter.itests", matches = "true", - disabledReason = "Likely has API limits, so it's better to keep it off by default") -public class TwitterDirectmessageComponentVerifierIT extends AbstractComponentVerifierIT { - @Override - protected String getComponentScheme() { - return "twitter-directmessage"; - } -} diff --git a/components/camel-twitter/src/test/java/org/apache/camel/component/twitter/search/TwitterSearchComponentVerifierExtensionIT.java b/components/camel-twitter/src/test/java/org/apache/camel/component/twitter/search/TwitterSearchComponentVerifierExtensionIT.java deleted file mode 100644 index f5d1f8a33d2..00000000000 --- a/components/camel-twitter/src/test/java/org/apache/camel/component/twitter/search/TwitterSearchComponentVerifierExtensionIT.java +++ /dev/null @@ -1,84 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF 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 org.apache.camel.component.twitter.search; - -import java.util.Collections; -import java.util.LinkedList; -import java.util.List; - -import org.apache.camel.Component; -import org.apache.camel.component.extension.ComponentVerifierExtension; -import org.apache.camel.component.twitter.AbstractComponentVerifierExtensionIT; -import org.junit.jupiter.api.Test; -import org.junit.jupiter.api.condition.EnabledIfSystemProperty; - -import static org.junit.jupiter.api.Assertions.assertEquals; -import static org.junit.jupiter.api.Assertions.assertNotNull; -import static org.junit.jupiter.api.Assertions.assertTrue; - -@EnabledIfSystemProperty(named = "enable.twitter.itests", matches = "true", - disabledReason = "Likely has API limits, so it's better to keep it off by default") -public class TwitterSearchComponentVerifierExtensionIT extends AbstractComponentVerifierExtensionIT { - @Override - protected String getComponentScheme() { - return "twitter-search"; - } - - @Test - public void testEmptyConfiguration() { - Component component = context().getComponent(getComponentScheme()); - ComponentVerifierExtension verifier - = component.getExtension(ComponentVerifierExtension.class).orElseThrow(IllegalStateException::new); - - { - // Parameters validation - ComponentVerifierExtension.Result result - = verifier.verify(ComponentVerifierExtension.Scope.PARAMETERS, Collections.emptyMap()); - - assertEquals(ComponentVerifierExtension.Result.Status.ERROR, result.getStatus()); - assertEquals(5, result.getErrors().size()); - - List<String> expected = new LinkedList<>(); - expected.add("keywords"); - expected.add("consumerKey"); - expected.add("consumerSecret"); - expected.add("accessToken"); - expected.add("accessTokenSecret"); - - for (ComponentVerifierExtension.VerificationError error : result.getErrors()) { - expected.removeAll(error.getParameterKeys()); - } - - assertTrue(expected.isEmpty(), "Missing expected params: " + expected.toString()); - } - - { - // Connectivity validation - ComponentVerifierExtension.Result result - = verifier.verify(ComponentVerifierExtension.Scope.CONNECTIVITY, Collections.emptyMap()); - - assertEquals(ComponentVerifierExtension.Result.Status.ERROR, result.getStatus()); - assertEquals(1, result.getErrors().size()); - assertEquals(ComponentVerifierExtension.VerificationError.StandardCode.EXCEPTION, - result.getErrors().get(0).getCode()); - assertNotNull(result.getErrors().get(0).getDetails() - .get(ComponentVerifierExtension.VerificationError.ExceptionAttribute.EXCEPTION_INSTANCE)); - assertTrue(result.getErrors().get(0).getDetails().get( - ComponentVerifierExtension.VerificationError.ExceptionAttribute.EXCEPTION_INSTANCE) instanceof IllegalArgumentException); - } - } -} diff --git a/components/camel-twitter/src/test/java/org/apache/camel/component/twitter/search/TwitterSearchComponentVerifierIT.java b/components/camel-twitter/src/test/java/org/apache/camel/component/twitter/search/TwitterSearchComponentVerifierIT.java deleted file mode 100644 index b50c3f43f72..00000000000 --- a/components/camel-twitter/src/test/java/org/apache/camel/component/twitter/search/TwitterSearchComponentVerifierIT.java +++ /dev/null @@ -1,83 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF 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 org.apache.camel.component.twitter.search; - -import java.util.Collections; -import java.util.LinkedList; -import java.util.List; - -import org.apache.camel.component.extension.ComponentVerifierExtension; -import org.apache.camel.component.twitter.AbstractComponentVerifierIT; -import org.apache.camel.component.twitter.AbstractTwitterComponent; -import org.junit.jupiter.api.Test; -import org.junit.jupiter.api.condition.EnabledIfSystemProperty; - -import static org.junit.jupiter.api.Assertions.assertEquals; -import static org.junit.jupiter.api.Assertions.assertNotNull; -import static org.junit.jupiter.api.Assertions.assertTrue; - -@EnabledIfSystemProperty(named = "enable.twitter.itests", matches = "true", - disabledReason = "Likely has API limits, so it's better to keep it off by default") -public class TwitterSearchComponentVerifierIT extends AbstractComponentVerifierIT { - @Override - protected String getComponentScheme() { - return "twitter-search"; - } - - @Test - public void testEmptyConfiguration() { - AbstractTwitterComponent component = context().getComponent(getComponentScheme(), AbstractTwitterComponent.class); - ComponentVerifierExtension verifier = component.getVerifier(); - - { - // Parameters validation - ComponentVerifierExtension.Result result - = verifier.verify(ComponentVerifierExtension.Scope.PARAMETERS, Collections.emptyMap()); - - assertEquals(ComponentVerifierExtension.Result.Status.ERROR, result.getStatus()); - assertEquals(5, result.getErrors().size()); - - List<String> expected = new LinkedList<>(); - expected.add("keywords"); - expected.add("consumerKey"); - expected.add("consumerSecret"); - expected.add("accessToken"); - expected.add("accessTokenSecret"); - - for (ComponentVerifierExtension.VerificationError error : result.getErrors()) { - expected.removeAll(error.getParameterKeys()); - } - - assertTrue(expected.isEmpty(), "Missing expected params: " + expected.toString()); - } - - { - // Connectivity validation - ComponentVerifierExtension.Result result - = verifier.verify(ComponentVerifierExtension.Scope.CONNECTIVITY, Collections.emptyMap()); - - assertEquals(ComponentVerifierExtension.Result.Status.ERROR, result.getStatus()); - assertEquals(1, result.getErrors().size()); - assertEquals(ComponentVerifierExtension.VerificationError.StandardCode.EXCEPTION, - result.getErrors().get(0).getCode()); - assertNotNull(result.getErrors().get(0).getDetails() - .get(ComponentVerifierExtension.VerificationError.ExceptionAttribute.EXCEPTION_INSTANCE)); - assertTrue(result.getErrors().get(0).getDetails().get( - ComponentVerifierExtension.VerificationError.ExceptionAttribute.EXCEPTION_INSTANCE) instanceof IllegalArgumentException); - } - } -} diff --git a/components/camel-twitter/src/test/java/org/apache/camel/component/twitter/timeline/TwitterTimelineComponentVerifierExtensionIT.java b/components/camel-twitter/src/test/java/org/apache/camel/component/twitter/timeline/TwitterTimelineComponentVerifierExtensionIT.java deleted file mode 100644 index 55426f0d3a2..00000000000 --- a/components/camel-twitter/src/test/java/org/apache/camel/component/twitter/timeline/TwitterTimelineComponentVerifierExtensionIT.java +++ /dev/null @@ -1,29 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF 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 org.apache.camel.component.twitter.timeline; - -import org.apache.camel.component.twitter.AbstractComponentVerifierExtensionIT; -import org.junit.jupiter.api.condition.EnabledIfSystemProperty; - -@EnabledIfSystemProperty(named = "enable.twitter.itests", matches = "true", - disabledReason = "Likely has API limits, so it's better to keep it off by default") -public class TwitterTimelineComponentVerifierExtensionIT extends AbstractComponentVerifierExtensionIT { - @Override - protected String getComponentScheme() { - return "twitter-timeline"; - } -} diff --git a/components/camel-twitter/src/test/java/org/apache/camel/component/twitter/timeline/TwitterTimelineComponentVerifierIT.java b/components/camel-twitter/src/test/java/org/apache/camel/component/twitter/timeline/TwitterTimelineComponentVerifierIT.java deleted file mode 100644 index 699b1fa86fb..00000000000 --- a/components/camel-twitter/src/test/java/org/apache/camel/component/twitter/timeline/TwitterTimelineComponentVerifierIT.java +++ /dev/null @@ -1,29 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF 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 org.apache.camel.component.twitter.timeline; - -import org.apache.camel.component.twitter.AbstractComponentVerifierIT; -import org.junit.jupiter.api.condition.EnabledIfSystemProperty; - -@EnabledIfSystemProperty(named = "enable.twitter.itests", matches = "true", - disabledReason = "Likely has API limits, so it's better to keep it off by default") -public class TwitterTimelineComponentVerifierIT extends AbstractComponentVerifierIT { - @Override - protected String getComponentScheme() { - return "twitter-timeline"; - } -} diff --git a/parent/pom.xml b/parent/pom.xml index 2dd8e5583a0..aeb44e0618a 100644 --- a/parent/pom.xml +++ b/parent/pom.xml @@ -461,7 +461,7 @@ <testcontainers-version>1.17.6</testcontainers-version> <tika-version>2.8.0</tika-version> <twilio-version>9.6.2</twilio-version> - <twitter4j-version>4.0.7</twitter4j-version> + <twitter4j-version>4.1.2</twitter4j-version> <undertow-version>2.3.7.Final</undertow-version> <univocity-parsers-version>2.9.1</univocity-parsers-version> <validation-api-version>2.0.1.Final</validation-api-version>