Further social-binding cleanup
diff --git a/jpa-moxy/round-trip/.gitignore b/jpa-moxy/round-trip/.gitignore
new file mode 100644
index 0000000..5e56e04
--- /dev/null
+++ b/jpa-moxy/round-trip/.gitignore
@@ -0,0 +1 @@
+/bin
diff --git a/jpa-moxy/round-trip/.project b/jpa-moxy/round-trip/.project
new file mode 100644
index 0000000..15966b8
--- /dev/null
+++ b/jpa-moxy/round-trip/.project
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+ <name>round-trip</name>
+ <comment></comment>
+ <projects>
+ </projects>
+ <buildSpec>
+ <buildCommand>
+ <name>org.eclipse.jdt.core.javabuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>org.eclipse.m2e.core.maven2Builder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ </buildSpec>
+ <natures>
+ <nature>org.eclipse.jdt.core.javanature</nature>
+ <nature>org.eclipse.m2e.core.maven2Nature</nature>
+ </natures>
+</projectDescription>
diff --git a/moxy/social-binding/.classpath b/moxy/social-binding/.classpath
index af50fd9..5a30989 100644
--- a/moxy/social-binding/.classpath
+++ b/moxy/social-binding/.classpath
@@ -22,14 +22,14 @@
<attribute name="maven.pomderived" value="true"/>
</attributes>
</classpathentry>
- <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.6">
+ <classpathentry kind="con" path="org.eclipse.m2e.MAVEN2_CLASSPATH_CONTAINER">
<attributes>
<attribute name="maven.pomderived" value="true"/>
</attributes>
</classpathentry>
- <classpathentry kind="con" path="org.eclipse.m2e.MAVEN2_CLASSPATH_CONTAINER">
+ <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.7">
<attributes>
- <attribute name="maven.pomderived" value="true"/>
+ <attribute name="owner.project.facets" value="java"/>
</attributes>
</classpathentry>
<classpathentry kind="output" path="target/classes"/>
diff --git a/moxy/social-binding/.project b/moxy/social-binding/.project
index 20dedc4..8cc4d2d 100644
--- a/moxy/social-binding/.project
+++ b/moxy/social-binding/.project
@@ -6,6 +6,11 @@
</projects>
<buildSpec>
<buildCommand>
+ <name>org.eclipse.wst.common.project.facet.core.builder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
<name>org.eclipse.jdt.core.javabuilder</name>
<arguments>
</arguments>
@@ -19,5 +24,6 @@
<natures>
<nature>org.eclipse.jdt.core.javanature</nature>
<nature>org.eclipse.m2e.core.maven2Nature</nature>
+ <nature>org.eclipse.wst.common.project.facet.core.nature</nature>
</natures>
</projectDescription>
diff --git a/moxy/social-binding/.settings/org.eclipse.jdt.core.prefs b/moxy/social-binding/.settings/org.eclipse.jdt.core.prefs
index 60105c1..443e085 100644
--- a/moxy/social-binding/.settings/org.eclipse.jdt.core.prefs
+++ b/moxy/social-binding/.settings/org.eclipse.jdt.core.prefs
@@ -1,5 +1,8 @@
eclipse.preferences.version=1
-org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.6
-org.eclipse.jdt.core.compiler.compliance=1.6
+org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.7
+org.eclipse.jdt.core.compiler.compliance=1.7
+org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
+org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
org.eclipse.jdt.core.compiler.problem.forbiddenReference=warning
-org.eclipse.jdt.core.compiler.source=1.6
+org.eclipse.jdt.core.compiler.source=1.7
diff --git a/moxy/social-binding/.settings/org.eclipse.wst.common.project.facet.core.xml b/moxy/social-binding/.settings/org.eclipse.wst.common.project.facet.core.xml
new file mode 100644
index 0000000..bc0009a
--- /dev/null
+++ b/moxy/social-binding/.settings/org.eclipse.wst.common.project.facet.core.xml
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<faceted-project>
+ <installed facet="java" version="1.7"/>
+</faceted-project>
diff --git a/moxy/social-binding/src/main/resources/META-INF/bindings-flickr.xml b/moxy/social-binding/doc/bindings-flickr.xml
similarity index 100%
rename from moxy/social-binding/src/main/resources/META-INF/bindings-flickr.xml
rename to moxy/social-binding/doc/bindings-flickr.xml
diff --git a/moxy/social-binding/src/main/resources/META-INF/bindings-reddit.xml b/moxy/social-binding/doc/bindings-reddit.xml
similarity index 100%
rename from moxy/social-binding/src/main/resources/META-INF/bindings-reddit.xml
rename to moxy/social-binding/doc/bindings-reddit.xml
diff --git a/moxy/social-binding/output.html b/moxy/social-binding/output.html
deleted file mode 100644
index 63831ea..0000000
--- a/moxy/social-binding/output.html
+++ /dev/null
@@ -1,146 +0,0 @@
-<html>
- <head>
- <title>EclipseLink MOXy - Dynamic JAXB</title>
- <link href="style.css" rel="stylesheet" type="text/css" media="screen"/>
- </head>
- <body>
- <p>
- <h1>Reddit /software - Today's Top Posts</h1>
- <p>
- <div id="redditPost">
- <span xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="htmlTextLink">
- <a href="http://www.reddit.com/r/software/comments/1g5vp5/a_good_suggestion_for_softwarefreeware_that/">a good suggestion for software/freeware that allows me to control a PC remotely?</a>
- </span>
- </div>
- </p>
- <p>
- <div id="flickrResults">
- <span xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="htmlText">
- <p>
- <small>Recent Uploads tagged suggestion and software</small>
- </p>
- </span>
- <span xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="htmlImageLink">
- <a href="http://www.flickr.com/photos/blacktar/5354218744/">
- <img src="http://farm6.staticflickr.com/5083/5354218744_d6e32b0cd4_b.jpg" height="80"/>
- </a>
- </span>
- <span xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="htmlImageLink">
- <a href="http://www.flickr.com/photos/54934586@N07/5101667292/">
- <img src="http://farm2.staticflickr.com/1401/5101667292_078ab6a092_b.jpg" height="80"/>
- </a>
- </span>
- </div>
- </p>
- <p>
- <div id="redditPost">
- <span xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="htmlTextLink">
- <a href="http://www.reddit.com/r/software/comments/1g4mw2/scheduling_software_best_licensed_programs/">Scheduling software; Best licensed programs available?</a>
- </span>
- </div>
- </p>
- <p>
- <div id="flickrResults">
- <span xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="htmlText">
- <p>
- <small>Recent Uploads tagged scheduling and software</small>
- </p>
- </span>
- <span xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="htmlImageLink">
- <a href="http://www.flickr.com/photos/netia_software/8488393481/">
- <img src="http://farm9.staticflickr.com/8252/8488393481_1a2910fb2d_b.jpg" height="80"/>
- </a>
- </span>
- <span xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="htmlImageLink">
- <a href="http://www.flickr.com/photos/netia_software/6458702713/">
- <img src="http://farm8.staticflickr.com/7030/6458702713_a0ea9252cc_b.jpg" height="80"/>
- </a>
- </span>
- <span xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="htmlImageLink">
- <a href="http://www.flickr.com/photos/netia_software/8489506126/">
- <img src="http://farm9.staticflickr.com/8230/8489506126_9d2afd7db1_b.jpg" height="80"/>
- </a>
- </span>
- <span xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="htmlImageLink">
- <a href="http://www.flickr.com/photos/netia_software/8489487824/">
- <img src="http://farm9.staticflickr.com/8091/8489487824_365cac0298_b.jpg" height="80"/>
- </a>
- </span>
- <span xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="htmlImageLink">
- <a href="http://www.flickr.com/photos/netia_software/6458724523/">
- <img src="http://farm8.staticflickr.com/7150/6458724523_aeffd22187_b.jpg" height="80"/>
- </a>
- </span>
- <span xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="htmlImageLink">
- <a href="http://www.flickr.com/photos/nancycahille/6835701758/">
- <img src="http://farm8.staticflickr.com/7179/6835701758_b76d642d74_b.jpg" height="80"/>
- </a>
- </span>
- </div>
- </p>
- <p>
- <div id="redditPost">
- <span xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="htmlTextLink">
- <a href="http://peterbiggs.areavoices.com/2013/06/11/ediscovery-and-electronic-forensics-alternative-charge-preparations/">E-Discovery and Electronic Forensics: Alternative Charge Preparations</a>
- </span>
- </div>
- </p>
- <p>
- <div id="flickrResults">
- <span xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="htmlText">
- <p>
- <small>Recent Uploads tagged preparations and ediscovery</small>
- </p>
- </span>
- <span xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="htmlText">
- <p>
- <small>No results found.</small>
- </p>
- </span>
- </div>
- </p>
- <p>
- <div id="redditPost">
- <span xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="htmlTextLink">
- <a href="http://www.youtube.com/watch?v=5_7VhCt1kRg&amp;rel=false">Can’t decide what to do tonight? Now, there’s an app for that...</a>
- </span>
- </div>
- </p>
- <p>
- <div id="flickrResults">
- <span xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="htmlText">
- <p>
- <small>Recent Uploads tagged tonight and there’s</small>
- </p>
- </span>
- <span xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="htmlText">
- <p>
- <small>No results found.</small>
- </p>
- </span>
- </div>
- </p>
- <p>
- <div id="redditPost">
- <span xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="htmlTextLink">
- <a href="http://arturotoms.bcz.com/2013/06/11/ediscovery-and-digital-forensics-alternative-charge-preparations/">Electronic Discovery and Digital Forensics: Alternative Charge Preparations</a>
- </span>
- </div>
- </p>
- <p>
- <div id="flickrResults">
- <span xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="htmlText">
- <p>
- <small>Recent Uploads tagged preparations and alternative</small>
- </p>
- </span>
- <span xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="htmlText">
- <p>
- <small>No results found.</small>
- </p>
- </span>
- </div>
- </p>
- </p>
- </body>
-</html>
\ No newline at end of file
diff --git a/moxy/social-binding/src/main/java/eclipselink/example/moxy/socialbinding/FlikrReader.java b/moxy/social-binding/src/main/java/eclipselink/example/moxy/socialbinding/FlikrReader.java
index 9304a43..309def1 100644
--- a/moxy/social-binding/src/main/java/eclipselink/example/moxy/socialbinding/FlikrReader.java
+++ b/moxy/social-binding/src/main/java/eclipselink/example/moxy/socialbinding/FlikrReader.java
@@ -10,6 +10,7 @@
******************************************************************************/
package eclipselink.example.moxy.socialbinding;
+import java.io.IOException;
import java.io.InputStream;
import java.net.URL;
import java.util.ArrayList;
@@ -52,24 +53,13 @@
}
- public Map<Object, DynamicEntity> readFlickrResults(Map<Object, DynamicEntity> redditMap) throws Exception {
- Map<Object, DynamicEntity> results = new HashMap<Object, DynamicEntity>();
-
- for (Object postUrl : redditMap.keySet()) {
+ public Map<String, DynamicEntity> readFlickrResults(Map<String, DynamicEntity> redditMap) {
+ Map<String, DynamicEntity> results = new HashMap<String, DynamicEntity>();
+
+ for (String postUrl : redditMap.keySet()) {
DynamicEntity post = redditMap.get(postUrl);
+ DynamicEntity flickrResults = readFlickrResult(postUrl, post);
- System.out.println();
- System.out.println("Headline: [" + post.get("title") + "]");
-
- String keywords = new KeywordExtractor().extractKeywords(post.get("title").toString());
-
- String flickrUrlString = FLICKR_URL + keywords;
- System.out.print("Searching Flickr: [" + flickrUrlString + "]... ");
- InputStream flickrStream = new URL(flickrUrlString).openConnection().getInputStream();
- System.out.println("Done.");
-
- Unmarshaller u = context.createUnmarshaller();
- DynamicEntity flickrResults = (DynamicEntity) u.unmarshal(flickrStream);
results.put(postUrl, flickrResults);
@@ -86,8 +76,40 @@
System.out.println("\tNo results found.");
}
}
-
+
return results;
+
+ }
+
+ public DynamicEntity readFlickrResult(String postUrl, DynamicEntity post) {
+
+ System.out.println("\nHeadline: [" + post.get("title") + "]");
+
+ String keywords = new KeywordExtractor().extractKeywords(post.get("title").toString());
+
+ String flickrUrlString = FLICKR_URL + keywords;
+ System.out.print("Searching Flickr: [" + flickrUrlString + "]... ");
+
+ InputStream flickrStream = null;
+
+ try {
+ flickrStream = new URL(flickrUrlString).openConnection().getInputStream();
+
+ System.out.println("Done.");
+
+ Unmarshaller u = context.createUnmarshaller();
+ return (DynamicEntity) u.unmarshal(flickrStream);
+ } catch (IOException | JAXBException e) {
+ throw new RuntimeException("FLIKR access failed", e);
+ } finally {
+ if (flickrStream != null) {
+ try {
+ flickrStream.close();
+ } catch (IOException e) {// ignore in this example }
+ }
+ }
+ }
+
}
// ========================================================================
diff --git a/moxy/social-binding/src/main/java/eclipselink/example/moxy/socialbinding/HTMLWriter.java b/moxy/social-binding/src/main/java/eclipselink/example/moxy/socialbinding/HTMLWriter.java
index a50f8ea..fcab2aa 100644
--- a/moxy/social-binding/src/main/java/eclipselink/example/moxy/socialbinding/HTMLWriter.java
+++ b/moxy/social-binding/src/main/java/eclipselink/example/moxy/socialbinding/HTMLWriter.java
@@ -10,7 +10,6 @@
******************************************************************************/
package eclipselink.example.moxy.socialbinding;
-import java.awt.Desktop;
import java.io.File;
import java.io.InputStream;
import java.util.ArrayList;
@@ -19,6 +18,7 @@
import java.util.Map;
import java.util.Random;
+import javax.xml.bind.JAXBContext;
import javax.xml.bind.JAXBException;
import javax.xml.bind.Marshaller;
@@ -28,6 +28,7 @@
import org.eclipse.persistence.jaxb.dynamic.DynamicJAXBContextFactory;
/**
+ * HTML writer using dynamic MOXy to marshall into HTML.
*
* @author rbarkhous
* @since EclipseLink 2.4.2
@@ -36,8 +37,10 @@
private DynamicJAXBContext context;
- private File outputFile;
-
+ /**
+ * Create the {@link JAXBContext} that MOXy will use for HTML writing
+ * (Marshalling)
+ */
public HTMLWriter() {
ClassLoader loader = Thread.currentThread().getContextClassLoader();
@@ -53,19 +56,17 @@
} catch (JAXBException e) {
throw new RuntimeException("Context creation failed", e);
}
-
- outputFile = new File("output.html");
}
- public void write(String topic, int imageLimit, Map<Object, DynamicEntity> redditMap, Map<Object, DynamicEntity> flickrMap) throws Exception {
- DynamicEntity html = context.newDynamicEntity("eclipselink.example.moxy.dynamic.flickr.HtmlPage");
- html.set("title", "EclipseLink MOXy - Dynamic JAXB");
+ public File write(String topic, String fileLocation, int imageLimit, Map<String, DynamicEntity> redditMap, Map<String, DynamicEntity> flickrMap) {
+ DynamicEntity html = context.newDynamicEntity("HtmlPage");
+ html.set("title", "EclipseLink Social Binding Example");
html.set("css", "style.css");
html.set("rel", "stylesheet");
html.set("type", "text/css");
html.set("media", "screen");
- DynamicEntity body = context.newDynamicEntity("eclipselink.example.moxy.dynamic.flickr.HtmlBody");
+ DynamicEntity body = context.newDynamicEntity("HtmlBody");
body.set("title", "Reddit /" + topic + " - Today's Top Posts");
ArrayList<DynamicEntity> divs = new ArrayList<DynamicEntity>();
@@ -77,12 +78,12 @@
// Article Link
// ================================================================
- DynamicEntity redditDiv = context.newDynamicEntity("eclipselink.example.moxy.dynamic.flickr.HtmlDiv");
+ DynamicEntity redditDiv = context.newDynamicEntity("HtmlDiv");
redditDiv.set("id", "redditPost");
ArrayList<DynamicEntity> divContent = new ArrayList<DynamicEntity>();
- DynamicEntity redditLink = context.newDynamicEntity("eclipselink.example.moxy.dynamic.flickr.HtmlTextLink");
+ DynamicEntity redditLink = context.newDynamicEntity("HtmlTextLink");
redditLink.set("url", post.get("url"));
redditLink.set("title", post.get("title"));
divContent.add(redditLink);
@@ -92,12 +93,12 @@
// Flickr description and images
// ================================================================
- DynamicEntity flickrDiv = context.newDynamicEntity("eclipselink.example.moxy.dynamic.flickr.HtmlDiv");
+ DynamicEntity flickrDiv = context.newDynamicEntity("HtmlDiv");
flickrDiv.set("id", "flickrResults");
divContent = new ArrayList<DynamicEntity>();
- DynamicEntity flickrDescription = context.newDynamicEntity("eclipselink.example.moxy.dynamic.flickr.HtmlText");
+ DynamicEntity flickrDescription = context.newDynamicEntity("HtmlText");
flickrDescription.set("text", flickrResults.get("description"));
divContent.add(flickrDescription);
@@ -107,7 +108,7 @@
if (flickrItems != null) {
Collections.shuffle(flickrItems, new Random(System.nanoTime()));
for (DynamicEntity flickrItem : flickrItems) {
- DynamicEntity flickrImageLink = context.newDynamicEntity("eclipselink.example.moxy.dynamic.flickr.HtmlImageLink");
+ DynamicEntity flickrImageLink = context.newDynamicEntity("HtmlImageLink");
flickrImageLink.set("url", flickrItem.get("flickrPage"));
flickrImageLink.set("image", flickrItem.get("imageUrl"));
flickrImageLink.set("height", HTML_IMAGE_HEIGHT);
@@ -118,7 +119,7 @@
}
}
} else {
- DynamicEntity noneText = context.newDynamicEntity("eclipselink.example.moxy.dynamic.flickr.HtmlText");
+ DynamicEntity noneText = context.newDynamicEntity("HtmlText");
noneText.set("text", "No results found.");
divContent.add(noneText);
}
@@ -132,24 +133,21 @@
html.set("body", body);
- Marshaller m = context.createMarshaller();
- m.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
- m.setProperty(Marshaller.JAXB_FRAGMENT, true);
- m.marshal(html, outputFile);
- }
-
- public void launchSystemBrowser() {
+ Marshaller m;
try {
- Desktop.getDesktop().browse(outputFile.toURI());
- } catch (Exception e) {
- e.printStackTrace();
+ m = context.createMarshaller();
+ m.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
+ m.setProperty(Marshaller.JAXB_FRAGMENT, true);
+ File outputFile = new File(fileLocation);
+ m.marshal(html, outputFile);
+ return outputFile;
+ } catch (JAXBException e) {
+ throw new RuntimeException("HTML marshall failed", e);
}
}
// ========================================================================
private final String HTML_BINDINGS = "META-INF/bindings-html.xml";
-
- private final Integer HTML_IMAGE_HEIGHT = Integer.valueOf(80);
-
+ private final Integer HTML_IMAGE_HEIGHT = 80;
}
\ No newline at end of file
diff --git a/moxy/social-binding/src/main/java/eclipselink/example/moxy/socialbinding/KeywordExtractor.java b/moxy/social-binding/src/main/java/eclipselink/example/moxy/socialbinding/KeywordExtractor.java
index 8f3cf93..2a7744d 100644
--- a/moxy/social-binding/src/main/java/eclipselink/example/moxy/socialbinding/KeywordExtractor.java
+++ b/moxy/social-binding/src/main/java/eclipselink/example/moxy/socialbinding/KeywordExtractor.java
@@ -16,6 +16,8 @@
import java.util.StringTokenizer;
/**
+ * Simple utility class to extract and prioritize a set of keywords based on the
+ * title provided.
*
* @author rbarkhous
* @since EclipseLink 2.4.2
diff --git a/moxy/social-binding/src/main/java/eclipselink/example/moxy/socialbinding/Main.java b/moxy/social-binding/src/main/java/eclipselink/example/moxy/socialbinding/Main.java
index cc2f025..c418f16 100644
--- a/moxy/social-binding/src/main/java/eclipselink/example/moxy/socialbinding/Main.java
+++ b/moxy/social-binding/src/main/java/eclipselink/example/moxy/socialbinding/Main.java
@@ -10,11 +10,14 @@
******************************************************************************/
package eclipselink.example.moxy.socialbinding;
+import java.awt.Desktop;
+import java.io.File;
import java.util.Map;
import org.eclipse.persistence.dynamic.DynamicEntity;
/**
+ * Main example execution.
*
* @author rbarkhous
* @since EclipseLink 2.4.2
@@ -22,15 +25,22 @@
public class Main {
public static void main(String[] args) {
- String topic = "software";
-
- try {
- Map<Object, DynamicEntity> redditResults = new RedditReader().readRedditPosts(topic);
- Map<Object, DynamicEntity> flickrResults = new FlikrReader().readFlickrResults(redditResults);
+ File file = create("technology", "target/classes/output.html", 5);
- HTMLWriter writer = new HTMLWriter();
- writer.write(topic, 6, redditResults, flickrResults);
- writer.launchSystemBrowser();
+ launchSystemBrowser(file);
+ }
+
+ public static File create(String topic, String targetFile, int maxResults) {
+ Map<String, DynamicEntity> redditResults = new RedditReader().readRedditPosts(topic);
+ Map<String, DynamicEntity> flickrResults = new FlikrReader().readFlickrResults(redditResults);
+
+ HTMLWriter writer = new HTMLWriter();
+ return writer.write(topic, targetFile, maxResults, redditResults, flickrResults);
+ }
+
+ public static void launchSystemBrowser(File file) {
+ try {
+ Desktop.getDesktop().browse(file.toURI());
} catch (Exception e) {
e.printStackTrace();
}
diff --git a/moxy/social-binding/src/main/java/eclipselink/example/moxy/socialbinding/RedditReader.java b/moxy/social-binding/src/main/java/eclipselink/example/moxy/socialbinding/RedditReader.java
index 9f61af6..ad19979 100644
--- a/moxy/social-binding/src/main/java/eclipselink/example/moxy/socialbinding/RedditReader.java
+++ b/moxy/social-binding/src/main/java/eclipselink/example/moxy/socialbinding/RedditReader.java
@@ -21,6 +21,7 @@
import javax.xml.transform.stream.StreamSource;
import org.eclipse.persistence.dynamic.DynamicEntity;
+import org.eclipse.persistence.dynamic.DynamicType;
import org.eclipse.persistence.jaxb.JAXBContextProperties;
import org.eclipse.persistence.jaxb.UnmarshallerProperties;
import org.eclipse.persistence.jaxb.dynamic.DynamicJAXBContext;
@@ -28,6 +29,9 @@
import org.eclipse.persistence.oxm.MediaType;
/**
+ * Example of using EclipseLink MOXy to read (unmarshall) the JSON returned from
+ * Reddit (http://www.reddit.com/). It uses the available interface that returns
+ * JSON based on a provided topic.
*
* @author rbarkhous
* @since EclipseLink 2.4.2
@@ -53,28 +57,36 @@
}
}
- public Map<Object, DynamicEntity> readRedditPosts(String topic) throws Exception {
- Unmarshaller u = context.createUnmarshaller();
- u.setProperty(UnmarshallerProperties.MEDIA_TYPE, MediaType.APPLICATION_JSON);
- u.setProperty(UnmarshallerProperties.JSON_INCLUDE_ROOT, false);
+ public Map<String, DynamicEntity> readRedditPosts(String topic) {
+ DynamicEntity redditResults = null;
- Class<? extends DynamicEntity> redditResultsClass = context.newDynamicEntity("eclipselink.example.moxy.dynamic.flickr.RedditResults").getClass();
+ try {
+ Unmarshaller u = context.createUnmarshaller();
+ u.setProperty(UnmarshallerProperties.MEDIA_TYPE, MediaType.APPLICATION_JSON);
+ u.setProperty(UnmarshallerProperties.JSON_INCLUDE_ROOT, false);
- System.out.println();
- System.out.print("Reading Today's Hot Topics from Reddit r/" + topic + "... ");
- DynamicEntity redditResults = u.unmarshal(new StreamSource(getRedditURL(topic)), redditResultsClass).getValue();
+ DynamicType resultType = this.context.getDynamicType("RedditResults");
+ Class<? extends DynamicEntity> redditResultsClass = resultType.getJavaClass();
+
+ System.out.print("\nReading Today's Hot Topics from Reddit r/" + topic + "... ");
+
+ redditResults = u.unmarshal(new StreamSource(getRedditURL(topic)), redditResultsClass).getValue();
+ } catch (JAXBException e) {
+ throw new RuntimeException("Unmarshall from REDDIT failed", e);
+ }
+
System.out.println("Done.");
List<DynamicEntity> posts = redditResults.get("posts");
- Map<Object, DynamicEntity> results = new HashMap<Object, DynamicEntity>();
+ Map<String, DynamicEntity> results = new HashMap<String, DynamicEntity>();
for (DynamicEntity post : posts) {
- results.put(post.get("url"), post);
+ results.put(post.get("url").toString(), post);
}
return results;
}
-
+
private String getRedditURL(String topic) {
return "http://www.reddit.com/r/" + topic + "/top/.json?sort=top&t=today&limit=" + REDDIT_LIMIT;
}
@@ -82,5 +94,5 @@
// See http://www.reddit.com/dev/api
private final int REDDIT_LIMIT = 5;
- private final String REDDIT_BINDINGS = "META-INF/bindings-reddit.xml";
+ private final String REDDIT_BINDINGS = "META-INF/bindings-reddit.json";
}
\ No newline at end of file
diff --git a/moxy/social-binding/style.css b/moxy/social-binding/src/main/resources/style.css
similarity index 100%
rename from moxy/social-binding/style.css
rename to moxy/social-binding/src/main/resources/style.css