Author: lresende
Date: Wed May 20 06:22:42 2009
New Revision: 776580
URL: http://svn.apache.org/viewvc?rev=776580&view=rev
Log:
Properly handle SMD requests in JSON-RPC wire format/operation selector
Added:
tuscany/branches/sca-java-1.x/modules/binding-http-jsonrpc-runtime/src/main/java/org/apache/tuscany/sca/binding/http/wireformat/jsonrpc/provider/JavaToSmd.java
(with props)
Modified:
tuscany/branches/sca-java-1.x/modules/binding-http-jsonrpc-runtime/pom.xml
tuscany/branches/sca-java-1.x/modules/binding-http-jsonrpc-runtime/src/main/java/org/apache/tuscany/sca/binding/http/operationselector/jsonrpc/provider/JSONRPCOperationSelectorInterceptor.java
tuscany/branches/sca-java-1.x/modules/binding-http-jsonrpc-runtime/src/main/java/org/apache/tuscany/sca/binding/http/wireformat/jsonrpc/provider/JSONRPCWireFormatInterceptor.java
tuscany/branches/sca-java-1.x/modules/binding-http-jsonrpc-runtime/src/main/java/org/apache/tuscany/sca/binding/http/wireformat/jsonrpc/provider/JSONRPCWireFormatServiceProvider.java
tuscany/branches/sca-java-1.x/modules/binding-http-jsonrpc/pom.xml
tuscany/branches/sca-java-1.x/samples/store/src/main/resources/store.composite
Modified:
tuscany/branches/sca-java-1.x/modules/binding-http-jsonrpc-runtime/pom.xml
URL:
http://svn.apache.org/viewvc/tuscany/branches/sca-java-1.x/modules/binding-http-jsonrpc-runtime/pom.xml?rev=776580&r1=776579&r2=776580&view=diff
==============================================================================
--- tuscany/branches/sca-java-1.x/modules/binding-http-jsonrpc-runtime/pom.xml
(original)
+++ tuscany/branches/sca-java-1.x/modules/binding-http-jsonrpc-runtime/pom.xml
Wed May 20 06:22:42 2009
@@ -62,13 +62,6 @@
<dependency>
<groupId>org.apache.tuscany.sca</groupId>
- <artifactId>tuscany-host-jetty</artifactId>
- <version>1.6-SNAPSHOT</version>
- <scope>test</scope>
- </dependency>
-
- <dependency>
- <groupId>org.apache.tuscany.sca</groupId>
<artifactId>tuscany-databinding</artifactId>
<version>1.6-SNAPSHOT</version>
</dependency>
@@ -77,7 +70,14 @@
<groupId>org.apache.tuscany.sca</groupId>
<artifactId>tuscany-databinding-json</artifactId>
<version>1.6-SNAPSHOT</version>
- </dependency>
+ </dependency>
+
+ <dependency>
+ <groupId>javax.servlet</groupId>
+ <artifactId>servlet-api</artifactId>
+ <version>2.5</version>
+ <scope>provided</scope>
+ </dependency>
<dependency>
<groupId>com.metaparadigm</groupId>
Modified:
tuscany/branches/sca-java-1.x/modules/binding-http-jsonrpc-runtime/src/main/java/org/apache/tuscany/sca/binding/http/operationselector/jsonrpc/provider/JSONRPCOperationSelectorInterceptor.java
URL:
http://svn.apache.org/viewvc/tuscany/branches/sca-java-1.x/modules/binding-http-jsonrpc-runtime/src/main/java/org/apache/tuscany/sca/binding/http/operationselector/jsonrpc/provider/JSONRPCOperationSelectorInterceptor.java?rev=776580&r1=776579&r2=776580&view=diff
==============================================================================
---
tuscany/branches/sca-java-1.x/modules/binding-http-jsonrpc-runtime/src/main/java/org/apache/tuscany/sca/binding/http/operationselector/jsonrpc/provider/JSONRPCOperationSelectorInterceptor.java
(original)
+++
tuscany/branches/sca-java-1.x/modules/binding-http-jsonrpc-runtime/src/main/java/org/apache/tuscany/sca/binding/http/operationselector/jsonrpc/provider/JSONRPCOperationSelectorInterceptor.java
Wed May 20 06:22:42 2009
@@ -23,6 +23,7 @@
import java.util.List;
import org.apache.tuscany.sca.binding.http.HTTPBinding;
+import org.apache.tuscany.sca.binding.http.HTTPBindingContext;
import org.apache.tuscany.sca.interfacedef.Operation;
import org.apache.tuscany.sca.invocation.Interceptor;
import org.apache.tuscany.sca.invocation.Invoker;
@@ -62,6 +63,11 @@
public Message invoke(Message msg) {
+ HTTPBindingContext bindingContext = msg.getBindingContext();
+ if ("smd".equals(bindingContext.getHttpRequest().getQueryString())) {
+ return getNext().invoke(msg);
+ }
+
JSONObject jsonReq = null;
String method = null;
try {
Modified:
tuscany/branches/sca-java-1.x/modules/binding-http-jsonrpc-runtime/src/main/java/org/apache/tuscany/sca/binding/http/wireformat/jsonrpc/provider/JSONRPCWireFormatInterceptor.java
URL:
http://svn.apache.org/viewvc/tuscany/branches/sca-java-1.x/modules/binding-http-jsonrpc-runtime/src/main/java/org/apache/tuscany/sca/binding/http/wireformat/jsonrpc/provider/JSONRPCWireFormatInterceptor.java?rev=776580&r1=776579&r2=776580&view=diff
==============================================================================
---
tuscany/branches/sca-java-1.x/modules/binding-http-jsonrpc-runtime/src/main/java/org/apache/tuscany/sca/binding/http/wireformat/jsonrpc/provider/JSONRPCWireFormatInterceptor.java
(original)
+++
tuscany/branches/sca-java-1.x/modules/binding-http-jsonrpc-runtime/src/main/java/org/apache/tuscany/sca/binding/http/wireformat/jsonrpc/provider/JSONRPCWireFormatInterceptor.java
Wed May 20 06:22:42 2009
@@ -20,6 +20,9 @@
package org.apache.tuscany.sca.binding.http.wireformat.jsonrpc.provider;
import org.apache.tuscany.sca.binding.http.HTTPBinding;
+import org.apache.tuscany.sca.binding.http.HTTPBindingContext;
+import org.apache.tuscany.sca.interfacedef.InterfaceContract;
+import org.apache.tuscany.sca.interfacedef.java.JavaInterface;
import org.apache.tuscany.sca.invocation.Interceptor;
import org.apache.tuscany.sca.invocation.Invoker;
import org.apache.tuscany.sca.invocation.Message;
@@ -42,12 +45,16 @@
private RuntimeWire runtimeWire;
private HTTPBinding binding;
+ private InterfaceContract serviceContract;
+
private MessageFactory messageFactory;
- public JSONRPCWireFormatInterceptor(HTTPBinding binding, RuntimeWire
runtimeWire, MessageFactory messageFactory) {
+ public JSONRPCWireFormatInterceptor(HTTPBinding binding, RuntimeWire
runtimeWire, InterfaceContract serviceContract, MessageFactory messageFactory) {
this.binding = binding;
this.runtimeWire = runtimeWire;
+ this.serviceContract = serviceContract;
+
this.messageFactory = messageFactory;
}
@@ -61,6 +68,25 @@
}
public Message invoke(Message msg) {
+ HTTPBindingContext bindingContext = msg.getBindingContext();
+ Message returnMessage = null;
+
+ if ("smd".equals(bindingContext.getHttpRequest().getQueryString())) {
+ returnMessage = handleSMDInvocation(msg);
+ } else {
+ returnMessage = handleJSONRPCInvocation(msg);
+ }
+
+ return returnMessage;
+
+ }
+
+ /**
+ * Handle regular JSON-RPC Invocation
+ * @param msg
+ * @return
+ */
+ private Message handleJSONRPCInvocation (Message msg) {
JSONObject jsonReq = (JSONObject) msg.getBody();
String method = null;
Object[] args = null;
@@ -112,9 +138,23 @@
Throwable exception = (Throwable)responseMessage.getBody();
return createJSONFaultMessage(exception);
}
-
}
+ /**
+ * handles requests for the SMD descriptor for a service
+ */
+ private Message handleSMDInvocation(Message msg) {
+ HTTPBindingContext bindingContext = msg.getBindingContext();
+
+ String serviceUrl =
bindingContext.getHttpRequest().getRequestURL().toString();
+ JavaInterface interfaze = (JavaInterface)
serviceContract.getInterface();
+ String smd = JavaToSmd.interfaceToSmd(interfaze.getJavaClass(),
serviceUrl);
+
+ Message smdResponseMessage = messageFactory.createMessage();
+ smdResponseMessage.setBody(smd);
+
+ return smdResponseMessage;
+ }
/**
* Create a Fault Message with a JSON representation of the current
exception
Modified:
tuscany/branches/sca-java-1.x/modules/binding-http-jsonrpc-runtime/src/main/java/org/apache/tuscany/sca/binding/http/wireformat/jsonrpc/provider/JSONRPCWireFormatServiceProvider.java
URL:
http://svn.apache.org/viewvc/tuscany/branches/sca-java-1.x/modules/binding-http-jsonrpc-runtime/src/main/java/org/apache/tuscany/sca/binding/http/wireformat/jsonrpc/provider/JSONRPCWireFormatServiceProvider.java?rev=776580&r1=776579&r2=776580&view=diff
==============================================================================
---
tuscany/branches/sca-java-1.x/modules/binding-http-jsonrpc-runtime/src/main/java/org/apache/tuscany/sca/binding/http/wireformat/jsonrpc/provider/JSONRPCWireFormatServiceProvider.java
(original)
+++
tuscany/branches/sca-java-1.x/modules/binding-http-jsonrpc-runtime/src/main/java/org/apache/tuscany/sca/binding/http/wireformat/jsonrpc/provider/JSONRPCWireFormatServiceProvider.java
Wed May 20 06:22:42 2009
@@ -85,7 +85,7 @@
BindingRRB rrbBinding = (BindingRRB) binding;
WireFormat wireFormat = rrbBinding.getRequestWireFormat();
if(wireFormat != null && wireFormat instanceof JSONRPCWireFormat) {
- return new JSONRPCWireFormatInterceptor((HTTPBinding) binding,
service.getRuntimeWire(binding), messageFactory);
+ return new JSONRPCWireFormatInterceptor((HTTPBinding) binding,
service.getRuntimeWire(binding), serviceContract, messageFactory);
}
}
Added:
tuscany/branches/sca-java-1.x/modules/binding-http-jsonrpc-runtime/src/main/java/org/apache/tuscany/sca/binding/http/wireformat/jsonrpc/provider/JavaToSmd.java
URL:
http://svn.apache.org/viewvc/tuscany/branches/sca-java-1.x/modules/binding-http-jsonrpc-runtime/src/main/java/org/apache/tuscany/sca/binding/http/wireformat/jsonrpc/provider/JavaToSmd.java?rev=776580&view=auto
==============================================================================
---
tuscany/branches/sca-java-1.x/modules/binding-http-jsonrpc-runtime/src/main/java/org/apache/tuscany/sca/binding/http/wireformat/jsonrpc/provider/JavaToSmd.java
(added)
+++
tuscany/branches/sca-java-1.x/modules/binding-http-jsonrpc-runtime/src/main/java/org/apache/tuscany/sca/binding/http/wireformat/jsonrpc/provider/JavaToSmd.java
Wed May 20 06:22:42 2009
@@ -0,0 +1,56 @@
+/*
+ * 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.http.wireformat.jsonrpc.provider;
+
+import java.lang.reflect.Method;
+
+/**
+ * Utility class to create a Simple Method Description (SMD) descriptor
+ * from a Java class. See http://dojo.jot.com/SMD.
+ *
+ * TODO: Change to work from the Tuscany Interface instead of a Java class
+ *
+ * @version $Rev$ $Date$
+ */
+class JavaToSmd {
+
+ static String interfaceToSmd(Class<?> klazz, String serviceUrl) {
+ String name = klazz.getSimpleName();
+ Method[] methods = klazz.getMethods();
+
+ StringBuffer smdSb = new StringBuffer();
+ smdSb.append("{\"SMDVersion\":\".1\",\"objectName\":\"" + name +
"\",\"serviceType\":\"JSON-RPC\",\"serviceURL\":\""+ serviceUrl +
"\",\"methods\":[");
+ for (int i = 0; i < methods.length; i++) {
+ if (i != 0) smdSb.append(",");
+ Class<?>[] params = methods[i].getParameterTypes();
+ smdSb.append("{\"name\":\""+methods[i].getName() +
"\",\"parameters\":[");
+ for (int j = 0; j < params.length; j++) {
+ if (j != 0) smdSb.append(",");
+ // right now Dojo doesn't look at the type value, so we'll
default it to STRING
+ // also, since we can't introspect the method parameter names
we'll just create an incrementing parameter name
+ smdSb.append("{\"name\":\"param" + j +
"\",\"type\":\"STRING\"}");
+ }
+ smdSb.append("]}");
+ }
+ smdSb.append("]}");
+
+ return smdSb.toString();
+ }
+
+}
Propchange:
tuscany/branches/sca-java-1.x/modules/binding-http-jsonrpc-runtime/src/main/java/org/apache/tuscany/sca/binding/http/wireformat/jsonrpc/provider/JavaToSmd.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange:
tuscany/branches/sca-java-1.x/modules/binding-http-jsonrpc-runtime/src/main/java/org/apache/tuscany/sca/binding/http/wireformat/jsonrpc/provider/JavaToSmd.java
------------------------------------------------------------------------------
svn:keywords = Rev Date
Modified: tuscany/branches/sca-java-1.x/modules/binding-http-jsonrpc/pom.xml
URL:
http://svn.apache.org/viewvc/tuscany/branches/sca-java-1.x/modules/binding-http-jsonrpc/pom.xml?rev=776580&r1=776579&r2=776580&view=diff
==============================================================================
--- tuscany/branches/sca-java-1.x/modules/binding-http-jsonrpc/pom.xml
(original)
+++ tuscany/branches/sca-java-1.x/modules/binding-http-jsonrpc/pom.xml Wed May
20 06:22:42 2009
@@ -49,6 +49,13 @@
</dependency>
<dependency>
+ <groupId>javax.servlet</groupId>
+ <artifactId>servlet-api</artifactId>
+ <version>2.5</version>
+ <scope>provided</scope>
+ </dependency>
+
+ <dependency>
<groupId>org.apache.tuscany.sca</groupId>
<artifactId>tuscany-implementation-java-runtime</artifactId>
<version>1.6-SNAPSHOT</version>
Modified:
tuscany/branches/sca-java-1.x/samples/store/src/main/resources/store.composite
URL:
http://svn.apache.org/viewvc/tuscany/branches/sca-java-1.x/samples/store/src/main/resources/store.composite?rev=776580&r1=776579&r2=776580&view=diff
==============================================================================
---
tuscany/branches/sca-java-1.x/samples/store/src/main/resources/store.composite
(original)
+++
tuscany/branches/sca-java-1.x/samples/store/src/main/resources/store.composite
Wed May 20 06:22:42 2009
@@ -28,13 +28,19 @@
<t:binding.http uri="/store"/>
</service>
<reference name="catalog" target="Catalog">
- <t:binding.jsonrpc/>
+ <t:binding.http>
+ <t:wireFormat.jsonrpc/>
+ <t:operationSelector.jsonrpc/>
+ </t:binding.http>
</reference>
<reference name="shoppingCart" target="ShoppingCart/Cart">
<t:binding.atom/>
</reference>
<reference name="shoppingTotal" target="ShoppingCart/Total">
- <t:binding.jsonrpc/>
+ <t:binding.http>
+ <t:wireFormat.jsonrpc/>
+ <t:operationSelector.jsonrpc/>
+ </t:binding.http>
</reference>
</component>
@@ -42,7 +48,10 @@
<implementation.java class="services.FruitsCatalogImpl"/>
<property name="currencyCode">USD</property>
<service name="Catalog">
- <t:binding.jsonrpc/>
+ <t:binding.http>
+ <t:wireFormat.jsonrpc/>
+ <t:operationSelector.jsonrpc/>
+ </t:binding.http>
</service>
<reference name="currencyConverter"
target="CurrencyConverter"/>
</component>
@@ -53,7 +62,10 @@
<t:binding.atom uri="/ShoppingCart/Cart"/>
</service>
<service name="Total">
- <t:binding.jsonrpc/>
+ <t:binding.http>
+ <t:wireFormat.jsonrpc/>
+ <t:operationSelector.jsonrpc/>
+ </t:binding.http>
</service>
</component>