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/'?method=OPTIONS'">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/'?method=OPTIONS'">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/'?method=OPTIONS'">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.