This is an automated email from the ASF dual-hosted git repository.

pvillard31 pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/nifi.git


The following commit(s) were added to refs/heads/main by this push:
     new b6720a9b90b NIFI-16115 Removed deprecated ConsumeTwitter Processor 
(#11431)
b6720a9b90b is described below

commit b6720a9b90bdcf29a8dfe3e16fd59eccfe2d9320
Author: David Handermann <[email protected]>
AuthorDate: Wed Jul 15 03:27:16 2026 -0500

    NIFI-16115 Removed deprecated ConsumeTwitter Processor (#11431)
    
    - Removed social-media-bundle and NAR
---
 nifi-assembly/pom.xml                              |   6 -
 nifi-code-coverage/pom.xml                         |   5 -
 .../nifi-social-media-nar/pom.xml                  |  41 ---
 .../src/main/resources/META-INF/NOTICE             |  55 ---
 .../nifi-twitter-processors/pom.xml                |  55 ---
 .../nifi/processors/twitter/ConsumeTwitter.java    | 379 ---------------------
 .../nifi/processors/twitter/StreamEndpoint.java    |  38 ---
 .../processors/twitter/TweetStreamService.java     | 252 --------------
 .../services/org.apache.nifi.processor.Processor   |  15 -
 .../processors/twitter/TestConsumeTwitter.java     | 119 -------
 .../nifi-social-media-bundle/pom.xml               |  31 --
 nifi-extension-bundles/pom.xml                     |   1 -
 12 files changed, 997 deletions(-)

diff --git a/nifi-assembly/pom.xml b/nifi-assembly/pom.xml
index 89c2a76d611..7b8bb2ee447 100644
--- a/nifi-assembly/pom.xml
+++ b/nifi-assembly/pom.xml
@@ -393,12 +393,6 @@ language governing permissions and limitations under the 
License. -->
             <version>2.11.0-SNAPSHOT</version>
             <type>nar</type>
         </dependency>
-        <dependency>
-            <groupId>org.apache.nifi</groupId>
-            <artifactId>nifi-social-media-nar</artifactId>
-            <version>2.11.0-SNAPSHOT</version>
-            <type>nar</type>
-        </dependency>
         <dependency>
             <groupId>org.apache.nifi</groupId>
             <artifactId>nifi-enrich-nar</artifactId>
diff --git a/nifi-code-coverage/pom.xml b/nifi-code-coverage/pom.xml
index 8f260444d02..702f660f282 100644
--- a/nifi-code-coverage/pom.xml
+++ b/nifi-code-coverage/pom.xml
@@ -1200,11 +1200,6 @@
             <artifactId>nifi-snowflake-services-api</artifactId>
             <version>2.11.0-SNAPSHOT</version>
         </dependency>
-        <dependency>
-            <groupId>org.apache.nifi</groupId>
-            <artifactId>nifi-twitter-processors</artifactId>
-            <version>2.11.0-SNAPSHOT</version>
-        </dependency>
         <dependency>
             <groupId>org.apache.nifi</groupId>
             <artifactId>nifi-splunk-processors</artifactId>
diff --git 
a/nifi-extension-bundles/nifi-social-media-bundle/nifi-social-media-nar/pom.xml 
b/nifi-extension-bundles/nifi-social-media-bundle/nifi-social-media-nar/pom.xml
deleted file mode 100644
index c2292c5d01c..00000000000
--- 
a/nifi-extension-bundles/nifi-social-media-bundle/nifi-social-media-nar/pom.xml
+++ /dev/null
@@ -1,41 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-  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.
--->
-<project xmlns="http://maven.apache.org/POM/4.0.0"; 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"; 
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 
https://maven.apache.org/xsd/maven-4.0.0.xsd";>
-    <modelVersion>4.0.0</modelVersion>
-
-    <parent>
-        <groupId>org.apache.nifi</groupId>
-        <artifactId>nifi-social-media-bundle</artifactId>
-        <version>2.11.0-SNAPSHOT</version>
-    </parent>
-
-    <artifactId>nifi-social-media-nar</artifactId>
-    <packaging>nar</packaging>
-
-    <dependencies>
-        <dependency>
-            <groupId>org.apache.nifi</groupId>
-            <artifactId>nifi-twitter-processors</artifactId>
-            <version>2.11.0-SNAPSHOT</version>
-        </dependency>
-        <dependency>
-            <groupId>org.apache.nifi</groupId>
-            <artifactId>nifi-standard-shared-nar</artifactId>
-            <version>2.11.0-SNAPSHOT</version>
-            <type>nar</type>
-        </dependency>
-    </dependencies>
-</project>
diff --git 
a/nifi-extension-bundles/nifi-social-media-bundle/nifi-social-media-nar/src/main/resources/META-INF/NOTICE
 
b/nifi-extension-bundles/nifi-social-media-bundle/nifi-social-media-nar/src/main/resources/META-INF/NOTICE
deleted file mode 100644
index f525d3995bf..00000000000
--- 
a/nifi-extension-bundles/nifi-social-media-bundle/nifi-social-media-nar/src/main/resources/META-INF/NOTICE
+++ /dev/null
@@ -1,55 +0,0 @@
-nifi-social-media-nar
-Copyright 2015-2026 The Apache Software Foundation
-
-This product includes software developed at
-The Apache Software Foundation (http://www.apache.org/).
-
-******************
-Apache Software License v2
-******************
-
-The following binary components are provided under the Apache Software License 
v2
-
-  (ASLv2) Apache Commons Lang
-    The following NOTICE information applies:
-      Apache Commons Lang
-      Copyright 2001-2014 The Apache Software Foundation
-
-      This product includes software from the Spring Framework,
-      under the Apache License 2.0 (see: StringUtils.containsWhitespace())
-
-  (ASLv2) Apache Commons Codec
-    The following NOTICE information applies:
-      Apache Commons Codec
-      Copyright 2002-2014 The Apache Software Foundation
-
-      src/test/org/apache/commons/codec/language/DoubleMetaphoneTest.java
-      contains test data from http://aspell.net/test/orig/batch0.tab.
-      Copyright (C) 2002 Kevin Atkinson ([email protected])
-
-      
===============================================================================
-
-      The content of package org.apache.commons.codec.language.bm has been 
translated
-      from the original php source code available at 
http://stevemorse.org/phoneticinfo.htm
-      with permission from the original authors.
-      Original source copyright:
-      Copyright (c) 2008 Alexander Beider & Stephen P. Morse.
-
-  (ASLv2) JOAuth
-    The following NOTICE information applies:
-      JOAuth
-      Copyright 2010-2013 Twitter, Inc
-
-  (ASLv2) Hosebird Client
-    The following NOTICE information applies:
-      Hosebird Client (hbc)
-      Copyright 2013 Twitter, Inc.
-
-************************
-The MIT License
-************************
-
-   (MIT) ScribeJava OAuth Library
-     The following NOTICE information applies:
-       ScribeJava OAuth Library
-       Copyright (c) 2010 Pablo Fernandez
diff --git 
a/nifi-extension-bundles/nifi-social-media-bundle/nifi-twitter-processors/pom.xml
 
b/nifi-extension-bundles/nifi-social-media-bundle/nifi-twitter-processors/pom.xml
deleted file mode 100644
index b4676739276..00000000000
--- 
a/nifi-extension-bundles/nifi-social-media-bundle/nifi-twitter-processors/pom.xml
+++ /dev/null
@@ -1,55 +0,0 @@
-<?xml version="1.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.
--->
-<project xmlns="http://maven.apache.org/POM/4.0.0"; 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"; 
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 
https://maven.apache.org/xsd/maven-4.0.0.xsd";>
-    <modelVersion>4.0.0</modelVersion>
-
-    <parent>
-        <groupId>org.apache.nifi</groupId>
-        <artifactId>nifi-social-media-bundle</artifactId>
-        <version>2.11.0-SNAPSHOT</version>
-    </parent>
-
-    <artifactId>nifi-twitter-processors</artifactId>
-    <packaging>jar</packaging>
-
-    <dependencies>
-
-        <dependency>
-            <groupId>org.apache.nifi</groupId>
-            <artifactId>nifi-utils</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>com.twitter</groupId>
-            <artifactId>twitter-api-java-sdk</artifactId>
-            <version>2.0.3</version>
-            <exclusions>
-                <exclusion>
-                    <groupId>org.apache.oltu.oauth2</groupId>
-                    <artifactId>org.apache.oltu.oauth2.client</artifactId>
-                </exclusion>
-                <exclusion>
-                    <groupId>com.twitter</groupId>
-                    <artifactId>joauth</artifactId>
-                </exclusion>
-            </exclusions>
-        </dependency>
-        <dependency>
-            <groupId>com.squareup.okhttp3</groupId>
-            <artifactId>mockwebserver3</artifactId>
-            <scope>test</scope>
-        </dependency>
-    </dependencies>
-</project>
diff --git 
a/nifi-extension-bundles/nifi-social-media-bundle/nifi-twitter-processors/src/main/java/org/apache/nifi/processors/twitter/ConsumeTwitter.java
 
b/nifi-extension-bundles/nifi-social-media-bundle/nifi-twitter-processors/src/main/java/org/apache/nifi/processors/twitter/ConsumeTwitter.java
deleted file mode 100644
index cb6688fa525..00000000000
--- 
a/nifi-extension-bundles/nifi-social-media-bundle/nifi-twitter-processors/src/main/java/org/apache/nifi/processors/twitter/ConsumeTwitter.java
+++ /dev/null
@@ -1,379 +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.nifi.processors.twitter;
-
-import org.apache.nifi.annotation.behavior.InputRequirement;
-import org.apache.nifi.annotation.behavior.InputRequirement.Requirement;
-import org.apache.nifi.annotation.behavior.PrimaryNodeOnly;
-import org.apache.nifi.annotation.behavior.SupportsBatching;
-import org.apache.nifi.annotation.behavior.WritesAttribute;
-import org.apache.nifi.annotation.behavior.WritesAttributes;
-import org.apache.nifi.annotation.documentation.CapabilityDescription;
-import org.apache.nifi.annotation.documentation.DeprecationNotice;
-import org.apache.nifi.annotation.documentation.Tags;
-import org.apache.nifi.annotation.lifecycle.OnScheduled;
-import org.apache.nifi.annotation.lifecycle.OnStopped;
-import org.apache.nifi.annotation.notification.OnPrimaryNodeStateChange;
-import org.apache.nifi.annotation.notification.PrimaryNodeState;
-import org.apache.nifi.components.AllowableValue;
-import org.apache.nifi.components.PropertyDescriptor;
-import org.apache.nifi.flowfile.FlowFile;
-import org.apache.nifi.flowfile.attributes.CoreAttributes;
-import org.apache.nifi.migration.PropertyConfiguration;
-import org.apache.nifi.processor.AbstractProcessor;
-import org.apache.nifi.processor.ProcessContext;
-import org.apache.nifi.processor.ProcessSession;
-import org.apache.nifi.processor.Relationship;
-import org.apache.nifi.processor.exception.ProcessException;
-import org.apache.nifi.processor.util.StandardValidators;
-
-import java.nio.charset.StandardCharsets;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-import java.util.UUID;
-import java.util.concurrent.BlockingQueue;
-import java.util.concurrent.LinkedBlockingQueue;
-import java.util.concurrent.atomic.AtomicBoolean;
-import java.util.concurrent.atomic.AtomicInteger;
-
-@PrimaryNodeOnly
-@SupportsBatching
-@InputRequirement(Requirement.INPUT_FORBIDDEN)
-@Tags({"twitter", "tweets", "social media", "status", "json"})
-@CapabilityDescription("Streams tweets from Twitter's streaming API v2. The 
stream provides a sample stream or a search "
-    + "stream based on previously uploaded rules. This processor also provides 
a pass through for certain fields of the "
-    + "tweet to be returned as part of the response. See "
-    + 
"https://developer.twitter.com/en/docs/twitter-api/data-dictionary/introduction 
for more information regarding the "
-    + "Tweet object model.")
-@WritesAttributes({
-        @WritesAttribute(attribute = "mime.type", description = "The MIME Type 
set to application/json"),
-        @WritesAttribute(attribute = "tweets", description = "The number of 
Tweets in the FlowFile"),
-})
-@DeprecationNotice(reason = "NIFI-15882 The twitter-api-java-sdk is no longer 
maintained")
-public class ConsumeTwitter extends AbstractProcessor {
-
-    static final AllowableValue ENDPOINT_SAMPLE = new 
AllowableValue(StreamEndpoint.SAMPLE_ENDPOINT.getEndpointName(),
-            "Sample Stream",
-            "Streams about one percent of all Tweets. " +
-                    
"https://developer.twitter.com/en/docs/twitter-api/tweets/volume-streams/api-reference/get-tweets-sample-stream";);
-    static final AllowableValue ENDPOINT_SEARCH = new 
AllowableValue(StreamEndpoint.SEARCH_ENDPOINT.getEndpointName(),
-            "Search Stream",
-            "The search stream produces Tweets that match filtering rules 
configured on Twitter services. " +
-                    "At least one well-formed filtering rule must be 
configured. " +
-                    
"https://developer.twitter.com/en/docs/twitter-api/tweets/filtered-stream/api-reference/get-tweets-search-stream";);
-
-    public static final PropertyDescriptor ENDPOINT = new 
PropertyDescriptor.Builder()
-            .name("Stream Endpoint")
-            .description("The source from which the processor will consume 
Tweets.")
-            .required(true)
-            .allowableValues(ENDPOINT_SAMPLE, ENDPOINT_SEARCH)
-            .defaultValue(ENDPOINT_SAMPLE.getValue())
-            .build();
-    public static final PropertyDescriptor BASE_PATH = new 
PropertyDescriptor.Builder()
-            .name("Base Path")
-            .description("The base path that the processor will use for making 
HTTP requests. " +
-                    "The default value should be sufficient for most use 
cases.")
-            .required(true)
-            .addValidator(StandardValidators.NON_EMPTY_VALIDATOR)
-            .defaultValue("https://api.twitter.com";)
-            .build();
-    public static final PropertyDescriptor BEARER_TOKEN = new 
PropertyDescriptor.Builder()
-            .name("Bearer Token")
-            .description("The Bearer Token provided by Twitter.")
-            .required(true)
-            .sensitive(true)
-            .addValidator(StandardValidators.NON_EMPTY_VALIDATOR)
-            .build();
-    public static final PropertyDescriptor QUEUE_SIZE = new 
PropertyDescriptor.Builder()
-            .name("Queue Size")
-            .description("Maximum size of internal queue for streamed 
messages")
-            .required(true)
-            .addValidator(StandardValidators.POSITIVE_INTEGER_VALIDATOR)
-            .defaultValue("10000")
-            .build();
-    public static final PropertyDescriptor BATCH_SIZE = new 
PropertyDescriptor.Builder()
-            .name("Batch Size")
-            .description("The maximum size of the number of Tweets to be 
written to a single FlowFile. " +
-                    "Will write fewer Tweets based on the number available in 
the queue at the time of processor invocation.")
-            .required(true)
-            .addValidator(StandardValidators.POSITIVE_INTEGER_VALIDATOR)
-            .defaultValue("1000")
-            .build();
-    public static final PropertyDescriptor BACKOFF_ATTEMPTS = new 
PropertyDescriptor.Builder()
-            .name("Backoff Attempts")
-            .description("The number of reconnection tries the processor will 
attempt in the event of " +
-                    "a disconnection of the stream for any reason, before 
throwing an exception. To start a stream after " +
-                    "this exception occur and the connection is fixed, please 
stop and restart the processor. If the value" +
-                    "of this property is 0, then backoff will never occur and 
the processor will always need to be restarted" +
-                    "if the stream fails.")
-            .required(true)
-            .addValidator(StandardValidators.NON_NEGATIVE_INTEGER_VALIDATOR)
-            .defaultValue("5")
-            .build();
-    public static final PropertyDescriptor BACKOFF_TIME = new 
PropertyDescriptor.Builder()
-            .name("Backoff Time")
-            .description("The duration to backoff before requesting a new 
stream if" +
-                    "the current one fails for any reason. Will increase by 
factor of 2 every time a restart fails")
-            .required(true)
-            .addValidator(StandardValidators.TIME_PERIOD_VALIDATOR)
-            .defaultValue("1 mins")
-            .build();
-    public static final PropertyDescriptor MAXIMUM_BACKOFF_TIME = new 
PropertyDescriptor.Builder()
-            .name("Maximum Backoff Time")
-            .description("The maximum duration to backoff to start attempting 
a new stream." +
-                    "It is recommended that this number be much higher than 
the 'Backoff Time' property")
-            .required(true)
-            .addValidator(StandardValidators.TIME_PERIOD_VALIDATOR)
-            .defaultValue("5 mins")
-            .build();
-    public static final PropertyDescriptor CONNECT_TIMEOUT = new 
PropertyDescriptor.Builder()
-            .name("Connect Timeout")
-            .description("The maximum time in which client should establish a 
connection with the " +
-                    "Twitter API before a time out. Setting the value to 0 
disables connection timeouts.")
-            .required(true)
-            .addValidator(StandardValidators.TIME_PERIOD_VALIDATOR)
-            .defaultValue("10 secs")
-            .build();
-    public static final PropertyDescriptor READ_TIMEOUT = new 
PropertyDescriptor.Builder()
-            .name("Read Timeout")
-            .description("The maximum time of inactivity between receiving 
tweets from Twitter through " +
-                    "the API before a timeout. Setting the value to 0 disables 
read timeouts.")
-            .required(true)
-            .addValidator(StandardValidators.TIME_PERIOD_VALIDATOR)
-            .defaultValue("10 secs")
-            .build();
-    public static final PropertyDescriptor BACKFILL_MINUTES = new 
PropertyDescriptor.Builder()
-            .name("Backfill Minutes")
-            .description("The number of minutes (up to 5 minutes) of streaming 
data to be requested after a " +
-                    "disconnect. Only available for project with academic 
research access. See " +
-                    
"https://developer.twitter.com/en/docs/twitter-api/tweets/filtered-stream/integrate/";
 +
-                    "recovery-and-redundancy-features")
-            .required(true)
-            .defaultValue("0")
-            .addValidator(StandardValidators.NON_NEGATIVE_INTEGER_VALIDATOR)
-            .build();
-    public static final PropertyDescriptor TWEET_FIELDS = new 
PropertyDescriptor.Builder()
-            .name("Tweet Fields")
-            .description("A comma-separated list of tweet fields to be 
returned as part of the tweet. Refer to " +
-                    
"https://developer.twitter.com/en/docs/twitter-api/data-dictionary/object-model/tweet
 " +
-                    "for proper usage. Possible field values include: " +
-                    "attachments, author_id, context_annotations, 
conversation_id, created_at, entities, geo, id, " +
-                    "in_reply_to_user_id, lang, non_public_metrics, 
organic_metrics, possibly_sensitive, promoted_metrics, " +
-                    "public_metrics, referenced_tweets, reply_settings, 
source, text, withheld")
-            .required(false)
-            .addValidator(StandardValidators.NON_EMPTY_VALIDATOR)
-            .build();
-    public static final PropertyDescriptor USER_FIELDS = new 
PropertyDescriptor.Builder()
-            .name("User Fields")
-            .description("A comma-separated list of user fields to be returned 
as part of the tweet. Refer to " +
-                    
"https://developer.twitter.com/en/docs/twitter-api/data-dictionary/object-model/user
 " +
-                    "for proper usage. Possible field values include: " +
-                    "created_at, description, entities, id, location, name, 
pinned_tweet_id, profile_image_url, " +
-                    "protected, public_metrics, url, username, verified, 
withheld")
-            .required(false)
-            .addValidator(StandardValidators.NON_EMPTY_VALIDATOR)
-            .build();
-    public static final PropertyDescriptor MEDIA_FIELDS = new 
PropertyDescriptor.Builder()
-            .name("Media Fields")
-            .description("A comma-separated list of media fields to be 
returned as part of the tweet. Refer to " +
-                    
"https://developer.twitter.com/en/docs/twitter-api/data-dictionary/object-model/media
 " +
-                    "for proper usage. Possible field values include: " +
-                    "alt_text, duration_ms, height, media_key, 
non_public_metrics, organic_metrics, preview_image_url, " +
-                    "promoted_metrics, public_metrics, type, url, width")
-            .required(false)
-            .addValidator(StandardValidators.NON_EMPTY_VALIDATOR)
-            .build();
-    public static final PropertyDescriptor POLL_FIELDS = new 
PropertyDescriptor.Builder()
-            .name("Poll Fields")
-            .description("A comma-separated list of poll fields to be returned 
as part of the tweet. Refer to " +
-                    
"https://developer.twitter.com/en/docs/twitter-api/data-dictionary/object-model/poll
 " +
-                    "for proper usage. Possible field values include: " +
-                    "duration_minutes, end_datetime, id, options, 
voting_status")
-            .required(false)
-            .addValidator(StandardValidators.NON_EMPTY_VALIDATOR)
-            .build();
-    public static final PropertyDescriptor PLACE_FIELDS = new 
PropertyDescriptor.Builder()
-            .name("Place Fields")
-            .description("A comma-separated list of place fields to be 
returned as part of the tweet. Refer to " +
-                    
"https://developer.twitter.com/en/docs/twitter-api/data-dictionary/object-model/place
 " +
-                    "for proper usage. Possible field values include: " +
-                    "contained_within, country, country_code, full_name, geo, 
id, name, place_type")
-            .required(false)
-            .addValidator(StandardValidators.NON_EMPTY_VALIDATOR)
-            .build();
-    public static final PropertyDescriptor EXPANSIONS = new 
PropertyDescriptor.Builder()
-            .name("Expansions")
-            .description("A comma-separated list of expansions for objects in 
the returned tweet. See " +
-                    
"https://developer.twitter.com/en/docs/twitter-api/expansions " +
-                    "for proper usage. Possible field values include: " +
-                    "author_id, referenced_tweets.id, 
referenced_tweets.id.author_id, entities.mentions.username, " +
-                    "attachments.poll_ids, attachments.media_keys 
,in_reply_to_user_id, geo.place_id")
-            .required(false)
-            .addValidator(StandardValidators.NON_EMPTY_VALIDATOR)
-            .build();
-
-    public static final Relationship REL_SUCCESS = new Relationship.Builder()
-            .name("success")
-            .description("FlowFiles containing an array of one or more Tweets")
-            .build();
-
-    private static final List<PropertyDescriptor> DESCRIPTORS = List.of(
-        ENDPOINT,
-        BASE_PATH,
-        BEARER_TOKEN,
-        QUEUE_SIZE,
-        BATCH_SIZE,
-        BACKOFF_ATTEMPTS,
-        BACKOFF_TIME,
-        MAXIMUM_BACKOFF_TIME,
-        CONNECT_TIMEOUT,
-        READ_TIMEOUT,
-        BACKFILL_MINUTES,
-        TWEET_FIELDS,
-        USER_FIELDS,
-        MEDIA_FIELDS,
-        POLL_FIELDS,
-        PLACE_FIELDS,
-        EXPANSIONS
-    );
-
-    private static final Set<Relationship> RELATIONSHIPS = Set.of(REL_SUCCESS);
-
-    private TweetStreamService tweetStreamService;
-
-    private volatile BlockingQueue<String> messageQueue;
-
-    private final AtomicBoolean streamStarted = new AtomicBoolean(false);
-
-    @Override
-    public Set<Relationship> getRelationships() {
-        return RELATIONSHIPS;
-    }
-
-    @Override
-    public final List<PropertyDescriptor> getSupportedPropertyDescriptors() {
-        return DESCRIPTORS;
-    }
-
-    @OnScheduled
-    public void onScheduled(final ProcessContext context) {
-        messageQueue = new 
LinkedBlockingQueue<>(context.getProperty(QUEUE_SIZE).asInteger());
-        streamStarted.set(false);
-    }
-
-    @Override
-    public void onTrigger(ProcessContext context, ProcessSession session) 
throws ProcessException {
-        startTweetStreamService(context);
-
-        final String firstTweet = messageQueue.poll();
-        if (firstTweet == null) {
-            context.yield();
-            return;
-        }
-
-        final AtomicInteger tweetCount = new AtomicInteger(1);
-        FlowFile flowFile = session.create();
-        flowFile = session.write(flowFile, out -> {
-            final int batchSize = context.getProperty(BATCH_SIZE).asInteger();
-            String tweet = firstTweet;
-            out.write('[');
-            out.write(tweet.getBytes(StandardCharsets.UTF_8));
-            while (tweetCount.get() < batchSize && (tweet = 
messageQueue.poll()) != null) {
-                out.write(',');
-                out.write(tweet.getBytes(StandardCharsets.UTF_8));
-                tweetCount.getAndIncrement();
-            }
-            out.write(']');
-        });
-
-        final Map<String, String> attributes = new HashMap<>();
-        attributes.put(CoreAttributes.MIME_TYPE.key(), "application/json");
-        attributes.put(CoreAttributes.FILENAME.key(), String.format("%s.json", 
UUID.randomUUID()));
-        attributes.put("tweets", Integer.toString(tweetCount.get()));
-        flowFile = session.putAllAttributes(flowFile, attributes);
-
-        session.transfer(flowFile, REL_SUCCESS);
-
-        final String endpointName = context.getProperty(ENDPOINT).getValue();
-        final String transitUri = 
tweetStreamService.getTransitUri(endpointName);
-
-        session.getProvenanceReporter().receive(flowFile, transitUri);
-    }
-
-    @OnPrimaryNodeStateChange
-    public void onPrimaryNodeStateChange(final PrimaryNodeState newState) {
-        if (newState == PrimaryNodeState.PRIMARY_NODE_REVOKED) {
-            stopTweetStreamService();
-        }
-    }
-
-    @OnStopped
-    public void onStopped() {
-        stopTweetStreamService();
-        emptyQueue();
-    }
-
-    @Override
-    public void migrateProperties(PropertyConfiguration config) {
-        config.renameProperty("stream-endpoint", ENDPOINT.getName());
-        config.renameProperty("base-path", BASE_PATH.getName());
-        config.renameProperty("bearer-token", BEARER_TOKEN.getName());
-        config.renameProperty("queue-size", QUEUE_SIZE.getName());
-        config.renameProperty("batch-size", BATCH_SIZE.getName());
-        config.renameProperty("backoff-attempts", BACKOFF_ATTEMPTS.getName());
-        config.renameProperty("backoff-time", BACKOFF_TIME.getName());
-        config.renameProperty("maximum-backoff-time", 
MAXIMUM_BACKOFF_TIME.getName());
-        config.renameProperty("connect-timeout", CONNECT_TIMEOUT.getName());
-        config.renameProperty("read-timeout", READ_TIMEOUT.getName());
-        config.renameProperty("backfill-minutes", BACKFILL_MINUTES.getName());
-        config.renameProperty("tweet-fields", TWEET_FIELDS.getName());
-        config.renameProperty("user-fields", USER_FIELDS.getName());
-        config.renameProperty("media-fields", MEDIA_FIELDS.getName());
-        config.renameProperty("poll-fields", POLL_FIELDS.getName());
-        config.renameProperty("place-fields", PLACE_FIELDS.getName());
-        config.renameProperty("expansions", EXPANSIONS.getName());
-    }
-
-    private void startTweetStreamService(final ProcessContext context) {
-        if (streamStarted.compareAndSet(false, true)) {
-            tweetStreamService = new TweetStreamService(context, messageQueue, 
getLogger());
-            tweetStreamService.start();
-        }
-
-    }
-
-    private void stopTweetStreamService() {
-        if (streamStarted.compareAndSet(true, false)) {
-            if (tweetStreamService != null) {
-                tweetStreamService.stop();
-            }
-            tweetStreamService = null;
-
-            if (!messageQueue.isEmpty()) {
-                getLogger().warn("Stopped consuming stream: unprocessed 
messages [{}]", messageQueue.size());
-            }
-        }
-    }
-
-    private void emptyQueue() {
-        while (!messageQueue.isEmpty()) {
-            messageQueue.poll();
-        }
-    }
-}
diff --git 
a/nifi-extension-bundles/nifi-social-media-bundle/nifi-twitter-processors/src/main/java/org/apache/nifi/processors/twitter/StreamEndpoint.java
 
b/nifi-extension-bundles/nifi-social-media-bundle/nifi-twitter-processors/src/main/java/org/apache/nifi/processors/twitter/StreamEndpoint.java
deleted file mode 100644
index 2b77370f6e2..00000000000
--- 
a/nifi-extension-bundles/nifi-social-media-bundle/nifi-twitter-processors/src/main/java/org/apache/nifi/processors/twitter/StreamEndpoint.java
+++ /dev/null
@@ -1,38 +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.nifi.processors.twitter;
-
-public enum StreamEndpoint {
-    SAMPLE_ENDPOINT("Sample Endpoint", "/2/tweets/sample/stream"),
-    SEARCH_ENDPOINT("Search Endpoint", "/2/tweets/search/stream");
-
-    private String endpointName;
-    private String path;
-
-    StreamEndpoint(final String endpointName, final String path) {
-        this.endpointName = endpointName;
-        this.path = path;
-    }
-
-    public String getEndpointName() {
-        return this.endpointName;
-    }
-
-    public String getPath() {
-        return this.path;
-    }
-}
diff --git 
a/nifi-extension-bundles/nifi-social-media-bundle/nifi-twitter-processors/src/main/java/org/apache/nifi/processors/twitter/TweetStreamService.java
 
b/nifi-extension-bundles/nifi-social-media-bundle/nifi-twitter-processors/src/main/java/org/apache/nifi/processors/twitter/TweetStreamService.java
deleted file mode 100644
index c22455237e4..00000000000
--- 
a/nifi-extension-bundles/nifi-social-media-bundle/nifi-twitter-processors/src/main/java/org/apache/nifi/processors/twitter/TweetStreamService.java
+++ /dev/null
@@ -1,252 +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.nifi.processors.twitter;
-
-import com.twitter.clientlib.ApiClient;
-import com.twitter.clientlib.ApiException;
-import com.twitter.clientlib.TwitterCredentialsBearer;
-import com.twitter.clientlib.api.TwitterApi;
-import org.apache.commons.lang3.concurrent.BasicThreadFactory;
-import org.apache.nifi.components.PropertyDescriptor;
-import org.apache.nifi.logging.ComponentLog;
-import org.apache.nifi.processor.ProcessContext;
-import org.apache.nifi.processor.exception.ProcessException;
-
-import java.io.BufferedReader;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.InputStreamReader;
-import java.nio.charset.StandardCharsets;
-import java.util.HashSet;
-import java.util.Objects;
-import java.util.Set;
-import java.util.concurrent.BlockingQueue;
-import java.util.concurrent.Executors;
-import java.util.concurrent.ScheduledExecutorService;
-import java.util.concurrent.ThreadFactory;
-import java.util.concurrent.TimeUnit;
-
-public class TweetStreamService {
-    private final BlockingQueue<String> queue;
-    private final ComponentLog logger;
-
-    private ScheduledExecutorService executorService;
-    private final ThreadFactory threadFactory;
-
-    private final Set<String> tweetFields;
-    private final Set<String> userFields;
-    private final Set<String> mediaFields;
-    private final Set<String> pollFields;
-    private final Set<String> placeFields;
-    private final Set<String> expansions;
-    private final int backfillMinutes;
-    private final TwitterApi api;
-    private InputStream stream;
-
-    private final int backoffAttempts;
-    private final long backoffTime;
-    private final long maximumBackoff;
-
-    private long backoffMultiplier;
-    private int attemptCounter;
-
-    private final StreamEndpoint endpoint;
-
-    public TweetStreamService(final ProcessContext context, final 
BlockingQueue<String> queue, final ComponentLog logger) {
-        Objects.requireNonNull(context);
-        Objects.requireNonNull(queue);
-        Objects.requireNonNull(logger);
-
-        this.queue = queue;
-        this.logger = logger;
-
-        final String endpointName = 
context.getProperty(ConsumeTwitter.ENDPOINT).getValue();
-        if (ConsumeTwitter.ENDPOINT_SAMPLE.getValue().equals(endpointName)) {
-            this.endpoint = StreamEndpoint.SAMPLE_ENDPOINT;
-        } else {
-            this.endpoint = StreamEndpoint.SEARCH_ENDPOINT;
-        }
-
-        this.tweetFields = parseCommaSeparatedProperties(context, 
ConsumeTwitter.TWEET_FIELDS);
-        this.userFields = parseCommaSeparatedProperties(context, 
ConsumeTwitter.USER_FIELDS);
-        this.mediaFields = parseCommaSeparatedProperties(context, 
ConsumeTwitter.MEDIA_FIELDS);
-        this.pollFields = parseCommaSeparatedProperties(context, 
ConsumeTwitter.POLL_FIELDS);
-        this.placeFields = parseCommaSeparatedProperties(context, 
ConsumeTwitter.PLACE_FIELDS);
-        this.expansions = parseCommaSeparatedProperties(context, 
ConsumeTwitter.EXPANSIONS);
-        this.backfillMinutes = 
context.getProperty(ConsumeTwitter.BACKFILL_MINUTES).asInteger();
-
-        this.backoffMultiplier = 1L;
-        this.backoffAttempts = 
context.getProperty(ConsumeTwitter.BACKOFF_ATTEMPTS).asInteger();
-        this.attemptCounter = 0;
-        this.backoffTime = 
context.getProperty(ConsumeTwitter.BACKOFF_TIME).asTimePeriod(TimeUnit.SECONDS);
-        this.maximumBackoff = 
context.getProperty(ConsumeTwitter.MAXIMUM_BACKOFF_TIME).asTimePeriod(TimeUnit.SECONDS);
-
-        ApiClient client = new ApiClient();
-        final int connectTimeout = 
context.getProperty(ConsumeTwitter.CONNECT_TIMEOUT).asTimePeriod(TimeUnit.MILLISECONDS).intValue();
-        final int readTimeout = 
context.getProperty(ConsumeTwitter.READ_TIMEOUT).asTimePeriod(TimeUnit.MILLISECONDS).intValue();
-        final TwitterCredentialsBearer bearer = new 
TwitterCredentialsBearer(context.getProperty(ConsumeTwitter.BEARER_TOKEN).getValue());
-        client.setConnectTimeout(connectTimeout);
-        client.setReadTimeout(readTimeout);
-        client.setTwitterCredentials(bearer);
-        api = new TwitterApi(client);
-
-        final String basePath = 
context.getProperty(ConsumeTwitter.BASE_PATH).getValue();
-        api.getApiClient().setBasePath(basePath);
-
-        threadFactory = 
BasicThreadFactory.builder().namingPattern(ConsumeTwitter.class.getSimpleName()).build();
-    }
-
-    public String getTransitUri(final String endpoint) {
-        if (endpoint.equals(StreamEndpoint.SAMPLE_ENDPOINT.getEndpointName())) 
{
-            return api.getApiClient().getBasePath() + 
StreamEndpoint.SAMPLE_ENDPOINT.getPath();
-        } else if 
(endpoint.equals(StreamEndpoint.SEARCH_ENDPOINT.getEndpointName())) {
-            return api.getApiClient().getBasePath() + 
StreamEndpoint.SEARCH_ENDPOINT.getPath();
-        } else {
-            logger.warn("Unrecognized endpoint in getTransitUri. Returning 
basePath");
-            return api.getApiClient().getBasePath();
-        }
-    }
-
-    /**
-     * This method would be called when we would like the stream to get 
started. This method will spin off a thread that
-     * will continue to queue tweets on to the given queue passed in the 
constructor. The thread will continue
-     * to run until {@code stop} is called.
-     */
-    public void start() {
-        this.executorService = 
Executors.newSingleThreadScheduledExecutor(threadFactory);
-        executorService.execute(new TweetStreamStarter());
-    }
-
-    /**
-     * This method would be called when we would like the stream to get 
stopped. The stream will be closed and the
-     * executorService will be shut down.
-     */
-    public void stop() {
-        if (stream != null) {
-            try {
-                stream.close();
-            } catch (IOException e) {
-                logger.error("Closing response stream failed", e);
-            }
-        }
-
-        executorService.shutdownNow();
-        executorService = null;
-    }
-
-    private Long calculateBackoffDelay() {
-        long backoff = backoffMultiplier * backoffTime;
-        return Math.min(backoff, maximumBackoff);
-    }
-
-    private void scheduleStartStreamWithBackoff() {
-        // use exponential(by factor of 2) backoff in scheduling the next 
TweetStreamStarter
-        if (attemptCounter >= backoffAttempts) {
-            throw new ProcessException(String.format("Connection failed after 
maximum attempts [%d]", attemptCounter));
-        }
-        attemptCounter += 1;
-        long delay = calculateBackoffDelay();
-        backoffMultiplier *= 2;
-        logger.info("Scheduling new stream connection after delay [{} s]", 
delay);
-        executorService.schedule(new TweetStreamStarter(), delay, 
TimeUnit.SECONDS);
-    }
-
-    private void resetBackoff() {
-        attemptCounter = 0;
-        backoffMultiplier = 1L;
-    }
-
-    private class TweetStreamStarter implements Runnable {
-        @Override
-        public void run() {
-            try {
-                if (endpoint.equals(StreamEndpoint.SAMPLE_ENDPOINT)) {
-                    stream = api.tweets().sampleStream()
-                            .expansions(expansions)
-                            .tweetFields(tweetFields)
-                            .userFields(userFields)
-                            .mediaFields(mediaFields)
-                            .placeFields(placeFields)
-                            .pollFields(pollFields)
-                            .backfillMinutes(backfillMinutes)
-                            .execute();
-                } else {
-                    stream = api.tweets().searchStream()
-                            .expansions(expansions)
-                            .tweetFields(tweetFields)
-                            .userFields(userFields)
-                            .mediaFields(mediaFields)
-                            .placeFields(placeFields)
-                            .pollFields(pollFields)
-                            .backfillMinutes(backfillMinutes)
-                            .execute();
-                }
-                executorService.execute(new TweetStreamHandler());
-            } catch (final ApiException e) {
-                stream = null;
-                logger.warn("Twitter Stream [{}] API connection failed: HTTP 
{}", endpoint.getEndpointName(), e.getCode(), e);
-                scheduleStartStreamWithBackoff();
-            } catch (final Exception e) {
-                stream = null;
-                logger.warn("Twitter Stream [{}] connection failed", 
endpoint.getEndpointName(), e);
-                scheduleStartStreamWithBackoff();
-            }
-        }
-    }
-
-    private class TweetStreamHandler implements Runnable {
-        @Override
-        public void run() {
-            try (BufferedReader reader = new BufferedReader(new 
InputStreamReader(stream, StandardCharsets.UTF_8))) {
-                String tweetRecord = reader.readLine();
-                while (tweetRecord != null) {
-                    // Skip empty lines received from the Twitter Stream
-                    if (tweetRecord.isEmpty()) {
-                        tweetRecord = reader.readLine();
-                        continue;
-                    }
-
-                    queue.put(tweetRecord);
-
-                    // reset backoff multiplier upon successful receipt of a 
tweet
-                    resetBackoff();
-
-                    tweetRecord = reader.readLine();
-                }
-            } catch (final IOException e) {
-                logger.info("Stream is closed or has stopped", e);
-            } catch (final InterruptedException e) {
-                logger.info("Interrupted while adding Tweet to queue", e);
-                return;
-            }
-            logger.info("Stream processing completed");
-            scheduleStartStreamWithBackoff();
-        }
-    }
-
-    private Set<String> parseCommaSeparatedProperties(final ProcessContext 
context, final PropertyDescriptor property) {
-        Set<String> fields = null;
-        if (context.getProperty(property).isSet()) {
-            fields = new HashSet<>();
-            final String fieldsString = 
context.getProperty(property).getValue();
-            for (final String field: fieldsString.split(",")) {
-                fields.add(field.trim());
-            }
-        }
-        return fields;
-    }
-}
diff --git 
a/nifi-extension-bundles/nifi-social-media-bundle/nifi-twitter-processors/src/main/resources/META-INF/services/org.apache.nifi.processor.Processor
 
b/nifi-extension-bundles/nifi-social-media-bundle/nifi-twitter-processors/src/main/resources/META-INF/services/org.apache.nifi.processor.Processor
deleted file mode 100644
index 27a2fe6e7a3..00000000000
--- 
a/nifi-extension-bundles/nifi-social-media-bundle/nifi-twitter-processors/src/main/resources/META-INF/services/org.apache.nifi.processor.Processor
+++ /dev/null
@@ -1,15 +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.
-org.apache.nifi.processors.twitter.ConsumeTwitter
diff --git 
a/nifi-extension-bundles/nifi-social-media-bundle/nifi-twitter-processors/src/test/java/org/apache/nifi/processors/twitter/TestConsumeTwitter.java
 
b/nifi-extension-bundles/nifi-social-media-bundle/nifi-twitter-processors/src/test/java/org/apache/nifi/processors/twitter/TestConsumeTwitter.java
deleted file mode 100644
index 4e6f490a598..00000000000
--- 
a/nifi-extension-bundles/nifi-social-media-bundle/nifi-twitter-processors/src/test/java/org/apache/nifi/processors/twitter/TestConsumeTwitter.java
+++ /dev/null
@@ -1,119 +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.nifi.processors.twitter;
-
-import mockwebserver3.MockResponse;
-import mockwebserver3.MockWebServer;
-import org.apache.nifi.flowfile.attributes.CoreAttributes;
-import org.apache.nifi.util.MockFlowFile;
-import org.apache.nifi.util.PropertyMigrationResult;
-import org.apache.nifi.util.TestRunner;
-import org.apache.nifi.util.TestRunners;
-import org.junit.jupiter.api.AfterEach;
-import org.junit.jupiter.api.BeforeEach;
-import org.junit.jupiter.api.Test;
-import org.junit.jupiter.api.Timeout;
-
-import java.io.IOException;
-import java.util.Map;
-
-import static org.junit.jupiter.api.Assertions.assertEquals;
-
-public class TestConsumeTwitter {
-    private MockWebServer mockWebServer;
-
-    private TestRunner runner;
-
-    @BeforeEach
-    public void setRunnerAndAPI() throws IOException {
-        mockWebServer = new MockWebServer();
-        mockWebServer.start();
-
-        runner = TestRunners.newTestRunner(ConsumeTwitter.class);
-
-        runner.setProperty(ConsumeTwitter.BEARER_TOKEN, "BEARER_TOKEN");
-        final String basePath = mockWebServer.url("").toString();
-        runner.setProperty(ConsumeTwitter.BASE_PATH, basePath);
-    }
-
-    @AfterEach
-    public void shutdownServerAndAPI() throws IOException {
-        mockWebServer.close();
-    }
-
-    @Test
-    @Timeout(60)
-    public void testReceiveSingleTweetInStream() {
-        String sampleTweet = "{\"data\":{\"id\":\"123\",\"text\":\"This is a 
sample tweet and is not real!\"}}";
-        MockResponse response = new MockResponse.Builder()
-                .code(200)
-                .body(sampleTweet)
-                .addHeader("Content-Type", "application/json")
-                .build();
-        mockWebServer.enqueue(response);
-
-        runner.setProperty(ConsumeTwitter.ENDPOINT, 
ConsumeTwitter.ENDPOINT_SAMPLE);
-        runner.setProperty(ConsumeTwitter.QUEUE_SIZE, "10000");
-        runner.setProperty(ConsumeTwitter.BATCH_SIZE, "10");
-        runner.setProperty(ConsumeTwitter.BACKFILL_MINUTES, "0");
-
-        runner.assertValid();
-
-        // The TwitterStreamAPI class spins up another thread and might not be 
done queueing tweets in one run of the
-        // processor, so the test will timeout after 60 seconds.
-        runner.run(1, false, true);
-
-        while 
(runner.getFlowFilesForRelationship(ConsumeTwitter.REL_SUCCESS).isEmpty()) {
-            runner.run(1, false, false);
-        }
-        runner.stop();
-
-        // there should only be a single FlowFile containing a tweet
-        runner.assertTransferCount(ConsumeTwitter.REL_SUCCESS, 1);
-        MockFlowFile flowFile = 
runner.getFlowFilesForRelationship(ConsumeTwitter.REL_SUCCESS).getFirst();
-        String expectedTweet = "[{\"data\":{\"id\":\"123\",\"text\":\"This is 
a sample tweet and is not real!\"}}]";
-        flowFile.assertContentEquals(expectedTweet);
-        flowFile.assertAttributeEquals(CoreAttributes.MIME_TYPE.key(), 
"application/json");
-        flowFile.assertAttributeEquals("tweets", "1");
-    }
-
-    @Test
-    void testMigrateProperties() {
-        final Map<String, String> expectedRenamed = Map.ofEntries(
-                Map.entry("stream-endpoint", 
ConsumeTwitter.ENDPOINT.getName()),
-                Map.entry("base-path", ConsumeTwitter.BASE_PATH.getName()),
-                Map.entry("bearer-token", 
ConsumeTwitter.BEARER_TOKEN.getName()),
-                Map.entry("queue-size", ConsumeTwitter.QUEUE_SIZE.getName()),
-                Map.entry("batch-size", ConsumeTwitter.BATCH_SIZE.getName()),
-                Map.entry("backoff-attempts", 
ConsumeTwitter.BACKOFF_ATTEMPTS.getName()),
-                Map.entry("backoff-time", 
ConsumeTwitter.BACKOFF_TIME.getName()),
-                Map.entry("maximum-backoff-time", 
ConsumeTwitter.MAXIMUM_BACKOFF_TIME.getName()),
-                Map.entry("connect-timeout", 
ConsumeTwitter.CONNECT_TIMEOUT.getName()),
-                Map.entry("read-timeout", 
ConsumeTwitter.READ_TIMEOUT.getName()),
-                Map.entry("backfill-minutes", 
ConsumeTwitter.BACKFILL_MINUTES.getName()),
-                Map.entry("tweet-fields", 
ConsumeTwitter.TWEET_FIELDS.getName()),
-                Map.entry("user-fields", ConsumeTwitter.USER_FIELDS.getName()),
-                Map.entry("media-fields", 
ConsumeTwitter.MEDIA_FIELDS.getName()),
-                Map.entry("poll-fields", ConsumeTwitter.POLL_FIELDS.getName()),
-                Map.entry("place-fields", 
ConsumeTwitter.PLACE_FIELDS.getName()),
-                Map.entry("expansions", ConsumeTwitter.EXPANSIONS.getName())
-        );
-
-        final PropertyMigrationResult propertyMigrationResult = 
runner.migrateProperties();
-        assertEquals(expectedRenamed, 
propertyMigrationResult.getPropertiesRenamed());
-    }
-}
diff --git a/nifi-extension-bundles/nifi-social-media-bundle/pom.xml 
b/nifi-extension-bundles/nifi-social-media-bundle/pom.xml
deleted file mode 100644
index 2914f8caabf..00000000000
--- a/nifi-extension-bundles/nifi-social-media-bundle/pom.xml
+++ /dev/null
@@ -1,31 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-  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.
--->
-<project xmlns="http://maven.apache.org/POM/4.0.0"; 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"; 
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 
https://maven.apache.org/xsd/maven-4.0.0.xsd";>
-    <modelVersion>4.0.0</modelVersion>
-    <parent>
-        <groupId>org.apache.nifi</groupId>
-        <artifactId>nifi-standard-shared-bom</artifactId>
-        <version>2.11.0-SNAPSHOT</version>
-        
<relativePath>../nifi-standard-shared-bundle/nifi-standard-shared-bom</relativePath>
-    </parent>
-    <artifactId>nifi-social-media-bundle</artifactId>
-    <packaging>pom</packaging>
-
-    <modules>
-        <module>nifi-twitter-processors</module>
-        <module>nifi-social-media-nar</module>
-    </modules>
-</project>
diff --git a/nifi-extension-bundles/pom.xml b/nifi-extension-bundles/pom.xml
index 08f91a3c64b..700d19d8a84 100755
--- a/nifi-extension-bundles/pom.xml
+++ b/nifi-extension-bundles/pom.xml
@@ -34,7 +34,6 @@
         <module>nifi-kafka-bundle</module>
         <module>nifi-confluent-platform-bundle</module>
         <module>nifi-aws-bundle</module>
-        <module>nifi-social-media-bundle</module>
         <module>nifi-enrich-bundle</module>
         <module>nifi-hl7-bundle</module>
         <module>nifi-mongodb-bundle</module>

Reply via email to