summaryrefslogtreecommitdiffstats
path: root/sca-java-2.x/branches/2.0/modules/binding-jsonrpc-runtime/src/test/java
diff options
context:
space:
mode:
Diffstat (limited to 'sca-java-2.x/branches/2.0/modules/binding-jsonrpc-runtime/src/test/java')
-rw-r--r--sca-java-2.x/branches/2.0/modules/binding-jsonrpc-runtime/src/test/java/bean/TestBean.java104
-rw-r--r--sca-java-2.x/branches/2.0/modules/binding-jsonrpc-runtime/src/test/java/echo/Echo.java70
-rw-r--r--sca-java-2.x/branches/2.0/modules/binding-jsonrpc-runtime/src/test/java/echo/EchoBusinessException.java29
-rw-r--r--sca-java-2.x/branches/2.0/modules/binding-jsonrpc-runtime/src/test/java/echo/EchoClientImpl.java102
-rw-r--r--sca-java-2.x/branches/2.0/modules/binding-jsonrpc-runtime/src/test/java/echo/EchoComponentImpl.java121
-rw-r--r--sca-java-2.x/branches/2.0/modules/binding-jsonrpc-runtime/src/test/java/org/apache/tuscany/sca/binding/jsonrpc/JSONRPCDataTypeTestCase.java219
-rw-r--r--sca-java-2.x/branches/2.0/modules/binding-jsonrpc-runtime/src/test/java/org/apache/tuscany/sca/binding/jsonrpc/JSONRPCExceptionTestCase.java95
-rw-r--r--sca-java-2.x/branches/2.0/modules/binding-jsonrpc-runtime/src/test/java/org/apache/tuscany/sca/binding/jsonrpc/JSONRPCReferenceTargetTestCase.java117
-rw-r--r--sca-java-2.x/branches/2.0/modules/binding-jsonrpc-runtime/src/test/java/org/apache/tuscany/sca/binding/jsonrpc/JSONRPCReferenceTestCase.java123
-rw-r--r--sca-java-2.x/branches/2.0/modules/binding-jsonrpc-runtime/src/test/java/org/apache/tuscany/sca/binding/jsonrpc/JSONRPCServiceTestCase.java147
-rw-r--r--sca-java-2.x/branches/2.0/modules/binding-jsonrpc-runtime/src/test/java/org/apache/tuscany/sca/binding/jsonrpc/JSONRPCSmdTestCase.java86
11 files changed, 1213 insertions, 0 deletions
diff --git a/sca-java-2.x/branches/2.0/modules/binding-jsonrpc-runtime/src/test/java/bean/TestBean.java b/sca-java-2.x/branches/2.0/modules/binding-jsonrpc-runtime/src/test/java/bean/TestBean.java
new file mode 100644
index 0000000000..508fc31c08
--- /dev/null
+++ b/sca-java-2.x/branches/2.0/modules/binding-jsonrpc-runtime/src/test/java/bean/TestBean.java
@@ -0,0 +1,104 @@
+/*
+ * 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 bean;
+
+import java.util.ArrayList;
+import java.util.List;
+
+public class TestBean {
+ private String testString;
+ // private String[] testStringArray; // Jackson cannot deserilize String[]
+ private List<String> testStringArray = new ArrayList<String>();
+ private int testInt;
+
+ public String getTestString() {
+ return testString;
+ }
+
+ public void setTestString(String testString) {
+ this.testString = testString;
+ }
+
+ public List<String> getTestStringArray() {
+ return testStringArray;
+ }
+
+ public void setStringArray(List<String> stringArray) {
+ this.testStringArray = stringArray;
+ }
+
+ public int getTestInt() {
+ return testInt;
+ }
+
+ public void setTestInt(int testInt) {
+ this.testInt = testInt;
+ }
+
+ @Override
+ public int hashCode() {
+ final int prime = 31;
+ int result = 1;
+ result = prime * result + testInt;
+ result = prime * result + ((testString == null) ? 0 : testString.hashCode());
+ result = prime * result + ((testStringArray == null) ? 0 : testStringArray.hashCode());
+ return result;
+ }
+
+ @Override
+ public boolean equals(Object obj) {
+ if (this == obj) {
+ return true;
+ }
+ if (obj == null) {
+ return false;
+ }
+ if (getClass() != obj.getClass()) {
+ return false;
+ }
+ TestBean other = (TestBean)obj;
+ if (testInt != other.testInt) {
+ return false;
+ }
+ if (testString == null) {
+ if (other.testString != null) {
+ return false;
+ }
+ } else if (!testString.equals(other.testString)) {
+ return false;
+ }
+ if (testStringArray == null) {
+ if (other.testStringArray != null) {
+ return false;
+ }
+ } else if (!testStringArray.equals(other.testStringArray)) {
+ return false;
+ }
+ return true;
+ }
+
+ @Override
+ public String toString() {
+ StringBuilder builder = new StringBuilder();
+ builder.append("TestBean [testString=").append(testString).append(", testStringArray=").append(testStringArray)
+ .append(", testInt=").append(testInt).append("]");
+ return builder.toString();
+ }
+
+}
diff --git a/sca-java-2.x/branches/2.0/modules/binding-jsonrpc-runtime/src/test/java/echo/Echo.java b/sca-java-2.x/branches/2.0/modules/binding-jsonrpc-runtime/src/test/java/echo/Echo.java
new file mode 100644
index 0000000000..bb47b9e795
--- /dev/null
+++ b/sca-java-2.x/branches/2.0/modules/binding-jsonrpc-runtime/src/test/java/echo/Echo.java
@@ -0,0 +1,70 @@
+/*
+ * 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 echo;
+
+import java.math.BigDecimal;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+
+import org.oasisopen.sca.annotation.Remotable;
+
+import bean.TestBean;
+
+/**
+ * Interface of our sample JSONRPC service.
+ *
+ * @version $Rev$ $Date$
+ */
+@Remotable
+public interface Echo {
+
+ String echo(String msg);
+
+ void echoVoid();
+
+ void echoRuntimeException() throws RuntimeException;
+
+ void echoBusinessException() throws EchoBusinessException;
+
+ int echoInt(int param);
+
+ double echoDouble(double param);
+
+ boolean echoBoolean(boolean param);
+
+ Map echoMap(HashMap map);
+
+ TestBean echoBean(TestBean testBean);
+
+ List echoList(ArrayList list);
+
+ String [] echoArrayString(String[] stringArray);
+
+ int [] echoArrayInt(int[] intArray);
+
+ Set echoSet(HashSet set);
+
+ void get\u03a9\u03bb\u03c0();
+
+ BigDecimal echoBigDecimal(BigDecimal param);
+}
diff --git a/sca-java-2.x/branches/2.0/modules/binding-jsonrpc-runtime/src/test/java/echo/EchoBusinessException.java b/sca-java-2.x/branches/2.0/modules/binding-jsonrpc-runtime/src/test/java/echo/EchoBusinessException.java
new file mode 100644
index 0000000000..bd9d905475
--- /dev/null
+++ b/sca-java-2.x/branches/2.0/modules/binding-jsonrpc-runtime/src/test/java/echo/EchoBusinessException.java
@@ -0,0 +1,29 @@
+/*
+ * 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 echo;
+
+public class EchoBusinessException extends Exception {
+ private static final long serialVersionUID = 7234119326657905710L;
+
+ public EchoBusinessException(String message)
+ {
+ super(message);
+ }
+
+}
diff --git a/sca-java-2.x/branches/2.0/modules/binding-jsonrpc-runtime/src/test/java/echo/EchoClientImpl.java b/sca-java-2.x/branches/2.0/modules/binding-jsonrpc-runtime/src/test/java/echo/EchoClientImpl.java
new file mode 100644
index 0000000000..09a4ab183a
--- /dev/null
+++ b/sca-java-2.x/branches/2.0/modules/binding-jsonrpc-runtime/src/test/java/echo/EchoClientImpl.java
@@ -0,0 +1,102 @@
+/*
+ * 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 echo;
+
+import java.math.BigDecimal;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+
+import org.oasisopen.sca.annotation.AllowsPassByReference;
+import org.oasisopen.sca.annotation.Reference;
+
+import bean.TestBean;
+
+@AllowsPassByReference
+public class EchoClientImpl implements Echo {
+ @Reference
+ @AllowsPassByReference
+ protected Echo echoReference;
+
+ public String echo(String msg) {
+ return echoReference.echo(msg);
+ }
+
+ public void echoVoid() {
+ echoReference.echoVoid();
+ }
+
+ public void echoRuntimeException() throws RuntimeException {
+ echoReference.echoRuntimeException();
+ }
+
+ public void echoBusinessException() throws EchoBusinessException {
+ echoReference.echoBusinessException();
+ }
+
+ public int echoInt(int param) {
+ return echoReference.echoInt(param);
+ }
+
+ public double echoDouble(double param) {
+ return echoReference.echoDouble(param);
+ }
+
+ public boolean echoBoolean(boolean param) {
+ return echoReference.echoBoolean(param);
+ }
+
+ public Map echoMap(HashMap map) {
+ return echoReference.echoMap(map);
+ }
+
+ public TestBean echoBean(TestBean testBean) {
+ return echoReference.echoBean(testBean);
+ }
+
+ public List echoList(ArrayList list) {
+ return echoReference.echoList(list);
+ }
+
+ public String[] echoArrayString(String[] stringArray) {
+ return echoReference.echoArrayString(stringArray);
+ }
+
+ public int[] echoArrayInt(int[] intArray) {
+ return echoReference.echoArrayInt(intArray);
+ }
+
+ public Set echoSet(HashSet set) {
+ return echoReference.echoSet(set);
+ }
+
+ public void get\u03a9\u03bb\u03c0() {
+ echoReference.get\u03a9\u03bb\u03c0();
+ }
+
+ public BigDecimal echoBigDecimal(BigDecimal param) {
+ return echoReference.echoBigDecimal(param);
+ }
+
+
+}
diff --git a/sca-java-2.x/branches/2.0/modules/binding-jsonrpc-runtime/src/test/java/echo/EchoComponentImpl.java b/sca-java-2.x/branches/2.0/modules/binding-jsonrpc-runtime/src/test/java/echo/EchoComponentImpl.java
new file mode 100644
index 0000000000..bdfa88c65f
--- /dev/null
+++ b/sca-java-2.x/branches/2.0/modules/binding-jsonrpc-runtime/src/test/java/echo/EchoComponentImpl.java
@@ -0,0 +1,121 @@
+/*
+ * 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 echo;
+
+import java.math.BigDecimal;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+
+import org.oasisopen.sca.annotation.AllowsPassByReference;
+
+import bean.TestBean;
+
+/**
+ * A simple client component that uses a reference with an JSONRPC binding.
+ *
+ * @version $Rev$ $Date$
+ */
+@AllowsPassByReference
+public class EchoComponentImpl implements Echo {
+
+ public String echo(String msg) {
+ System.out.println("Echo: "+ msg);
+ return "echo: " + msg;
+ }
+
+
+ public void echoVoid() {
+ System.out.println("Echo: VOID");
+ }
+
+ public void echoBusinessException() throws EchoBusinessException {
+ throw new EchoBusinessException("Business Exception");
+
+ }
+
+ public void echoRuntimeException() throws RuntimeException {
+ throw new RuntimeException("Runtime Exception");
+ }
+
+ public int echoInt(int param) {
+ int value = param;
+ return value;
+ }
+
+ public double echoDouble(double param) {
+ double value = param;
+ return param;
+ }
+
+ public boolean echoBoolean(boolean param) {
+ boolean value = param;
+ return value;
+ }
+
+ public Map echoMap(HashMap param) {
+ Map map = new HashMap();
+ map = param;
+ return map;
+ }
+
+ public TestBean echoBean(TestBean testBean1) {
+ TestBean testBean = new TestBean();
+ testBean.setTestString(testBean1.getTestString());
+ testBean.setTestInt(testBean1.getTestInt());
+ testBean.setStringArray(testBean1.getTestStringArray());
+ return testBean;
+ }
+
+ public List echoList(ArrayList param){
+ List list = new ArrayList();
+ for(Iterator itr = param.iterator();itr.hasNext();)
+ {
+ list.add(itr.next());
+ }
+ return list;
+ }
+
+ public String[] echoArrayString(String[] stringArray) {
+ return stringArray;
+ }
+
+ public int[] echoArrayInt(int[] intArray) {
+ return intArray;
+ }
+
+ public Set echoSet(HashSet param){
+ Set set = new HashSet();
+ set = param;
+ return set;
+
+ }
+
+ public void get\u03a9\u03bb\u03c0() {
+
+ }
+
+ public BigDecimal echoBigDecimal(BigDecimal param) {
+ return param;
+ }
+}
diff --git a/sca-java-2.x/branches/2.0/modules/binding-jsonrpc-runtime/src/test/java/org/apache/tuscany/sca/binding/jsonrpc/JSONRPCDataTypeTestCase.java b/sca-java-2.x/branches/2.0/modules/binding-jsonrpc-runtime/src/test/java/org/apache/tuscany/sca/binding/jsonrpc/JSONRPCDataTypeTestCase.java
new file mode 100644
index 0000000000..107866137d
--- /dev/null
+++ b/sca-java-2.x/branches/2.0/modules/binding-jsonrpc-runtime/src/test/java/org/apache/tuscany/sca/binding/jsonrpc/JSONRPCDataTypeTestCase.java
@@ -0,0 +1,219 @@
+/*
+ * 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.tuscany.sca.binding.jsonrpc;
+
+import java.io.ByteArrayInputStream;
+
+import junit.framework.Assert;
+
+import org.apache.tuscany.sca.node.Contribution;
+import org.apache.tuscany.sca.node.ContributionLocationHelper;
+import org.apache.tuscany.sca.node.Node;
+import org.apache.tuscany.sca.node.NodeFactory;
+import org.json.JSONObject;
+import org.junit.AfterClass;
+import org.junit.BeforeClass;
+import org.junit.Test;
+
+import com.meterware.httpunit.PostMethodWebRequest;
+import com.meterware.httpunit.WebConversation;
+import com.meterware.httpunit.WebRequest;
+import com.meterware.httpunit.WebResponse;
+
+/**
+ * @version $Rev$ $Date$
+ */
+public class JSONRPCDataTypeTestCase {
+
+ private static final String SERVICE_PATH = "/EchoService";
+ private static final String SERVICE_URL = "http://localhost:8085/SCADomain" + SERVICE_PATH;
+
+ private static Node node;
+
+ @BeforeClass
+ public static void setUp() throws Exception {
+ try {
+ String contribution = ContributionLocationHelper.getContributionLocation(JSONRPCDataTypeTestCase.class);
+ node = NodeFactory.newInstance().createNode("JSONRPCBinding.composite", new Contribution("test", contribution));
+ node.start();
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ }
+
+ @AfterClass
+ public static void tearDown() throws Exception {
+ node.stop();
+ }
+
+ @Test
+ public void testInt() throws Exception {
+ JSONObject jsonRequest = new JSONObject(
+ "{ \"method\": \"echoInt\", \"params\": [12345], \"id\": 4}");
+
+ WebConversation wc = new WebConversation();
+ WebRequest request = new PostMethodWebRequest(SERVICE_URL,
+ new ByteArrayInputStream(jsonRequest.toString().getBytes("UTF-8")), "application/json");
+ WebResponse response = wc.getResource(request);
+
+ Assert.assertEquals(200, response.getResponseCode());
+
+ JSONObject jsonResp = new JSONObject(response.getText());
+
+ Assert.assertEquals(12345, jsonResp.getInt("result"));
+ }
+
+ @Test
+ public void testBoolean() throws Exception {
+ JSONObject jsonRequest = new JSONObject(
+ "{ \"method\": \"echoBoolean\", \"params\": [true], \"id\": 5}");
+
+ WebConversation wc = new WebConversation();
+ WebRequest request = new PostMethodWebRequest(SERVICE_URL,
+ new ByteArrayInputStream(jsonRequest.toString().getBytes("UTF-8")), "application/json");
+ WebResponse response = wc.getResource(request);
+
+ Assert.assertEquals(200, response.getResponseCode());
+
+ JSONObject jsonResp = new JSONObject(response.getText());
+
+ Assert.assertEquals(true, jsonResp.getBoolean("result"));
+ }
+
+ @Test
+ public void testMap() throws Exception {
+ JSONObject jsonRequest = new JSONObject(
+ "{ \"method\": \"echoMap\", \"params\": [ {\"javaClass\": \"java.util.HashMap\", \"map\": { \"Binding\": \"JSON-RPC\"}}], \"id\": 6}");
+
+ WebConversation wc = new WebConversation();
+ WebRequest request = new PostMethodWebRequest(SERVICE_URL,
+ new ByteArrayInputStream(jsonRequest.toString().getBytes("UTF-8")), "application/json");
+ WebResponse response = wc.getResource(request);
+
+ Assert.assertEquals(200, response.getResponseCode());
+
+ JSONObject jsonResp = new JSONObject(response.getText());
+
+ Assert.assertEquals("JSON-RPC", jsonResp.getJSONObject("result").getJSONObject("map").getString("Binding"));
+ }
+
+ @Test
+ public void testBean() throws Exception {
+ JSONObject jsonRequest = new JSONObject(
+ "{ \"method\": \"echoBean\", \"params\": [ {\"javaClass\": \"bean.TestBean\", \"testString\": \"JSON-RPC\", \"testInt\":1234}], \"id\": 7}");
+
+ WebConversation wc = new WebConversation();
+ WebRequest request = new PostMethodWebRequest(SERVICE_URL,
+ new ByteArrayInputStream(jsonRequest.toString().getBytes("UTF-8")), "application/json");
+ WebResponse response = wc.getResource(request);
+
+ Assert.assertEquals(200, response.getResponseCode());
+
+ JSONObject jsonResp = new JSONObject(response.getText());
+
+ Assert.assertEquals("JSON-RPC", jsonResp.getJSONObject("result").getString("testString"));
+ }
+
+ @Test
+ public void testList() throws Exception {
+ JSONObject jsonRequest = new JSONObject(
+ "{ \"method\": \"echoList\", \"params\": [[0,1,2,3,4]], \"id\": 8}");
+
+ WebConversation wc = new WebConversation();
+ WebRequest request = new PostMethodWebRequest(SERVICE_URL,
+ new ByteArrayInputStream(jsonRequest.toString().getBytes("UTF-8")), "application/json");
+ WebResponse response = wc.getResource(request);
+
+ Assert.assertEquals(200, response.getResponseCode());
+
+ JSONObject jsonResp = new JSONObject(response.getText());
+
+ Assert.assertEquals(0, jsonResp.getJSONArray("result").get(0));
+ }
+
+ @Test
+ public void testArrayString() throws Exception {
+ JSONObject jsonRequest = new JSONObject(
+ "{\"params\":[[\"1\",\"2\"]],\"method\":\"echoArrayString\",\"id\":9}");
+
+ WebConversation wc = new WebConversation();
+ WebRequest request = new PostMethodWebRequest(SERVICE_URL,
+ new ByteArrayInputStream(jsonRequest.toString().getBytes("UTF-8")), "application/json");
+ WebResponse response = wc.getResource(request);
+
+ Assert.assertEquals(200, response.getResponseCode());
+
+ JSONObject jsonResp = new JSONObject(response.getText());
+
+ Assert.assertEquals(1, jsonResp.getJSONArray("result").getInt(0));
+ }
+
+
+ @Test
+ public void testArrayInt() throws Exception {
+ JSONObject jsonRequest = new JSONObject(
+ "{\"params\":[[1,2]],\"method\":\"echoArrayInt\",\"id\":10}");
+
+ WebConversation wc = new WebConversation();
+ WebRequest request = new PostMethodWebRequest(SERVICE_URL,
+ new ByteArrayInputStream(jsonRequest.toString().getBytes("UTF-8")), "application/json");
+ WebResponse response = wc.getResource(request);
+
+ Assert.assertEquals(200, response.getResponseCode());
+
+ JSONObject jsonResp = new JSONObject(response.getText());
+
+ Assert.assertEquals(1, jsonResp.getJSONArray("result").getInt(0));
+ }
+
+
+ @Test
+ public void testSet() throws Exception {
+ JSONObject jsonRequest = new JSONObject(
+ "{ \"method\": \"echoSet\", \"params\": [[\"red\", \"blue\"]],\"id\": 11}");
+
+ WebConversation wc = new WebConversation();
+ WebRequest request = new PostMethodWebRequest(SERVICE_URL,
+ new ByteArrayInputStream(jsonRequest.toString().getBytes("UTF-8")), "application/json");
+ WebResponse response = wc.getResource(request);
+
+ Assert.assertEquals(200, response.getResponseCode());
+
+ JSONObject jsonResp = new JSONObject(response.getText());
+
+ Assert.assertEquals("red", jsonResp.getJSONArray("result").get(0));
+ }
+
+ @Test
+ public void testBigDecimal() throws Exception {
+ JSONObject jsonRequest = new JSONObject(
+ "{ \"method\": \"echoBigDecimal\", \"params\": [\"12345.67\"], \"id\": 4}");
+
+ WebConversation wc = new WebConversation();
+ WebRequest request = new PostMethodWebRequest(SERVICE_URL,
+ new ByteArrayInputStream(jsonRequest.toString().getBytes("UTF-8")), "application/json");
+ WebResponse response = wc.getResource(request);
+
+ Assert.assertEquals(200, response.getResponseCode());
+
+ JSONObject jsonResp = new JSONObject(response.getText());
+
+ Assert.assertEquals(12345.67, jsonResp.get("result"));
+ }
+} \ No newline at end of file
diff --git a/sca-java-2.x/branches/2.0/modules/binding-jsonrpc-runtime/src/test/java/org/apache/tuscany/sca/binding/jsonrpc/JSONRPCExceptionTestCase.java b/sca-java-2.x/branches/2.0/modules/binding-jsonrpc-runtime/src/test/java/org/apache/tuscany/sca/binding/jsonrpc/JSONRPCExceptionTestCase.java
new file mode 100644
index 0000000000..037c6f3ad0
--- /dev/null
+++ b/sca-java-2.x/branches/2.0/modules/binding-jsonrpc-runtime/src/test/java/org/apache/tuscany/sca/binding/jsonrpc/JSONRPCExceptionTestCase.java
@@ -0,0 +1,95 @@
+/*
+ * 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.tuscany.sca.binding.jsonrpc;
+
+import java.io.ByteArrayInputStream;
+
+import junit.framework.Assert;
+
+import org.apache.tuscany.sca.node.Contribution;
+import org.apache.tuscany.sca.node.ContributionLocationHelper;
+import org.apache.tuscany.sca.node.Node;
+import org.apache.tuscany.sca.node.NodeFactory;
+import org.json.JSONObject;
+import org.junit.AfterClass;
+import org.junit.BeforeClass;
+import org.junit.Test;
+
+import com.meterware.httpunit.PostMethodWebRequest;
+import com.meterware.httpunit.WebConversation;
+import com.meterware.httpunit.WebRequest;
+import com.meterware.httpunit.WebResponse;
+
+/**
+ * @version $Rev$ $Date$
+ */
+public class JSONRPCExceptionTestCase{
+
+ private static final String SERVICE_PATH = "/EchoService";
+
+ private static final String SERVICE_URL = "http://localhost:8085/SCADomain" + SERVICE_PATH;
+
+ private static Node node;
+
+ @BeforeClass
+ public static void setUp() throws Exception {
+ try {
+ String contribution = ContributionLocationHelper.getContributionLocation(JSONRPCExceptionTestCase.class);
+ node = NodeFactory.newInstance().createNode("JSONRPCBinding.composite", new Contribution("test", contribution));
+ node.start();
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ }
+
+ @AfterClass
+ public static void tearDown() throws Exception {
+ node.stop();
+ }
+
+ @Test
+ public void testRuntimeException() throws Exception{
+ JSONObject jsonRequest = new JSONObject("{ \"method\": \"echoRuntimeException\", \"params\": [], \"id\": 2}");
+
+ WebConversation wc = new WebConversation();
+ WebRequest request = new PostMethodWebRequest( SERVICE_URL, new ByteArrayInputStream(jsonRequest.toString().getBytes("UTF-8")),"application/json");
+ WebResponse response = wc.getResource(request);
+
+ Assert.assertEquals(200, response.getResponseCode());
+
+ JSONObject jsonErr = new JSONObject(response.getText()).getJSONObject("error");
+
+ Assert.assertEquals("Runtime Exception", jsonErr.getString("message"));
+ }
+
+ @Test
+ public void testBusinessException() throws Exception{
+ JSONObject jsonRequest = new JSONObject("{ \"method\": \"echoBusinessException\", \"params\": [], \"id\": 3}");
+
+ WebConversation wc = new WebConversation();
+ WebRequest request = new PostMethodWebRequest( SERVICE_URL, new ByteArrayInputStream(jsonRequest.toString().getBytes("UTF-8")),"application/json");
+ WebResponse response = wc.getResource(request);
+
+ Assert.assertEquals(200, response.getResponseCode());
+
+ JSONObject jsonErr = new JSONObject(response.getText()).getJSONObject("error");
+
+ Assert.assertEquals("Business Exception", jsonErr.getString("message"));
+ }
+} \ No newline at end of file
diff --git a/sca-java-2.x/branches/2.0/modules/binding-jsonrpc-runtime/src/test/java/org/apache/tuscany/sca/binding/jsonrpc/JSONRPCReferenceTargetTestCase.java b/sca-java-2.x/branches/2.0/modules/binding-jsonrpc-runtime/src/test/java/org/apache/tuscany/sca/binding/jsonrpc/JSONRPCReferenceTargetTestCase.java
new file mode 100644
index 0000000000..383a862945
--- /dev/null
+++ b/sca-java-2.x/branches/2.0/modules/binding-jsonrpc-runtime/src/test/java/org/apache/tuscany/sca/binding/jsonrpc/JSONRPCReferenceTargetTestCase.java
@@ -0,0 +1,117 @@
+/*
+ * 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.tuscany.sca.binding.jsonrpc;
+
+import java.util.Arrays;
+
+import junit.framework.Assert;
+
+import org.apache.tuscany.sca.node.Contribution;
+import org.apache.tuscany.sca.node.ContributionLocationHelper;
+import org.apache.tuscany.sca.node.Node;
+import org.apache.tuscany.sca.node.NodeFactory;
+import org.junit.AfterClass;
+import org.junit.BeforeClass;
+import org.junit.Test;
+
+import bean.TestBean;
+import echo.Echo;
+
+public class JSONRPCReferenceTargetTestCase {
+ private static final String ECHO_COMPONENT_WITH_REFERENCE = "EchoComponentWithReferenceTarget";
+ private static Node node;
+
+ @BeforeClass
+ public static void setUp() throws Exception {
+ try {
+ String contribution = ContributionLocationHelper.getContributionLocation(JSONRPCReferenceTargetTestCase.class);
+ node =
+ NodeFactory.newInstance().createNode(new Contribution("testClient", contribution));
+ node.start();
+
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ }
+
+ @AfterClass
+ public static void tearDown() throws Exception {
+ node.stop();
+ }
+
+ @Test
+ public void testInvokeReference() throws Exception {
+ Echo echoComponent = node.getService(Echo.class, ECHO_COMPONENT_WITH_REFERENCE);
+ String result = echoComponent.echo("ABC");
+ Assert.assertEquals("echo: ABC", result);
+ }
+
+ @Test
+ public void testInvokeBeanReference() throws Exception {
+ Echo echoComponent = node.getService(Echo.class, ECHO_COMPONENT_WITH_REFERENCE);
+ TestBean bean = new TestBean();
+ bean.setTestInt(1);
+ bean.setTestString("123");
+ bean.setStringArray(Arrays.asList("A", "B"));
+ TestBean result = echoComponent.echoBean(bean);
+ Assert.assertEquals(bean, result);
+ }
+
+ @Test
+ public void testInvokeReferenceVoidOperation() throws Exception {
+ Echo echoComponent = node.getService(Echo.class, ECHO_COMPONENT_WITH_REFERENCE);
+ echoComponent.echoVoid();
+ }
+
+ @Test(expected = Exception.class)
+ public void testInvokeReferenceException() throws Exception {
+ Echo echoComponent = node.getService(Echo.class, ECHO_COMPONENT_WITH_REFERENCE);
+ try {
+ echoComponent.echoBusinessException();
+ } catch (Exception e) {
+ System.err.println(e);
+ throw e;
+ }
+ }
+
+ @Test
+ public void testInvokeReference20() throws Exception {
+ Echo echoComponent = node.getService(Echo.class, "EchoComponentWithReference20");
+ String result = echoComponent.echo("ABC");
+ Assert.assertEquals("echo: ABC", result);
+ }
+
+ @Test
+ public void testInvokeReferenceVoidOperation20() throws Exception {
+ Echo echoComponent = node.getService(Echo.class, "EchoComponentWithReference20");
+ echoComponent.echoVoid();
+ }
+
+ @Test(expected = Exception.class)
+ public void testInvokeReferenceException20() throws Exception {
+ Echo echoComponent = node.getService(Echo.class, "EchoComponentWithReference20");
+ try {
+ echoComponent.echoBusinessException();
+ } catch (Exception e) {
+ System.err.println(e);
+ throw e;
+ }
+ }
+
+}
diff --git a/sca-java-2.x/branches/2.0/modules/binding-jsonrpc-runtime/src/test/java/org/apache/tuscany/sca/binding/jsonrpc/JSONRPCReferenceTestCase.java b/sca-java-2.x/branches/2.0/modules/binding-jsonrpc-runtime/src/test/java/org/apache/tuscany/sca/binding/jsonrpc/JSONRPCReferenceTestCase.java
new file mode 100644
index 0000000000..3950d3c134
--- /dev/null
+++ b/sca-java-2.x/branches/2.0/modules/binding-jsonrpc-runtime/src/test/java/org/apache/tuscany/sca/binding/jsonrpc/JSONRPCReferenceTestCase.java
@@ -0,0 +1,123 @@
+/*
+ * 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.tuscany.sca.binding.jsonrpc;
+
+import java.util.Arrays;
+
+import junit.framework.Assert;
+
+import org.apache.tuscany.sca.node.Contribution;
+import org.apache.tuscany.sca.node.ContributionLocationHelper;
+import org.apache.tuscany.sca.node.Node;
+import org.apache.tuscany.sca.node.NodeFactory;
+import org.junit.AfterClass;
+import org.junit.BeforeClass;
+import org.junit.Test;
+
+import bean.TestBean;
+import echo.Echo;
+
+public class JSONRPCReferenceTestCase {
+ private static Node nodeServer;
+ private static Node node;
+
+ @BeforeClass
+ public static void setUp() throws Exception {
+ try {
+ String contribution = ContributionLocationHelper.getContributionLocation(JSONRPCReferenceTestCase.class);
+ nodeServer =
+ NodeFactory.newInstance().createNode("JSONRPCBinding.composite", new Contribution("testServer", contribution));
+ nodeServer.start();
+
+ contribution = ContributionLocationHelper.getContributionLocation(JSONRPCReferenceTestCase.class);
+ node =
+ NodeFactory.newInstance().createNode("JSONRPCReference.composite", new Contribution("testClient", contribution));
+ node.start();
+
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ }
+
+ @AfterClass
+ public static void tearDown() throws Exception {
+ nodeServer.stop();
+ node.stop();
+ }
+
+ @Test
+ public void testInvokeReference() throws Exception {
+ Echo echoComponent = node.getService(Echo.class, "EchoComponentWithReference");
+ String result = echoComponent.echo("ABC");
+ Assert.assertEquals("echo: ABC", result);
+ }
+
+ @Test
+ public void testInvokeBeanReference() throws Exception {
+ Echo echoComponent = node.getService(Echo.class, "EchoComponentWithReference");
+ TestBean bean = new TestBean();
+ bean.setTestInt(1);
+ bean.setTestString("123");
+ bean.setStringArray(Arrays.asList("A", "B"));
+ TestBean result = echoComponent.echoBean(bean);
+ Assert.assertEquals(bean, result);
+ }
+
+ @Test
+ public void testInvokeReferenceVoidOperation() throws Exception {
+ Echo echoComponent = node.getService(Echo.class, "EchoComponentWithReference");
+ echoComponent.echoVoid();
+ }
+
+ @Test(expected = Exception.class)
+ public void testInvokeReferenceException() throws Exception {
+ Echo echoComponent = node.getService(Echo.class, "EchoComponentWithReference");
+ try {
+ echoComponent.echoBusinessException();
+ } catch (Exception e) {
+ System.err.println(e);
+ throw e;
+ }
+ }
+
+ @Test
+ public void testInvokeReference20() throws Exception {
+ Echo echoComponent = node.getService(Echo.class, "EchoComponentWithReference20");
+ String result = echoComponent.echo("ABC");
+ Assert.assertEquals("echo: ABC", result);
+ }
+
+ @Test
+ public void testInvokeReferenceVoidOperation20() throws Exception {
+ Echo echoComponent = node.getService(Echo.class, "EchoComponentWithReference20");
+ echoComponent.echoVoid();
+ }
+
+ @Test(expected = Exception.class)
+ public void testInvokeReferenceException20() throws Exception {
+ Echo echoComponent = node.getService(Echo.class, "EchoComponentWithReference20");
+ try {
+ echoComponent.echoBusinessException();
+ } catch (Exception e) {
+ System.err.println(e);
+ throw e;
+ }
+ }
+
+}
diff --git a/sca-java-2.x/branches/2.0/modules/binding-jsonrpc-runtime/src/test/java/org/apache/tuscany/sca/binding/jsonrpc/JSONRPCServiceTestCase.java b/sca-java-2.x/branches/2.0/modules/binding-jsonrpc-runtime/src/test/java/org/apache/tuscany/sca/binding/jsonrpc/JSONRPCServiceTestCase.java
new file mode 100644
index 0000000000..bbf8d4cee7
--- /dev/null
+++ b/sca-java-2.x/branches/2.0/modules/binding-jsonrpc-runtime/src/test/java/org/apache/tuscany/sca/binding/jsonrpc/JSONRPCServiceTestCase.java
@@ -0,0 +1,147 @@
+/*
+ * 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.tuscany.sca.binding.jsonrpc;
+
+import java.io.ByteArrayInputStream;
+import java.net.URLEncoder;
+
+import junit.framework.Assert;
+
+import org.apache.axiom.om.util.Base64;
+import org.apache.tuscany.sca.node.Contribution;
+import org.apache.tuscany.sca.node.ContributionLocationHelper;
+import org.apache.tuscany.sca.node.Node;
+import org.apache.tuscany.sca.node.NodeFactory;
+import org.json.JSONArray;
+import org.json.JSONObject;
+import org.junit.AfterClass;
+import org.junit.BeforeClass;
+import org.junit.Test;
+
+import com.meterware.httpunit.GetMethodWebRequest;
+import com.meterware.httpunit.PostMethodWebRequest;
+import com.meterware.httpunit.WebConversation;
+import com.meterware.httpunit.WebRequest;
+import com.meterware.httpunit.WebResponse;
+
+/**
+ * @version $Rev$ $Date$
+ */
+public class JSONRPCServiceTestCase {
+
+ private static String SERVICE_URL;
+ private static String SERVICE20_URL;
+
+ private static Node node;
+
+ @BeforeClass
+ public static void setUp() throws Exception {
+ try {
+ String contribution = ContributionLocationHelper.getContributionLocation(JSONRPCServiceTestCase.class);
+ node = NodeFactory.newInstance().createNode("JSONRPCBinding.composite", new Contribution("test", contribution));
+ node.start();
+ SERVICE_URL = node.getEndpointAddress("EchoComponent/Echo/Echo");
+ SERVICE20_URL = node.getEndpointAddress("EchoComponent/Echo/jsonrpc20");
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ }
+
+ @AfterClass
+ public static void tearDown() throws Exception {
+ node.stop();
+ }
+
+ @Test
+ public void testEchoWithJSONRPCBinding() throws Exception {
+ JSONObject jsonRequest = new JSONObject("{ \"method\": \"echo\", \"params\": [\"Hello JSON-RPC\"], \"id\": 1}");
+
+ WebConversation wc = new WebConversation();
+ WebRequest request = new PostMethodWebRequest( SERVICE_URL, new ByteArrayInputStream(jsonRequest.toString().getBytes("UTF-8")),"application/json");
+ WebResponse response = wc.getResource(request);
+
+ Assert.assertEquals(200, response.getResponseCode());
+
+ JSONObject jsonResp = new JSONObject(response.getText());
+ Assert.assertEquals("echo: Hello JSON-RPC", jsonResp.getString("result"));
+ }
+
+ @Test
+ public void testEchoWithJSONRPC20Binding() throws Exception {
+ JSONObject jsonRequest = new JSONObject("{ \"jsonrpc\": \"2.0\", \"method\": \"echo\", \"params\": [\"Hello JSON-RPC\"], \"id\": 1}");
+
+ WebConversation wc = new WebConversation();
+ WebRequest request = new PostMethodWebRequest( SERVICE20_URL, new ByteArrayInputStream(jsonRequest.toString().getBytes("UTF-8")),"application/json");
+ WebResponse response = wc.getResource(request);
+
+ Assert.assertEquals(200, response.getResponseCode());
+
+ JSONObject jsonResp = new JSONObject(response.getText());
+ Assert.assertEquals("echo: Hello JSON-RPC", jsonResp.getString("result"));
+ }
+
+
+ @Test
+ public void testEchoWithJSONRPC20BindingBatch() throws Exception {
+ JSONObject jsonRequest1 = new JSONObject("{ \"jsonrpc\": \"2.0\", \"method\": \"echo\", \"params\": [\"Hello JSON-RPC\"], \"id\": 1}");
+ JSONObject jsonRequest2 = new JSONObject("{ \"jsonrpc\": \"2.0\", \"method\": \"echo\", \"params\": [\"Hello JSON-RPC 2.0\"], \"id\": 2}");
+ JSONArray batchReq = new JSONArray();
+ batchReq.put(jsonRequest1);
+ batchReq.put(jsonRequest2);
+
+ WebConversation wc = new WebConversation();
+ WebRequest request = new PostMethodWebRequest( SERVICE20_URL, new ByteArrayInputStream(batchReq.toString().getBytes("UTF-8")),"application/json");
+ WebResponse response = wc.getResource(request);
+
+ Assert.assertEquals(200, response.getResponseCode());
+
+ JSONArray jsonResp = new JSONArray(response.getText());
+ Assert.assertEquals("echo: Hello JSON-RPC", ((JSONObject) jsonResp.get(0)).getString("result"));
+ Assert.assertEquals("echo: Hello JSON-RPC 2.0", ((JSONObject) jsonResp.get(1)).getString("result"));
+ }
+
+ @Test
+ public void testJSONRPCBindingGET() throws Exception {
+ String params = Base64.encode("[\"Hello JSON-RPC\"]".getBytes());
+ String queryString = "?method=echo&params=" + URLEncoder.encode(params,"UTF-8") + "&id=1";
+
+ WebConversation wc = new WebConversation();
+ WebRequest request = new GetMethodWebRequest(SERVICE_URL + queryString);
+ WebResponse response = wc.getResource(request);
+
+ Assert.assertEquals(200, response.getResponseCode());
+
+ JSONObject jsonResp = new JSONObject(response.getText());
+ Assert.assertEquals("echo: Hello JSON-RPC", jsonResp.getString("result"));
+ }
+
+ @Test
+ public void testEchoVoidWithJSONRPCBinding() throws Exception {
+ JSONObject jsonRequest = new JSONObject("{ \"method\": \"echoVoid\", \"params\": [], \"id\": 1}");
+
+ WebConversation wc = new WebConversation();
+ WebRequest request = new PostMethodWebRequest( SERVICE_URL, new ByteArrayInputStream(jsonRequest.toString().getBytes("UTF-8")),"application/json");
+ WebResponse response = wc.getResource(request);
+
+ Assert.assertEquals(200, response.getResponseCode());
+
+ JSONObject jsonResp = new JSONObject(response.getText());
+ Assert.assertTrue(jsonResp.isNull("result"));
+ }
+} \ No newline at end of file
diff --git a/sca-java-2.x/branches/2.0/modules/binding-jsonrpc-runtime/src/test/java/org/apache/tuscany/sca/binding/jsonrpc/JSONRPCSmdTestCase.java b/sca-java-2.x/branches/2.0/modules/binding-jsonrpc-runtime/src/test/java/org/apache/tuscany/sca/binding/jsonrpc/JSONRPCSmdTestCase.java
new file mode 100644
index 0000000000..0ee1643243
--- /dev/null
+++ b/sca-java-2.x/branches/2.0/modules/binding-jsonrpc-runtime/src/test/java/org/apache/tuscany/sca/binding/jsonrpc/JSONRPCSmdTestCase.java
@@ -0,0 +1,86 @@
+/*
+ * 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.tuscany.sca.binding.jsonrpc;
+
+import junit.framework.Assert;
+
+import org.apache.tuscany.sca.node.Contribution;
+import org.apache.tuscany.sca.node.ContributionLocationHelper;
+import org.apache.tuscany.sca.node.Node;
+import org.apache.tuscany.sca.node.NodeFactory;
+import org.json.JSONObject;
+import org.junit.AfterClass;
+import org.junit.BeforeClass;
+import org.junit.Test;
+
+import com.meterware.httpunit.GetMethodWebRequest;
+import com.meterware.httpunit.WebConversation;
+import com.meterware.httpunit.WebRequest;
+import com.meterware.httpunit.WebResponse;
+
+import echo.Echo;
+
+/**
+ * @version $Rev$ $Date$
+ */
+public class JSONRPCSmdTestCase {
+
+ private static final String SERVICE_PATH = "/EchoService";
+
+ private static final String SERVICE_URL = "http://localhost:8085/SCADomain" + SERVICE_PATH;
+
+ private static final String SMD_URL = SERVICE_URL + "?smd";
+
+ private static Node node;
+
+ @BeforeClass
+ public static void setUp() throws Exception {
+ try {
+ String contribution = ContributionLocationHelper.getContributionLocation(JSONRPCSmdTestCase.class);
+ node =
+ NodeFactory.newInstance()
+ .createNode("JSONRPCBinding.composite", new Contribution("test", contribution));
+ node.start();
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ }
+
+ @AfterClass
+ public static void tearDown() throws Exception {
+ node.stop();
+ }
+
+ @Test
+ /**
+ * This test make sure the JSON-RPC Binding can handle special characters when generating SMD
+ */
+ public void testJSONRPCSmdSpecialCharacters() throws Exception {
+ WebConversation wc = new WebConversation();
+ WebRequest request = new GetMethodWebRequest(SMD_URL);
+ WebResponse response = wc.getResource(request);
+
+ Assert.assertEquals(200, response.getResponseCode());
+ JSONObject smd = new JSONObject(response.getText());
+ Assert.assertEquals(Echo.class.getMethods().length, smd.getJSONArray("methods").length());
+
+ // System.out.println(">>>SMD:\n" + response.getText());
+ }
+}