Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

Background: Apache Streams contains java interfaces which emulate social network REST APIs and implementations (some using Juneau Rest Proxy) for call calling method on those APIs via java .and transcribing native requests and responses to and from streams interoperability formats

Objective: Expose those interfaces / implementations via a hosted REST API, supporting an HTML serialization option, allowing a user to discover what methods are available, activate them, and view the results directly in the browser.

...

Proof of concept interaction :

  • http://localhost:8000/remoteabletwitter
    • HTML
      <html>
      	<head>
      		<style>
      			@import "/twitter/styles/light.css"; 
      		</style>
      		<script>
      		</script>
      	</head>
      	<body>
      		<header>
      			Probot > Twitter
      		</header>
      		<nav>
      			<ol>
      				<li><a href="/twitter/&apos;?method=OPTIONS&apos;">options</a></li>
      			</ol>
      		</nav>
      		<section>
      			<article>
      				<div class="outerdata">
      					<div class="data" id="data">
      						<ul>
      							<li><a href="/twitter/org.apache.streams.twitter.api.Geo">org.apache.streams.twitter.api.Geo</a></li>
      							<li><a href="/twitter/org.apache.streams.twitter.api.Friends">org.apache.streams.twitter.api.Friends</a></li>
      							<li><a href="/twitter/org.apache.streams.twitter.api.Account">org.apache.streams.twitter.api.Account</a></li>
      							<li><a href="/twitter/org.apache.streams.twitter.api.Users">org.apache.streams.twitter.api.Users</a></li>
      							<li><a href="/twitter/org.apache.streams.twitter.api.Statuses">org.apache.streams.twitter.api.Statuses</a></li>
      							<li><a href="/twitter/org.apache.streams.twitter.api.Favorites">org.apache.streams.twitter.api.Favorites</a></li>
      							<li><a href="/twitter/org.apache.streams.twitter.api.AccountActivity">org.apache.streams.twitter.api.AccountActivity</a></li>
      							<li><a href="/twitter/org.apache.streams.twitter.api.Twitter">org.apache.streams.twitter.api.Twitter</a></li>
      							<li><a href="/twitter/org.apache.streams.twitter.api.WelcomeMessageRules">org.apache.streams.twitter.api.WelcomeMessageRules</a></li>
      							<li><a href="/twitter/org.apache.streams.twitter.api.Media">org.apache.streams.twitter.api.Media</a></li>
      							<li><a href="/twitter/org.apache.streams.twitter.api.WelcomeMessages">org.apache.streams.twitter.api.WelcomeMessages</a></li>
      						</ul>
      					</div>
      				</div>
      			</article>
      		</section>
      		<footer>
      			ASF 2.0 License
      		</footer>
      	</body>
      </html>
       

       

    • http://localhost:8000/twitter/org.apache.streams.twitter.api.Account

      • HTML
        <html>
        	<head>
        		<style>
        			@import "/twitter/styles/light.css"; 
        		</style>
        		<script>
        		</script>
        	</head>
        	<body>
        		<header>
        			Probot > Twitter
        		</header>
        		<nav>
        			<ol>
        				<li><a href="/twitter/&apos;?method=OPTIONS&apos;">options</a></li>
        			</ol>
        		</nav>
        		<section>
        			<article>
        				<div class="outerdata">
        					<div class="data" id="data">
        						<ul>
        							<li>settings</li>
        							<li>verifyCredentials</li>
        						</ul>
        					</div>
        				</div>
        			</article>
        		</section>
        		<footer>
        			ASF 2.0 License
        		</footer>
        	</body>
        </html>

    • http://localhost:8000/twitter/org.apache.streams.twitter.api.Account?invokeMethod=settings
      • HTML
        <html>
        	<head>
        		<style>
        			@import "/twitter/styles/light.css"; 
        		</style>
        		<script>
        		</script>
        	</head>
        	<body>
        		<header>
        			Probot > Twitter
        		</header>
        		<nav>
        			<ol>
        				<li><a href="/twitter/&apos;?method=OPTIONS&apos;">options</a></li>
        			</ol>
        		</nav>
        		<section>
        			<article>
        				<div class="outerdata">
        					<div class="data" id="data">
        <string>org.apache.juneau.rest.RestException: Error occurred trying to invoke method: settings</string>					</div>
        				</div>
        			</article>
        		</section>
        		<footer>
        			ASF 2.0 License
        		</footer>
        	</body>
        </html>

  • Proof of concept : Diagnosis

Failure seem to occur in PojoIntrospector.java

Line 131

Method m = p.getBeanContext().createSession().getClassMeta(o.getClass()).getPublicMethods().get(method);

m = null

because o.getClass() = java.util.LinkedHashMap$LinkedKeySet

where-as it seems that it should be org.apache.streams.twitter.api.Account.class

In fact 

p.getBeanContext().createSession().getClassMeta(org.apache.streams.twitter.api.Account.class).getPublicMethods().get(method);

finds 'settings' as expected.