[ 
https://issues.apache.org/jira/browse/STREAMS-615?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16670652#comment-16670652
 ] 

ASF GitHub Bot commented on STREAMS-615:
----------------------------------------

steveblackmon closed pull request #467: resolves STREAMS-615
URL: https://github.com/apache/streams/pull/467
 
 
   

This is a PR merged from a forked repository.
As GitHub hides the original diff on merge, it is displayed below for
the sake of provenance:

As this is a foreign pull request (from a fork), the diff is supplied
below (as it won't show otherwise due to GitHub magic):

diff --git a/pom.xml b/pom.xml
index 648525fdf3..71ad906fe2 100644
--- a/pom.xml
+++ b/pom.xml
@@ -377,7 +377,7 @@
         <json-flattener.version>0.5.0</json-flattener.version>
         <json-path.version>2.4.0</json-path.version>
         <json-schema-validator.version>0.1.10</json-schema-validator.version>
-        <juneau.version>7.1.0</juneau.version>
+        <juneau.version>7.2.1</juneau.version>
         <jsonschema2pojo.version>0.4.10</jsonschema2pojo.version>
         <jaxb2.version>0.13.1</jaxb2.version>
         <jaxb2-basics.version>0.11.1</jaxb2-basics.version>
diff --git 
a/streams-contrib/streams-provider-twitter/src/main/java/org/apache/streams/twitter/api/Account.java
 
b/streams-contrib/streams-provider-twitter/src/main/java/org/apache/streams/twitter/api/Account.java
index 960992717b..d83b48a010 100644
--- 
a/streams-contrib/streams-provider-twitter/src/main/java/org/apache/streams/twitter/api/Account.java
+++ 
b/streams-contrib/streams-provider-twitter/src/main/java/org/apache/streams/twitter/api/Account.java
@@ -20,16 +20,16 @@
 
 import org.apache.streams.twitter.pojo.User;
 
-import org.apache.juneau.remoteable.Body;
-import org.apache.juneau.remoteable.RemoteMethod;
-import org.apache.juneau.remoteable.Remoteable;
+import org.apache.juneau.http.annotation.Body;
+import org.apache.juneau.remote.RemoteInterface;
+import org.apache.juneau.rest.client.remote.RemoteMethod;
 
 import java.util.List;
 
 /**
  * Interface for /account methods.
  */
-@Remoteable(path = "https://api.twitter.com/1.1/account";)
+@RemoteInterface(path = "https://api.twitter.com/1.1/account";)
 public interface Account {
 
   /**
@@ -39,7 +39,7 @@
    * @see <a 
href=https://developer.twitter.com/en/docs/accounts-and-users/manage-account-settings/api-reference/get-account-settings";>https://developer.twitter.com/en/docs/accounts-and-users/manage-account-settings/api-reference/get-account-settings</a>
    *
    */
-  @RemoteMethod(httpMethod = "GET", path = "/settings.json")
+  @RemoteMethod(method = "GET", path = "/settings.json")
   public AccountSettings settings();
 
   /**
@@ -49,7 +49,7 @@
    * @see <a 
href=https://developer.twitter.com/en/docs/accounts-and-users/manage-account-settings/api-reference/get-account-verify_credentials";>https://developer.twitter.com/en/docs/accounts-and-users/manage-account-settings/api-reference/get-account-verify_credentials</a>
    *
    */
-  @RemoteMethod(httpMethod = "GET", path = "/verify_credentials.json")
+  @RemoteMethod(method = "GET", path = "/verify_credentials.json")
   public User verifyCredentials();
 
   /**
@@ -59,7 +59,7 @@
    * @see <a 
href=https://developer.twitter.com/en/docs/accounts-and-users/manage-account-settings/api-reference/post-account-update_profile";>https://developer.twitter.com/en/docs/accounts-and-users/manage-account-settings/api-reference/post-account-update_profile</a>
    *
    */
-  @RemoteMethod(httpMethod = "POST", path = "/update_profile.json")
+  @RemoteMethod(method = "POST", path = "/update_profile.json")
   public User updateProfile(@Body UpdateProfileRequest parameters);
 
   /**
@@ -69,7 +69,7 @@
    * @see <a 
href=https://developer.twitter.com/en/docs/accounts-and-users/manage-account-settings/api-reference/post-account-settings";>https://developer.twitter.com/en/docs/accounts-and-users/manage-account-settings/api-reference/post-account-settings</a>
    *
    */
-  @RemoteMethod(httpMethod = "POST", path = "/update_settings.json")
+  @RemoteMethod(method = "POST", path = "/update_settings.json")
   public AccountSettings updateSettings(@Body UpdateProfileRequest parameters);
 
 }
diff --git 
a/streams-contrib/streams-provider-twitter/src/main/java/org/apache/streams/twitter/api/AccountActivity.java
 
b/streams-contrib/streams-provider-twitter/src/main/java/org/apache/streams/twitter/api/AccountActivity.java
index 114a8a607b..cf3d53a594 100644
--- 
a/streams-contrib/streams-provider-twitter/src/main/java/org/apache/streams/twitter/api/AccountActivity.java
+++ 
b/streams-contrib/streams-provider-twitter/src/main/java/org/apache/streams/twitter/api/AccountActivity.java
@@ -20,11 +20,11 @@
 
 import org.apache.streams.twitter.pojo.User;
 
-import org.apache.juneau.remoteable.Path;
-import org.apache.juneau.remoteable.Query;
-import org.apache.juneau.remoteable.RemoteMethod;
-import org.apache.juneau.remoteable.Remoteable;
+import org.apache.juneau.http.annotation.Path;
+import org.apache.juneau.http.annotation.Query;
+import org.apache.juneau.remote.RemoteInterface;
 import org.apache.juneau.rest.client.RestCallException;
+import org.apache.juneau.rest.client.remote.RemoteMethod;
 
 import java.lang.reflect.InvocationTargetException;
 import java.util.List;
@@ -34,7 +34,7 @@
  *
  * @see <a 
href="https://developer.twitter.com/en/docs/accounts-and-users/subscribe-account-activity/overview";>https://developer.twitter.com/en/docs/accounts-and-users/subscribe-account-activity/overview</a>
  */
-@Remoteable(path = "https://api.twitter.com/1.1/account_activity";)
+@RemoteInterface(path = "https://api.twitter.com/1.1/account_activity";)
 public interface AccountActivity {
 
   /**
@@ -46,7 +46,7 @@
    * @see <a 
href=https://developer.twitter.com/en/docs/accounts-and-users/subscribe-account-activity/api-reference/get-webhook-config";>https://developer.twitter.com/en/docs/accounts-and-users/subscribe-account-activity/api-reference/get-webhook-config</a>
    *
    */
-  @RemoteMethod(httpMethod = "GET", path = "/webhooks.json")
+  @RemoteMethod(method = "GET", path = "/webhooks.json")
   public List<Webhook> getWebhooks();
 
   /**
@@ -58,7 +58,7 @@
    * @see <a 
href=https://developer.twitter.com/en/docs/accounts-and-users/subscribe-account-activity/api-reference/new-webhook-config";>https://developer.twitter.com/en/docs/accounts-and-users/subscribe-account-activity/api-reference/new-webhook-config</a>
    *
    */
-  @RemoteMethod(httpMethod = "POST", path = "/webhooks.json")
+  @RemoteMethod(method = "POST", path = "/webhooks.json")
   public Webhook registerWebhook(@Query("url") String url);
 
   /**
@@ -68,7 +68,7 @@
    * @see <a 
href=https://developer.twitter.com/en/docs/accounts-and-users/subscribe-account-activity/api-reference/delete-webhook-config";>https://developer.twitter.com/en/docs/accounts-and-users/subscribe-account-activity/api-reference/delete-webhook-config</a>
    *
    */
-  @RemoteMethod(httpMethod = "DELETE", path = "/webhooks/{webhookId}.json")
+  @RemoteMethod(method = "DELETE", path = "/webhooks/{webhookId}.json")
   public Boolean deleteWebhook(@Path("webhookId") Long webhookId);
 
   /**
@@ -79,7 +79,7 @@
    * @see <a 
href=https://developer.twitter.com/en/docs/accounts-and-users/subscribe-account-activity/api-reference/validate-webhook-config";>https://developer.twitter.com/en/docs/accounts-and-users/subscribe-account-activity/api-reference/validate-webhook-config</a>
    *
    */
-  @RemoteMethod(httpMethod = "PUT", path = "/webhooks/{webhookId}.json")
+  @RemoteMethod(method = "PUT", path = "/webhooks/{webhookId}.json")
   public Boolean putWebhook(@Path("webhookId") Long webhookId);
 
   /**
@@ -90,7 +90,7 @@
    * @see <a 
href=https://developer.twitter.com/en/docs/accounts-and-users/subscribe-account-activity/api-reference/get-subscription";>https://developer.twitter.com/en/docs/accounts-and-users/subscribe-account-activity/api-reference/get-subscription</a>
    *
    */
-  @RemoteMethod(httpMethod = "GET", path = 
"/webhooks/{webhookId}/subscriptions.json")
+  @RemoteMethod(method = "GET", path = 
"/webhooks/{webhookId}/subscriptions.json")
   public Boolean getWebhookSubscription(@Path("webhookId") Long webhookId)
       throws InvocationTargetException, RestCallException
   ;
@@ -103,7 +103,7 @@ public Boolean getWebhookSubscription(@Path("webhookId") 
Long webhookId)
    * @see <a 
href=https://developer.twitter.com/en/docs/accounts-and-users/subscribe-account-activity/api-reference/new-subscription";>https://developer.twitter.com/en/docs/accounts-and-users/subscribe-account-activity/api-reference/new-subscription</a>
    *
    */
-  @RemoteMethod(httpMethod = "POST", path = 
"/webhooks/{webhookId}/subscriptions.json")
+  @RemoteMethod(method = "POST", path = 
"/webhooks/{webhookId}/subscriptions.json")
   public Boolean registerWebhookSubscriptions(@Path("webhookId") Long 
webhookId)
       throws InvocationTargetException, RestCallException
   ;
@@ -116,7 +116,7 @@ public Boolean 
registerWebhookSubscriptions(@Path("webhookId") Long webhookId)
    * @see <a 
href=https://developer.twitter.com/en/docs/accounts-and-users/subscribe-account-activity/api-reference/delete-subscription";>https://developer.twitter.com/en/docs/accounts-and-users/subscribe-account-activity/api-reference/delete-subscription</a>
    *
    */
-  @RemoteMethod(httpMethod = "DELETE", path = 
"/webhooks/{webhookId}/subscriptions.json")
+  @RemoteMethod(method = "DELETE", path = 
"/webhooks/{webhookId}/subscriptions.json")
   public Boolean deleteWebhookSubscriptions(@Path("webhookId") Long webhookId)
       throws InvocationTargetException, RestCallException
   ;
diff --git 
a/streams-contrib/streams-provider-twitter/src/main/java/org/apache/streams/twitter/api/DirectMessages.java
 
b/streams-contrib/streams-provider-twitter/src/main/java/org/apache/streams/twitter/api/DirectMessages.java
index e8bff80fa5..e4436866f4 100644
--- 
a/streams-contrib/streams-provider-twitter/src/main/java/org/apache/streams/twitter/api/DirectMessages.java
+++ 
b/streams-contrib/streams-provider-twitter/src/main/java/org/apache/streams/twitter/api/DirectMessages.java
@@ -23,12 +23,10 @@
 import org.apache.streams.twitter.pojo.User;
 import org.apache.streams.twitter.pojo.WelcomeMessage;
 
-import org.apache.juneau.remoteable.Body;
-import org.apache.juneau.remoteable.Query;
-import org.apache.juneau.remoteable.QueryIfNE;
-import org.apache.juneau.remoteable.RemoteMethod;
-import org.apache.juneau.remoteable.Remoteable;
-import org.apache.juneau.remoteable.RequestBean;
+import org.apache.juneau.http.annotation.Body;
+import org.apache.juneau.http.annotation.Query;
+import org.apache.juneau.remote.RemoteInterface;
+import org.apache.juneau.rest.client.remote.RemoteMethod;
 
 import java.util.List;
 
@@ -37,7 +35,7 @@
  *
  * @see <a 
href="https://dev.twitter.com/rest/reference";>https://dev.twitter.com/rest/reference</a>
  */
-@Remoteable(path = "https://api.twitter.com/1.1/direct_messages";)
+@RemoteInterface(path = "https://api.twitter.com/1.1/direct_messages";)
 public interface DirectMessages {
 
   /**
@@ -48,8 +46,8 @@
    * @see <a 
href="https://developer.twitter.com/en/docs/direct-messages/sending-and-receiving/api-reference/list-events";>https://developer.twitter.com/en/docs/direct-messages/sending-and-receiving/api-reference/list-events</a>
    *
    */
-  @RemoteMethod(httpMethod = "GET", path = "/events/list.json")
-  public EventsListResponse listEvents(@QueryIfNE EventsListRequest 
parameters);
+  @RemoteMethod(method = "GET", path = "/events/list.json")
+  public EventsListResponse listEvents(@Query(name = "*", skipIfEmpty = true) 
EventsListRequest parameters);
 
   /**
    * Returns a single Direct Message event by the given id.
@@ -58,7 +56,7 @@
    * @see <a 
href="https://developer.twitter.com/en/docs/direct-messages/sending-and-receiving/api-reference/get-event";>https://developer.twitter.com/en/docs/direct-messages/sending-and-receiving/api-reference/get-event</a>
    *
    */
-  @RemoteMethod(httpMethod = "GET", path = "/events/show.json")
+  @RemoteMethod(method = "GET", path = "/events/show.json")
   public EventShowResponse showEvent(@Query("id") Long id);
 
   /**
@@ -69,7 +67,7 @@
    * @see <a 
href="https://developer.twitter.com/en/docs/direct-messages/sending-and-receiving/api-reference/new-event";>https://developer.twitter.com/en/docs/direct-messages/sending-and-receiving/api-reference/new-event</a>
    *
    */
-  @RemoteMethod(httpMethod = "POST", path = "/events/new.json")
+  @RemoteMethod(method = "POST", path = "/events/new.json")
   public DirectMessageEvent newEvent(@Body MessageCreateRequest event);
 
   /**
@@ -80,7 +78,7 @@
    * @see <a 
href="https://developer.twitter.com/en/docs/direct-messages/sending-and-receiving/api-reference/new-event";>https://developer.twitter.com/en/docs/direct-messages/sending-and-receiving/api-reference/new-event</a>
    *
    */
-  @RemoteMethod(httpMethod = "POST", path = "/destroy.json")
+  @RemoteMethod(method = "POST", path = "/destroy.json")
   public DirectMessage destroy(@Query("id") Long id);
 
   /**
@@ -91,7 +89,7 @@
    * @see <a 
href="https://developer.twitter.com/en/docs/direct-messages/sending-and-receiving/api-reference/new-event";>https://developer.twitter.com/en/docs/direct-messages/sending-and-receiving/api-reference/new-event</a>
    *
    */
-  @RemoteMethod(httpMethod = "GET", path = "/show.json")
+  @RemoteMethod(method = "GET", path = "/show.json")
   public DirectMessage show(@Query("id") Long id);
 
   /**
@@ -102,8 +100,8 @@
    * @see <a 
href="https://developer.twitter.com/en/docs/direct-messages/sending-and-receiving/api-reference/get-messages";>https://developer.twitter.com/en/docs/direct-messages/sending-and-receiving/api-reference/get-messages</a>
    *
    */
-  @RemoteMethod(httpMethod = "GET", path = ".json")
-  public List<DirectMessage> list(@QueryIfNE DirectMessagesListRequest 
parameters);
+  @RemoteMethod(method = "GET", path = ".json")
+  public List<DirectMessage> list(@Query(name = "*", skipIfEmpty = true) 
DirectMessagesListRequest parameters);
 
   /**
    * Returns the 20 most recent direct messages sent to the authenticating 
user. Includes detailed information about the sender and recipient user. You 
can request up to 200 direct messages per call, and only the most recent 200 
DMs will be available using this endpoint.
@@ -113,8 +111,8 @@
    * @see <a 
href="https://developer.twitter.com/en/docs/direct-messages/sending-and-receiving/api-reference/get-sent-message";>https://developer.twitter.com/en/docs/direct-messages/sending-and-receiving/api-reference/get-sent-message</a>
    *
    */
-  @RemoteMethod(httpMethod = "GET", path = "/sent.json")
-  public List<DirectMessage> sent(@QueryIfNE DirectMessagesSentRequest 
parameters);
+  @RemoteMethod(method = "GET", path = "/sent.json")
+  public List<DirectMessage> sent(@Query(name = "*", skipIfEmpty = true) 
DirectMessagesSentRequest parameters);
 
   /**
    * Destroys the direct message specified in the required ID parameter. The 
authenticating user must be the recipient of the specified direct message.
@@ -124,6 +122,6 @@
    * @see <a 
href="https://developer.twitter.com/en/docs/direct-messages/sending-and-receiving/api-reference/new-event";>https://developer.twitter.com/en/docs/direct-messages/sending-and-receiving/api-reference/new-event</a>
    *
    */
-  @RemoteMethod(httpMethod = "POST", path = "/new.json")
+  @RemoteMethod(method = "POST", path = "/new.json")
   public DirectMessage newDM(@Body DirectMessageNewRequest parameters);
 }
diff --git 
a/streams-contrib/streams-provider-twitter/src/main/java/org/apache/streams/twitter/api/Favorites.java
 
b/streams-contrib/streams-provider-twitter/src/main/java/org/apache/streams/twitter/api/Favorites.java
index b68e88bcb1..4b551c0c45 100644
--- 
a/streams-contrib/streams-provider-twitter/src/main/java/org/apache/streams/twitter/api/Favorites.java
+++ 
b/streams-contrib/streams-provider-twitter/src/main/java/org/apache/streams/twitter/api/Favorites.java
@@ -20,10 +20,9 @@
 
 import org.apache.streams.twitter.pojo.Tweet;
 
-import org.apache.juneau.remoteable.Body;
-import org.apache.juneau.remoteable.QueryIfNE;
-import org.apache.juneau.remoteable.RemoteMethod;
-import org.apache.juneau.remoteable.Remoteable;
+import org.apache.juneau.http.annotation.Query;
+import org.apache.juneau.remote.RemoteInterface;
+import org.apache.juneau.rest.client.remote.RemoteMethod;
 
 import java.util.List;
 
@@ -32,7 +31,7 @@
  *
  * @see <a 
href="https://dev.twitter.com/rest/reference";>https://dev.twitter.com/rest/reference</a>
  */
-@Remoteable(path = "https://api.twitter.com/1.1/favorites";)
+@RemoteInterface(path = "https://api.twitter.com/1.1/favorites";)
 public interface Favorites {
 
   /**
@@ -44,7 +43,7 @@
    * @see <a 
href="https://dev.twitter.com/rest/reference/get/favorites/list";>https://dev.twitter.com/rest/reference/get/favorites/list</a>
    *
    */
-  @RemoteMethod(httpMethod = "GET", path = "/list.json")
-  public List<Tweet> list( @QueryIfNE("*") FavoritesListRequest parameters);
+  @RemoteMethod(method ="GET", path = "/list.json")
+  public List<Tweet> list( @Query(name = "*", skipIfEmpty = true) 
FavoritesListRequest parameters);
 
 }
diff --git 
a/streams-contrib/streams-provider-twitter/src/main/java/org/apache/streams/twitter/api/Followers.java
 
b/streams-contrib/streams-provider-twitter/src/main/java/org/apache/streams/twitter/api/Followers.java
index 900d878875..03395f8f73 100644
--- 
a/streams-contrib/streams-provider-twitter/src/main/java/org/apache/streams/twitter/api/Followers.java
+++ 
b/streams-contrib/streams-provider-twitter/src/main/java/org/apache/streams/twitter/api/Followers.java
@@ -18,20 +18,16 @@
 
 package org.apache.streams.twitter.api;
 
-import org.apache.streams.twitter.pojo.Tweet;
-
-import org.apache.juneau.remoteable.QueryIfNE;
-import org.apache.juneau.remoteable.RemoteMethod;
-import org.apache.juneau.remoteable.Remoteable;
-
-import java.util.List;
+import org.apache.juneau.http.annotation.Query;
+import org.apache.juneau.remote.RemoteInterface;
+import org.apache.juneau.rest.client.remote.RemoteMethod;
 
 /**
  * Interface for /followers methods.
  *
  * @see <a 
href="https://developer.twitter.com/en/docs/accounts-and-users/follow-search-get-users/api-reference";>https://developer.twitter.com/en/docs/accounts-and-users/follow-search-get-users/api-reference</a>
  */
-@Remoteable(path = "https://api.twitter.com/1.1/followers";)
+@RemoteInterface(path = "https://api.twitter.com/1.1/followers";)
 public interface Followers {
 
   /**
@@ -42,8 +38,8 @@
    * @see <a 
href="https://developer.twitter.com/en/docs/accounts-and-users/follow-search-get-users/api-reference/get-followers-ids";>https://developer.twitter.com/en/docs/accounts-and-users/follow-search-get-users/api-reference/get-followers-ids</a>
    *
    */
-  @RemoteMethod(httpMethod = "GET", path = "/ids.json")
-  public FollowersIdsResponse ids( @QueryIfNE("*") FollowersIdsRequest 
parameters);
+  @RemoteMethod(method ="GET", path = "/ids.json")
+  public FollowersIdsResponse ids( @Query(name = "*", skipIfEmpty = true) 
FollowersIdsRequest parameters);
 
   /**
    * Returns a cursored collection of user objects for users following the 
specified user.
@@ -53,7 +49,7 @@
    * @see <a 
href="https://developer.twitter.com/en/docs/accounts-and-users/follow-search-get-users/api-reference/get-followers-list";>https://developer.twitter.com/en/docs/accounts-and-users/follow-search-get-users/api-reference/get-followers-list</a>
    *
    */
-  @RemoteMethod(httpMethod = "GET", path = "/list.json")
-  public FollowersListResponse list( @QueryIfNE("*") FollowersListRequest 
parameters);
+  @RemoteMethod(method ="GET", path = "/list.json")
+  public FollowersListResponse list( @Query(name = "*", skipIfEmpty = true) 
FollowersListRequest parameters);
 
 }
diff --git 
a/streams-contrib/streams-provider-twitter/src/main/java/org/apache/streams/twitter/api/Friends.java
 
b/streams-contrib/streams-provider-twitter/src/main/java/org/apache/streams/twitter/api/Friends.java
index 3c0d1f9e80..b3be480ad4 100644
--- 
a/streams-contrib/streams-provider-twitter/src/main/java/org/apache/streams/twitter/api/Friends.java
+++ 
b/streams-contrib/streams-provider-twitter/src/main/java/org/apache/streams/twitter/api/Friends.java
@@ -20,9 +20,9 @@
 
 import org.apache.streams.twitter.pojo.Tweet;
 
-import org.apache.juneau.remoteable.QueryIfNE;
-import org.apache.juneau.remoteable.RemoteMethod;
-import org.apache.juneau.remoteable.Remoteable;
+import org.apache.juneau.http.annotation.Query;
+import org.apache.juneau.remote.RemoteInterface;
+import org.apache.juneau.rest.client.remote.RemoteMethod;
 
 import java.util.List;
 
@@ -31,7 +31,7 @@
  *
  * @see <a 
href="https://developer.twitter.com/en/docs/accounts-and-users/follow-search-get-users/api-reference";>https://developer.twitter.com/en/docs/accounts-and-users/follow-search-get-users/api-reference</a>
  */
-@Remoteable(path = "https://api.twitter.com/1.1/friends";)
+@RemoteInterface(path = "https://api.twitter.com/1.1/friends";)
 public interface Friends {
 
   /**
@@ -42,8 +42,8 @@
    * @see <a 
href="https://developer.twitter.com/en/docs/accounts-and-users/follow-search-get-users/api-reference/get-friends-ids";>https://developer.twitter.com/en/docs/accounts-and-users/follow-search-get-users/api-reference/get-friends-ids</a>
    *
    */
-  @RemoteMethod(httpMethod = "GET", path = "/ids.json")
-  public FriendsIdsResponse ids( @QueryIfNE("*") FriendsIdsRequest parameters);
+  @RemoteMethod(method ="GET", path = "/ids.json")
+  public FriendsIdsResponse ids( @Query(name = "*", skipIfEmpty = true) 
FriendsIdsRequest parameters);
 
   /**
    * Returns a cursored collection of user objects for every user the 
specified user is following.
@@ -53,7 +53,7 @@
    * @see <a 
href="https://developer.twitter.com/en/docs/accounts-and-users/follow-search-get-users/api-reference/get-friends-list";>https://developer.twitter.com/en/docs/accounts-and-users/follow-search-get-users/api-reference/get-friends-list</a>
    *
    */
-  @RemoteMethod(httpMethod = "GET", path = "/list.json")
-  public FriendsListResponse list( @QueryIfNE("*") FriendsListRequest 
parameters);
+  @RemoteMethod(method ="GET", path = "/list.json")
+  public FriendsListResponse list( @Query(name = "*", skipIfEmpty = true) 
FriendsListRequest parameters);
 
 }
diff --git 
a/streams-contrib/streams-provider-twitter/src/main/java/org/apache/streams/twitter/api/Friendships.java
 
b/streams-contrib/streams-provider-twitter/src/main/java/org/apache/streams/twitter/api/Friendships.java
index 54bbe4cc76..420dc56fdb 100644
--- 
a/streams-contrib/streams-provider-twitter/src/main/java/org/apache/streams/twitter/api/Friendships.java
+++ 
b/streams-contrib/streams-provider-twitter/src/main/java/org/apache/streams/twitter/api/Friendships.java
@@ -21,9 +21,10 @@
 import org.apache.streams.twitter.pojo.Friendship;
 import org.apache.streams.twitter.pojo.User;
 
-import org.apache.juneau.remoteable.QueryIfNE;
-import org.apache.juneau.remoteable.RemoteMethod;
-import org.apache.juneau.remoteable.Remoteable;
+
+import org.apache.juneau.http.annotation.Query;
+import org.apache.juneau.remote.RemoteInterface;
+import org.apache.juneau.rest.client.remote.RemoteMethod;
 
 import java.util.List;
 
@@ -32,7 +33,7 @@
  *
  * @see <a 
href="https://developer.twitter.com/en/docs/accounts-and-users/follow-search-get-users/overview";>https://developer.twitter.com/en/docs/accounts-and-users/follow-search-get-users/overview</a>
  */
-@Remoteable(path = "https://api.twitter.com/1.1/friendships";)
+@RemoteInterface(path = "https://api.twitter.com/1.1/friendships";)
 public interface Friendships {
 
   /**
@@ -43,8 +44,8 @@
    * @see <a 
href="https://developer.twitter.com/en/docs/accounts-and-users/follow-search-get-users/api-reference/post-friendships-create";>https://developer.twitter.com/en/docs/accounts-and-users/follow-search-get-users/api-reference/post-friendships-create</a>
    *
    */
-  @RemoteMethod(httpMethod = "POST", path = "/create.json")
-  public User create(@QueryIfNE("*") FriendshipCreateRequest parameters);
+  @RemoteMethod(method ="POST", path = "/create.json")
+  public User create(@Query(name = "*", skipIfEmpty = true) 
FriendshipCreateRequest parameters);
 
   /**
    * Allows the authenticating user to unfollow the user specified in the ID 
parameter.
@@ -54,8 +55,8 @@
    * @see <a 
href="https://developer.twitter.com/en/docs/accounts-and-users/follow-search-get-users/api-reference/post-friendships-destroy";>https://developer.twitter.com/en/docs/accounts-and-users/follow-search-get-users/api-reference/post-friendships-destroy</a>
    *
    */
-  @RemoteMethod(httpMethod = "POST", path = "/destroy.json")
-  public User destroy(@QueryIfNE("*") FriendshipDestroyRequest parameters);
+  @RemoteMethod(method ="POST", path = "/destroy.json")
+  public User destroy(@Query(name = "*", skipIfEmpty = true) 
FriendshipDestroyRequest parameters);
 
   /**
    * Returns a collection of numeric IDs for every user who has a pending 
request to follow the authenticating user.
@@ -65,8 +66,8 @@
    * @see <a 
href="https://developer.twitter.com/en/docs/accounts-and-users/follow-search-get-users/api-reference/get-friendships-incoming";>https://developer.twitter.com/en/docs/accounts-and-users/follow-search-get-users/api-reference/get-friendships-incoming</a>
    *
    */
-  @RemoteMethod(httpMethod = "GET", path = "/incoming.json")
-  public User incoming(@QueryIfNE("*") FriendshipsIncomingRequest parameters);
+  @RemoteMethod(method ="GET", path = "/incoming.json")
+  public User incoming(@Query(name = "*", skipIfEmpty = true) 
FriendshipsIncomingRequest parameters);
 
   /**
    * Returns the relationships of the authenticating user to the 
comma-separated list of up to 100 screen_names or user_ids provided.
@@ -77,8 +78,8 @@
    * @see <a 
href="https://developer.twitter.com/en/docs/accounts-and-users/follow-search-get-users/api-reference/get-friendships-lookup";>https://developer.twitter.com/en/docs/accounts-and-users/follow-search-get-users/api-reference/get-friendships-lookup</a>
    *
    */
-  @RemoteMethod(httpMethod = "GET", path = "/lookup.json")
-  public List<Friendship> lookup(@QueryIfNE("*") FriendshipsLookupRequest 
parameters);
+  @RemoteMethod(method ="GET", path = "/lookup.json")
+  public List<Friendship> lookup(@Query(name = "*", skipIfEmpty = true) 
FriendshipsLookupRequest parameters);
 
 
   /**
@@ -89,8 +90,8 @@
    * @see <a 
href="https://developer.twitter.com/en/docs/accounts-and-users/follow-search-get-users/api-reference/get-friendships-incoming";>https://developer.twitter.com/en/docs/accounts-and-users/follow-search-get-users/api-reference/get-friendships-incoming</a>
    *
    */
-  @RemoteMethod(httpMethod = "GET", path = "/outgoing.json")
-  public User outgoing(@QueryIfNE("*") FriendshipsOutgoingRequest parameters);
+  @RemoteMethod(method ="GET", path = "/outgoing.json")
+  public User outgoing(@Query(name = "*", skipIfEmpty = true) 
FriendshipsOutgoingRequest parameters);
 
   /**
    * Returns detailed information about the relationship between two arbitrary 
users.
@@ -100,8 +101,8 @@
    * @see <a 
href="https://developer.twitter.com/en/docs/accounts-and-users/follow-search-get-users/api-reference/get-friendships-show";>https://developer.twitter.com/en/docs/accounts-and-users/follow-search-get-users/api-reference/get-friendships-show</a>
    *
    */
-  @RemoteMethod(httpMethod = "GET", path = "/show.json")
-  public FriendshipShowResponse show(@QueryIfNE("*") FriendshipShowRequest 
parameters);
+  @RemoteMethod(method ="GET", path = "/show.json")
+  public FriendshipShowResponse show(@Query(name = "*", skipIfEmpty = true) 
FriendshipShowRequest parameters);
 
   /**
    * Allows one to enable or disable retweets and device notifications from 
the specified user.
@@ -111,7 +112,7 @@
    * @see <a 
href="https://developer.twitter.com/en/docs/accounts-and-users/follow-search-get-users/api-reference/post-friendships-update";>https://developer.twitter.com/en/docs/accounts-and-users/follow-search-get-users/api-reference/post-friendships-update</a>
    *
    */
-  @RemoteMethod(httpMethod = "GET", path = "/update.json")
-  public User update(@QueryIfNE("*") FriendshipUpdateRequest parameters);
+  @RemoteMethod(method ="GET", path = "/update.json")
+  public User update(@Query(name = "*", skipIfEmpty = true) 
FriendshipUpdateRequest parameters);
 
 }
diff --git 
a/streams-contrib/streams-provider-twitter/src/main/java/org/apache/streams/twitter/api/Geo.java
 
b/streams-contrib/streams-provider-twitter/src/main/java/org/apache/streams/twitter/api/Geo.java
index d64be88d7c..9a390fd949 100644
--- 
a/streams-contrib/streams-provider-twitter/src/main/java/org/apache/streams/twitter/api/Geo.java
+++ 
b/streams-contrib/streams-provider-twitter/src/main/java/org/apache/streams/twitter/api/Geo.java
@@ -21,10 +21,9 @@
 import org.apache.streams.twitter.pojo.Tweet;
 import org.apache.streams.twitter.pojo.Place;
 
-import org.apache.juneau.remoteable.Query;
-import org.apache.juneau.remoteable.QueryIfNE;
-import org.apache.juneau.remoteable.RemoteMethod;
-import org.apache.juneau.remoteable.Remoteable;
+import org.apache.juneau.http.annotation.Query;
+import org.apache.juneau.remote.RemoteInterface;
+import org.apache.juneau.rest.client.remote.RemoteMethod;
 
 import java.util.List;
 
@@ -34,7 +33,7 @@
  * @see <a 
href="https://developer.twitter.com/en/docs/geo/place-information/overview";>https://developer.twitter.com/en/docs/geo/place-information/overview</a>
  * @see <a 
href="https://developer.twitter.com/en/docs/geo/places-near-location/overview";>https://developer.twitter.com/en/docs/geo/places-near-location/overview</a>
  */
-@Remoteable(path = "https://api.twitter.com/1.1/geo";)
+@RemoteInterface(path = "https://api.twitter.com/1.1/geo";)
 public interface Geo {
 
   /**
@@ -45,7 +44,7 @@
    * @see <a 
href="https://developer.twitter.com/en/docs/geo/place-information/api-reference/get-geo-id-place_id";>https://developer.twitter.com/en/docs/geo/place-information/api-reference/get-geo-id-place_id</a>
    *
    */
-  @RemoteMethod(httpMethod = "GET", path = "/id/{place_id}.json")
+  @RemoteMethod(method ="GET", path = "/id/{place_id}.json")
   public Place geoid(@Query("place_id") String place_id);
 
   /**
@@ -56,8 +55,8 @@
    * @see <a 
href="https://developer.twitter.com/en/docs/geo/places-near-location/api-reference/get-geo-search";>https://developer.twitter.com/en/docs/geo/places-near-location/api-reference/get-geo-search</a>
    *
    */
-  @RemoteMethod(httpMethod = "GET", path = "/search.json")
-  public GeoSearchResponse geosearch(@QueryIfNE("*") GeoSearchRequest 
parameters);
+  @RemoteMethod(method ="GET", path = "/search.json")
+  public GeoSearchResponse geosearch(@Query(name = "*", skipIfEmpty = true) 
GeoSearchRequest parameters);
 
   /**
    * Given a latitude and a longitude, searches for up to 20 places that can 
be used as a place_id when updating a status.
@@ -67,7 +66,7 @@
    * @see <a 
href="https://developer.twitter.com/en/docs/geo/places-near-location/api-reference/get-geo-reverse_geocode";>https://developer.twitter.com/en/docs/geo/places-near-location/api-reference/get-geo-reverse_geocode</a>
    *
    */
-  @RemoteMethod(httpMethod = "GET", path = "/reverse_geocode.json")
-  public GeoSearchResponse reverseGeocode(@QueryIfNE("*") GeoSearchRequest 
parameters);
+  @RemoteMethod(method ="GET", path = "/reverse_geocode.json")
+  public GeoSearchResponse reverseGeocode(@Query(name = "*", skipIfEmpty = 
true) GeoSearchRequest parameters);
 
 }
diff --git 
a/streams-contrib/streams-provider-twitter/src/main/java/org/apache/streams/twitter/api/Media.java
 
b/streams-contrib/streams-provider-twitter/src/main/java/org/apache/streams/twitter/api/Media.java
index ae05cd538e..5ee9108374 100644
--- 
a/streams-contrib/streams-provider-twitter/src/main/java/org/apache/streams/twitter/api/Media.java
+++ 
b/streams-contrib/streams-provider-twitter/src/main/java/org/apache/streams/twitter/api/Media.java
@@ -20,9 +20,9 @@
 
 import org.apache.streams.twitter.pojo.Tweet;
 
-import org.apache.juneau.remoteable.QueryIfNE;
-import org.apache.juneau.remoteable.RemoteMethod;
-import org.apache.juneau.remoteable.Remoteable;
+import org.apache.juneau.http.annotation.Query;
+import org.apache.juneau.remote.RemoteInterface;
+import org.apache.juneau.rest.client.remote.RemoteMethod;
 
 import java.util.List;
 
@@ -31,7 +31,7 @@
  *
  * @see <a 
href="https://dev.twitter.com/rest/reference";>https://dev.twitter.com/rest/reference</a>
  */
-@Remoteable(path = "https://upload.twitter.com/1.1/media";)
+@RemoteInterface(path = "https://upload.twitter.com/1.1/media";)
 public interface Media {
 
   /**
@@ -42,7 +42,7 @@
    * @see <a 
href="https://developer.twitter.com/en/docs/media/upload-media/api-reference/get-media-upload-status";>https://developer.twitter.com/en/docs/media/upload-media/api-reference/get-media-upload-status</a>
    *
    */
-  @RemoteMethod(httpMethod = "GET", path = "/upload")
-  public MediaStatusResponse getMediaStatus(@QueryIfNE MediaStatusRequest 
parameters );
+  @RemoteMethod(method ="GET", path = "/upload")
+  public MediaStatusResponse getMediaStatus(@Query(name = "*", skipIfEmpty = 
true) MediaStatusRequest parameters );
 
 }
diff --git 
a/streams-contrib/streams-provider-twitter/src/main/java/org/apache/streams/twitter/api/SevenDaySearch.java
 
b/streams-contrib/streams-provider-twitter/src/main/java/org/apache/streams/twitter/api/SevenDaySearch.java
index 696cd5317a..b0f3d11900 100644
--- 
a/streams-contrib/streams-provider-twitter/src/main/java/org/apache/streams/twitter/api/SevenDaySearch.java
+++ 
b/streams-contrib/streams-provider-twitter/src/main/java/org/apache/streams/twitter/api/SevenDaySearch.java
@@ -20,15 +20,14 @@
 
 import org.apache.streams.twitter.pojo.User;
 
-import org.apache.juneau.remoteable.Body;
-import org.apache.juneau.remoteable.QueryIfNE;
-import org.apache.juneau.remoteable.RemoteMethod;
-import org.apache.juneau.remoteable.Remoteable;
+import org.apache.juneau.http.annotation.Query;
+import org.apache.juneau.remote.RemoteInterface;
+import org.apache.juneau.rest.client.remote.RemoteMethod;
 
 /**
  * Interface for /search methods.
  */
-@Remoteable(path = "https://api.twitter.com/1.1/search";)
+@RemoteInterface(path = "https://api.twitter.com/1.1/search";)
 public interface SevenDaySearch {
 
   /**
@@ -38,8 +37,8 @@
    * @see <a 
href=https://developer.twitter.com/en/docs/tweets/search/api-reference/get-search-tweets";>https://developer.twitter.com/en/docs/tweets/search/api-reference/get-search-tweets</a>
    *
    */
-  @RemoteMethod(httpMethod = "GET", path = "/tweets.json")
-  public SevenDaySearchResponse sevenDaySearch(@QueryIfNE("*") 
SevenDaySearchRequest parameters);
+  @RemoteMethod(method ="GET", path = "/tweets.json")
+  public SevenDaySearchResponse sevenDaySearch(@Query(name = "*", skipIfEmpty 
= true) SevenDaySearchRequest parameters);
 
 }
 
diff --git 
a/streams-contrib/streams-provider-twitter/src/main/java/org/apache/streams/twitter/api/Statuses.java
 
b/streams-contrib/streams-provider-twitter/src/main/java/org/apache/streams/twitter/api/Statuses.java
index 23c8b078bb..fa77ef4cb2 100644
--- 
a/streams-contrib/streams-provider-twitter/src/main/java/org/apache/streams/twitter/api/Statuses.java
+++ 
b/streams-contrib/streams-provider-twitter/src/main/java/org/apache/streams/twitter/api/Statuses.java
@@ -20,13 +20,11 @@
 
 import org.apache.streams.twitter.pojo.Tweet;
 
-import org.apache.juneau.remoteable.Body;
-import org.apache.juneau.remoteable.Path;
-import org.apache.juneau.remoteable.Query;
-import org.apache.juneau.remoteable.QueryIfNE;
-import org.apache.juneau.remoteable.RemoteMethod;
-import org.apache.juneau.remoteable.Remoteable;
-import org.apache.juneau.remoteable.RequestBean;
+import org.apache.juneau.http.annotation.Path;
+import org.apache.juneau.http.annotation.Query;
+import org.apache.juneau.http.annotation.Request;
+import org.apache.juneau.remote.RemoteInterface;
+import org.apache.juneau.rest.client.remote.RemoteMethod;
 
 import java.util.List;
 
@@ -36,7 +34,7 @@
  * @see <a 
href="https://developer.twitter.com/en/docs/tweets/post-and-engage/overview";>https://developer.twitter.com/en/docs/tweets/post-and-engage/overview</a>
  * @see <a 
href="https://developer.twitter.com/en/docs/tweets/timelines/overview";>https://developer.twitter.com/en/docs/tweets/timelines/overview</a>
  */
-@Remoteable(path = "https://api.twitter.com/1.1/statuses";)
+@RemoteInterface(path = "https://api.twitter.com/1.1/statuses";)
 public interface Statuses {
 
   /**
@@ -47,8 +45,8 @@
    * @see <a 
href="https://developer.twitter.com/en/docs/tweets/timelines/api-reference/get-statuses-home_timeline";>https://developer.twitter.com/en/docs/tweets/timelines/api-reference/get-statuses-home_timeline</a>
    *
    */
-  @RemoteMethod(httpMethod = "GET", path = "/home_timeline.json")
-  public List<Tweet> homeTimeline( @QueryIfNE("*") StatusesHomeTimelineRequest 
parameters );
+  @RemoteMethod(method ="GET", path = "/home_timeline.json")
+  public List<Tweet> homeTimeline( @Query(name = "*", skipIfEmpty = true) 
StatusesHomeTimelineRequest parameters );
 
   /**
    * Returns fully-hydrated Tweet objects for up to 100 Tweets per request, as 
specified by comma-separated values passed to the id parameter.
@@ -58,8 +56,8 @@
    * @see <a 
href="https://developer.twitter.com/en/docs/tweets/post-and-engage/api-reference/get-statuses-lookup";>https://developer.twitter.com/en/docs/tweets/post-and-engage/api-reference/get-statuses-lookup</a>
    *
    */
-  @RemoteMethod(httpMethod = "GET", path = "/lookup.json")
-  public List<Tweet> lookup( @QueryIfNE("*") StatusesLookupRequest parameters);
+  @RemoteMethod(method ="GET", path = "/lookup.json")
+  public List<Tweet> lookup( @Query(name = "*", skipIfEmpty = true) 
StatusesLookupRequest parameters);
 
   /**
    * Returns the 20 most recent mentions (Tweets containing a users’s 
@screen_name) for the authenticating user.
@@ -73,8 +71,8 @@
    * @see <a 
href="https://developer.twitter.com/en/docs/tweets/timelines/api-reference/get-statuses-mentions_timeline";>https://developer.twitter.com/en/docs/tweets/timelines/api-reference/get-statuses-mentions_timeline</a>
    *
    */
-  @RemoteMethod(httpMethod = "GET", path = "/mentions_timeline.json")
-  public List<Tweet> mentionsTimeline( @QueryIfNE("*") 
StatusesMentionsTimelineRequest parameters);
+  @RemoteMethod(method ="GET", path = "/mentions_timeline.json")
+  public List<Tweet> mentionsTimeline( @Query(name = "*", skipIfEmpty = true) 
StatusesMentionsTimelineRequest parameters);
 
   /**
    * Returns a single Tweet, specified by the id parameter. The Tweet’s author 
will also be embedded within the Tweet.
@@ -84,8 +82,8 @@
    * @see <a 
href="https://developer.twitter.com/en/docs/tweets/post-and-engage/api-reference/get-statuses-show-id";>https://developer.twitter.com/en/docs/tweets/post-and-engage/api-reference/get-statuses-show-id</a>
    *
    */
-  @RemoteMethod(httpMethod = "GET", path = "/show/{id}")
-  public Tweet show( @RequestBean StatusesShowRequest parameters);
+  @RemoteMethod(method ="GET", path = "/show/{id}")
+  public Tweet show( @Request StatusesShowRequest parameters);
 
   /**
    * Returns a collection of the most recent Tweets posted by the user 
indicated by the screen_name or user_id parameters.
@@ -95,8 +93,8 @@
    * @see <a 
href="https://developer.twitter.com/en/docs/tweets/timelines/api-reference/get-statuses-user_timeline";>https://developer.twitter.com/en/docs/tweets/timelines/api-reference/get-statuses-user_timeline</a>
    *
    */
-  @RemoteMethod(httpMethod = "GET", path = "/user_timeline.json")
-  public List<Tweet> userTimeline( @QueryIfNE("*") StatusesUserTimelineRequest 
parameters);
+  @RemoteMethod(method ="GET", path = "/user_timeline.json")
+  public List<Tweet> userTimeline( @Query(name = "*", skipIfEmpty = true) 
StatusesUserTimelineRequest parameters);
 
   /**
    * Returns a collection of the 100 most recent retweets of the Tweet 
specified by the id parameter.
@@ -106,8 +104,8 @@
    * @see <a 
href="https://developer.twitter.com/en/docs/tweets/post-and-engage/api-reference/get-statuses-retweets-id";>https://developer.twitter.com/en/docs/tweets/post-and-engage/api-reference/get-statuses-retweets-id</a>
    *
    */
-  @RemoteMethod(httpMethod = "GET", path = "/retweets/{id}")
-  public List<Tweet> retweets( @RequestBean RetweetsRequest parameters);
+  @RemoteMethod(method ="GET", path = "/retweets/{id}")
+  public List<Tweet> retweets( @Request RetweetsRequest parameters);
 
   /**
    * Returns a collection of up to 100 user IDs belonging to users who have 
retweeted the Tweet specified by the id parameter.
@@ -117,8 +115,8 @@
    * @see <a 
href="https://developer.twitter.com/en/docs/tweets/post-and-engage/api-reference/get-statuses-retweeters-ids";>https://developer.twitter.com/en/docs/tweets/post-and-engage/api-reference/get-statuses-retweeters-ids</a>
    *
    */
-  @RemoteMethod(httpMethod = "GET", path = "/retweeters/ids.json")
-  public RetweeterIdsResponse retweeterIds( @QueryIfNE("*") 
RetweeterIdsRequest parameters);
+  @RemoteMethod(method ="GET", path = "/retweeters/ids.json")
+  public RetweeterIdsResponse retweeterIds( @Query(name = "*", skipIfEmpty = 
true) RetweeterIdsRequest parameters);
 
   interface StatusesShowRequestAnnotations {
 
diff --git 
a/streams-contrib/streams-provider-twitter/src/main/java/org/apache/streams/twitter/api/SuggestedUsers.java
 
b/streams-contrib/streams-provider-twitter/src/main/java/org/apache/streams/twitter/api/SuggestedUsers.java
index 14877f6da5..d4843f09a2 100644
--- 
a/streams-contrib/streams-provider-twitter/src/main/java/org/apache/streams/twitter/api/SuggestedUsers.java
+++ 
b/streams-contrib/streams-provider-twitter/src/main/java/org/apache/streams/twitter/api/SuggestedUsers.java
@@ -20,10 +20,10 @@
 
 import org.apache.streams.twitter.pojo.User;
 
-import org.apache.juneau.remoteable.Path;
-import org.apache.juneau.remoteable.QueryIfNE;
-import org.apache.juneau.remoteable.RemoteMethod;
-import org.apache.juneau.remoteable.Remoteable;
+import org.apache.juneau.http.annotation.Path;
+import org.apache.juneau.http.annotation.Query;
+import org.apache.juneau.remote.RemoteInterface;
+import org.apache.juneau.rest.client.remote.RemoteMethod;
 
 import java.util.List;
 
@@ -32,7 +32,7 @@
  *
  * @see <a 
href="https://dev.twitter.com/rest/reference";>https://dev.twitter.com/rest/reference</a>
  */
-@Remoteable(path = "https://api.twitter.com/1.1/users";)
+@RemoteInterface(path = "https://api.twitter.com/1.1/users";)
 public interface SuggestedUsers {
 
   /**
@@ -43,8 +43,8 @@
    * @see <a 
href="https://developer.twitter.com/en/docs/accounts-and-users/follow-search-get-users/api-reference/get-users-suggestions";>https://developer.twitter.com/en/docs/accounts-and-users/follow-search-get-users/api-reference/get-users-suggestions</a>
    *
    */
-  @RemoteMethod(httpMethod = "GET", path = "/suggestions.json")
-  public List<SuggestedUserCategory> categories(@QueryIfNE("lang") String 
lang);
+  @RemoteMethod(method ="GET", path = "/suggestions.json")
+  public List<SuggestedUserCategory> categories(@Query(name = "lang", 
skipIfEmpty = true) String lang);
 
   /**
    * Access the users in a given category of the Twitter suggested user list.
@@ -55,8 +55,8 @@
    * @see <a 
href="https://developer.twitter.com/en/docs/accounts-and-users/follow-search-get-users/api-reference/get-users-suggestions-slug";>https://developer.twitter.com/en/docs/accounts-and-users/follow-search-get-users/api-reference/get-users-suggestions-slug</a>
    *
    */
-  @RemoteMethod(httpMethod = "GET", path = "/suggestions/{slug}.json")
-  public SuggestedUserCategory suggestions(@Path("slug") String slug, 
@QueryIfNE("lang") String lang);
+  @RemoteMethod(method ="GET", path = "/suggestions/{slug}.json")
+  public SuggestedUserCategory suggestions(@Path("slug") String slug, 
@Query(name = "lang", skipIfEmpty = true) String lang);
 
   /**
    * Access the users in a given category of the Twitter suggested user list 
and return their most recent status if they are not a protected user.
@@ -65,7 +65,7 @@
    * @see <a 
href="https://developer.twitter.com/en/docs/accounts-and-users/follow-search-get-users/api-reference/get-users-suggestions-slug";>https://developer.twitter.com/en/docs/accounts-and-users/follow-search-get-users/api-reference/get-users-suggestions-slug</a>
    *
    */
-  @RemoteMethod(httpMethod = "GET", path = "/suggestions/{slug}/members.json")
+  @RemoteMethod(method ="GET", path = "/suggestions/{slug}/members.json")
   public List<User> members(@Path("slug") String slug);
 
 }
diff --git 
a/streams-contrib/streams-provider-twitter/src/main/java/org/apache/streams/twitter/api/ThirtyDaySearch.java
 
b/streams-contrib/streams-provider-twitter/src/main/java/org/apache/streams/twitter/api/ThirtyDaySearch.java
index e909fa76c4..3814212553 100644
--- 
a/streams-contrib/streams-provider-twitter/src/main/java/org/apache/streams/twitter/api/ThirtyDaySearch.java
+++ 
b/streams-contrib/streams-provider-twitter/src/main/java/org/apache/streams/twitter/api/ThirtyDaySearch.java
@@ -18,17 +18,15 @@
 
 package org.apache.streams.twitter.api;
 
-import org.apache.juneau.remoteable.Body;
-import org.apache.juneau.remoteable.Path;
-import org.apache.juneau.remoteable.QueryIfNE;
-import org.apache.juneau.remoteable.RemoteMethod;
-import org.apache.juneau.remoteable.Remoteable;
-
+import org.apache.juneau.http.annotation.Body;
+import org.apache.juneau.http.annotation.Path;
+import org.apache.juneau.remote.RemoteInterface;
+import org.apache.juneau.rest.client.remote.RemoteMethod;
 
 /**
  * Interface for /search methods.
  */
-@Remoteable(path = "https://api.twitter.com/1.1/"+ThirtyDaySearch.path)
+@RemoteInterface(path = "https://api.twitter.com/1.1/"+ThirtyDaySearch.path)
 public interface ThirtyDaySearch {
 
   String path = "tweets/search/30day";
@@ -42,7 +40,7 @@
    * @see <a 
href=https://developer.twitter.com/en/docs/tweets/search/overview/premium";>https://developer.twitter.com/en/docs/tweets/search/overview/premium</a>
    *
    */
-  @RemoteMethod(httpMethod = "POST", path = "/{environment}.json")
+  @RemoteMethod(method ="POST", path = "/{environment}.json")
   public ThirtyDaySearchResponse thirtyDaySearch(@Path("environment") String 
environment, @Body ThirtyDaySearchRequest searchRequest);
 
 }
diff --git 
a/streams-contrib/streams-provider-twitter/src/main/java/org/apache/streams/twitter/api/ThirtyDaySearchCounts.java
 
b/streams-contrib/streams-provider-twitter/src/main/java/org/apache/streams/twitter/api/ThirtyDaySearchCounts.java
index cb89155d5e..20064a7a03 100644
--- 
a/streams-contrib/streams-provider-twitter/src/main/java/org/apache/streams/twitter/api/ThirtyDaySearchCounts.java
+++ 
b/streams-contrib/streams-provider-twitter/src/main/java/org/apache/streams/twitter/api/ThirtyDaySearchCounts.java
@@ -18,16 +18,15 @@
 
 package org.apache.streams.twitter.api;
 
-import org.apache.juneau.remoteable.Body;
-import org.apache.juneau.remoteable.Path;
-import org.apache.juneau.remoteable.RemoteMethod;
-import org.apache.juneau.remoteable.Remoteable;
-
+import org.apache.juneau.http.annotation.Body;
+import org.apache.juneau.http.annotation.Path;
+import org.apache.juneau.remote.RemoteInterface;
+import org.apache.juneau.rest.client.remote.RemoteMethod;
 
 /**
  * Interface for /search methods.
  */
-@Remoteable(path = "https://api.twitter.com/1.1/"+ ThirtyDaySearch.path)
+@RemoteInterface(path = "https://api.twitter.com/1.1/"+ ThirtyDaySearch.path)
 public interface ThirtyDaySearchCounts {
 
   /**
@@ -39,7 +38,7 @@
    * @see <a 
href=https://developer.twitter.com/en/docs/tweets/search/api-reference/30-day-search";>https://developer.twitter.com/en/docs/tweets/search/api-reference/30-day-search</a>
    *
    */
-  @RemoteMethod(httpMethod = "POST", path = "/{environment}/counts.json")
+  @RemoteMethod(method ="POST", path = "/{environment}/counts.json")
   public ThirtyDaySearchCountsResponse 
thirtyDaySearchCounts(@Path("environment") String environment, @Body 
ThirtyDaySearchCountsRequest searchCountsRequest);
 
 }
diff --git 
a/streams-contrib/streams-provider-twitter/src/main/java/org/apache/streams/twitter/api/Twitter.java
 
b/streams-contrib/streams-provider-twitter/src/main/java/org/apache/streams/twitter/api/Twitter.java
index a91b65377a..a28ea1b58a 100644
--- 
a/streams-contrib/streams-provider-twitter/src/main/java/org/apache/streams/twitter/api/Twitter.java
+++ 
b/streams-contrib/streams-provider-twitter/src/main/java/org/apache/streams/twitter/api/Twitter.java
@@ -163,119 +163,119 @@ public static Twitter getInstance(TwitterConfiguration 
configuration) throws Ins
 
   @Override
   public List<Tweet> userTimeline(StatusesUserTimelineRequest parameters) {
-    Statuses restStatuses = restClient.getRemoteableProxy(Statuses.class, 
TwitterProviderUtil.baseUrl(configuration)+"/statuses");
+    Statuses restStatuses = restClient.getRemoteResource(Statuses.class, 
TwitterProviderUtil.baseUrl(configuration)+"/statuses");
     List<Tweet> result = restStatuses.userTimeline(parameters);
     return result;
   }
 
   @Override
   public List<Tweet> retweets(RetweetsRequest parameters) {
-    Statuses restStatuses = restClient.getRemoteableProxy(Statuses.class, 
TwitterProviderUtil.baseUrl(configuration)+"/statuses");
+    Statuses restStatuses = restClient.getRemoteResource(Statuses.class, 
TwitterProviderUtil.baseUrl(configuration)+"/statuses");
     List<Tweet> result = restStatuses.retweets(parameters);
     return result;
   }
 
   @Override
   public RetweeterIdsResponse retweeterIds(RetweeterIdsRequest parameters) {
-    Statuses restStatuses = restClient.getRemoteableProxy(Statuses.class, 
TwitterProviderUtil.baseUrl(configuration)+"/statuses");
+    Statuses restStatuses = restClient.getRemoteResource(Statuses.class, 
TwitterProviderUtil.baseUrl(configuration)+"/statuses");
     RetweeterIdsResponse result = restStatuses.retweeterIds(parameters);
     return result;
   }
 
   @Override
   public List<Tweet> homeTimeline(StatusesHomeTimelineRequest parameters) {
-    Statuses restStatuses = restClient.getRemoteableProxy(Statuses.class, 
TwitterProviderUtil.baseUrl(configuration)+"/statuses");
+    Statuses restStatuses = restClient.getRemoteResource(Statuses.class, 
TwitterProviderUtil.baseUrl(configuration)+"/statuses");
     List<Tweet> result = restStatuses.homeTimeline(parameters);
     return result;
   }
 
   @Override
   public List<Tweet> lookup(StatusesLookupRequest parameters) {
-    Statuses restStatuses = restClient.getRemoteableProxy(Statuses.class, 
TwitterProviderUtil.baseUrl(configuration)+"/statuses");
+    Statuses restStatuses = restClient.getRemoteResource(Statuses.class, 
TwitterProviderUtil.baseUrl(configuration)+"/statuses");
     List<Tweet> result = restStatuses.lookup(parameters);
     return result;
   }
 
   @Override
   public List<Tweet> mentionsTimeline(StatusesMentionsTimelineRequest 
parameters) {
-    Statuses restStatuses = restClient.getRemoteableProxy(Statuses.class, 
TwitterProviderUtil.baseUrl(configuration)+"/statuses");
+    Statuses restStatuses = restClient.getRemoteResource(Statuses.class, 
TwitterProviderUtil.baseUrl(configuration)+"/statuses");
     List<Tweet> result = restStatuses.mentionsTimeline(parameters);
     return result;
   }
 
   @Override
   public Tweet show(StatusesShowRequest parameters) {
-    Statuses restStatuses = restClient.getRemoteableProxy(Statuses.class, 
TwitterProviderUtil.baseUrl(configuration)+"/statuses");
+    Statuses restStatuses = restClient.getRemoteResource(Statuses.class, 
TwitterProviderUtil.baseUrl(configuration)+"/statuses");
     Tweet result = restStatuses.show(parameters);
     return result;
   }
 
   @Override
   public FriendsIdsResponse ids(FriendsIdsRequest parameters) {
-    Friends restFriends = restClient.getRemoteableProxy(Friends.class, 
TwitterProviderUtil.baseUrl(configuration)+"/friends");
+    Friends restFriends = restClient.getRemoteResource(Friends.class, 
TwitterProviderUtil.baseUrl(configuration)+"/friends");
     FriendsIdsResponse result = restFriends.ids(parameters);
     return result;
   }
 
   @Override
   public FriendsListResponse list(FriendsListRequest parameters) {
-    Friends restFriends = restClient.getRemoteableProxy(Friends.class, 
TwitterProviderUtil.baseUrl(configuration)+"/friends");
+    Friends restFriends = restClient.getRemoteResource(Friends.class, 
TwitterProviderUtil.baseUrl(configuration)+"/friends");
     FriendsListResponse result = restFriends.list(parameters);
     return result;
   }
 
   @Override
   public FollowersIdsResponse ids(FollowersIdsRequest parameters) {
-    Followers restFollowers = restClient.getRemoteableProxy(Followers.class, 
TwitterProviderUtil.baseUrl(configuration)+"/followers");
+    Followers restFollowers = restClient.getRemoteResource(Followers.class, 
TwitterProviderUtil.baseUrl(configuration)+"/followers");
     FollowersIdsResponse result = restFollowers.ids(parameters);
     return result;
   }
 
   @Override
   public FollowersListResponse list(FollowersListRequest parameters) {
-    Followers restFollowers = restClient.getRemoteableProxy(Followers.class, 
TwitterProviderUtil.baseUrl(configuration)+"/followers");
+    Followers restFollowers = restClient.getRemoteResource(Followers.class, 
TwitterProviderUtil.baseUrl(configuration)+"/followers");
     FollowersListResponse result = restFollowers.list(parameters);
     return result;
   }
 
   @Override
   public List<User> lookup(UsersLookupRequest parameters) {
-    Users restUsers = restClient.getRemoteableProxy(Users.class, 
TwitterProviderUtil.baseUrl(configuration)+"/users");
+    Users restUsers = restClient.getRemoteResource(Users.class, 
TwitterProviderUtil.baseUrl(configuration)+"/users");
     List<User> result = restUsers.lookup(parameters);
     return result;
   }
 
   @Override
   public List<User> search(UsersSearchRequest parameters) {
-    Users proxy = restClient.getRemoteableProxy(Users.class, 
TwitterProviderUtil.baseUrl(configuration)+"/users");
+    Users proxy = restClient.getRemoteResource(Users.class, 
TwitterProviderUtil.baseUrl(configuration)+"/users");
     List<User> result = proxy.search(parameters);
     return result;
   }
 
   @Override
   public User show(UsersShowRequest parameters) {
-    Users restUsers = restClient.getRemoteableProxy(Users.class, 
TwitterProviderUtil.baseUrl(configuration)+"/users");
+    Users restUsers = restClient.getRemoteResource(Users.class, 
TwitterProviderUtil.baseUrl(configuration)+"/users");
     User result = restUsers.show(parameters);
     return result;
   }
 
   @Override
   public List<Tweet> list(FavoritesListRequest parameters) {
-    Favorites restFavorites = restClient.getRemoteableProxy(Favorites.class, 
TwitterProviderUtil.baseUrl(configuration)+"/favorites");
+    Favorites restFavorites = restClient.getRemoteResource(Favorites.class, 
TwitterProviderUtil.baseUrl(configuration)+"/favorites");
     List<Tweet> result = restFavorites.list(parameters);
     return result;
   }
 
   @Override
   public AccountSettings settings() {
-    Account restAccount = restClient.getRemoteableProxy(Account.class, 
TwitterProviderUtil.baseUrl(configuration)+"/account");
+    Account restAccount = restClient.getRemoteResource(Account.class, 
TwitterProviderUtil.baseUrl(configuration)+"/account");
     AccountSettings result = restAccount.settings();
     return result;
   }
 
   @Override
   public User verifyCredentials() {
-    Account restAccount = restClient.getRemoteableProxy(Account.class, 
TwitterProviderUtil.baseUrl(configuration)+"/account");
+    Account restAccount = restClient.getRemoteResource(Account.class, 
TwitterProviderUtil.baseUrl(configuration)+"/account");
     User result = restAccount.verifyCredentials();
     return result;
   }
@@ -292,80 +292,80 @@ public AccountSettings 
updateSettings(UpdateProfileRequest parameters) {
 
   @Override
   public WelcomeMessagesListResponse 
listWelcomeMessages(WelcomeMessagesListRequest parameters) {
-    WelcomeMessages proxy = 
restClient.getRemoteableProxy(WelcomeMessages.class, 
TwitterProviderUtil.baseUrl(configuration)+"/direct_messages/welcome_messages");
+    WelcomeMessages proxy = 
restClient.getRemoteResource(WelcomeMessages.class, 
TwitterProviderUtil.baseUrl(configuration)+"/direct_messages/welcome_messages");
     return proxy.listWelcomeMessages(parameters);
   }
 
   @Override
   public WelcomeMessage showWelcomeMessage(Long id) {
-    WelcomeMessages proxy = 
restClient.getRemoteableProxy(WelcomeMessages.class, 
TwitterProviderUtil.baseUrl(configuration)+"/direct_messages/welcome_messages");
+    WelcomeMessages proxy = 
restClient.getRemoteResource(WelcomeMessages.class, 
TwitterProviderUtil.baseUrl(configuration)+"/direct_messages/welcome_messages");
     return proxy.showWelcomeMessage(id);
   }
 
   @Override
   public WelcomeMessageNewResponse newWelcomeMessage(WelcomeMessageNewRequest 
parameters) {
-    WelcomeMessages proxy = 
restClient.getRemoteableProxy(WelcomeMessages.class, 
TwitterProviderUtil.baseUrl(configuration)+"/direct_messages/welcome_messages");
+    WelcomeMessages proxy = 
restClient.getRemoteResource(WelcomeMessages.class, 
TwitterProviderUtil.baseUrl(configuration)+"/direct_messages/welcome_messages");
     return proxy.newWelcomeMessage(parameters);
   }
 
   @Override
   public void destroyWelcomeMessage(Long id) {
-    WelcomeMessages proxy = 
restClient.getRemoteableProxy(WelcomeMessages.class, 
TwitterProviderUtil.baseUrl(configuration)+"/direct_messages/welcome_messages");
+    WelcomeMessages proxy = 
restClient.getRemoteResource(WelcomeMessages.class, 
TwitterProviderUtil.baseUrl(configuration)+"/direct_messages/welcome_messages");
     proxy.destroyWelcomeMessage(id);
   }
 
   @Override
   public WelcomeMessageRulesListResponse 
listWelcomeMessageRules(WelcomeMessageRulesListRequest parameters) {
-    WelcomeMessageRules proxy = 
restClient.getRemoteableProxy(WelcomeMessageRules.class, 
TwitterProviderUtil.baseUrl(configuration)+"/direct_messages/welcome_messages/rules");
+    WelcomeMessageRules proxy = 
restClient.getRemoteResource(WelcomeMessageRules.class, 
TwitterProviderUtil.baseUrl(configuration)+"/direct_messages/welcome_messages/rules");
     return proxy.listWelcomeMessageRules(parameters);
   }
 
   @Override
   public WelcomeMessageRule showWelcomeMessageRule(Long id) {
-    WelcomeMessageRules proxy = 
restClient.getRemoteableProxy(WelcomeMessageRules.class, 
TwitterProviderUtil.baseUrl(configuration)+"/direct_messages/welcome_messages/rules");
+    WelcomeMessageRules proxy = 
restClient.getRemoteResource(WelcomeMessageRules.class, 
TwitterProviderUtil.baseUrl(configuration)+"/direct_messages/welcome_messages/rules");
     return proxy.showWelcomeMessageRule(id);
   }
 
   @Override
   public WelcomeMessageRule newWelcomeMessageRule(WelcomeMessageNewRuleRequest 
body) {
-    WelcomeMessageRules proxy = 
restClient.getRemoteableProxy(WelcomeMessageRules.class, 
TwitterProviderUtil.baseUrl(configuration)+"/direct_messages/welcome_messages/rules");
+    WelcomeMessageRules proxy = 
restClient.getRemoteResource(WelcomeMessageRules.class, 
TwitterProviderUtil.baseUrl(configuration)+"/direct_messages/welcome_messages/rules");
     return proxy.newWelcomeMessageRule(body);
   }
 
   @Override
   public void destroyWelcomeMessageRule(Long id) {
-    WelcomeMessageRules proxy = 
restClient.getRemoteableProxy(WelcomeMessageRules.class, 
TwitterProviderUtil.baseUrl(configuration)+"/direct_messages/welcome_messages/rules");
+    WelcomeMessageRules proxy = 
restClient.getRemoteResource(WelcomeMessageRules.class, 
TwitterProviderUtil.baseUrl(configuration)+"/direct_messages/welcome_messages/rules");
     proxy.destroyWelcomeMessageRule(id);
   }
 
   @Override
   public List<Webhook> getWebhooks() {
-    AccountActivity proxy = 
restClient.getRemoteableProxy(AccountActivity.class, 
TwitterProviderUtil.baseUrl(configuration)+"/account_activity");
+    AccountActivity proxy = 
restClient.getRemoteResource(AccountActivity.class, 
TwitterProviderUtil.baseUrl(configuration)+"/account_activity");
     return proxy.getWebhooks();
   }
 
   @Override
   public Webhook registerWebhook(String url) {
-    AccountActivity proxy = 
restClient.getRemoteableProxy(AccountActivity.class, 
TwitterProviderUtil.baseUrl(configuration)+"/account_activity");
+    AccountActivity proxy = 
restClient.getRemoteResource(AccountActivity.class, 
TwitterProviderUtil.baseUrl(configuration)+"/account_activity");
     return proxy.registerWebhook(url);
   }
 
 
   @Override
   public Boolean deleteWebhook(Long webhookId) {
-    AccountActivity proxy = 
restClient.getRemoteableProxy(AccountActivity.class, 
TwitterProviderUtil.baseUrl(configuration)+"/account_activity");
+    AccountActivity proxy = 
restClient.getRemoteResource(AccountActivity.class, 
TwitterProviderUtil.baseUrl(configuration)+"/account_activity");
     return proxy.deleteWebhook(webhookId);
   }
 
   @Override
   public Boolean putWebhook(Long webhookId) {
-    AccountActivity proxy = 
restClient.getRemoteableProxy(AccountActivity.class, 
TwitterProviderUtil.baseUrl(configuration)+"/account_activity");
+    AccountActivity proxy = 
restClient.getRemoteResource(AccountActivity.class, 
TwitterProviderUtil.baseUrl(configuration)+"/account_activity");
     return proxy.putWebhook(webhookId);
   }
 
   @Override
   public Boolean getWebhookSubscription(Long webhookId) {
-//    AccountActivity proxy = 
restClient.getRemoteableProxy(AccountActivity.class, 
TwitterProviderUtil.baseUrl(configuration)+"/account_activity");
+//    AccountActivity proxy = 
restClient.getRemoteResource(AccountActivity.class, 
TwitterProviderUtil.baseUrl(configuration)+"/account_activity");
 //    return proxy.getWebhookSubscription(webhookId);
     try {
       URIBuilder uriBuilder =
@@ -389,7 +389,7 @@ public Boolean getWebhookSubscription(Long webhookId) {
 
   @Override
   public Boolean registerWebhookSubscriptions(Long webhookId) {
-//    AccountActivity proxy = 
restClient.getRemoteableProxy(AccountActivity.class, 
TwitterProviderUtil.baseUrl(configuration)+"/account_activity");
+//    AccountActivity proxy = 
restClient.getRemoteResource(AccountActivity.class, 
TwitterProviderUtil.baseUrl(configuration)+"/account_activity");
 //    return proxy.registerWebhookSubscriptions(webhookId);
     try {
       URIBuilder uriBuilder =
@@ -412,7 +412,7 @@ public Boolean registerWebhookSubscriptions(Long webhookId) 
{
 
   @Override
   public Boolean deleteWebhookSubscriptions(Long webhookId) {
-//    AccountActivity proxy = 
restClient.getRemoteableProxy(AccountActivity.class, 
TwitterProviderUtil.baseUrl(configuration)+"/account_activity");
+//    AccountActivity proxy = 
restClient.getRemoteResource(AccountActivity.class, 
TwitterProviderUtil.baseUrl(configuration)+"/account_activity");
 //      return proxy.deleteWebhookSubscriptions(webhookId);
     try {
       URIBuilder uriBuilder =
@@ -435,38 +435,38 @@ public Boolean deleteWebhookSubscriptions(Long webhookId) 
{
 
   @Override
   public EventsListResponse listEvents(EventsListRequest parameters) {
-    DirectMessages proxy = restClient.getRemoteableProxy(DirectMessages.class, 
TwitterProviderUtil.baseUrl(configuration)+"/direct_messages");
+    DirectMessages proxy = restClient.getRemoteResource(DirectMessages.class, 
TwitterProviderUtil.baseUrl(configuration)+"/direct_messages");
     return proxy.listEvents(parameters);
   }
 
   @Override
   public EventShowResponse showEvent(Long id) {
-    DirectMessages proxy = restClient.getRemoteableProxy(DirectMessages.class, 
TwitterProviderUtil.baseUrl(configuration)+"/direct_messages");
+    DirectMessages proxy = restClient.getRemoteResource(DirectMessages.class, 
TwitterProviderUtil.baseUrl(configuration)+"/direct_messages");
     return proxy.showEvent(id);
   }
 
   @Override
   public DirectMessageEvent newEvent(MessageCreateRequest event) {
-    DirectMessages proxy = restClient.getRemoteableProxy(DirectMessages.class, 
TwitterProviderUtil.baseUrl(configuration)+"/direct_messages");
+    DirectMessages proxy = restClient.getRemoteResource(DirectMessages.class, 
TwitterProviderUtil.baseUrl(configuration)+"/direct_messages");
     return proxy.newEvent(event);
   }
 
   @Override
   public SevenDaySearchResponse sevenDaySearch(SevenDaySearchRequest event) {
-    SevenDaySearch proxy = restClient.getRemoteableProxy(SevenDaySearch.class, 
TwitterProviderUtil.baseUrl(configuration)+"/search");
+    SevenDaySearch proxy = restClient.getRemoteResource(SevenDaySearch.class, 
TwitterProviderUtil.baseUrl(configuration)+"/search");
     return proxy.sevenDaySearch(event);
   }
 
   @Override
   public ThirtyDaySearchResponse thirtyDaySearch(String environment, 
ThirtyDaySearchRequest searchRequest) {
-    ThirtyDaySearch proxy = 
restClient.getRemoteableProxy(ThirtyDaySearch.class, 
TwitterProviderUtil.baseUrl(configuration)+"/"+ThirtyDaySearch.path);
+    ThirtyDaySearch proxy = 
restClient.getRemoteResource(ThirtyDaySearch.class, 
TwitterProviderUtil.baseUrl(configuration)+"/"+ThirtyDaySearch.path);
     String env = StringUtils.defaultString(environment, 
configuration.getEnvironment());
     return proxy.thirtyDaySearch(env, searchRequest);
   }
 
   @Override
   public ThirtyDaySearchCountsResponse thirtyDaySearchCounts(String 
environment, ThirtyDaySearchCountsRequest searchCountsRequest) {
-    ThirtyDaySearchCounts proxy = 
restClient.getRemoteableProxy(ThirtyDaySearchCounts.class, 
TwitterProviderUtil.baseUrl(configuration)+"/"+ThirtyDaySearch.path);
+    ThirtyDaySearchCounts proxy = 
restClient.getRemoteResource(ThirtyDaySearchCounts.class, 
TwitterProviderUtil.baseUrl(configuration)+"/"+ThirtyDaySearch.path);
     String env = StringUtils.defaultString(environment, 
configuration.getEnvironment());
     return proxy.thirtyDaySearchCounts(env, searchCountsRequest);
   }
@@ -498,19 +498,19 @@ public DirectMessage newDM(DirectMessageNewRequest 
parameters) {
 
   @Override
   public List<SuggestedUserCategory> categories(String lang) {
-    SuggestedUsers proxy = restClient.getRemoteableProxy(SuggestedUsers.class, 
TwitterProviderUtil.baseUrl(configuration)+"/users");
+    SuggestedUsers proxy = restClient.getRemoteResource(SuggestedUsers.class, 
TwitterProviderUtil.baseUrl(configuration)+"/users");
     return proxy.categories(lang);
   }
 
   @Override
   public SuggestedUserCategory suggestions(String slug, String lang) {
-    SuggestedUsers proxy = restClient.getRemoteableProxy(SuggestedUsers.class, 
TwitterProviderUtil.baseUrl(configuration)+"/users");
+    SuggestedUsers proxy = restClient.getRemoteResource(SuggestedUsers.class, 
TwitterProviderUtil.baseUrl(configuration)+"/users");
     return proxy.suggestions(slug, lang);
   }
 
   @Override
   public List<User> members(String slug) {
-    SuggestedUsers proxy = restClient.getRemoteableProxy(SuggestedUsers.class, 
TwitterProviderUtil.baseUrl(configuration)+"/users");
+    SuggestedUsers proxy = restClient.getRemoteResource(SuggestedUsers.class, 
TwitterProviderUtil.baseUrl(configuration)+"/users");
     return proxy.members(slug);
   }
 
diff --git 
a/streams-contrib/streams-provider-twitter/src/main/java/org/apache/streams/twitter/api/Users.java
 
b/streams-contrib/streams-provider-twitter/src/main/java/org/apache/streams/twitter/api/Users.java
index 4a04bdd494..62d8a1abb4 100644
--- 
a/streams-contrib/streams-provider-twitter/src/main/java/org/apache/streams/twitter/api/Users.java
+++ 
b/streams-contrib/streams-provider-twitter/src/main/java/org/apache/streams/twitter/api/Users.java
@@ -21,11 +21,9 @@
 import org.apache.streams.twitter.pojo.Tweet;
 import org.apache.streams.twitter.pojo.User;
 
-import org.apache.juneau.remoteable.Path;
-import org.apache.juneau.remoteable.QueryIfNE;
-import org.apache.juneau.remoteable.RemoteMethod;
-import org.apache.juneau.remoteable.Remoteable;
-import org.apache.juneau.remoteable.RequestBean;
+import org.apache.juneau.http.annotation.Query;
+import org.apache.juneau.remote.RemoteInterface;
+import org.apache.juneau.rest.client.remote.RemoteMethod;
 
 import java.util.List;
 
@@ -34,7 +32,7 @@
  *
  * @see <a 
href="https://dev.twitter.com/rest/reference";>https://dev.twitter.com/rest/reference</a>
  */
-@Remoteable(path = "https://api.twitter.com/1.1/users";)
+@RemoteInterface(path = "https://api.twitter.com/1.1/users";)
 public interface Users {
 
   /**
@@ -45,8 +43,8 @@
    * @see <a 
href="https://developer.twitter.com/en/docs/accounts-and-users/follow-search-get-users/api-reference/get-users-lookup";>https://developer.twitter.com/en/docs/accounts-and-users/follow-search-get-users/api-reference/get-users-lookup</a>
    *
    */
-  @RemoteMethod(httpMethod = "GET", path = "/lookup.json")
-  public List<User> lookup( @QueryIfNE UsersLookupRequest parameters);
+  @RemoteMethod(method ="GET", path = "/lookup.json")
+  public List<User> lookup( @Query(name = "*", skipIfEmpty = true) 
UsersLookupRequest parameters);
 
   /**
    * Provides a simple, relevance-based search interface to public user 
accounts on Twitter. Try querying by topical interest, full name, company name, 
location, or other criteria. Exact match searches are not supported.
@@ -58,8 +56,8 @@
    * @see <a 
href="https://developer.twitter.com/en/docs/accounts-and-users/follow-search-get-users/api-reference/get-users-search";>https://developer.twitter.com/en/docs/accounts-and-users/follow-search-get-users/api-reference/get-users-search</a>
    *
    */
-  @RemoteMethod(httpMethod = "GET", path = "/search.json")
-  public List<User> search( @QueryIfNE UsersSearchRequest parameters);
+  @RemoteMethod(method ="GET", path = "/search.json")
+  public List<User> search( @Query(name = "*", skipIfEmpty = true) 
UsersSearchRequest parameters);
 
   /**
    * Returns a variety of information about the user specified by the required 
user_id or screen_name parameter. The author’s most recent Tweet will be 
returned inline when possible.
@@ -68,7 +66,7 @@
    * @see <a 
href="https://developer.twitter.com/en/docs/accounts-and-users/follow-search-get-users/api-reference/get-users-show";>https://developer.twitter.com/en/docs/accounts-and-users/follow-search-get-users/api-reference/get-users-show</a>
    *
    */
-  @RemoteMethod(httpMethod = "GET", path = "/show.json")
-  public User show( @QueryIfNE UsersShowRequest parameters);
+  @RemoteMethod(method ="GET", path = "/show.json")
+  public User show( @Query(name = "*", skipIfEmpty = true) UsersShowRequest 
parameters);
 
 }
diff --git 
a/streams-contrib/streams-provider-twitter/src/main/java/org/apache/streams/twitter/api/WelcomeMessageRules.java
 
b/streams-contrib/streams-provider-twitter/src/main/java/org/apache/streams/twitter/api/WelcomeMessageRules.java
index 4046dc97b9..49d58945b8 100644
--- 
a/streams-contrib/streams-provider-twitter/src/main/java/org/apache/streams/twitter/api/WelcomeMessageRules.java
+++ 
b/streams-contrib/streams-provider-twitter/src/main/java/org/apache/streams/twitter/api/WelcomeMessageRules.java
@@ -21,18 +21,17 @@
 import org.apache.streams.twitter.pojo.WelcomeMessage;
 import org.apache.streams.twitter.pojo.WelcomeMessageRule;
 
-import org.apache.juneau.remoteable.Body;
-import org.apache.juneau.remoteable.Query;
-import org.apache.juneau.remoteable.QueryIfNE;
-import org.apache.juneau.remoteable.RemoteMethod;
-import org.apache.juneau.remoteable.Remoteable;
+import org.apache.juneau.http.annotation.Body;
+import org.apache.juneau.http.annotation.Query;
+import org.apache.juneau.remote.RemoteInterface;
+import org.apache.juneau.rest.client.remote.RemoteMethod;
 
 /**
  * Interface for /direct_messages/welcome_messages/rules methods.
  *
  * @see <a 
href="https://dev.twitter.com/rest/reference";>https://dev.twitter.com/rest/reference</a>
  */
-@Remoteable(path = 
"https://api.twitter.com/1.1/direct_messages/welcome_messages/rules";)
+@RemoteInterface(path = 
"https://api.twitter.com/1.1/direct_messages/welcome_messages/rules";)
 public interface WelcomeMessageRules {
 
   /**
@@ -42,8 +41,8 @@
    * @see <a 
href="https://developer.twitter.com/en/docs/direct-messages/welcome-messages/api-reference/list-welcome-message-rules";>https://developer.twitter.com/en/docs/direct-messages/welcome-messages/api-reference/list-welcome-message-rules</a>
    *
    */
-  @RemoteMethod(httpMethod = "GET", path = "/list.json")
-  public WelcomeMessageRulesListResponse listWelcomeMessageRules(@QueryIfNE 
WelcomeMessageRulesListRequest parameters);
+  @RemoteMethod(method ="GET", path = "/list.json")
+  public WelcomeMessageRulesListResponse listWelcomeMessageRules(@Query(name = 
"*", skipIfEmpty = true) WelcomeMessageRulesListRequest parameters);
 
   /**
    * Returns a Welcome Message Rule by the given id.
@@ -52,7 +51,7 @@
    * @see <a 
href="https://developer.twitter.com/en/docs/direct-messages/welcome-messages/api-reference/get-welcome-message-rule";>https://developer.twitter.com/en/docs/direct-messages/welcome-messages/api-reference/get-welcome-message-rule</a>
    *
    */
-  @RemoteMethod(httpMethod = "GET", path = "/show.json")
+  @RemoteMethod(method ="GET", path = "/show.json")
   public WelcomeMessageRule showWelcomeMessageRule(@Query("id") Long id);
 
   /**
@@ -66,7 +65,7 @@
    * @see <a 
href="https://developer.twitter.com/en/docs/direct-messages/welcome-messages/api-reference/new-welcome-message-rule";>https://developer.twitter.com/en/docs/direct-messages/welcome-messages/api-reference/new-welcome-message-rule</a>
    *
    */
-  @RemoteMethod(httpMethod = "POST", path = "/new.json")
+  @RemoteMethod(method ="POST", path = "/new.json")
   public WelcomeMessageRule newWelcomeMessageRule(@Body 
WelcomeMessageNewRuleRequest body);
 
   /**
@@ -75,7 +74,7 @@
    * @see <a 
href="https://developer.twitter.com/en/docs/direct-messages/welcome-messages/api-reference/delete-welcome-message-rule";>https://developer.twitter.com/en/docs/direct-messages/welcome-messages/api-reference/delete-welcome-message-rule</a>
    *
    */
-  @RemoteMethod(httpMethod = "DELETE", path = "/destroy.json")
+  @RemoteMethod(method ="DELETE", path = "/destroy.json")
   public void destroyWelcomeMessageRule(@Query("id") Long id);
 
 }
diff --git 
a/streams-contrib/streams-provider-twitter/src/main/java/org/apache/streams/twitter/api/WelcomeMessages.java
 
b/streams-contrib/streams-provider-twitter/src/main/java/org/apache/streams/twitter/api/WelcomeMessages.java
index bdf95130f9..39314ac27e 100644
--- 
a/streams-contrib/streams-provider-twitter/src/main/java/org/apache/streams/twitter/api/WelcomeMessages.java
+++ 
b/streams-contrib/streams-provider-twitter/src/main/java/org/apache/streams/twitter/api/WelcomeMessages.java
@@ -20,19 +20,17 @@
 
 import org.apache.streams.twitter.pojo.WelcomeMessage;
 
-import org.apache.juneau.remoteable.Body;
-import org.apache.juneau.remoteable.Query;
-import org.apache.juneau.remoteable.QueryIfNE;
-import org.apache.juneau.remoteable.RemoteMethod;
-import org.apache.juneau.remoteable.Remoteable;
-import org.apache.juneau.remoteable.RequestBean;
+import org.apache.juneau.http.annotation.Body;
+import org.apache.juneau.http.annotation.Query;
+import org.apache.juneau.remote.RemoteInterface;
+import org.apache.juneau.rest.client.remote.RemoteMethod;
 
 /**
  * Interface for /direct_messages/welcome_messages methods.
  *
  * @see <a 
href="https://developer.twitter.com/en/docs/direct-messages/welcome-messages/api-reference";>https://developer.twitter.com/en/docs/direct-messages/welcome-messages/api-reference</a>
  */
-@Remoteable(path = 
"https://api.twitter.com/1.1/direct_messages/welcome_messages";)
+@RemoteInterface(path = 
"https://api.twitter.com/1.1/direct_messages/welcome_messages";)
 public interface WelcomeMessages {
 
   /**
@@ -42,8 +40,8 @@
    * @see <a 
href="https://developer.twitter.com/en/docs/direct-messages/welcome-messages/api-reference/list-welcome-messages";>https://developer.twitter.com/en/docs/direct-messages/welcome-messages/api-reference/list-welcome-messages</a>
    *
    */
-  @RemoteMethod(httpMethod = "GET", path = "/list.json")
-  public WelcomeMessagesListResponse listWelcomeMessages(@QueryIfNE("*") 
WelcomeMessagesListRequest parameters);
+  @RemoteMethod(method ="GET", path = "/list.json")
+  public WelcomeMessagesListResponse listWelcomeMessages(@Query(name = "*", 
skipIfEmpty = true) WelcomeMessagesListRequest parameters);
 
   /**
    * Returns a Welcome Message by the given id.
@@ -52,7 +50,7 @@
    * @see <a 
href="https://developer.twitter.com/en/docs/direct-messages/welcome-messages/api-reference/get-welcome-message";>https://developer.twitter.com/en/docs/direct-messages/welcome-messages/api-reference/get-welcome-message</a>
    *
    */
-  @RemoteMethod(httpMethod = "GET", path = "/show.json")
+  @RemoteMethod(method ="GET", path = "/show.json")
   public WelcomeMessage showWelcomeMessage(@Query("id") Long id);
 
   /**
@@ -62,7 +60,7 @@
    * @see <a 
href="https://developer.twitter.com/en/docs/direct-messages/welcome-messages/api-reference/new-welcome-message";>https://developer.twitter.com/en/docs/direct-messages/welcome-messages/api-reference/new-welcome-message</a>
    *
    */
-  @RemoteMethod(httpMethod = "POST", path = "/new.json")
+  @RemoteMethod(method ="POST", path = "/new.json")
   public WelcomeMessageNewResponse newWelcomeMessage(@Body 
WelcomeMessageNewRequest messageNewRequest);
 
   /**
@@ -70,7 +68,7 @@
    *
    * @see <a 
href="https://developer.twitter.com/en/docs/direct-messages/welcome-messages/api-reference/delete-welcome-message";>https://developer.twitter.com/en/docs/direct-messages/welcome-messages/api-reference/delete-welcome-message</a>
    */
-  @RemoteMethod(httpMethod = "DELETE", path = "/destroy.json")
+  @RemoteMethod(method ="DELETE", path = "/destroy.json")
   public void destroyWelcomeMessage(@Query("id") Long id);
 
 }
diff --git 
a/streams-contrib/streams-provider-twitter/src/main/java/org/apache/streams/twitter/provider/SevenDaySearchProviderTask.java
 
b/streams-contrib/streams-provider-twitter/src/main/java/org/apache/streams/twitter/provider/SevenDaySearchProviderTask.java
index ae52174818..e97b5e90f9 100644
--- 
a/streams-contrib/streams-provider-twitter/src/main/java/org/apache/streams/twitter/provider/SevenDaySearchProviderTask.java
+++ 
b/streams-contrib/streams-provider-twitter/src/main/java/org/apache/streams/twitter/provider/SevenDaySearchProviderTask.java
@@ -110,10 +110,13 @@ public void run() {
   }
 
   public boolean shouldContinuePulling(int count, int page_count, int 
item_count) {
-    return (
-        count > 0
-            && item_count < provider.getConfig().getMaxItems()
-            && page_count <= provider.getConfig().getMaxPages());
+    if ( item_count >= provider.getConfig().getMaxItems() ) {
+      return false;
+    } else if (page_count >= provider.getConfig().getMaxPages()) {
+      return false;
+    } else {
+      return ( count > 0 );
+    }
   }
 
   @Override
diff --git 
a/streams-contrib/streams-provider-twitter/src/main/java/org/apache/streams/twitter/provider/ThirtyDaySearchProviderTask.java
 
b/streams-contrib/streams-provider-twitter/src/main/java/org/apache/streams/twitter/provider/ThirtyDaySearchProviderTask.java
index b4f3618645..78ae5ab55c 100644
--- 
a/streams-contrib/streams-provider-twitter/src/main/java/org/apache/streams/twitter/provider/ThirtyDaySearchProviderTask.java
+++ 
b/streams-contrib/streams-provider-twitter/src/main/java/org/apache/streams/twitter/provider/ThirtyDaySearchProviderTask.java
@@ -108,10 +108,13 @@ public void run() {
   }
 
   public boolean shouldContinuePulling(int count, int page_count, int 
item_count) {
-    return (
-      count > 0
-        && item_count < provider.getConfig().getMaxItems()
-        && page_count <= provider.getConfig().getMaxPages());
+    if (item_count >= provider.getConfig().getMaxItems()) {
+      return false;
+    } else if (page_count >= provider.getConfig().getMaxPages()) {
+      return false;
+    } else {
+      return (count > 0);
+    }
   }
 
   @Override
diff --git 
a/streams-contrib/streams-provider-twitter/src/main/java/org/apache/streams/twitter/provider/TwitterTimelineProviderTask.java
 
b/streams-contrib/streams-provider-twitter/src/main/java/org/apache/streams/twitter/provider/TwitterTimelineProviderTask.java
index 6bc9822393..ad893e4e68 100644
--- 
a/streams-contrib/streams-provider-twitter/src/main/java/org/apache/streams/twitter/provider/TwitterTimelineProviderTask.java
+++ 
b/streams-contrib/streams-provider-twitter/src/main/java/org/apache/streams/twitter/provider/TwitterTimelineProviderTask.java
@@ -107,10 +107,13 @@ public void run() {
   }
 
   public boolean shouldContinuePulling(int count, int page_count, int 
item_count) {
-    return (
-        count > 0
-            && item_count < provider.getConfig().getMaxItems()
-            && page_count <= provider.getConfig().getMaxPages());
+    if (item_count == provider.getConfig().getMaxItems()) {
+      return false;
+    } else if (page_count == provider.getConfig().getMaxPages()) {
+      return false;
+    } else {
+      return (count > 0);
+    }
   }
 
 
diff --git 
a/streams-contrib/streams-provider-twitter/src/test/java/org/apache/streams/twitter/test/api/TwitterIT.java
 
b/streams-contrib/streams-provider-twitter/src/test/java/org/apache/streams/twitter/test/api/TwitterIT.java
index aac13e4c51..d11e5771f6 100644
--- 
a/streams-contrib/streams-provider-twitter/src/test/java/org/apache/streams/twitter/test/api/TwitterIT.java
+++ 
b/streams-contrib/streams-provider-twitter/src/test/java/org/apache/streams/twitter/test/api/TwitterIT.java
@@ -235,8 +235,9 @@ public void testStatusesShow() throws Exception {
   public void testRetweets() throws Exception {
     Statuses statuses = Twitter.getInstance(config);
     nonNull(statuses);
+    Long testId = 
StreamsConfigurator.getConfig().getLong("org.apache.streams.twitter.test.api.TwitterIT.testRetweets.testId");
     RetweetsRequest retweetsRequest = new RetweetsRequest();
-    retweetsRequest.setId(947621735511105538l);
+    retweetsRequest.setId(testId);
     List<Tweet> retweets = statuses.retweets(retweetsRequest);
     nonNull(retweets);
     assertThat("retweets.size() > 0", retweets.size() > 0);
@@ -246,8 +247,9 @@ public void testRetweets() throws Exception {
   public void testRetweeterIds() throws Exception {
     Statuses statuses = Twitter.getInstance(config);
     nonNull(statuses);
+    Long testId = 
StreamsConfigurator.getConfig().getLong("org.apache.streams.twitter.test.api.TwitterIT.testRetweeterIds.testId");
     RetweeterIdsRequest retweeterIdsRequest = new RetweeterIdsRequest();
-    retweeterIdsRequest.setId(947621735511105538l);
+    retweeterIdsRequest.setId(testId);
     RetweeterIdsResponse response = statuses.retweeterIds(retweeterIdsRequest);
     nonNull(response);
     List<String> retweeterIds = response.getIds();
@@ -290,8 +292,9 @@ public void testUsersLookupByScreenName() throws Exception {
   public void testUserSearch() throws Exception {
     Users users = Twitter.getInstance(config);
     nonNull(users);
+    String testQuery = 
StreamsConfigurator.getConfig().getString("org.apache.streams.twitter.test.api.TwitterIT.testUserSearch.testQuery");
     UsersSearchRequest searchRequest = new UsersSearchRequest();
-    searchRequest.setQ("big data");
+    searchRequest.setQ(testQuery);
     List<User> searchResponse = users.search(searchRequest);
     nonNull(searchResponse);
     assertThat("searchResponse.size() > 0", searchResponse.size() > 0);
@@ -301,8 +304,9 @@ public void testUserSearch() throws Exception {
   public void testSevenDaySearch() throws Exception {
     SevenDaySearch search = Twitter.getInstance(config);
     nonNull(search);
+    String testQuery = 
StreamsConfigurator.getConfig().getString("org.apache.streams.twitter.test.api.TwitterIT.testSevenDaySearch.testQuery");
     SevenDaySearchRequest searchRequest = new SevenDaySearchRequest();
-    searchRequest.setQ("big data");
+    searchRequest.setQ(testQuery);
     SevenDaySearchResponse searchResponse = 
search.sevenDaySearch(searchRequest);
     nonNull(searchResponse);
     assertThat("searchResponse.getStatuses().size() > 0", 
searchResponse.getStatuses().size() > 0);
@@ -310,9 +314,9 @@ public void testSevenDaySearch() throws Exception {
 
   @Test(dependsOnGroups = {"Account"}, groups = {"SuggestedUsers"})
   public void testSuggestedUsersCategories() throws Exception {
-    String testLang = "en";
     SuggestedUsers suggestedUsers = Twitter.getInstance(config);
     nonNull(suggestedUsers);
+    String testLang = 
StreamsConfigurator.getConfig().getString("org.apache.streams.twitter.test.api.TwitterIT.testSuggestedUsersCategories.testLang");
     List<SuggestedUserCategory> categories = 
suggestedUsers.categories(testLang);
     nonNull(categories);
     assertThat("categories.size() > 0", categories.size() > 0);
@@ -332,8 +336,9 @@ public void testSuggestedUsersCategories() throws Exception 
{
   public void testThirtyDaySearch() throws Exception {
     ThirtyDaySearch search = Twitter.getInstance(config);
     nonNull(search);
+    String testQuery = 
StreamsConfigurator.getConfig().getString("org.apache.streams.twitter.test.api.TwitterIT.testThirtyDaySearch.testQuery");
     ThirtyDaySearchRequest searchRequest = new ThirtyDaySearchRequest();
-    searchRequest.setQuery("big data");
+    searchRequest.setQuery(testQuery);
     ThirtyDaySearchResponse searchResponse = 
search.thirtyDaySearch(config.getEnvironment(), searchRequest);
     nonNull(searchResponse);
     assertThat("searchResponse.getResults().size() > 0", 
searchResponse.getResults().size() > 0);
@@ -352,8 +357,9 @@ public void testThirtyDaySearch() throws Exception {
   public void testThirtyDaySearchCounts() throws Exception {
     ThirtyDaySearchCounts searchCounts = Twitter.getInstance(config);
     nonNull(searchCounts);
+    String testQuery = 
StreamsConfigurator.getConfig().getString("org.apache.streams.twitter.test.api.TwitterIT.testThirtyDayCounts.testQuery");
     ThirtyDaySearchCountsRequest searchRequest = new 
ThirtyDaySearchCountsRequest();
-    searchRequest.setQuery("big data");
+    searchRequest.setQuery(testQuery);
     ThirtyDaySearchCountsResponse searchCountsResponse = 
searchCounts.thirtyDaySearchCounts(config.getEnvironment(), searchRequest);
     nonNull(searchCountsResponse);
     assertThat("searchCountsResponse.getTotalCounts() > 0", 
searchCountsResponse.getTotalCount() > 0);
diff --git 
a/streams-contrib/streams-provider-twitter/src/test/java/org/apache/streams/twitter/test/providers/TwitterEngagersProviderIT.java
 
b/streams-contrib/streams-provider-twitter/src/test/java/org/apache/streams/twitter/test/providers/TwitterEngagersProviderIT.java
index 60c3d40a5e..24e1bfcb43 100644
--- 
a/streams-contrib/streams-provider-twitter/src/test/java/org/apache/streams/twitter/test/providers/TwitterEngagersProviderIT.java
+++ 
b/streams-contrib/streams-provider-twitter/src/test/java/org/apache/streams/twitter/test/providers/TwitterEngagersProviderIT.java
@@ -18,6 +18,7 @@
 
 package org.apache.streams.twitter.test.providers;
 
+import org.apache.streams.config.StreamsConfigurator;
 import org.apache.streams.twitter.provider.TwitterEngagersProvider;
 
 import org.junit.Assert;
diff --git 
a/streams-contrib/streams-provider-twitter/src/test/java/org/apache/streams/twitter/test/providers/TwitterSevenDaySearchProviderIT.java
 
b/streams-contrib/streams-provider-twitter/src/test/java/org/apache/streams/twitter/test/providers/TwitterSevenDaySearchProviderIT.java
index 954ba3ae62..b4b6492a7e 100644
--- 
a/streams-contrib/streams-provider-twitter/src/test/java/org/apache/streams/twitter/test/providers/TwitterSevenDaySearchProviderIT.java
+++ 
b/streams-contrib/streams-provider-twitter/src/test/java/org/apache/streams/twitter/test/providers/TwitterSevenDaySearchProviderIT.java
@@ -18,6 +18,7 @@
 
 package org.apache.streams.twitter.test.providers;
 
+import org.apache.streams.config.StreamsConfigurator;
 import org.apache.streams.twitter.provider.SevenDaySearchProvider;
 import org.apache.streams.twitter.provider.TwitterTimelineProvider;
 
@@ -30,7 +31,10 @@
 import java.io.FileReader;
 import java.io.LineNumberReader;
 
-@Test(dependsOnGroups = {"Account"}, groups = {"Providers"})
+/*
+ This IT is disabled by default because the number of results it gets to too 
dependant on circumstances.
+ */
+@Test(dependsOnGroups = {"Account"}, enabled = false, groups = {"Providers"})
 public class TwitterSevenDaySearchProviderIT {
 
   private static final Logger LOGGER = 
LoggerFactory.getLogger(TwitterSevenDaySearchProviderIT.class);
@@ -65,7 +69,9 @@ public void testTwitterSevenDaySearchProvider() throws 
Exception {
 
     while (outCounter.readLine() != null) {}
 
-    Assert.assertEquals (outCounter.getLineNumber(), 100);
+    Integer max_items = 
StreamsConfigurator.getConfig().getInt("org.apache.streams.twitter.config.SevenDaySearchProviderConfiguration.max_items");
+
+    Assert.assertEquals (outCounter.getLineNumber(), max_items.intValue());
 
   }
 }
diff --git 
a/streams-contrib/streams-provider-twitter/src/test/java/org/apache/streams/twitter/test/providers/TwitterTimelineProviderIT.java
 
b/streams-contrib/streams-provider-twitter/src/test/java/org/apache/streams/twitter/test/providers/TwitterTimelineProviderIT.java
index 89a406fc52..d680c83eb2 100644
--- 
a/streams-contrib/streams-provider-twitter/src/test/java/org/apache/streams/twitter/test/providers/TwitterTimelineProviderIT.java
+++ 
b/streams-contrib/streams-provider-twitter/src/test/java/org/apache/streams/twitter/test/providers/TwitterTimelineProviderIT.java
@@ -18,6 +18,7 @@
 
 package org.apache.streams.twitter.test.providers;
 
+import org.apache.streams.config.StreamsConfigurator;
 import org.apache.streams.twitter.provider.TwitterTimelineProvider;
 
 import org.slf4j.Logger;
@@ -64,7 +65,9 @@ public void testTwitterTimelineProvider() throws Exception {
 
     while (outCounter.readLine() != null) {}
 
-    Assert.assertEquals (outCounter.getLineNumber(), 1000);
+    Integer max_items = 
StreamsConfigurator.getConfig().getInt("org.apache.streams.twitter.config.TwitterTimelineProviderConfiguration.max_items");
+
+    Assert.assertEquals (outCounter.getLineNumber(), max_items.intValue());
 
   }
 }
diff --git 
a/streams-contrib/streams-provider-twitter/src/test/resources/TwitterIT.conf 
b/streams-contrib/streams-provider-twitter/src/test/resources/TwitterIT.conf
index 0bf774ef22..81b3e5007c 100644
--- a/streams-contrib/streams-provider-twitter/src/test/resources/TwitterIT.conf
+++ b/streams-contrib/streams-provider-twitter/src/test/resources/TwitterIT.conf
@@ -16,7 +16,16 @@
 # under the License.
 include "../../../../twitter.conf"
 org.apache.streams.twitter.config.TwitterConfiguration {
-  #debug = true
+  debug = true
   retrySleepMs = 100
   retryMax = 1
 }
+org.apache.streams.twitter.test.api.TwitterIT {
+  testRetweets.testId = 1049134195354865665
+  testRetweeterIds.testId = 1049134195354865665
+  testSevenDaySearch.testQuery = "data"
+  testSuggestedUsersCategories.testLang = "en"
+  testThirtyDayCounts.testQuery = "data"
+  testThirtyDaySearch.testQuery = "data"
+  testUserSearch.testQuery = "data"
+}
diff --git 
a/streams-contrib/streams-provider-twitter/src/test/resources/TwitterSevenDaySearchProviderIT.conf
 
b/streams-contrib/streams-provider-twitter/src/test/resources/TwitterSevenDaySearchProviderIT.conf
index 149f4d1450..db6d625725 100644
--- 
a/streams-contrib/streams-provider-twitter/src/test/resources/TwitterSevenDaySearchProviderIT.conf
+++ 
b/streams-contrib/streams-provider-twitter/src/test/resources/TwitterSevenDaySearchProviderIT.conf
@@ -16,7 +16,7 @@
 # under the License.
 include "../../../../twitter.conf"
 org.apache.streams.twitter.config.SevenDaySearchProviderConfiguration {
-  max_items = 100
-  max_pages = 10
+  max_items = 20
+  max_pages = 20
   q = "data"
 }
\ No newline at end of file
diff --git 
a/streams-pojo/src/main/java/org/apache/streams/juneau/ListSerializer.java 
b/streams-pojo/src/main/java/org/apache/streams/juneau/ListSerializer.java
deleted file mode 100644
index d73729ceb6..0000000000
--- a/streams-pojo/src/main/java/org/apache/streams/juneau/ListSerializer.java
+++ /dev/null
@@ -1,44 +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
- *
- *   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.streams.juneau;
-
-import org.apache.commons.lang3.StringUtils;
-import org.apache.juneau.httppart.HttpPartType;
-import org.apache.juneau.httppart.HttpPartSerializer;
-
-import java.util.List;
-
-/**
- * Serializes {@link java.util.List} as appropriately delimited {@link String 
Strings}.
- */
-public class ListSerializer implements HttpPartSerializer {
-
-  @Override
-  public String serialize(HttpPartType type, Object value) {
-    List list = (List) value;
-    if( list.size() > 0 ) {
-      if( type.equals(HttpPartType.QUERY)) {
-        return StringUtils.join(list, ",");
-      } else if( type.equals(HttpPartType.PATH)) {
-        return StringUtils.join(list, "/");
-      }
-    }
-    return null;
-  }
-}


 

----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on GitHub and use the
URL above to go to the specific comment.
 
For queries about this service, please contact Infrastructure at:
us...@infra.apache.org


> Upgrade Juneau to 7.2.1
> -----------------------
>
>                 Key: STREAMS-615
>                 URL: https://issues.apache.org/jira/browse/STREAMS-615
>             Project: Streams
>          Issue Type: Task
>            Reporter: Steve Blackmon
>            Priority: Major
>
> Upgrade Juneau to 7.2.1



--
This message was sent by Atlassian JIRA
(v7.6.3#76005)

Reply via email to