メモ代わり。てきとーに。 いや、ですからてきとーですって。 2年前ぐらいにPythonあたりでメールくれた方、ごめんなさい。メール紛失してしまい無視した形になってしまいました。。。

2009年6月12日金曜日

[Apache Shindig][お勉強][Gadget][OpenSocial] メモ10 JsonRpcServlet

/social/rpcの実態は、JsonRpcServlet。

ソースは、


common/src/main/java/org/apache/shindig/protocol/JsonRpcServlet.java
 



common/src/main/java/org/apache/shindig/protocol/ApiServlet.java
 

を継承している模様。

--

public void setBeanConverters(
@Named("shindig.bean.converter.json") BeanConverter jsonConverter,
@Named("shindig.bean.converter.xml") BeanConverter xmlConverter,
@Named("shindig.bean.converter.atom") BeanConverter atomConverter) {
// fix this
this.jsonConverter = (BeanJsonConverter) jsonConverter;
this.xmlConverter = xmlConverter;
this.atomConverter = atomConverter;
}


ほっほー。
Guiceでも名前でBeanをセットできるのね。(違うかもしれないけど)

--
で、早速、

<beans>
<bean id="jsonRpcController"
class="jp.qsdn.nanashi.web.spring.controller.gadget.JsonRpcController">
<property name="handlers"><value>org.apache.shindig.social.handlers</value></property>
</bean>
</beans>


 

完成。動かしてみる。

--
実行したら、

({message:"unauthorized: The request did not have a proper security token nor oauth message and unauthenticated
requests are not allowed", code:401});
/* !eval(new String('(' + text + ');)) */
 


なんてレスポンスが帰ってきた。
なんだこれ。

先にsecurityTokenを理解しないと意味不明。
ハンドラディスパッチャーを読めば分かるのかしら。。

--
そもそもAuthenticationServletFilterを入れていなかった。
で、入れてやってみても401。

どうもSecurityTokenの要素数が合っていない。

common/src/main/java/org/apache/shindig/auth/BasicSecurityTokenDecoder.java
 

を見ると、

private static final int OWNER_INDEX = 0;
private static final int VIEWER_INDEX = 1;
private static final int APP_ID_INDEX = 2;
private static final int DOMAIN_INDEX = 3;
private static final int APP_URL_INDEX = 4;
private static final int MODULE_ID_INDEX = 5;
private static final int CONTAINER_ID_INDEX = 6;
private static final int TOKEN_COUNT = CONTAINER_ID_INDEX + 1;
 

となっていて、TOKEN数は7。
だけど、サンプルに書いてあったプログラムが生成するTOKEN数は、6個。
container idが足りないみたい。

とりあえずcontainer_idを追加。
実行すると、、、

org.apache.shindig.protocol.ProtocolException: Person not found
at org.apache.shindig.social.sample.spi.JsonDbOpensocialService.getPerson(JsonDbOpensocialService.java:325)
at org.apache.shindig.social.opensocial.service.PersonHandler.get(PersonHandler.java:84)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at org.apache.shindig.protocol.DefaultHandlerRegistry$MethodCaller.call(DefaultHandlerRegistry.java:474)
at org.apache.shindig.protocol.DefaultHandlerRegistry$RpcInvocationHandler.execute(DefaultHandlerRegistry.java:300)
at org.apache.shindig.protocol.DefaultHandlerRegistry$RpcInvocationWrapper.execute(DefaultHandlerRegistry.java:324)
at jp.qsdn.nanashi.web.spring.controller.gadget.JsonRpcController.dispatchBatch(JsonRpcController.java:205)
at jp.qsdn.nanashi.web.spring.controller.gadget.JsonRpcController.doPost(JsonRpcController.java:173)
at jp.qsdn.nanashi.web.spring.controller.gadget.JsonRpcController.handleRequestInternal(JsonRpcController.java:84)
at org.springframework.web.servlet.mvc.AbstractController.handleRequest(AbstractController.java:153)
at org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter.handle(SimpleControllerHandlerAdapter.java:48)
at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:875)
at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:809)
at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:571)
at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:511)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:647)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:729)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:269)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188)
at jp.qsdn.comp.util.web.filter.RequestLogFilter.doFilter(RequestLogFilter.java:62)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:215)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188)
at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:96)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:215)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188)
at org.apache.shindig.auth.AuthenticationServletFilter.callChain(AuthenticationServletFilter.java:123)
at org.apache.shindig.auth.AuthenticationServletFilter.doFilter(AuthenticationServletFilter.java:86)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:215)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:213)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:172)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:117)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:108)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:174)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:875)
at org.apache.coyote.http11.Http11BaseProtocol$Http11ConnectionHandler.processConnection(Http11BaseProtocol.java:665)
at org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:528)
at org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(LeaderFollowerWorkerThread.java:81)
at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:689)
at java.lang.Thread.run(Thread.java:619)
 

ってな感じで怒られる。

やっと、ここまできた。
多分、
org.apache.shindig.social.sample.spi.JsonDbOpensocialService.getPerson
をMySNS用にimplementsしてあげれば完了っぽい。

.

0 コメント: