You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@shindig.apache.org by do...@apache.org on 2008/09/24 18:33:42 UTC
svn commit: r698636 - in /incubator/shindig/trunk/java:
server/src/test/java/org/apache/shindig/server/endtoend/
social-api/src/main/java/org/apache/shindig/social/core/config/
social-api/src/main/java/org/apache/shindig/social/core/util/
social-api/sr...
Author: doll
Date: Wed Sep 24 09:33:41 2008
New Revision: 698636
URL: http://svn.apache.org/viewvc?rev=698636&view=rev
Log:
SHINDIG-611
Patch from impetus technologies. Adds a new BeanAtomConverter so that the java code has support for atom, xml and json formats.
Note: This new converter does not produce proper atom code yet. It produces basic xml.
Added:
incubator/shindig/trunk/java/social-api/src/main/java/org/apache/shindig/social/core/util/BeanAtomConverter.java
Modified:
incubator/shindig/trunk/java/server/src/test/java/org/apache/shindig/server/endtoend/EndToEndModule.java
incubator/shindig/trunk/java/social-api/src/main/java/org/apache/shindig/social/core/config/SocialApiGuiceModule.java
incubator/shindig/trunk/java/social-api/src/main/java/org/apache/shindig/social/opensocial/service/ApiServlet.java
incubator/shindig/trunk/java/social-api/src/main/java/org/apache/shindig/social/opensocial/service/DataServiceServlet.java
incubator/shindig/trunk/java/social-api/src/test/java/org/apache/shindig/social/dataservice/integration/AbstractLargeRestfulTests.java
incubator/shindig/trunk/java/social-api/src/test/java/org/apache/shindig/social/opensocial/service/DataServiceServletTest.java
incubator/shindig/trunk/java/social-api/src/test/java/org/apache/shindig/social/opensocial/service/JsonRpcServletTest.java
Modified: incubator/shindig/trunk/java/server/src/test/java/org/apache/shindig/server/endtoend/EndToEndModule.java
URL: http://svn.apache.org/viewvc/incubator/shindig/trunk/java/server/src/test/java/org/apache/shindig/server/endtoend/EndToEndModule.java?rev=698636&r1=698635&r2=698636&view=diff
==============================================================================
--- incubator/shindig/trunk/java/server/src/test/java/org/apache/shindig/server/endtoend/EndToEndModule.java (original)
+++ incubator/shindig/trunk/java/server/src/test/java/org/apache/shindig/server/endtoend/EndToEndModule.java Wed Sep 24 09:33:41 2008
@@ -23,6 +23,7 @@
import org.apache.shindig.social.core.oauth.AuthenticationHandlerProvider;
import org.apache.shindig.social.core.util.BeanJsonConverter;
import org.apache.shindig.social.core.util.BeanXmlConverter;
+import org.apache.shindig.social.core.util.BeanAtomConverter;
import org.apache.shindig.social.opensocial.service.BeanConverter;
import org.apache.shindig.social.opensocial.service.DataServiceServletFetcher;
@@ -43,10 +44,13 @@
.toInstance("sampledata/canonicaldb.json");
bind(ParameterFetcher.class).annotatedWith(Names.named("DataServiceServlet"))
.to(DataServiceServletFetcher.class);
+
bind(BeanConverter.class).annotatedWith(Names.named("shindig.bean.converter.xml"))
.to(BeanXmlConverter.class);
bind(BeanConverter.class).annotatedWith(Names.named("shindig.bean.converter.json"))
.to(BeanJsonConverter.class);
+ bind(BeanConverter.class).annotatedWith(Names.named("shindig.bean.converter.atom"))
+ .to(BeanAtomConverter.class);
bind(Boolean.class)
.annotatedWith(Names.named(AnonymousAuthenticationHandler.ALLOW_UNAUTHENTICATED))
Modified: incubator/shindig/trunk/java/social-api/src/main/java/org/apache/shindig/social/core/config/SocialApiGuiceModule.java
URL: http://svn.apache.org/viewvc/incubator/shindig/trunk/java/social-api/src/main/java/org/apache/shindig/social/core/config/SocialApiGuiceModule.java?rev=698636&r1=698635&r2=698636&view=diff
==============================================================================
--- incubator/shindig/trunk/java/social-api/src/main/java/org/apache/shindig/social/core/config/SocialApiGuiceModule.java (original)
+++ incubator/shindig/trunk/java/social-api/src/main/java/org/apache/shindig/social/core/config/SocialApiGuiceModule.java Wed Sep 24 09:33:41 2008
@@ -22,6 +22,7 @@
import org.apache.shindig.auth.AuthenticationHandler;
import org.apache.shindig.common.servlet.ParameterFetcher;
import org.apache.shindig.social.core.oauth.AuthenticationHandlerProvider;
+import org.apache.shindig.social.core.util.BeanAtomConverter;
import org.apache.shindig.social.core.util.BeanJsonConverter;
import org.apache.shindig.social.core.util.BeanXmlConverter;
import org.apache.shindig.social.opensocial.service.BeanConverter;
@@ -62,6 +63,8 @@
BeanXmlConverter.class);
bind(BeanConverter.class).annotatedWith(Names.named("shindig.bean.converter.json")).to(
BeanJsonConverter.class);
+ bind(BeanConverter.class).annotatedWith(Names.named("shindig.bean.converter.atom")).to(
+ BeanAtomConverter.class);
bind(new TypeLiteral<List<AuthenticationHandler>>(){}).toProvider(
AuthenticationHandlerProvider.class);
Added: incubator/shindig/trunk/java/social-api/src/main/java/org/apache/shindig/social/core/util/BeanAtomConverter.java
URL: http://svn.apache.org/viewvc/incubator/shindig/trunk/java/social-api/src/main/java/org/apache/shindig/social/core/util/BeanAtomConverter.java?rev=698636&view=auto
==============================================================================
--- incubator/shindig/trunk/java/social-api/src/main/java/org/apache/shindig/social/core/util/BeanAtomConverter.java (added)
+++ incubator/shindig/trunk/java/social-api/src/main/java/org/apache/shindig/social/core/util/BeanAtomConverter.java Wed Sep 24 09:33:41 2008
@@ -0,0 +1,105 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations under the License.
+ */
+package org.apache.shindig.social.core.util;
+
+import org.apache.shindig.social.opensocial.service.BeanConverter;
+
+import org.apache.commons.betwixt.IntrospectionConfiguration;
+import org.apache.commons.betwixt.io.BeanReader;
+import org.apache.commons.betwixt.io.BeanWriter;
+import org.xml.sax.SAXException;
+
+import java.beans.IntrospectionException;
+import java.io.IOException;
+import java.io.StringReader;
+import java.io.StringWriter;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+
+// TODO: This does not produce valid atom sytnax yet
+public class BeanAtomConverter implements BeanConverter {
+ private static Logger logger =
+ Logger.getLogger(BeanXmlConverter.class.getName());
+
+ public String convertToString(Object pojo) {
+ return convertToXml(pojo);
+ }
+
+ public String convertToXml(Object obj) {
+ String xmlHead="<?xml version=\"1.0\" encoding=\"UTF-8\"?>";
+ StringWriter outputWriter = new StringWriter();
+ BeanWriter writer = new BeanWriter(outputWriter);
+ IntrospectionConfiguration configuration = writer.getXMLIntrospector().getConfiguration();
+ configuration.setAttributesForPrimitives(false);
+ configuration.setWrapCollectionsInElement(true);
+
+ writer.getBindingConfiguration().setMapIDs(false);
+ // Print no line endings
+ writer.setEndOfLine("");
+ writer.setWriteEmptyElements(false);
+
+ // Still left to do:
+ //
+ // Fix map output with custom outputter:
+ // for a map with {key : value, key2 : value2} we need:
+ // <key>value</key> <key2>value2</key2>
+
+ // Supress empty lists
+
+ // Within a list the items need to be renamed - this probably means with need a .betwixt file
+
+ String toReturn = xmlHead;
+ try {
+ writer.write("response", obj);
+ toReturn =toReturn+ outputWriter.toString();
+ logger.finest("XML is: " + toReturn + "\n **** \n\n");
+
+ } catch (SAXException e) {
+ logger.log(Level.SEVERE, e.getMessage(), e);
+ } catch (IOException e) {
+ logger.log(Level.SEVERE, e.getMessage(), e);
+ } catch (IntrospectionException e) {
+ logger.log(Level.SEVERE, e.getMessage(), e);
+ } finally {
+ try {
+ writer.close();
+ } catch (IOException e) {
+ logger.log(Level.FINEST, e.getMessage(), e);
+ }
+ }
+
+ return toReturn;
+ }
+
+ public <T> T convertToObject(String xml, Class<T> className) {
+ String errorMessage = "Could not convert " + xml + " to " + className;
+ xml=xml.substring(xml.indexOf("?>") + 2);
+ BeanReader reader = new BeanReader();
+ try {
+ reader.registerBeanClass("activity", className);
+ StringReader rd = new StringReader(xml);
+ return (T) reader.parse(rd);
+ } catch (IntrospectionException e) {
+ throw new RuntimeException(errorMessage, e);
+ } catch (IOException e) {
+ throw new RuntimeException(errorMessage, e);
+ } catch (SAXException e) {
+ throw new RuntimeException(errorMessage, e);
+ }
+ }
+}
Modified: incubator/shindig/trunk/java/social-api/src/main/java/org/apache/shindig/social/opensocial/service/ApiServlet.java
URL: http://svn.apache.org/viewvc/incubator/shindig/trunk/java/social-api/src/main/java/org/apache/shindig/social/opensocial/service/ApiServlet.java?rev=698636&r1=698635&r2=698636&view=diff
==============================================================================
--- incubator/shindig/trunk/java/social-api/src/main/java/org/apache/shindig/social/opensocial/service/ApiServlet.java (original)
+++ incubator/shindig/trunk/java/social-api/src/main/java/org/apache/shindig/social/opensocial/service/ApiServlet.java Wed Sep 24 09:33:41 2008
@@ -46,6 +46,7 @@
private Map<String, Class<? extends DataRequestHandler>> handlers;
protected BeanJsonConverter jsonConverter;
protected BeanConverter xmlConverter;
+ protected BeanConverter atomConverter;
@Inject
public void setHandlers(HandlerProvider handlers) {
@@ -54,11 +55,13 @@
@Inject
public void setBeanConverters(
- @Named("shindig.bean.converter.json")BeanConverter jsonConverter,
- @Named("shindig.bean.converter.xml")BeanConverter xmlConverter) {
+ @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;
}
// Only for testing use. Do not override the injector.
Modified: incubator/shindig/trunk/java/social-api/src/main/java/org/apache/shindig/social/opensocial/service/DataServiceServlet.java
URL: http://svn.apache.org/viewvc/incubator/shindig/trunk/java/social-api/src/main/java/org/apache/shindig/social/opensocial/service/DataServiceServlet.java?rev=698636&r1=698635&r2=698636&view=diff
==============================================================================
--- incubator/shindig/trunk/java/social-api/src/main/java/org/apache/shindig/social/opensocial/service/DataServiceServlet.java (original)
+++ incubator/shindig/trunk/java/social-api/src/main/java/org/apache/shindig/social/opensocial/service/DataServiceServlet.java Wed Sep 24 09:33:41 2008
@@ -34,6 +34,7 @@
protected static final String FORMAT_PARAM = "format";
protected static final String ATOM_FORMAT = "atom";
+ protected static final String XML_FORMAT = "xml";
public static final String PEOPLE_ROUTE = "people";
public static final String ACTIVITY_ROUTE = "activities";
@@ -116,8 +117,13 @@
BeanConverter getConverterForRequest(HttpServletRequest servletRequest) {
String formatString = servletRequest.getParameter(FORMAT_PARAM);
if (ATOM_FORMAT.equals(formatString)) {
+ return atomConverter;
+ }
+
+ else if (XML_FORMAT.equals(formatString)) {
return xmlConverter;
}
+
return jsonConverter;
}
}
Modified: incubator/shindig/trunk/java/social-api/src/test/java/org/apache/shindig/social/dataservice/integration/AbstractLargeRestfulTests.java
URL: http://svn.apache.org/viewvc/incubator/shindig/trunk/java/social-api/src/test/java/org/apache/shindig/social/dataservice/integration/AbstractLargeRestfulTests.java?rev=698636&r1=698635&r2=698636&view=diff
==============================================================================
--- incubator/shindig/trunk/java/social-api/src/test/java/org/apache/shindig/social/dataservice/integration/AbstractLargeRestfulTests.java (original)
+++ incubator/shindig/trunk/java/social-api/src/test/java/org/apache/shindig/social/dataservice/integration/AbstractLargeRestfulTests.java Wed Sep 24 09:33:41 2008
@@ -19,6 +19,7 @@
import org.apache.shindig.common.testing.FakeGadgetToken;
import org.apache.shindig.social.SocialApiTestsGuiceModule;
+import org.apache.shindig.social.core.util.BeanAtomConverter;
import org.apache.shindig.social.core.util.BeanJsonConverter;
import org.apache.shindig.social.core.util.BeanXmlConverter;
import org.apache.shindig.social.opensocial.service.ActivityHandler;
@@ -30,12 +31,10 @@
import com.google.common.collect.Maps;
import com.google.inject.Guice;
-
+import junit.framework.TestCase;
import org.easymock.classextension.EasyMock;
import org.json.JSONObject;
-import junit.framework.TestCase;
-
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
@@ -43,7 +42,6 @@
import java.io.PrintWriter;
import java.util.Map;
import java.util.Vector;
-
import javax.servlet.ServletInputStream;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@@ -74,7 +72,8 @@
servlet.setHandlers(new HandlerProvider(handlers));
servlet.setInjector(Guice.createInjector(new SocialApiTestsGuiceModule()));
servlet.setBeanConverters(new BeanJsonConverter(
- Guice.createInjector(new SocialApiTestsGuiceModule())), new BeanXmlConverter());
+ Guice.createInjector(new SocialApiTestsGuiceModule())), new BeanXmlConverter(),
+ new BeanAtomConverter());
req = EasyMock.createMock(HttpServletRequest.class);
res = EasyMock.createMock(HttpServletResponse.class);
@@ -178,4 +177,4 @@
return columns;
}
-}
\ No newline at end of file
+}
Modified: incubator/shindig/trunk/java/social-api/src/test/java/org/apache/shindig/social/opensocial/service/DataServiceServletTest.java
URL: http://svn.apache.org/viewvc/incubator/shindig/trunk/java/social-api/src/test/java/org/apache/shindig/social/opensocial/service/DataServiceServletTest.java?rev=698636&r1=698635&r2=698636&view=diff
==============================================================================
--- incubator/shindig/trunk/java/social-api/src/test/java/org/apache/shindig/social/opensocial/service/DataServiceServletTest.java (original)
+++ incubator/shindig/trunk/java/social-api/src/test/java/org/apache/shindig/social/opensocial/service/DataServiceServletTest.java Wed Sep 24 09:33:41 2008
@@ -22,14 +22,14 @@
import org.apache.shindig.common.util.ImmediateFuture;
import org.apache.shindig.social.ResponseError;
import org.apache.shindig.social.SocialApiTestsGuiceModule;
-import org.apache.shindig.social.opensocial.spi.SocialSpiException;
+import org.apache.shindig.social.core.util.BeanAtomConverter;
import org.apache.shindig.social.core.util.BeanJsonConverter;
import org.apache.shindig.social.core.util.BeanXmlConverter;
+import org.apache.shindig.social.opensocial.spi.SocialSpiException;
+import com.google.common.collect.Maps;
import com.google.inject.Guice;
import com.google.inject.Injector;
-import com.google.common.collect.Maps;
-
import junit.framework.TestCase;
import org.easymock.classextension.EasyMock;
@@ -67,7 +67,7 @@
res = EasyMock.createMock(HttpServletResponse.class);
jsonConverter = EasyMock.createMock(BeanJsonConverter.class);
BeanXmlConverter xmlConverter = EasyMock.createMock(BeanXmlConverter.class);
-
+ BeanAtomConverter atomConverter = EasyMock.createMock(BeanAtomConverter.class);
peopleHandler = EasyMock.createMock(PersonHandler.class);
activityHandler = EasyMock.createMock(ActivityHandler.class);
appDataHandler = EasyMock.createMock(AppDataHandler.class);
@@ -78,7 +78,7 @@
servlet.setHandlers(new HandlerProvider(new PersonHandler(null), new ActivityHandler(null),
new AppDataHandler(null)));
- servlet.setBeanConverters(jsonConverter, xmlConverter);
+ servlet.setBeanConverters(jsonConverter, xmlConverter, atomConverter);
}
private void setupInjector() {
@@ -195,9 +195,11 @@
BeanJsonConverter json = new BeanJsonConverter(
Guice.createInjector(new SocialApiTestsGuiceModule()));
BeanXmlConverter xml = new BeanXmlConverter();
- servlet.setBeanConverters(json, xml);
+ BeanAtomConverter atom = new BeanAtomConverter();
+ servlet.setBeanConverters(json, xml, atom);
- assertConverter(xml, "atom");
+ assertConverter(atom, "atom");
+ assertConverter(xml, "xml");
assertConverter(json, "");
assertConverter(json, null);
assertConverter(json, "ahhhh!");
Modified: incubator/shindig/trunk/java/social-api/src/test/java/org/apache/shindig/social/opensocial/service/JsonRpcServletTest.java
URL: http://svn.apache.org/viewvc/incubator/shindig/trunk/java/social-api/src/test/java/org/apache/shindig/social/opensocial/service/JsonRpcServletTest.java?rev=698636&r1=698635&r2=698636&view=diff
==============================================================================
--- incubator/shindig/trunk/java/social-api/src/test/java/org/apache/shindig/social/opensocial/service/JsonRpcServletTest.java (original)
+++ incubator/shindig/trunk/java/social-api/src/test/java/org/apache/shindig/social/opensocial/service/JsonRpcServletTest.java Wed Sep 24 09:33:41 2008
@@ -19,6 +19,7 @@
import org.apache.shindig.common.testing.FakeGadgetToken;
import org.apache.shindig.common.util.ImmediateFuture;
+import org.apache.shindig.social.core.util.BeanAtomConverter;
import org.apache.shindig.social.core.util.BeanJsonConverter;
import org.apache.shindig.social.core.util.BeanXmlConverter;
@@ -29,10 +30,10 @@
import org.json.JSONArray;
import org.json.JSONObject;
+import java.io.ByteArrayInputStream;
import java.io.IOException;
-import java.io.PrintWriter;
import java.io.InputStream;
-import java.io.ByteArrayInputStream;
+import java.io.PrintWriter;
import java.util.concurrent.Future;
import javax.servlet.ServletInputStream;
import javax.servlet.http.HttpServletRequest;
@@ -65,6 +66,7 @@
res = EasyMock.createMock(HttpServletResponse.class);
jsonConverter = EasyMock.createMock(BeanJsonConverter.class);
xmlConverter = EasyMock.createMock(BeanXmlConverter.class);
+ BeanAtomConverter atomConverter = EasyMock.createMock(BeanAtomConverter.class);
peopleHandler = EasyMock.createMock(PersonHandler.class);
activityHandler = EasyMock.createMock(ActivityHandler.class);
@@ -76,7 +78,7 @@
servlet.setHandlers(new HandlerProvider(new PersonHandler(null), new ActivityHandler(null),
new AppDataHandler(null)));
- servlet.setBeanConverters(jsonConverter, xmlConverter);
+ servlet.setBeanConverters(jsonConverter, xmlConverter, atomConverter);
}
private void setupInjector() {