在 NetBeans 模块中创建 REST 风格的服务客户端
从 NetBeans IDE 6.9 开始,在 NetBeans 模块项目中提供了本机 REST 支持。现在可以直接在 NetBeans 模块中生成 REST 风格的客户端代码。还可以在 Java 或应用程序中插入 Jersey REST 风格的客户端代码。
在本教程中,将创建一个 NetBeans 平台应用程序,该应用程序使用 Twitter "What Are You Doing" 服务,显示 Twitter 好友的状态消息列表。首先,创建平台应用程序。选择应用程序中所需的库。然后创建一个 NetBeans 模块。最后,向模块中添加一个 REST 风格的客户端和一些基本显示元素。客户端使用“基本”授权。
NetBeans 模块中更为复杂的 REST 风格的客户端示例可在内置的 NetBeans 样例中获得。转至“新建项目”>“样例”>“NetBeans 模块”>“Facebook 模块样例”。
目录
要学习本教程,您需要具备以下软件和资源。
创建平台应用程序
可以将 NetBeans IDE 库添加到 NetBeans 平台应用程序中。在此部分,将创建平台应用程序并添加需要的库。
创建模块套件:
- 单击“新建项目 (Ctrl-Shift-N)”。“新建项目”向导打开。
- 选择“NetBeans 模块”类别。然后选择“NetBeans 平台应用程序”项目。单击“下一步”。
- 将该项目命名为 RestfulClientPlatformApp。为该项目选择一个位置。接受其他缺省设置,然后单击“完成”。RestfulClientPlatformApp 项目出现在“项目”窗口中。
- 在“项目”窗口中,右键单击 "RestfulClientPlatformApp" 项目节点,然后选择“属性”。属性对话框打开。
- 在“属性”对话框中,选择“库”类别。请注意,仅包括 "Platform" 库。
- 展开 "Enterprise" 库的节点。勾选与“REST 风格的 Web 服务库”对应的“包含”框。

- “解决”按钮以红色突出显示,因为 REST 风格的 Web 服务库依赖于其他未包含在套件中的库。单击“解决”按钮以包含这些库。
- 单击“确定”。平台应用程序已准备就绪,可以创建客户端模块了。
创建客户端模块
仅需几个步骤,就可创建一个用作 Twitter "What Are You Doing" 服务客户端的模块。
创建模块和客户端功能:
- 在“项目”窗口中,右键单击 RestfulClientPlatformApp 的“模块”子节点,然后选择“添加新模块...”。此时打开“新建模块项目”向导。
- 将该模块命名为 TwitterClientModule。接受其他字段中的缺省设置,然后单击“下一步”。此时打开“基本模块配置”面板。
- 给代码名称基取一个任意的名称,例如 org.my.twitter.friends。接受其他字段中的缺省设置,然后单击“完成”。TwitterClientModule 现在出现在“项目”窗口中平台应用程序的“模块”节点下面。
- 右键单击 "TwitterClientModule" 节点,然后选择“打开项目”。此时 "TwitterClientModule" 节点出现在“项目”窗口的根级别处。

- 选择新的根级别的 "TwitterClientModule" 节点。启动“新建文件”向导(通过 Ctrl-N 快捷键,或“新建文件”图标,或节点的上下文菜单)。
- 在“新建文件”向导中,选择“Web 服务”类别和“REST 风格的 Java 客户端”文件类型。单击“下一步”。此时打开“新建 REST 风格的 Java 客户端”面板。
- 将该类命名为 TwitterClient,然后给它取一个任意的包名称,或选择之前创建的代码名称基。

- 在“选择 REST 资源”的下面,选择“IDE 中的已注册服务”。单击“浏览”,然后浏览 "Twitter" > "Twitter OAuth" > "[statuses]" > "[friends_timeline.{format}]"。选择该资源,然后单击“确定”。

- 此时会自动选择 OAuth 作为验证类型。接受所有缺省值,然后单击“完成”。

- 此时打开一个警告对话框。该对话框询问是否希望通过 WADL 文件中的 XML 架构引用来生成 Java 工件。单击“是”。
- 可能会出现另一个警告,询问您是否将模块添加到类路径中。单击“确定”。

- 如果您需要将模块添加到类路径中,则右键单击 "TwitterClientModule" 节点,然后打开其“项目属性”。转至“库”部分,然后使用“添加依赖关系”按钮添加模块。此按钮会打开模块依赖关系的列表以便于浏览。

此时会生成 TwitterClient 类,并且该类会在编辑器中打开。TwitterClient 类很复杂,其中包含以下字段、方法和内部类:
- CONSUMER_KEY:使用方键值字符串
- CONSUMER_SECRET:使用方密钥字符串
- initOAuth():用于 OAuh 初始化的方法
- getFriendsTimeline():对应于 HTTP 方法 getFriendsTimeline(来自 REST 资源)的方法
- makeOAuthRequestUnique():对于一个会话中的多个 API 调用非常有用
- login:用于登录 Twitter 应用程序(强制授权)。此方法会调用另外两个生成的方法:getOAuthAccessToken 和 getOAuthRequestToken。
接下来您会从 Twitter 获取 OAuth 键值,并将它们添加到 TwitterClient 中。
从 Twitter 获取 OAuth 键值
为了使 NetBeans 平台应用程序能够访问 Twitter 数据,需要从 Twitter 获取 CUSTOMER 和 CUSTOMER_SECRET 键值,以及验证字符串。Twitter 使用 OAuth 授权,而 OAuth 授权需要这些键值。但是,预计 OAuth 将设置为可由服务器上的 Web 应用程序调用。为了获取授权码,您要注册“伪”Web 应用程序。
从 Twitter 获取 OAuth 键值:
- 打开浏览器。转到 Twitter > Applications(应用程序)页,然后单击 Register a new application(注册新的应用程序)。您需要登录 Twitter 帐户。如果您具有多个帐户,请确保您登录到正确的帐户。
- 在 Application Name(应用程序名称)文本字段中键入 NB Platform Friends Application。
- 在 Description(描述)字段中键入描述。此字段为必填字段。可以键入类似于 "NetBeans Platform application calling the friends_timeline operation" 的内容。
- 在 Application Website(应用程序网站)字段中键入任意 URL。
- 在 Application Type(应用程序类型)选项中,选择 "Client"(客户端)单选按钮。
- 在 Default Access Type(缺省访问类型)选项中,选择 "Read and Write"(读写)单选按钮。
- 将其他选项保留为缺省设置,然后按 "Save"(保存)。此时会打开浏览器页面,其中包含您已注册的应用程序的详细信息。重要的详细信息是 Consumer key(使用方键值)和 Consumer secret(使用方密钥)。
- 从浏览器中复制 "Consumer key"(使用方键值)。在 IDE 中,找到其中设置 CONSUMER_KEY 的行。在引号之间粘贴使用方键值。

- 将浏览器中的使用方密钥键值复制并粘贴到 TwitterClient。保存所做的更改。
设计窗口
要完成此项目,请添加一个窗口。使用 UI 组件填充窗口并添加操作,以便在例如单击某个按钮时将显示好友状态列表。
设计窗口:
- 在“项目”窗口中,右键单击模块的节点,然后选择“新建”>“窗口”。此时打开显示“基本设置”面板的“新建窗口”向导。
- 在“基本设置”面板中,选择 "editor" 窗口位置,选择“在应用程序启动时打开”,然后单击“下一步”。此时打开“名称、图标和位置”面板。
- 在“类名前缀”字段中,键入 twitterFriendsStatus。选择 org.my.twitter.friends 包。单击“完成”。

- 在“设计”视图中将打开 twitterFriendsStatusTopComponent 文件。Swing UI 组件的组件面板在右侧打开。

- 将以下 GUI 元素拖动到设计区域:
| 按钮 |
Get Friends' Statuses |
将变量名称更改为 getStatusesButton。
取消选中 "enabled" 属性
|
| 按钮 |
Log in |
将变量名称更改为 loginButton |
| 滚动窗格 |
-- |
|
| 文本区域 |
-- |
拖至滚动窗格中 |
调整文本区域/滚动窗格的大小,并根据您的喜好对齐按钮。

- 双击 "Login" 按钮。IDE 为该按钮生成一个操作方法,而编辑器切换至“源”视图,并且其焦点位于操作方法上。
- 将以下代码键入或复制到登录按钮操作方法的主体中。此代码可启动用于使应用程序登录 Twitter 的方法、启用 "getStatuse" 按钮以及禁用登录按钮。应用程序只需要登录一次。请注意,不需要实例化 TwitterClient 即可调用其登录方法。
private void loginButtonActionPerformed(java.awt.event.ActionEvent evt) {
TwitterClient.login();
getStatusesButton.setEnabled(true);
loginButton.setEnabled(false);
}
- 双击 "getStatuses" 按钮。IDE 为该按钮生成一个操作方法,而编辑器切换至“源”视图,并且其焦点位于操作方法上。
- 将以下处理代码粘贴或键入到 "getStatuses" 按钮操作方法的主体。此代码使用 login 方法创建的标记实例化 TwitterClient 并初始化 OAuth。然后该代码调用 getFriendsTimeline、获取状态列表、将包含用户名的行和每种状态的文本添加到字符串中,然后将该字符串传递到文本区域。
private void getStatusesButtonActionPerformed(java.awt.event.ActionEvent evt) {
TwitterClient client = new TwitterClient("xml");
client.initOAuth();
Statuses response = client.getFriendsTimeline(Statuses.class, null, null, null, "10");
response.getStatus().size();
String text = "";
for (StatusType st : response.getStatus()) {
text += st.getUser().getName() + ": " + st.getText() + "\n";
}
jTextArea1.setText(text);
}
- 此代码对于未找到的类有一些警告图标。按 Ctrl-Shift-I 组合键。将打开“修复所有导入”对话框。选择 twitter.twitteroauth.twitterresponse 类。单击“确定”。

现在已完成此应用程序。运行 RestfulClientPlatformApp,然后出现一个 NetBeans 平台,在“输出”部分中有设计的窗口。单击 "Log In"(登录),将打开一个对话框,可以单击其中包含的链接以授权应用程序访问数据。

单击该链接,此时会打开浏览器页面,Twitter 会在该页面中询问您是否希望允许您的应用程序访问 Twitter 数据。单击 "Allow"(允许),然后该页面会刷新,同时显示个人识别码。将该个人识别码复制并粘贴到验证对话框的检验器字符串字段中。单击“确定”。
现在禁用了 Log In(登录)按钮并启用了 Get Friends' Statuses(获取好友状态)按钮。单击 "Get Friends' Statuses"(获取好友状态),将显示 Twitter 好友的最新状态消息列表。
更多练习
下面是供您探讨的更多思路:
- 在模块中添加另一个窗口,使用 friends_timeline API 中的其他方法。
- 在项目中添加另一个模块,使用不同的 Twitter 资源。
- 浏览 Facebook 模块样例,该样例位于“新建项目”>“样例”>“NetBeans 模块”>“Facebook 模块样例”
另请参见
有关使用 NetBeans IDE 开发 Java EE 应用程序的更多信息,请参见以下资源:
要发送意见和建议、获得支持以及随时了解 NetBeans IDE Java EE 开发功能的最新开发情况,请加入 邮件列表。
要发送意见和建议、获得支持以及随时了解有关在 NetBeans 平台上开发 RCP 应用程序的主题,请加入 邮件列表。