From b3243c64346cda94f30f9c7ab6a25b32a666e09c Mon Sep 17 00:00:00 2001 From: lresende Date: Fri, 9 Jul 2010 02:22:14 +0000 Subject: TUSCANY-3617 - Adding support for configuring wireFormat only for response to allow RPC over GET services to define the wireFormat to use for generating the response payload. git-svn-id: http://svn.us.apache.org/repos/asf/tuscany@962390 13f79535-47bb-0310-9956-ffa450edef68 --- .../sca/binding/rest/rpc/EchoServiceTestCase.java | 61 ++++++++++++++-------- .../wireformat/json/CatalogServiceTestCase.java | 52 ++++++++++++------ .../src/test/java/services/echo/Echo.java | 12 ++--- .../src/test/java/services/echo/EchoImpl.java | 17 +++--- .../java/services/store/FruitsCatalogImpl.java | 29 +++++----- .../src/test/resources/echo.composite | 22 +++++--- 6 files changed, 112 insertions(+), 81 deletions(-) (limited to 'sca-java-2.x/trunk/modules/binding-rest-runtime/src/test') diff --git a/sca-java-2.x/trunk/modules/binding-rest-runtime/src/test/java/org/apache/tuscany/sca/binding/rest/rpc/EchoServiceTestCase.java b/sca-java-2.x/trunk/modules/binding-rest-runtime/src/test/java/org/apache/tuscany/sca/binding/rest/rpc/EchoServiceTestCase.java index cb65249fe3..5a7aaecaf1 100644 --- a/sca-java-2.x/trunk/modules/binding-rest-runtime/src/test/java/org/apache/tuscany/sca/binding/rest/rpc/EchoServiceTestCase.java +++ b/sca-java-2.x/trunk/modules/binding-rest-runtime/src/test/java/org/apache/tuscany/sca/binding/rest/rpc/EchoServiceTestCase.java @@ -6,15 +6,15 @@ * 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. + * under the License. */ package org.apache.tuscany.sca.binding.rest.rpc; @@ -28,7 +28,6 @@ import org.apache.tuscany.sca.node.NodeFactory; import org.junit.AfterClass; import org.junit.Assert; import org.junit.BeforeClass; -import org.junit.Ignore; import org.junit.Test; import com.meterware.httpunit.GetMethodWebRequest; @@ -36,16 +35,17 @@ import com.meterware.httpunit.WebConversation; import com.meterware.httpunit.WebRequest; import com.meterware.httpunit.WebResponse; -@Ignore public class EchoServiceTestCase { - private static final String SERVICE_URL = "http://localhost:8085/EchoService"; - - private static final String GET_RESPONSE = "[{\"price\":\"$1.55\",\"name\":\"Pear\",\"javaClass\":\"services.store.Item\"},{\"price\":\"$2.99\",\"name\":\"Apple\",\"javaClass\":\"services.store.Item\"},{\"price\":\"$3.55\",\"name\":\"Orange\",\"javaClass\":\"services.store.Item\"}]"; - private static final String NEW_ITEM = "{\"price\":\"$4.35\",\"name\":\"Grape\"}\""; - private static final String GET_NEW_RESPONSE = "[{\"price\":\"$1.55\",\"name\":\"Pear\",\"javaClass\":\"services.store.Item\"},{\"price\":\"$2.99\",\"name\":\"Apple\",\"javaClass\":\"services.store.Item\"},{\"price\":\"$3.55\",\"name\":\"Orange\",\"javaClass\":\"services.store.Item\"},{\"price\":\"$4.35\",\"name\":\"Grape\",\"javaClass\":\"services.store.Item\"}]"; - private static final String UPDATED_ITEM = "{\"price\":\"$1.35\",\"name\":\"Grape\"}\""; - private static final String GET_UPDATED_RESPONSE = "[{\"price\":\"$1.55\",\"name\":\"Pear\",\"javaClass\":\"services.store.Item\"},{\"price\":\"$2.99\",\"name\":\"Apple\",\"javaClass\":\"services.store.Item\"},{\"price\":\"$3.55\",\"name\":\"Orange\",\"javaClass\":\"services.store.Item\"},{\"price\":\"$1.35\",\"name\":\"Grape\",\"javaClass\":\"services.store.Item\"}]"; - + private static final String SERVICE_URL_JSON = "http://localhost:8085/EchoService/json"; + private static final String SERVICE_URL_XML = "http://localhost:8085/EchoService/xml"; + + private static final String XML_RESPONSE = "" + + "" + + "Hello RPC"; + private static Node node; @BeforeClass @@ -65,38 +65,55 @@ public class EchoServiceTestCase { node.stop(); } } - + @Test public void testPing() throws Exception { new Socket("127.0.0.1", 8085); - //System.in.read(); + // System.in.read(); } - + @Test - public void testRPCGetOperation() throws Exception { + public void testJSONRPCGetOperation() throws Exception { String queryString = "?method=echo&msg=Hello RPC"; WebConversation wc = new WebConversation(); - WebRequest request = new GetMethodWebRequest(SERVICE_URL + queryString); + WebRequest request = new GetMethodWebRequest(SERVICE_URL_JSON + queryString); request.setHeaderField("Content-Type", "application/json"); WebResponse response = wc.getResource(request); Assert.assertEquals(200, response.getResponseCode()); Assert.assertEquals("Hello RPC", response.getText()); } - + @Test public void testRPCGetArrayOperation() throws Exception { String queryString = "?method=echoArrayString&msgArray=Hello RPC1&msgArray=Hello RPC2"; WebConversation wc = new WebConversation(); - WebRequest request = new GetMethodWebRequest(SERVICE_URL + queryString); + WebRequest request = new GetMethodWebRequest(SERVICE_URL_JSON + queryString); request.setHeaderField("Content-Type", "application/json"); WebResponse response = wc.getResource(request); Assert.assertEquals(200, response.getResponseCode()); Assert.assertEquals("[\"Hello RPC1\",\"Hello RPC2\"]", response.getText()); } - - + + + @Test + public void testXMLRPCGetOperation() throws Exception { + String queryString = "?method=echo&msg=Hello RPC"; + + WebConversation wc = new WebConversation(); + WebRequest request = new GetMethodWebRequest(SERVICE_URL_XML + queryString); + request.setHeaderField("Content-Type", "application/xml"); + WebResponse response = wc.getResource(request); + + System.out.println("Expected>>" + XML_RESPONSE); + System.out.println("Received>>" + response.getText()); + + Assert.assertEquals(200, response.getResponseCode()); + Assert.assertEquals(XML_RESPONSE, response.getText()); + } + + } diff --git a/sca-java-2.x/trunk/modules/binding-rest-runtime/src/test/java/org/apache/tuscany/sca/binding/rest/wireformat/json/CatalogServiceTestCase.java b/sca-java-2.x/trunk/modules/binding-rest-runtime/src/test/java/org/apache/tuscany/sca/binding/rest/wireformat/json/CatalogServiceTestCase.java index de5acc2fe7..2aa59af508 100644 --- a/sca-java-2.x/trunk/modules/binding-rest-runtime/src/test/java/org/apache/tuscany/sca/binding/rest/wireformat/json/CatalogServiceTestCase.java +++ b/sca-java-2.x/trunk/modules/binding-rest-runtime/src/test/java/org/apache/tuscany/sca/binding/rest/wireformat/json/CatalogServiceTestCase.java @@ -6,15 +6,15 @@ * 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. + * under the License. */ package org.apache.tuscany.sca.binding.rest.wireformat.json; @@ -26,6 +26,8 @@ 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.JSONException; +import org.json.JSONObject; import org.junit.AfterClass; import org.junit.Assert; import org.junit.BeforeClass; @@ -44,8 +46,8 @@ public class CatalogServiceTestCase { private static final String NEW_ITEM = "{\"price\":\"$4.35\",\"name\":\"Grape\"}\""; private static final String GET_NEW_RESPONSE = "{\"items\":[{\"price\":\"$1.55\",\"name\":\"Pear\"},{\"price\":\"$2.99\",\"name\":\"Apple\"},{\"price\":\"$3.55\",\"name\":\"Orange\"},{\"price\":\"$4.35\",\"name\":\"Grape\"}]}"; private static final String UPDATED_ITEM = "{\"price\":\"$1.35\",\"name\":\"Grape\"}\""; - private static final String GET_UPDATED_RESPONSE = "{\"items\":[{\"price\":\"$1.55\",\"name\":\"Pear\"},{\"price\":\"$2.99\",\"name\":\"Apple\"},{\"price\":\"$3.55\",\"name\":\"Orange\"},{\"price\":\"$1.35\",\"name\":\"Grape\"}]}"; - + private static final String GET_UPDATED_RESPONSE = "{\"items\":[{\"price\":\"$1.55\",\"name\":\"Pear\"},{\"price\":\"$2.99\",\"name\":\"Apple\"},{\"price\":\"$3.55\",\"name\":\"Orange\"},{\"price\":\"$1.35\",\"name\":\"Grape\"}]}"; + private static Node node; @BeforeClass @@ -65,27 +67,28 @@ public class CatalogServiceTestCase { node.stop(); } } - + @Test public void testPing() throws Exception { new Socket("127.0.0.1", 8085); //System.in.read(); } - + @Test - public void testGetInvocation() throws Exception { + public void testGetInvocation() throws Exception { WebConversation wc = new WebConversation(); WebRequest request = new GetMethodWebRequest(SERVICE_URL); request.setHeaderField("Content-Type", "application/json"); WebResponse response = wc.getResource(request); Assert.assertEquals(200, response.getResponseCode()); - Assert.assertEquals(GET_RESPONSE, response.getText()); + Assert.assertNotNull(response.getText()); + Assert.assertTrue(validateJsonResponse(GET_RESPONSE,response.getText())); } @Test - public void testPostInvocation() throws Exception { + public void testPostInvocation() throws Exception { //Add new item to catalog WebConversation wc = new WebConversation(); WebRequest request = new PostMethodWebRequest(SERVICE_URL, new ByteArrayInputStream(NEW_ITEM.getBytes("UTF-8")),"application/json"); @@ -93,22 +96,23 @@ public class CatalogServiceTestCase { WebResponse response = wc.getResource(request); Assert.assertEquals(204, response.getResponseCode()); - + //read new results and expect to get new item back in the response request = new GetMethodWebRequest(SERVICE_URL); request.setHeaderField("Content-Type", "application/json"); response = wc.getResource(request); - + //for debug purposes //System.out.println(">>>" + GET_UPDATED_RESPONSE); //System.out.println(">>>" + response.getText()); Assert.assertEquals(200, response.getResponseCode()); - Assert.assertEquals(GET_NEW_RESPONSE, response.getText()); + Assert.assertNotNull(response.getText()); + Assert.assertTrue(validateJsonResponse(GET_NEW_RESPONSE,response.getText())); } @Test - public void testPutInvocation() throws Exception { + public void testPutInvocation() throws Exception { //Add new item to catalog WebConversation wc = new WebConversation(); WebRequest request = new PostMethodWebRequest(SERVICE_URL, new ByteArrayInputStream(UPDATED_ITEM.getBytes("UTF-8")),"application/json"); @@ -116,17 +120,31 @@ public class CatalogServiceTestCase { WebResponse response = wc.getResource(request); Assert.assertEquals(204, response.getResponseCode()); - + //read new results and expect to get new item back in the response request = new GetMethodWebRequest(SERVICE_URL); request.setHeaderField("Content-Type", "application/json"); response = wc.getResource(request); - + //for debug purposes //System.out.println(">>>" + GET_UPDATED_RESPONSE); //System.out.println(">>>" + response.getText()); Assert.assertEquals(200, response.getResponseCode()); - Assert.assertEquals(GET_UPDATED_RESPONSE, response.getText()); + Assert.assertNotNull(response.getText()); + Assert.assertTrue(validateJsonResponse(GET_UPDATED_RESPONSE,response.getText())); + } + + + private boolean validateJsonResponse(String expected, String actual) throws JSONException { + JSONObject jsonExpected = new JSONObject(expected); + JSONObject jsonActual = new JSONObject(actual); + + if(jsonExpected.getJSONArray("items").length() != jsonActual.getJSONArray("items").length()) { + return false; + } + + return true; + } } diff --git a/sca-java-2.x/trunk/modules/binding-rest-runtime/src/test/java/services/echo/Echo.java b/sca-java-2.x/trunk/modules/binding-rest-runtime/src/test/java/services/echo/Echo.java index ca5d73246a..8664162ffb 100644 --- a/sca-java-2.x/trunk/modules/binding-rest-runtime/src/test/java/services/echo/Echo.java +++ b/sca-java-2.x/trunk/modules/binding-rest-runtime/src/test/java/services/echo/Echo.java @@ -6,15 +6,15 @@ * 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. + * under the License. */ package services.echo; @@ -24,7 +24,7 @@ import org.oasisopen.sca.annotation.Remotable; /** * Interface of our sample JSONRPC service. - * + * * @version $Rev$ $Date$ */ @Remotable @@ -32,9 +32,7 @@ public interface Echo { String echo(@QueryParam("msg") String msg); - int echoInt(int param); - - boolean echoBoolean(boolean param); + int echoInt(@QueryParam("param") int param); String [] echoArrayString(@QueryParam("msgArray") String[] stringArray); diff --git a/sca-java-2.x/trunk/modules/binding-rest-runtime/src/test/java/services/echo/EchoImpl.java b/sca-java-2.x/trunk/modules/binding-rest-runtime/src/test/java/services/echo/EchoImpl.java index 2596637ce8..6bc22bd41a 100644 --- a/sca-java-2.x/trunk/modules/binding-rest-runtime/src/test/java/services/echo/EchoImpl.java +++ b/sca-java-2.x/trunk/modules/binding-rest-runtime/src/test/java/services/echo/EchoImpl.java @@ -6,27 +6,27 @@ * 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. + * under the License. */ package services.echo; /** * A simple client component that uses a reference with an JSONRPC binding. - * + * * @version $Rev$ $Date$ */ -public class EchoImpl implements Echo { +public class EchoImpl implements Echo { - public String echo(String msg) { + public String echo(String msg) { return msg; } @@ -35,11 +35,6 @@ public class EchoImpl implements Echo { return value; } - public boolean echoBoolean(boolean param) { - boolean value = param; - return value; - } - public String[] echoArrayString(String[] stringArray) { return stringArray; } diff --git a/sca-java-2.x/trunk/modules/binding-rest-runtime/src/test/java/services/store/FruitsCatalogImpl.java b/sca-java-2.x/trunk/modules/binding-rest-runtime/src/test/java/services/store/FruitsCatalogImpl.java index 498576117b..afe3d3863e 100644 --- a/sca-java-2.x/trunk/modules/binding-rest-runtime/src/test/java/services/store/FruitsCatalogImpl.java +++ b/sca-java-2.x/trunk/modules/binding-rest-runtime/src/test/java/services/store/FruitsCatalogImpl.java @@ -6,15 +6,15 @@ * 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. + * under the License. */ package services.store; @@ -31,13 +31,13 @@ import org.oasisopen.sca.annotation.Scope; @Scope("COMPOSITE") public class FruitsCatalogImpl implements Catalog { - + @Property public String currencyCode = "USD"; - + @Reference public CurrencyConverter currencyConverter; - + private Map catalog = new HashMap(); @Init @@ -50,32 +50,27 @@ public class FruitsCatalogImpl implements Catalog { public Items getItem() { Items items = new Items(); - // Add by order so that we can test in the json array - List list = new ArrayList(); - list.add(catalog.get("Pear")); - list.add(catalog.get("Apple")); - list.add(catalog.get("Orange")); - items.setItems(list); + items.setItems(new ArrayList(catalog.values())); return items; } - + public Item getItemById(String itemId) { return catalog.get(itemId); } - + public void addItem(Item item) { catalog.put(item.getName(),item); } - + public void updateItem(Item item) { if(catalog.get(item.getName()) != null) { catalog.put(item.getName(), item); } } - + public void deleteItem(String itemId) { if(catalog.get(itemId) != null) { catalog.remove(itemId); - } + } } } diff --git a/sca-java-2.x/trunk/modules/binding-rest-runtime/src/test/resources/echo.composite b/sca-java-2.x/trunk/modules/binding-rest-runtime/src/test/resources/echo.composite index b69107834a..9e56b84315 100644 --- a/sca-java-2.x/trunk/modules/binding-rest-runtime/src/test/resources/echo.composite +++ b/sca-java-2.x/trunk/modules/binding-rest-runtime/src/test/resources/echo.composite @@ -7,15 +7,15 @@ * 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. + * under the License. --> - - - + + + + + + + + + + + + - -- cgit v1.2.3