Author: dhague
Date: Thu Feb 5 21:38:44 2009
New Revision: 741305
URL: http://svn.apache.org/viewvc?rev=741305&view=rev
Log:
getMessages is now implemented. resources/props/test.properties allows you to
specify the token & API URL to use for JUnit test.
Modified:
incubator/esme/trunk/esme-java-client/ (props changed)
incubator/esme/trunk/esme-java-client/src/main/java/org/apache/esme/api/EsmeRestApi.java
incubator/esme/trunk/esme-java-client/src/main/java/org/apache/esme/model/Message.java
incubator/esme/trunk/esme-java-client/src/test/java/org/apache/esme/api/RestTest.java
incubator/esme/trunk/esme-java-client/src/test/resources/props/test.properties
Propchange: incubator/esme/trunk/esme-java-client/
------------------------------------------------------------------------------
--- svn:ignore (added)
+++ svn:ignore Thu Feb 5 21:38:44 2009
@@ -0,0 +1 @@
+target
Modified:
incubator/esme/trunk/esme-java-client/src/main/java/org/apache/esme/api/EsmeRestApi.java
URL:
http://svn.apache.org/viewvc/incubator/esme/trunk/esme-java-client/src/main/java/org/apache/esme/api/EsmeRestApi.java?rev=741305&r1=741304&r2=741305&view=diff
==============================================================================
---
incubator/esme/trunk/esme-java-client/src/main/java/org/apache/esme/api/EsmeRestApi.java
(original)
+++
incubator/esme/trunk/esme-java-client/src/main/java/org/apache/esme/api/EsmeRestApi.java
Thu Feb 5 21:38:44 2009
@@ -8,38 +8,20 @@
import java.io.ByteArrayInputStream;
import org.apache.esme.model.Message;
-import java.io.DataOutputStream;
import java.io.IOException;
-import java.io.UnsupportedEncodingException;
-import java.net.HttpURLConnection;
-import java.net.URL;
-import java.net.URLEncoder;
import java.util.ArrayList;
-import java.util.HashMap;
import java.util.List;
-import java.util.Properties;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
-import org.apache.commons.httpclient.HostConfiguration;
-import org.apache.commons.httpclient.HttpClient;
-import org.apache.commons.httpclient.HttpException;
-import org.apache.commons.httpclient.HttpMethod;
-import org.apache.commons.httpclient.NameValuePair;
-import org.apache.commons.httpclient.ProxyClient;
-import org.apache.commons.httpclient.ProxyHost;
+import org.apache.commons.httpclient.*;
import org.apache.commons.httpclient.methods.GetMethod;
import org.apache.commons.httpclient.methods.PostMethod;
import org.apache.esme.model.Status;
-import org.w3c.dom.Attr;
-import org.w3c.dom.Document;
-import org.w3c.dom.Element;
-import org.w3c.dom.NamedNodeMap;
-import org.w3c.dom.Node;
-import org.w3c.dom.NodeList;
+import org.w3c.dom.*;
import org.xml.sax.SAXException;
/**
@@ -69,7 +51,7 @@
public void sendMsg(String message) {
Message msg = new Message();
- msg.setText(message);
+ msg.setBody(message);
sendMsg(msg);
}
@@ -112,7 +94,8 @@
throw new EsmeException(statusCode);
}
byte[] responseBody = method.getResponseBody();
- logger.log(Level.INFO, "Got body, convert to BAIS");
+ logger.log(Level.INFO, "Got body: "+new
String(responseBody,"utf-8"));
+
// Parse the resulting XML into a DOM
ByteArrayInputStream statusStream = new
ByteArrayInputStream(responseBody);
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
@@ -120,6 +103,7 @@
db = dbf.newDocumentBuilder();
logger.log(Level.INFO, "Parse & create Document");
result = db.parse(statusStream);
+ logger.log(Level.INFO,"Parsed.");
} catch (IOException e) {
logger.log(Level.SEVERE,"Fatal transport error or XML
error",e);
} catch (SAXException e) {
@@ -140,6 +124,7 @@
PostMethod method = new PostMethod(apiUrl + "/login");
NameValuePair[] data = { new NameValuePair("token", token) };
+ method.setRequestBody(data);
try {
Document document = executeHttp(method);
} finally {
@@ -180,11 +165,12 @@
tags+=(message.getTags()[i]);
}
NameValuePair[] data = {
- new NameValuePair("message", message.getText()),
- new NameValuePair("via", message.getVia()),
+ new NameValuePair("message", message.getBody()),
+ new NameValuePair("via", message.getSource()),
new NameValuePair("tags", tags),
};
try {
+ method.setRequestBody(data);
Document document = executeHttp(method);
} finally {
// Release the connection.
@@ -248,7 +234,10 @@
// <body>
// Woohoo - got through the rest of the slides quite
quickly. I can go home now.
// </body>
-// <tags/>
+// <tags>
+// <tag id="12" name="Tags"/>
+// <tag id="11" name="Compass"/>
+// </tags>
// </message>
// </esme_api>
@@ -260,6 +249,8 @@
try {
Document document = executeHttp(method);
+ logger.info("Check success");
+
String success =
document.getDocumentElement().getAttribute("success");
if ("false".equals(success))
{
@@ -269,9 +260,48 @@
NodeList messages = document.getElementsByTagName("message");
- // *************************************************************
- // Major TODO - complete the parsing and the setting of messages
- // *************************************************************
+ for (int i=0; i<messages.getLength(); i++)
+ {
+ Message msg = new Message();
+ Element nodeMessage = (Element)messages.item(i);
+
+ msg.setMessageId(nodeMessage.getAttribute("id"));
+ msg.setSource(nodeMessage.getAttribute("source"));
+ msg.setDate(nodeMessage.getAttribute("date"));
+
+ logger.info("Got message basics, now get author info");
+
+ Element nodeAuthor =
(Element)nodeMessage.getElementsByTagName("author").item(0);
+ if (nodeAuthor != null)
+ {
+ msg.setAuthorId(nodeAuthor.getAttribute("id"));
+ msg.setAuthorName(nodeAuthor.getAttribute("name"));
+ msg.setAuthorImage(nodeAuthor.getAttribute("image"));
+ }
+
+ logger.info("Got author, now get body");
+
+ Element nodeBody =
(Element)nodeMessage.getElementsByTagName("body").item(0);
+ if (nodeBody != null)
+ {
+ msg.setBody(nodeBody.getTextContent());
+ }
+
+ logger.info("Got body, now get tags");
+
+ NodeList nodeTags =
(NodeList)nodeMessage.getElementsByTagName("tags");
+ ArrayList tagList = new ArrayList();
+ for (int j=0; j<nodeTags.getLength(); j++)
+ {
+ Element nodeTag = (Element)nodeTags.item(j);
+ tagList.add((String)nodeTag.getAttribute("name"));
+ }
+ msg.setTags((String[])tagList.toArray(msg.getTags()));
+
+ logger.info("Message: "+msg.toString());
+
+ messageList.add(msg);
+ }
} finally {
// Release the connection.
Modified:
incubator/esme/trunk/esme-java-client/src/main/java/org/apache/esme/model/Message.java
URL:
http://svn.apache.org/viewvc/incubator/esme/trunk/esme-java-client/src/main/java/org/apache/esme/model/Message.java?rev=741305&r1=741304&r2=741305&view=diff
==============================================================================
---
incubator/esme/trunk/esme-java-client/src/main/java/org/apache/esme/model/Message.java
(original)
+++
incubator/esme/trunk/esme-java-client/src/main/java/org/apache/esme/model/Message.java
Thu Feb 5 21:38:44 2009
@@ -13,9 +13,41 @@
* Window>Preferences>Java>Code Generation>Code and Comments
*/
public class Message {
- private String text = "";
+// <message id="1134" source="web" date="...">
+// <author image="..." name="..." id="9"/>
+// <body>
+// Woohoo - got through the rest of the slides quite
quickly. I can go home now.
+// </body>
+// <tags/>
+// </message>
+
+ private String messageId;
+ private String source = "Java API";
+ private String date;
+
+ private String authorId;
+ private String authorName;
+ private String authorImage;
+
+ private String body = "";
private String[] tags = {};
- private String via = "Java API";
+
+ public String toString()
+ {
+ StringBuffer tagsStr = new StringBuffer();
+ tagsStr.append("[");
+ for (int i=0; i<tags.length; i++)
+ {
+ if (i!=0) tagsStr.append(", ");
+ tagsStr.append(tags[i]);
+ }
+ tagsStr.append("]");
+
+ return "messageId="+messageId+", source="+source+", date="+date+",
authorId="+
+ authorId+", authorName="+authorName+",
authorImage="+authorImage+", body="+
+ body+", tags="+tagsStr.toString();
+ }
+
/**
* @return
*/
@@ -26,15 +58,15 @@
/**
* @return
*/
- public String getText() {
- return text;
+ public String getBody() {
+ return body;
}
/**
* @return
*/
- public String getVia() {
- return via;
+ public String getSource() {
+ return source;
}
/**
@@ -47,15 +79,55 @@
/**
* @param string
*/
- public void setText(String string) {
- text = string;
+ public void setBody(String string) {
+ body = string;
}
/**
* @param string
*/
- public void setVia(String string) {
- via = string;
+ public void setSource(String string) {
+ source = string;
}
+ public String getAuthorId() {
+ return authorId;
+ }
+
+ public void setAuthorId(String authorId) {
+ this.authorId = authorId;
+ }
+
+ public String getAuthorImage() {
+ return authorImage;
+ }
+
+ public void setAuthorImage(String authorImage) {
+ this.authorImage = authorImage;
+ }
+
+ public String getAuthorName() {
+ return authorName;
+ }
+
+ public void setAuthorName(String authorName) {
+ this.authorName = authorName;
+ }
+
+ public String getDate() {
+ return date;
+ }
+
+ public void setDate(String date) {
+ this.date = date;
+ }
+
+ public String getMessageId() {
+ return messageId;
+ }
+
+ public void setMessageId(String messageId) {
+ this.messageId = messageId;
+ }
+
}
Modified:
incubator/esme/trunk/esme-java-client/src/test/java/org/apache/esme/api/RestTest.java
URL:
http://svn.apache.org/viewvc/incubator/esme/trunk/esme-java-client/src/test/java/org/apache/esme/api/RestTest.java?rev=741305&r1=741304&r2=741305&view=diff
==============================================================================
---
incubator/esme/trunk/esme-java-client/src/test/java/org/apache/esme/api/RestTest.java
(original)
+++
incubator/esme/trunk/esme-java-client/src/test/java/org/apache/esme/api/RestTest.java
Thu Feb 5 21:38:44 2009
@@ -1,5 +1,6 @@
package org.apache.esme.api;
+import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;
import org.apache.esme.api.EsmeRestApi;
@@ -9,8 +10,8 @@
public class RestTest extends TestCase {
private static Logger logger = Logger.getLogger("org.apache.esme.api");
-
private static String token = TestProperties.getProperty("esme-token");
+ private static String esmeServer =
TestProperties.getProperty("esme-server");
public void testStatus() throws Exception
{
@@ -18,10 +19,13 @@
logger.log(Level.INFO, "Testing message status");
- EsmeRestApi esme = new EsmeRestApi("http://localhost:8080/api");
+ EsmeRestApi esme = new EsmeRestApi(esmeServer);
Status status = esme.getStatus();
+
logger.log(Level.INFO, "API status is "+status);
- }
+
+ assertNull(status); // status is null because we have not logged in
+}
public void testSendMsg() throws Exception
{
@@ -38,14 +42,39 @@
logger.log(Level.INFO, "Testing message sending");
- EsmeRestApi esme = new EsmeRestApi("http://localhost:8080/api");
+ EsmeRestApi esme = new EsmeRestApi(esmeServer);
+
+ logger.log(Level.INFO, "Login with token "+token);
esme.login(token);
Status status = esme.getStatus();
+ assertNotNull(status);
logger.log(Level.INFO, "API status is "+status);
esme.sendMsg("Hello World, from Java - the status was "+status);
+ logger.log(Level.INFO, "Logout");
+ esme.logout();
+ }
+
+ public void testGetMessages() throws Exception
+ {
+ EsmeRestApi.debugMode = true;
+
+ logger.log(Level.INFO, "Testing getMessages");
+
+ EsmeRestApi esme = new EsmeRestApi(esmeServer);
+ esme.login(token);
+
+ Status status = esme.getStatus();
+ assertNotNull(status);
+ logger.log(Level.INFO, "API status is "+status);
+
+ List messages = esme.getMessages();
+ assertNotNull(messages);
+
+ logger.info("Got "+messages.size()+" messages from server.");
+
esme.logout();
}
Modified:
incubator/esme/trunk/esme-java-client/src/test/resources/props/test.properties
URL:
http://svn.apache.org/viewvc/incubator/esme/trunk/esme-java-client/src/test/resources/props/test.properties?rev=741305&r1=741304&r2=741305&view=diff
==============================================================================
---
incubator/esme/trunk/esme-java-client/src/test/resources/props/test.properties
(original)
+++
incubator/esme/trunk/esme-java-client/src/test/resources/props/test.properties
Thu Feb 5 21:38:44 2009
@@ -1,2 +1,3 @@
+# Substitute the values below with your own token and ESME test server details
esme-token=XNVNYBSLXIASO2T4IVO0N0ZN4MGZPJOI
-
+esme-server=http://localhost:8080/api