<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Martin&#039;s Weekend Coding &#187; Jersey</title>
	<atom:link href="http://blog.alutam.com/tag/jersey/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.alutam.com</link>
	<description>Sharing useful tips from my &#34;weekend projects&#34;</description>
	<lastBuildDate>Sat, 31 Oct 2009 13:14:32 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.1</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	
   <image>
    <title>Martin&#039;s Weekend Coding</title>
    <url>http://www.gravatar.com/avatar/fe13f36272d010f4b3c09e477a620991?s=</url>
    <link>http://blog.alutam.com</link>
   </image>
		<item>
		<title>Jersey Hands-On Lab</title>
		<link>http://blog.alutam.com/2009/09/16/jersey-hands-on-lab/#utm_source=feed&amp;utm_medium=feed&amp;utm_campaign=feed</link>
		<comments>http://blog.alutam.com/2009/09/16/jersey-hands-on-lab/#comments</comments>
		<pubDate>Wed, 16 Sep 2009 19:31:49 +0000</pubDate>
		<dc:creator>Martin</dc:creator>
				<category><![CDATA[REST]]></category>
		<category><![CDATA[JavaOne]]></category>
		<category><![CDATA[JAX-RS]]></category>
		<category><![CDATA[Jersey]]></category>

		<guid isPermaLink="false">http://blog.alutam.com/?p=94</guid>
		<description><![CDATA[Earlier this year, me and Naresh created an introductory level Jersey hands-on lab for JavaOne &#8216;09. As I realized just recently, the hands-on labs had been made available for download to all SDN members (free registration) shortly after JavaOne. It may be another useful resource for you to get started with Jersey. The lab provides [...]]]></description>
			<content:encoded><![CDATA[<p>Earlier this year, me and <a href="http://blogs.sun.com/naresh/">Naresh</a> created an introductory level Jersey hands-on lab for JavaOne &#8216;09. As I realized just recently, the hands-on labs had been made available for download to all SDN members (free registration) shortly after JavaOne. It may be another useful resource for you to get started with Jersey. The lab provides detailed step-by-step instructions on how to set up your environment and then guides you through 3 exercises:</p>
<ol>
<li>Hello world! &#8211; leading you through your first JAX-RS/Jersey application, explaining the JAX-RS basics</li>
<li>Advanced JAX-RS/Jersey Features &#8211; showing how to develop a little more complex web application using JAX-RS/Jersey features such as path parameters, multiple representations for a resource, writing your own MessageBodyReader/Writer, Jersey MVC and some more</li>
<li>Using Jersey Client API &#8211; showing how to access web resources using the Client API provided by Jersey</li>
</ol>
<p>You can download the Hands-On Lab as well as get more info <a href="http://developers.sun.com/learning/javaoneonline/j1lab.jsp?lab=LAB-5542&#038;yr=2009&#038;track=1">here</a>. I&#8217;ve also added this link to our <a href="http://wikis.sun.com/display/Jersey">Jersey Wiki</a>. After you download the lab, just unzip the file and open <i>index.html</i> in <i>restwebservice</i> directory. The zip also contains solution directories for all three exercises. I hope the lab will be of help. Let me know in case you have any questions or feedback on it.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.alutam.com/2009/09/16/jersey-hands-on-lab/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Using Jersey Client OAuth Support with SmugMug</title>
		<link>http://blog.alutam.com/2009/08/10/using-jersey-client-oauth-support-with-smugmug/#utm_source=feed&amp;utm_medium=feed&amp;utm_campaign=feed</link>
		<comments>http://blog.alutam.com/2009/08/10/using-jersey-client-oauth-support-with-smugmug/#comments</comments>
		<pubDate>Sun, 09 Aug 2009 23:41:18 +0000</pubDate>
		<dc:creator>Martin</dc:creator>
				<category><![CDATA[REST]]></category>
		<category><![CDATA[JAX-RS]]></category>
		<category><![CDATA[Jersey]]></category>
		<category><![CDATA[OAuth]]></category>
		<category><![CDATA[SmugMug]]></category>

		<guid isPermaLink="false">http://blog.alutam.com/?p=6</guid>
		<description><![CDATA[Recently I decided to use SmugMug to store my photo galleries. They have an API people can use to access the features of the site programmatically and I noticed they added OAuth in the latest version. So, I thought I would give it a try and see if I can use the OAuth Support in [...]]]></description>
			<content:encoded><![CDATA[<p>Recently I decided to use <a href="http://smugmug.com">SmugMug</a> to store my photo galleries. They have an <a href="http://wiki.smugmug.net/display/SmugMug/API">API</a> people can use to access the features of the site programmatically and I noticed they added OAuth in the <a href="http://wiki.smugmug.net/display/API/Home">latest version</a>. So, I thought I would give it a try and see if I can use the <a href="http://wikis.sun.com/display/Jersey/OAuth">OAuth Support</a> in <a href="http://jersey.dev.java.net/">Jersey</a> to authorize and authenticate my client application with SmugMug. Turned out it works! Here is how to do it:</p>
<ol>
<li>First you have to request an API Key from SmugMug. You can do it <a href="http://www.smugmug.com/hack/apikeys">here</a>.</li>
<li>They probably approve these automatically &#8211; mine was approved immediately and I got the key along with a &#8220;secret&#8221; (another number used as a consumer secret key in OAuth).</li>
<li>Now you can create a new maven project, adding jersey-client, jersey-json, oauth-signature and oauth-client as the dependencies &#8211; here is a pom file snippet:
<div class="codebox">
<pre>    <span class="PredefinedIdentifier"><span class="Braces">&lt;</span>dependency<span class="Braces">&gt;</span></span>
      <span class="PredefinedIdentifier"><span class="Braces">&lt;</span>groupId<span class="Braces">&gt;</span></span>com.sun.jersey<span class="PredefinedIdentifier"><span class="Braces">&lt;</span>/groupId<span class="Braces">&gt;</span></span>
      <span class="PredefinedIdentifier"><span class="Braces">&lt;</span>artifactId<span class="Braces">&gt;</span></span>jersey-client<span class="PredefinedIdentifier"><span class="Braces">&lt;</span>/artifactId<span class="Braces">&gt;</span></span>
      <span class="PredefinedIdentifier"><span class="Braces">&lt;</span>version<span class="Braces">&gt;</span></span>1.1.2-ea-SNAPSHOT<span class="PredefinedIdentifier"><span class="Braces">&lt;</span>/version<span class="Braces">&gt;</span></span>
    <span class="PredefinedIdentifier"><span class="Braces">&lt;</span>/dependency<span class="Braces">&gt;</span></span>
    <span class="PredefinedIdentifier"><span class="Braces">&lt;</span>dependency<span class="Braces">&gt;</span></span>
      <span class="PredefinedIdentifier"><span class="Braces">&lt;</span>groupId<span class="Braces">&gt;</span></span>com.sun.jersey<span class="PredefinedIdentifier"><span class="Braces">&lt;</span>/groupId<span class="Braces">&gt;</span></span>
      <span class="PredefinedIdentifier"><span class="Braces">&lt;</span>artifactId<span class="Braces">&gt;</span></span>jersey-json<span class="PredefinedIdentifier"><span class="Braces">&lt;</span>/artifactId<span class="Braces">&gt;</span></span>
      <span class="PredefinedIdentifier"><span class="Braces">&lt;</span>version<span class="Braces">&gt;</span></span>1.1.2-ea-SNAPSHOT<span class="PredefinedIdentifier"><span class="Braces">&lt;</span>/version<span class="Braces">&gt;</span></span>
    <span class="PredefinedIdentifier"><span class="Braces">&lt;</span>/dependency<span class="Braces">&gt;</span></span>
    <span class="PredefinedIdentifier"><span class="Braces">&lt;</span>dependency<span class="Braces">&gt;</span></span>
      <span class="PredefinedIdentifier"><span class="Braces">&lt;</span>groupId<span class="Braces">&gt;</span></span>com.sun.jersey.oauth<span class="PredefinedIdentifier"><span class="Braces">&lt;</span>/groupId<span class="Braces">&gt;</span></span>
      <span class="PredefinedIdentifier"><span class="Braces">&lt;</span>artifactId<span class="Braces">&gt;</span></span>oauth-signature<span class="PredefinedIdentifier"><span class="Braces">&lt;</span>/artifactId<span class="Braces">&gt;</span></span>
      <span class="PredefinedIdentifier"><span class="Braces">&lt;</span>version<span class="Braces">&gt;</span></span>1.1.2-ea-SNAPSHOT<span class="PredefinedIdentifier"><span class="Braces">&lt;</span>/version<span class="Braces">&gt;</span></span>
    <span class="PredefinedIdentifier"><span class="Braces">&lt;</span>/dependency<span class="Braces">&gt;</span></span>
    <span class="PredefinedIdentifier"><span class="Braces">&lt;</span>dependency<span class="Braces">&gt;</span></span>
      <span class="PredefinedIdentifier"><span class="Braces">&lt;</span>groupId<span class="Braces">&gt;</span></span>com.sun.jersey.oauth<span class="PredefinedIdentifier"><span class="Braces">&lt;</span>/groupId<span class="Braces">&gt;</span></span>
      <span class="PredefinedIdentifier"><span class="Braces">&lt;</span>artifactId<span class="Braces">&gt;</span></span>oauth-client<span class="PredefinedIdentifier"><span class="Braces">&lt;</span>/artifactId<span class="Braces">&gt;</span></span>
      <span class="PredefinedIdentifier"><span class="Braces">&lt;</span>version<span class="Braces">&gt;</span></span>1.1.2-ea-SNAPSHOT<span class="PredefinedIdentifier"><span class="Braces">&lt;</span>/version<span class="Braces">&gt;</span></span>
    <span class="PredefinedIdentifier"><span class="Braces">&lt;</span>/dependency<span class="Braces">&gt;</span></span></pre>
</div>
</li>
<li>The first thing you need to do according to the <a href="http://oauth.net/core/1.0#anchor9">OAuth spec</a> is to get an unauthorized request token from the provider (SmugMug in this case). You will need the key and the secret you obtained in step 1. The <a href="http://wiki.smugmug.net/display/API/API+1.2.2">SmugMug API</a> provides a method for requesting these tokens &#8211; <a href="http://wiki.smugmug.net/display/API/show+1.2.2?method=smugmug.auth.getRequestToken">getRequestToken</a>. Here is an example of how you can call this method using Jersey client API and the Jersey OAuth library:
<div class="codebox">
<pre><span class="ReservedWord">public</span> <span class="ReservedWord">class</span> <span class="Identifier">App</span> <span class="Braces">{</span>
    <span class="Comment">// base URL for the API calls</span>
    <span class="ReservedWord">private</span> <span class="ReservedWord">static</span> <span class="ReservedWord">final</span> <span class="Identifier">String</span> <span class="Identifier">URL_API</span> <span class="Symbol">=</span>
            <span class="String">"http://api.smugmug.com/services/api/json/1.2.2/"</span><span class="Symbol">;</span>

    <span class="ReservedWord">private</span> <span class="ReservedWord">static</span> <span class="ReservedWord">final</span> <span class="Identifier">String</span> <span class="Identifier">CONSUMER_SECRET</span> <span class="Symbol">=</span> <span class="Comment">/* your API Key */</span><span class="Symbol">;</span>
    <span class="ReservedWord">private</span> <span class="ReservedWord">static</span> <span class="ReservedWord">final</span> <span class="Identifier">String</span> <span class="Identifier">CONSUMER_KEY</span> <span class="Symbol">=</span> <span class="Comment">/* your secret key */</span><span class="Symbol">;</span>

    <span class="ReservedWord">public</span> <span class="ReservedWord">static</span> <span class="ReservedWord">void</span> <span class="Identifier">main</span><span class="Braces">(</span> <span class="Identifier">String</span><span class="Braces">[</span><span class="Braces">]</span> <span class="Identifier">args</span> <span class="Braces">)</span> <span class="ReservedWord">throws</span> <span class="Identifier">Exception</span> <span class="Braces">{</span>
        <span class="Comment">// Create a Jersey client</span>
        <span class="Identifier">Client</span> <span class="Identifier">client</span> <span class="Symbol">=</span> <span class="Identifier">Client</span>.<span class="Identifier">create</span><span class="Braces">(</span><span class="Braces">)</span><span class="Symbol">;</span>

        <span class="Comment">// Create a resource to be used to make SmugMug API calls</span>
        <span class="Identifier">WebResource</span> <span class="Identifier">resource</span> <span class="Symbol">=</span> <span class="Identifier">client</span>.<span class="Identifier">resource</span><span class="Braces">(</span><span class="Identifier">URL_API</span><span class="Braces">)</span>.
                <span class="Identifier">queryParam</span><span class="Braces">(</span><span class="String">"method"</span>, <span class="String">"smugmug.auth.getRequestToken"</span><span class="Braces">)</span><span class="Symbol">;</span>

        <span class="Comment">// Set the OAuth parameters</span>
        <span class="Identifier">OAuthSecrets</span> <span class="Identifier">secrets</span> <span class="Symbol">=</span> <span class="ReservedWord">new</span> <span class="Identifier">OAuthSecrets</span><span class="Braces">(</span><span class="Braces">)</span>.<span class="Identifier">consumerSecret</span><span class="Braces">(</span><span class="Identifier">CONSUMER_SECRET</span><span class="Braces">)</span><span class="Symbol">;</span>
        <span class="Identifier">OAuthParameters</span> <span class="Identifier">params</span> <span class="Symbol">=</span> <span class="ReservedWord">new</span> <span class="Identifier">OAuthParameters</span><span class="Braces">(</span><span class="Braces">)</span>.<span class="Identifier">consumerKey</span><span class="Braces">(</span><span class="Identifier">CONSUMER_KEY</span><span class="Braces">)</span>.
                <span class="Identifier">signatureMethod</span><span class="Braces">(</span><span class="String">"HMAC-SHA1"</span><span class="Braces">)</span>.<span class="Identifier">version</span><span class="Braces">(</span><span class="String">"1.0"</span><span class="Braces">)</span><span class="Symbol">;</span>
        <span class="Comment">// Create the OAuth client filter</span>
        <span class="Identifier">OAuthClientFilter</span> <span class="Identifier">filter</span> <span class="Symbol">=</span>
                <span class="ReservedWord">new</span> <span class="Identifier">OAuthClientFilter</span><span class="Braces">(</span><span class="Identifier">client</span>.<span class="Identifier">getProviders</span><span class="Braces">(</span><span class="Braces">)</span>, <span class="Identifier">params</span>, <span class="Identifier">secrets</span><span class="Braces">)</span><span class="Symbol">;</span>
        <span class="Comment">// Add the filter to the resource</span>
        <span class="Identifier">resource</span>.<span class="Identifier">addFilter</span><span class="Braces">(</span><span class="Identifier">filter</span><span class="Braces">)</span><span class="Symbol">;</span>

        <span class="Comment">// make the request and print out the result</span>
        <span class="Identifier">System</span>.<span class="Identifier">out</span>.<span class="Identifier">println</span><span class="Braces">(</span><span class="Identifier">resource</span>.<span class="Identifier">get</span><span class="Braces">(</span><span class="Identifier">String</span>.<span class="ReservedWord">class</span><span class="Braces">)</span><span class="Braces">)</span><span class="Symbol">;</span>
    <span class="Braces">}</span>
<span class="Braces">}</span></pre>
</div>
</li>
<li>The next step in the OAuth flow is to obtain user authorization. To do this, the user needs to be redirected to the SmugMug authorization URL &#8211; http://api.smugmug.com/services/oauth/authorize.mg (see the SmugMug Specifics section on <a href="http://wiki.smugmug.net/display/API/OAuth">their OAuth page</a>), passing the request token ID as a query parameter (you need to extract that from the getRequestToken method&#8217;s response). At this URL the user will log in and grant the requested access to your application. Here is how I did it:
<div class="codebox">
<pre><span class="ReservedWord">public</span> <span class="ReservedWord">class</span> <span class="Identifier">App</span> <span class="Braces">{</span>
    <span class="Comment">// base URL for the API calls</span>
    <span class="ReservedWord">private</span> <span class="ReservedWord">static</span> <span class="ReservedWord">final</span> <span class="Identifier">String</span> <span class="Identifier">URL_API</span> <span class="Symbol">=</span>
            <span class="String">"http://api.smugmug.com/services/api/json/1.2.2/"</span><span class="Symbol">;</span>
    <span class="Comment">// authorization URL</span>
    <span class="ReservedWord">private</span> <span class="ReservedWord">static</span> <span class="ReservedWord">final</span> <span class="Identifier">String</span> <span class="Identifier">URL_AUTHORIZE</span> <span class="Symbol">=</span>
            <span class="String">"http://api.smugmug.com/services/oauth/authorize.mg"</span><span class="Symbol">;</span>

    <span class="ReservedWord">private</span> <span class="ReservedWord">static</span> <span class="ReservedWord">final</span> <span class="Identifier">String</span> <span class="Identifier">CONSUMER_SECRET</span> <span class="Symbol">=</span> <span class="Comment">/* your API Key */</span><span class="Symbol">;</span>
    <span class="ReservedWord">private</span> <span class="ReservedWord">static</span> <span class="ReservedWord">final</span> <span class="Identifier">String</span> <span class="Identifier">CONSUMER_KEY</span> <span class="Symbol">=</span> <span class="Comment">/* your secret key */</span><span class="Symbol">;</span>

    <span class="ReservedWord">public</span> <span class="ReservedWord">static</span> <span class="ReservedWord">void</span> <span class="Identifier">main</span><span class="Braces">(</span> <span class="Identifier">String</span><span class="Braces">[</span><span class="Braces">]</span> <span class="Identifier">args</span> <span class="Braces">)</span> <span class="ReservedWord">throws</span> <span class="Identifier">Exception</span> <span class="Braces">{</span>
        <span class="Comment">// Create a Jersey client</span>
        <span class="Identifier">Client</span> <span class="Identifier">client</span> <span class="Symbol">=</span> <span class="Identifier">Client</span>.<span class="Identifier">create</span><span class="Braces">(</span><span class="Braces">)</span><span class="Symbol">;</span>

        <span class="Comment">// Create a resource to be used to make SmugMug API calls</span>
        <span class="Identifier">WebResource</span> <span class="Identifier">resource</span> <span class="Symbol">=</span> <span class="Identifier">client</span>.<span class="Identifier">resource</span><span class="Braces">(</span><span class="Identifier">URL_API</span><span class="Braces">)</span>.
                <span class="Identifier">queryParam</span><span class="Braces">(</span><span class="String">"method"</span>, <span class="String">"smugmug.auth.getRequestToken"</span><span class="Braces">)</span><span class="Symbol">;</span>

        <span class="Comment">// Set the OAuth parameters</span>
        <span class="Identifier">OAuthSecrets</span> <span class="Identifier">secrets</span> <span class="Symbol">=</span> <span class="ReservedWord">new</span> <span class="Identifier">OAuthSecrets</span><span class="Braces">(</span><span class="Braces">)</span>.<span class="Identifier">consumerSecret</span><span class="Braces">(</span><span class="Identifier">CONSUMER_SECRET</span><span class="Braces">)</span><span class="Symbol">;</span>
        <span class="Identifier">OAuthParameters</span> <span class="Identifier">params</span> <span class="Symbol">=</span> <span class="ReservedWord">new</span> <span class="Identifier">OAuthParameters</span><span class="Braces">(</span><span class="Braces">)</span>.<span class="Identifier">consumerKey</span><span class="Braces">(</span><span class="Identifier">CONSUMER_KEY</span><span class="Braces">)</span>.
                <span class="Identifier">signatureMethod</span><span class="Braces">(</span><span class="String">"HMAC-SHA1"</span><span class="Braces">)</span>.<span class="Identifier">version</span><span class="Braces">(</span><span class="String">"1.0"</span><span class="Braces">)</span><span class="Symbol">;</span>
        <span class="Comment">// Create the OAuth client filter</span>
        <span class="Identifier">OAuthClientFilter</span> <span class="Identifier">filter</span> <span class="Symbol">=</span>
                <span class="ReservedWord">new</span> <span class="Identifier">OAuthClientFilter</span><span class="Braces">(</span><span class="Identifier">client</span>.<span class="Identifier">getProviders</span><span class="Braces">(</span><span class="Braces">)</span>, <span class="Identifier">params</span>, <span class="Identifier">secrets</span><span class="Braces">)</span><span class="Symbol">;</span>
        <span class="Comment">// Add the filter to the resource</span>
        <span class="Identifier">resource</span>.<span class="Identifier">addFilter</span><span class="Braces">(</span><span class="Identifier">filter</span><span class="Braces">)</span><span class="Symbol">;</span>

        <span class="Comment">// make the request</span>
        <span class="Identifier">RequestTokenResponse</span> <span class="Identifier">response</span> <span class="Symbol">=</span> <span class="Identifier">resource</span>.<span class="Identifier">get</span><span class="Braces">(</span><span class="Identifier">RequestTokenResponse</span>.<span class="ReservedWord">class</span><span class="Braces">)</span><span class="Symbol">;</span>
        <span class="Comment">// check the status</span>
        <span class="ReservedWord">if</span> <span class="Braces">(</span><span class="Symbol">!</span><span class="String">"ok"</span>.<span class="Identifier">equals</span><span class="Braces">(</span><span class="Identifier">response</span>.<span class="Identifier">stat</span><span class="Braces">)</span><span class="Braces">)</span> <span class="Braces">{</span>
            <span class="Identifier">System</span>.<span class="Identifier">out</span>.<span class="Identifier">println</span><span class="Braces">(</span><span class="String">"getRequestToken failed with response: "</span> <span class="Symbol">+</span>
                    <span class="Identifier">response</span>.<span class="Identifier">toString</span><span class="Braces">(</span><span class="Braces">)</span><span class="Braces">)</span><span class="Symbol">;</span>
            <span class="ReservedWord">return</span><span class="Symbol">;</span>
        <span class="Braces">}</span>

        <span class="Comment">// open the browser at the authorization URL to let user authorize</span>
        <span class="Identifier">Desktop</span>.<span class="Identifier">getDesktop</span><span class="Braces">(</span><span class="Braces">)</span>.<span class="Identifier">browse</span><span class="Braces">(</span><span class="ReservedWord">new</span> <span class="Identifier">URI</span><span class="Braces">(</span><span class="Identifier">URL_AUTHORIZE</span> <span class="Symbol">+</span>
                <span class="String">"?oauth_token="</span> <span class="Symbol">+</span> <span class="Identifier">response</span>.<span class="Identifier">auth</span>.<span class="Identifier">token</span>.<span class="Identifier">id</span><span class="Braces">)</span><span class="Braces">)</span><span class="Symbol">;</span>
    <span class="Braces">}</span>
<span class="Braces">}</span></pre>
</div>
<p>The RequestTokenResponse class representing getRequestToken method&#8217;s response looks as follows:</p>
<div class="codebox">
<pre>@<span class="Identifier">XmlRootElement</span>
<span class="ReservedWord">public</span> <span class="ReservedWord">class</span> <span class="Identifier">RequestTokenResponse</span> <span class="Braces">{</span>
    <span class="ReservedWord">public</span> <span class="Identifier">String</span> <span class="Identifier">stat</span><span class="Symbol">;</span>
    <span class="ReservedWord">public</span> <span class="Identifier">String</span> <span class="Identifier">method</span><span class="Symbol">;</span>
    <span class="ReservedWord">public</span> @<span class="Identifier">XmlElement</span><span class="Braces">(</span><span class="Identifier">name</span><span class="Symbol">=</span><span class="String">"Auth"</span><span class="Braces">)</span> <span class="Identifier">AuthElement</span> <span class="Identifier">auth</span><span class="Symbol">;</span>

    <span class="ReservedWord">public</span> <span class="ReservedWord">static</span> <span class="ReservedWord">class</span> <span class="Identifier">AuthElement</span> <span class="Braces">{</span>
        <span class="ReservedWord">public</span> @<span class="Identifier">XmlElement</span><span class="Braces">(</span><span class="Identifier">name</span><span class="Symbol">=</span><span class="String">"Token"</span><span class="Braces">)</span> <span class="Identifier">TokenElement</span> <span class="Identifier">token</span><span class="Symbol">;</span>

        @<span class="Identifier">Override</span>
        <span class="ReservedWord">public</span> <span class="Identifier">String</span> <span class="Identifier">toString</span><span class="Braces">(</span><span class="Braces">)</span> <span class="Braces">{</span>
            <span class="ReservedWord">return</span> <span class="String">"token=("</span> <span class="Symbol">+</span> <span class="Braces">(</span><span class="Identifier">token</span> <span class="Symbol">=</span><span class="Symbol">=</span> <span class="ReservedWord">null</span> ? <span class="String">"null"</span> <span class="Symbol">:</span> <span class="Identifier">token</span>.<span class="Identifier">toString</span><span class="Braces">(</span><span class="Braces">)</span><span class="Braces">)</span> <span class="Symbol">+</span> <span class="String">")"</span><span class="Symbol">;</span>
        <span class="Braces">}</span>
    <span class="Braces">}</span>

    <span class="ReservedWord">public</span> <span class="ReservedWord">static</span> <span class="ReservedWord">class</span> <span class="Identifier">TokenElement</span> <span class="Braces">{</span>
        <span class="ReservedWord">public</span> <span class="Identifier">String</span> <span class="Identifier">id</span><span class="Symbol">;</span>
        <span class="ReservedWord">public</span> @<span class="Identifier">XmlElement</span><span class="Braces">(</span><span class="Identifier">name</span><span class="Symbol">=</span><span class="String">"Secret"</span><span class="Braces">)</span> <span class="Identifier">String</span> <span class="Identifier">secret</span><span class="Symbol">;</span>

        @<span class="Identifier">Override</span>
        <span class="ReservedWord">public</span> <span class="Identifier">String</span> <span class="Identifier">toString</span><span class="Braces">(</span><span class="Braces">)</span> <span class="Braces">{</span>
            <span class="ReservedWord">return</span> <span class="String">"id="</span> <span class="Symbol">+</span> <span class="Identifier">id</span> <span class="Symbol">+</span> <span class="String">" secret="</span> <span class="Symbol">+</span> <span class="Identifier">secret</span><span class="Symbol">;</span>
        <span class="Braces">}</span>
    <span class="Braces">}</span>

    @<span class="Identifier">Override</span>
    <span class="ReservedWord">public</span> <span class="Identifier">String</span> <span class="Identifier">toString</span><span class="Braces">(</span><span class="Braces">)</span> <span class="Braces">{</span>
        <span class="ReservedWord">return</span> <span class="String">"stat="</span> <span class="Symbol">+</span> <span class="Identifier">stat</span> <span class="Symbol">+</span> <span class="String">" method="</span> <span class="Symbol">+</span> <span class="Identifier">method</span> <span class="Symbol">+</span> <span class="String">" auth=("</span> <span class="Symbol">+</span>
                <span class="Braces">(</span><span class="Identifier">auth</span> <span class="Symbol">=</span><span class="Symbol">=</span> <span class="ReservedWord">null</span> ? <span class="String">"null"</span> <span class="Symbol">:</span> <span class="Identifier">auth</span>.<span class="Identifier">toString</span><span class="Braces">(</span><span class="Braces">)</span><span class="Braces">)</span> <span class="Symbol">+</span> <span class="String">")"</span><span class="Symbol">;</span>
    <span class="Braces">}</span>
<span class="Braces">}</span></pre>
</div>
</li>
<li>After the user authenticates and grants access for your application, the last step is to request an access token &#8211; that will then enable your application to make subsequent API calls. You can implement this by adding the following lines at the end of the main method from the previous bullet:
<div class="codebox">
<pre>        <span class="Comment">// wait for the user to authenticate</span>
        <span class="Identifier">System</span>.<span class="Identifier">out</span>.<span class="Identifier">println</span><span class="Braces">(</span><span class="String">&quot;Once you authenticated with SmugMug and granted&quot;</span> <span class="Symbol">+</span>
                <span class="String">&quot;permissions to this app, press Enter to continue.&quot;</span><span class="Braces">)</span><span class="Symbol">;</span>
        <span class="Identifier">System</span>.<span class="Identifier">in</span>.<span class="Identifier">read</span><span class="Braces">(</span><span class="Braces">)</span><span class="Symbol">;</span>

        <span class="Comment">// make an API call to request the access token</span>
        <span class="Identifier">resource</span> <span class="Symbol">=</span> <span class="Identifier">client</span>.<span class="Identifier">resource</span><span class="Braces">(</span><span class="Identifier">URL_API</span><span class="Braces">)</span>.<span class="Identifier">queryParam</span><span class="Braces">(</span><span class="String">&quot;method&quot;</span>,
                <span class="String">&quot;smugmug.auth.getAccessToken&quot;</span><span class="Braces">)</span><span class="Symbol">;</span>
        <span class="Comment">// use the request token id and secret to create the request</span>
        <span class="Identifier">secrets</span>.<span class="Identifier">setTokenSecret</span><span class="Braces">(</span><span class="Identifier">response</span>.<span class="Identifier">auth</span>.<span class="Identifier">token</span>.<span class="Identifier">secret</span><span class="Braces">)</span><span class="Symbol">;</span>
        <span class="Identifier">params</span>.<span class="Identifier">token</span><span class="Braces">(</span><span class="Identifier">response</span>.<span class="Identifier">auth</span>.<span class="Identifier">token</span>.<span class="Identifier">id</span><span class="Braces">)</span>.<span class="Identifier">timestamp</span><span class="Braces">(</span><span class="Braces">)</span>.<span class="Identifier">nonce</span><span class="Braces">(</span><span class="Braces">)</span><span class="Symbol">;</span>
        <span class="Identifier">resource</span>.<span class="Identifier">addFilter</span><span class="Braces">(</span><span class="Identifier">filter</span><span class="Braces">)</span><span class="Symbol">;</span>
        <span class="Comment">// make the request and print out the result</span>
        <span class="Identifier">System</span>.<span class="Identifier">out</span>.<span class="Identifier">println</span><span class="Braces">(</span><span class="Identifier">resource</span>.<span class="Identifier">get</span><span class="Braces">(</span><span class="Identifier">String</span>.<span class="ReservedWord">class</span><span class="Braces">)</span><span class="Braces">)</span><span class="Symbol">;</span></pre>
</div>
</li>
<li>That&#8217;s it! Now your application can store the access token and use it to perform actions on behalf of the user.</li>
</ol>
]]></content:encoded>
			<wfw:commentRss>http://blog.alutam.com/2009/08/10/using-jersey-client-oauth-support-with-smugmug/feed/</wfw:commentRss>
		<slash:comments>9</slash:comments>
		</item>
	</channel>
</rss>
