diff options
author | antelder <antelder@13f79535-47bb-0310-9956-ffa450edef68> | 2010-11-30 19:00:47 +0000 |
---|---|---|
committer | antelder <antelder@13f79535-47bb-0310-9956-ffa450edef68> | 2010-11-30 19:00:47 +0000 |
commit | 396008440c7bcdb1cbb7a3c5d6270814dfb0e341 (patch) | |
tree | 5b36dc6a3ed53cb62560963a42b45a89b62dc4de /sca-java-2.x/branches/2.0-Beta2/modules/binding-rest-runtime/src | |
parent | ae9b105c6718dcb91b415e257acc8b8c8bf0c6c7 (diff) |
delete the beta2 branch as i'd not seen raymonds mail when i made it and we might as well wait till he's got his changes in before creating the beta2 branch
git-svn-id: http://svn.us.apache.org/repos/asf/tuscany@1040700 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'sca-java-2.x/branches/2.0-Beta2/modules/binding-rest-runtime/src')
61 files changed, 0 insertions, 6669 deletions
diff --git a/sca-java-2.x/branches/2.0-Beta2/modules/binding-rest-runtime/src/main/java/org/apache/tuscany/sca/binding/rest/operationselector/jaxrs/provider/JAXRSOperationSelectorInterceptor.java b/sca-java-2.x/branches/2.0-Beta2/modules/binding-rest-runtime/src/main/java/org/apache/tuscany/sca/binding/rest/operationselector/jaxrs/provider/JAXRSOperationSelectorInterceptor.java deleted file mode 100644 index 928b80a044..0000000000 --- a/sca-java-2.x/branches/2.0-Beta2/modules/binding-rest-runtime/src/main/java/org/apache/tuscany/sca/binding/rest/operationselector/jaxrs/provider/JAXRSOperationSelectorInterceptor.java +++ /dev/null @@ -1,256 +0,0 @@ -/* - * 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.rest.operationselector.jaxrs.provider; - -import java.io.ByteArrayOutputStream; -import java.io.IOException; -import java.io.InputStream; -import java.io.InputStreamReader; -import java.io.OutputStream; -import java.io.StringWriter; -import java.lang.reflect.Method; -import java.net.URLDecoder; -import java.util.List; - -import javax.activation.DataSource; -import javax.ws.rs.DELETE; -import javax.ws.rs.GET; -import javax.ws.rs.POST; -import javax.ws.rs.PUT; -import javax.ws.rs.Path; - -import org.apache.tuscany.sca.common.http.HTTPContext; -import org.apache.tuscany.sca.common.http.HTTPUtil; -import org.apache.tuscany.sca.core.ExtensionPointRegistry; -import org.apache.tuscany.sca.interfacedef.InterfaceContract; -import org.apache.tuscany.sca.interfacedef.Operation; -import org.apache.tuscany.sca.interfacedef.java.JavaOperation; -import org.apache.tuscany.sca.invocation.Interceptor; -import org.apache.tuscany.sca.invocation.Invoker; -import org.apache.tuscany.sca.invocation.Message; -import org.apache.tuscany.sca.runtime.RuntimeComponentService; -import org.apache.tuscany.sca.runtime.RuntimeEndpoint; - -/** - * JAXRS operation selector Interceptor. - * - * @version $Rev$ $Date$ -*/ -public class JAXRSOperationSelectorInterceptor implements Interceptor { - private ExtensionPointRegistry extensionPoints; - private RuntimeEndpoint endpoint; - - private RuntimeComponentService service; - private InterfaceContract interfaceContract; - private List<Operation> serviceOperations; - - private Invoker next; - - public JAXRSOperationSelectorInterceptor(ExtensionPointRegistry extensionPoints, RuntimeEndpoint endpoint) { - this.extensionPoints = extensionPoints; - this.endpoint = endpoint; - - this.service = (RuntimeComponentService)endpoint.getService(); - this.interfaceContract = service.getInterfaceContract(); - this.serviceOperations = service.getInterfaceContract().getInterface().getOperations(); - } - - public Invoker getNext() { - return next; - } - - public void setNext(Invoker next) { - this.next = next; - } - - public Message invoke(Message msg) { - try { - HTTPContext bindingContext = (HTTPContext)msg.getBindingContext(); - - // By-pass the operation selector - if (bindingContext == null) { - return getNext().invoke(msg); - } - - String path = URLDecoder.decode(HTTPUtil.getRequestPath(bindingContext.getHttpRequest()), "UTF-8"); - - if (path.startsWith("/")) { - path = path.substring(1); - } - - List<Operation> operations = - filterOperationsByHttpMethod(interfaceContract, bindingContext.getHttpRequest().getMethod()); - - Operation operation = findOperation(path, operations); - - final JavaOperation javaOperation = (JavaOperation)operation; - final Method method = javaOperation.getJavaMethod(); - - if (path != null && path.length() > 0) { - if (method.getAnnotation(Path.class) != null) { - msg.setBody(new Object[] {path}); - } - } - - // FIXME: [rfeng] We should follow JAX-RS rules to identify the entity parameter - Class<?>[] paramTypes = method.getParameterTypes(); - if (paramTypes.length == 1) { - Class<?> type = paramTypes[0]; - InputStream is = (InputStream)((Object[])msg.getBody())[0]; - Object target = convert(is, bindingContext.getHttpRequest().getContentType(), type); - msg.setBody(new Object[] {target}); - } else if (paramTypes.length == 0) { - msg.setBody(null); - } - - msg.setOperation(operation); - - return getNext().invoke(msg); - } catch (Exception e) { - throw new RuntimeException(e); - } - } - - private Object convert(InputStream content, String contentType, Class<?> type) { - if (type == DataSource.class) { - return type.cast(new InputStreamDataSource(content, contentType)); - } else if (type == InputStream.class) { - return type.cast(content); - } else if (type == String.class) { - try { - StringWriter sw = new StringWriter(); - InputStreamReader reader = new InputStreamReader(content, "UTF-8"); - char[] buf = new char[8192]; - while (true) { - int size = reader.read(buf); - if (size < 0) { - break; - } - sw.write(buf, 0, size); - } - return type.cast(sw.toString()); - } catch (Exception e) { - throw new IllegalArgumentException(e); - } - } else if (type == byte[].class) { - try { - ByteArrayOutputStream bos = new ByteArrayOutputStream(); - byte[] buf = new byte[8192]; - while (true) { - int size = content.read(buf); - if (size < 0) { - break; - } - bos.write(buf, 0, size); - } - return type.cast(bos.toByteArray()); - } catch (Exception e) { - throw new IllegalArgumentException(e); - } - } else { - return content; - } - } - - public static final class InputStreamDataSource implements DataSource { - - public static final String DEFAULT_TYPE = "application/octet-stream"; - - private final InputStream in; - private final String ctype; - - public InputStreamDataSource(InputStream in) { - this(in, null); - } - - public InputStreamDataSource(InputStream in, String ctype) { - this.in = in; - this.ctype = (ctype != null) ? ctype : DEFAULT_TYPE; - } - - public String getContentType() { - return ctype; - } - - public String getName() { - return null; - } - - public InputStream getInputStream() throws IOException { - return in; - } - - public OutputStream getOutputStream() throws IOException { - return null; - } - - } - - /** - * Find the operation from the component service contract - * @param componentService - * @param http_method - * @return - */ - private static List<Operation> filterOperationsByHttpMethod(InterfaceContract interfaceContract, String http_method) { - List<Operation> operations = null; - - if (http_method.equalsIgnoreCase("get")) { - operations = (List<Operation>)interfaceContract.getInterface().getAttributes().get(GET.class); - } else if (http_method.equalsIgnoreCase("put")) { - operations = (List<Operation>)interfaceContract.getInterface().getAttributes().get(PUT.class); - } else if (http_method.equalsIgnoreCase("post")) { - operations = (List<Operation>)interfaceContract.getInterface().getAttributes().get(POST.class); - } else if (http_method.equalsIgnoreCase("delete")) { - operations = (List<Operation>)interfaceContract.getInterface().getAttributes().get(DELETE.class); - } - - return operations; - } - - /** - * Find the operation from the component service contract - * @param componentService - * @param http_method - * @return - */ - private Operation findOperation(String path, List<Operation> operations) { - Operation operation = null; - - for (Operation op : operations) { - final JavaOperation javaOperation = (JavaOperation)op; - final Method method = javaOperation.getJavaMethod(); - - if (path != null && path.length() > 0) { - if (method.getAnnotation(Path.class) != null) { - operation = op; - break; - } - } else { - if (method.getAnnotation(Path.class) == null) { - operation = op; - break; - } - } - } - - return operation; - } -} diff --git a/sca-java-2.x/branches/2.0-Beta2/modules/binding-rest-runtime/src/main/java/org/apache/tuscany/sca/binding/rest/operationselector/jaxrs/provider/JAXRSOperationSelectorProviderFactory.java b/sca-java-2.x/branches/2.0-Beta2/modules/binding-rest-runtime/src/main/java/org/apache/tuscany/sca/binding/rest/operationselector/jaxrs/provider/JAXRSOperationSelectorProviderFactory.java deleted file mode 100644 index d057f1a852..0000000000 --- a/sca-java-2.x/branches/2.0-Beta2/modules/binding-rest-runtime/src/main/java/org/apache/tuscany/sca/binding/rest/operationselector/jaxrs/provider/JAXRSOperationSelectorProviderFactory.java +++ /dev/null @@ -1,52 +0,0 @@ -/* - * 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.rest.operationselector.jaxrs.provider; - -import org.apache.tuscany.sca.binding.rest.operationselector.jaxrs.JAXRSOperationSelector; -import org.apache.tuscany.sca.core.ExtensionPointRegistry; -import org.apache.tuscany.sca.provider.OperationSelectorProvider; -import org.apache.tuscany.sca.provider.OperationSelectorProviderFactory; -import org.apache.tuscany.sca.runtime.RuntimeEndpoint; -import org.apache.tuscany.sca.runtime.RuntimeEndpointReference; - -/** - * JAXRS operation selector Provider Factory. - * - * @version $Rev$ $Date$ -*/ -public class JAXRSOperationSelectorProviderFactory implements OperationSelectorProviderFactory<JAXRSOperationSelector>{ - private ExtensionPointRegistry extensionPoints; - - public JAXRSOperationSelectorProviderFactory(ExtensionPointRegistry extensionPoints) { - this.extensionPoints = extensionPoints; - } - public OperationSelectorProvider createReferenceOperationSelectorProvider(RuntimeEndpointReference endpointReference) { - return new JAXRSOperationSelectorReferenceProvider(extensionPoints, endpointReference); - } - - public OperationSelectorProvider createServiceOperationSelectorProvider(RuntimeEndpoint endpoint) { - return new JAXRSOperationSelectorServiceProvider(extensionPoints, endpoint); - } - - public Class<JAXRSOperationSelector> getModelType() { - return JAXRSOperationSelector.class; - } - -} diff --git a/sca-java-2.x/branches/2.0-Beta2/modules/binding-rest-runtime/src/main/java/org/apache/tuscany/sca/binding/rest/operationselector/jaxrs/provider/JAXRSOperationSelectorReferenceProvider.java b/sca-java-2.x/branches/2.0-Beta2/modules/binding-rest-runtime/src/main/java/org/apache/tuscany/sca/binding/rest/operationselector/jaxrs/provider/JAXRSOperationSelectorReferenceProvider.java deleted file mode 100644 index c560a13ae2..0000000000 --- a/sca-java-2.x/branches/2.0-Beta2/modules/binding-rest-runtime/src/main/java/org/apache/tuscany/sca/binding/rest/operationselector/jaxrs/provider/JAXRSOperationSelectorReferenceProvider.java +++ /dev/null @@ -1,50 +0,0 @@ -/* - * 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.rest.operationselector.jaxrs.provider; - -import org.apache.tuscany.sca.core.ExtensionPointRegistry; -import org.apache.tuscany.sca.invocation.Interceptor; -import org.apache.tuscany.sca.invocation.Phase; -import org.apache.tuscany.sca.provider.OperationSelectorProvider; -import org.apache.tuscany.sca.runtime.RuntimeEndpointReference; - -/** - * JAXRS operation selector Reference Provider. - * - * @version $Rev$ $Date$ -*/ -public class JAXRSOperationSelectorReferenceProvider implements OperationSelectorProvider { - private ExtensionPointRegistry extensionPoints; - private RuntimeEndpointReference endpointReference; - - public JAXRSOperationSelectorReferenceProvider(ExtensionPointRegistry extensionPoints, RuntimeEndpointReference endpointReference ) { - this.extensionPoints = extensionPoints; - this.endpointReference = endpointReference; - } - - public Interceptor createInterceptor() { - return null; - } - - public String getPhase() { - return Phase.SERVICE_BINDING_OPERATION_SELECTOR; - } - -} diff --git a/sca-java-2.x/branches/2.0-Beta2/modules/binding-rest-runtime/src/main/java/org/apache/tuscany/sca/binding/rest/operationselector/jaxrs/provider/JAXRSOperationSelectorServiceProvider.java b/sca-java-2.x/branches/2.0-Beta2/modules/binding-rest-runtime/src/main/java/org/apache/tuscany/sca/binding/rest/operationselector/jaxrs/provider/JAXRSOperationSelectorServiceProvider.java deleted file mode 100644 index 105c84ebda..0000000000 --- a/sca-java-2.x/branches/2.0-Beta2/modules/binding-rest-runtime/src/main/java/org/apache/tuscany/sca/binding/rest/operationselector/jaxrs/provider/JAXRSOperationSelectorServiceProvider.java +++ /dev/null @@ -1,57 +0,0 @@ -/* - * 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.rest.operationselector.jaxrs.provider; - -import org.apache.tuscany.sca.assembly.Binding; -import org.apache.tuscany.sca.binding.rest.operationselector.jaxrs.JAXRSOperationSelector; -import org.apache.tuscany.sca.core.ExtensionPointRegistry; -import org.apache.tuscany.sca.invocation.Interceptor; -import org.apache.tuscany.sca.invocation.Phase; -import org.apache.tuscany.sca.provider.OperationSelectorProvider; -import org.apache.tuscany.sca.runtime.RuntimeEndpoint; - -/** - * JAXRS operation selector Service Provider. - * - * @version $Rev$ $Date$ -*/ -public class JAXRSOperationSelectorServiceProvider implements OperationSelectorProvider { - private ExtensionPointRegistry extensionPoints; - private RuntimeEndpoint endpoint; - - private Binding binding; - - public JAXRSOperationSelectorServiceProvider(ExtensionPointRegistry extensionPoints, RuntimeEndpoint endpoint) { - this.extensionPoints = extensionPoints; - this.endpoint = endpoint; - this.binding = endpoint.getBinding(); - } - - public Interceptor createInterceptor() { - if(binding.getOperationSelector() != null && binding.getOperationSelector() instanceof JAXRSOperationSelector) { - return new JAXRSOperationSelectorInterceptor(extensionPoints, endpoint); - } - return null; - } - - public String getPhase() { - return Phase.SERVICE_BINDING_OPERATION_SELECTOR; - } -} diff --git a/sca-java-2.x/branches/2.0-Beta2/modules/binding-rest-runtime/src/main/java/org/apache/tuscany/sca/binding/rest/operationselector/rpc/provider/RPCOperationSelectorInterceptor.java b/sca-java-2.x/branches/2.0-Beta2/modules/binding-rest-runtime/src/main/java/org/apache/tuscany/sca/binding/rest/operationselector/rpc/provider/RPCOperationSelectorInterceptor.java deleted file mode 100644 index 0df6e5e0fb..0000000000 --- a/sca-java-2.x/branches/2.0-Beta2/modules/binding-rest-runtime/src/main/java/org/apache/tuscany/sca/binding/rest/operationselector/rpc/provider/RPCOperationSelectorInterceptor.java +++ /dev/null @@ -1,203 +0,0 @@ -/* - * 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.rest.operationselector.rpc.provider; - -import java.lang.annotation.Annotation; -import java.lang.reflect.Array; -import java.lang.reflect.Method; -import java.net.URLDecoder; -import java.util.ArrayList; -import java.util.Date; -import java.util.List; - -import javax.servlet.http.HttpServletResponse; -import javax.ws.rs.QueryParam; - -import org.apache.tuscany.sca.common.http.HTTPContext; -import org.apache.tuscany.sca.common.http.HTTPUtil; -import org.apache.tuscany.sca.core.ExtensionPointRegistry; -import org.apache.tuscany.sca.core.UtilityExtensionPoint; -import org.apache.tuscany.sca.databinding.SimpleTypeMapper; -import org.apache.tuscany.sca.interfacedef.InterfaceContract; -import org.apache.tuscany.sca.interfacedef.Operation; -import org.apache.tuscany.sca.interfacedef.java.JavaOperation; -import org.apache.tuscany.sca.interfacedef.util.TypeInfo; -import org.apache.tuscany.sca.invocation.Interceptor; -import org.apache.tuscany.sca.invocation.Invoker; -import org.apache.tuscany.sca.invocation.Message; -import org.apache.tuscany.sca.runtime.RuntimeComponentService; -import org.apache.tuscany.sca.runtime.RuntimeEndpoint; - -/** - * RPC operation selector Interceptor. - * - * @version $Rev$ $Date$ -*/ -public class RPCOperationSelectorInterceptor implements Interceptor { - private ExtensionPointRegistry extensionPoints; - private SimpleTypeMapper simpleTypeMapper; - - private RuntimeEndpoint endpoint; - - private RuntimeComponentService service; - private InterfaceContract interfaceContract; - private List<Operation> serviceOperations; - - private Invoker next; - - public RPCOperationSelectorInterceptor(ExtensionPointRegistry extensionPoints, RuntimeEndpoint endpoint) { - this.extensionPoints = extensionPoints; - - UtilityExtensionPoint utilityExtensionPoint = extensionPoints.getExtensionPoint(UtilityExtensionPoint.class); - this.simpleTypeMapper = utilityExtensionPoint.getUtility(SimpleTypeMapper.class); - - this.endpoint = endpoint; - - this.service = (RuntimeComponentService)endpoint.getService(); - this.interfaceContract = service.getInterfaceContract(); - this.serviceOperations = service.getInterfaceContract().getInterface().getOperations(); - } - - public Invoker getNext() { - return next; - } - - public void setNext(Invoker next) { - this.next = next; - } - - public Message invoke(Message msg) { - try { - HTTPContext bindingContext = (HTTPContext)msg.getBindingContext(); - - if(! "get".equalsIgnoreCase(bindingContext.getHttpRequest().getMethod())) { - throw new RuntimeException("RPC Invocation only allowed over HTTP GET operations"); - } - - String path = URLDecoder.decode(HTTPUtil.getRequestPath(bindingContext.getHttpRequest()), "UTF-8"); - - if (path.startsWith("/")) { - path = path.substring(1); - } - - - String operationName = bindingContext.getHttpRequest().getParameter("method"); - Operation operation = findOperation( operationName ); - - if (operation == null) { - throw new RuntimeException("Invalid Operation '" + operationName + "'" ); - } - - final JavaOperation javaOperation = (JavaOperation)operation; - final Method method = javaOperation.getJavaMethod(); - - List<Object> messageParameters = new ArrayList<Object>(); - for(int i=0; i<method.getParameterTypes().length; i++) { - for(Annotation annotation : method.getParameterAnnotations()[i]) { - if (annotation instanceof QueryParam) { - QueryParam queryParam = (QueryParam) annotation; - String name = queryParam.value(); - String[] values = bindingContext.getHttpRequest().getParameterValues(name); - - if(values.length == 1) { - //process value, making necessary map from string to expected value - Class<?> clazz = method.getParameterTypes()[i]; - TypeInfo typeInfo = simpleTypeMapper.getXMLType(clazz); - Object v = simpleTypeMapper.toJavaObject(typeInfo.getQName(), values[0], null); - messageParameters.add(v); - } else { - //process value, making necessary map from string to expected value - Class<?> clazz = (method.getParameterTypes()[i]).getComponentType(); - TypeInfo typeInfo = simpleTypeMapper.getXMLType(clazz); - - - Object objectArray = Array.newInstance(clazz, values.length); - for (int count = 0; count < values.length; ++count) { - Object v = simpleTypeMapper.toJavaObject(typeInfo.getQName(), values[count], null); - Array.set(objectArray, count, v); - } - - messageParameters.add(objectArray); - } - } - } - } - - Object[] body = new Object[messageParameters.size()]; - messageParameters.toArray(body); - - msg.setBody(body); - msg.setOperation(operation); - - Message responseMessage = getNext().invoke(msg); - - //set Cache-Control to no-cache to avoid intermediary - //proxy/reverse-proxy caches and always hit the server - //that would identify if the value was current or not - bindingContext.getHttpResponse().setHeader("Cache-Control", "no-cache"); - bindingContext.getHttpResponse().setHeader("Expires", new Date(0).toGMTString()); - - - String eTag = HTTPUtil.calculateHashETag(responseMessage.getBody().toString().getBytes("UTF-8")); - - // Test request for predicates. - String predicate = bindingContext.getHttpRequest().getHeader( "If-Match" ); - if (( predicate != null ) && ( !predicate.equals(eTag) )) { - // No match, should short circuit - bindingContext.getHttpResponse().sendError(HttpServletResponse.SC_PRECONDITION_FAILED); - } - predicate = bindingContext.getHttpRequest().getHeader( "If-None-Match" ); - if (( predicate != null ) && ( predicate.equals(eTag) )) { - // Match, should short circuit - bindingContext.getHttpResponse().sendError(HttpServletResponse.SC_NOT_MODIFIED); - } - - bindingContext.getHttpResponse().addHeader("ETag", eTag); - - return responseMessage; - } catch (Exception e) { - throw new RuntimeException(e); - } - } - - /** - * Find the operation from the component service contract - * @param componentService - * @param method - * @return - */ - private Operation findOperation(String method) { - if (method.contains(".")) { - method = method.substring(method.lastIndexOf(".") + 1); - } - - List<Operation> operations = endpoint.getComponentServiceInterfaceContract().getInterface().getOperations(); - - Operation result = null; - for (Operation o : operations) { - if (o.getName().equalsIgnoreCase(method)) { - result = o; - break; - } - } - - return result; - } -} diff --git a/sca-java-2.x/branches/2.0-Beta2/modules/binding-rest-runtime/src/main/java/org/apache/tuscany/sca/binding/rest/operationselector/rpc/provider/RPCOperationSelectorProviderFactory.java b/sca-java-2.x/branches/2.0-Beta2/modules/binding-rest-runtime/src/main/java/org/apache/tuscany/sca/binding/rest/operationselector/rpc/provider/RPCOperationSelectorProviderFactory.java deleted file mode 100644 index 011e89e7cc..0000000000 --- a/sca-java-2.x/branches/2.0-Beta2/modules/binding-rest-runtime/src/main/java/org/apache/tuscany/sca/binding/rest/operationselector/rpc/provider/RPCOperationSelectorProviderFactory.java +++ /dev/null @@ -1,52 +0,0 @@ -/* - * 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.rest.operationselector.rpc.provider; - -import org.apache.tuscany.sca.binding.rest.operationselector.rpc.RPCOperationSelector; -import org.apache.tuscany.sca.core.ExtensionPointRegistry; -import org.apache.tuscany.sca.provider.OperationSelectorProvider; -import org.apache.tuscany.sca.provider.OperationSelectorProviderFactory; -import org.apache.tuscany.sca.runtime.RuntimeEndpoint; -import org.apache.tuscany.sca.runtime.RuntimeEndpointReference; - -/** - * RPC operation selector Provider Factory. - * - * @version $Rev$ $Date$ -*/ -public class RPCOperationSelectorProviderFactory implements OperationSelectorProviderFactory<RPCOperationSelector>{ - private ExtensionPointRegistry extensionPoints; - - public RPCOperationSelectorProviderFactory(ExtensionPointRegistry extensionPoints) { - this.extensionPoints = extensionPoints; - } - public OperationSelectorProvider createReferenceOperationSelectorProvider(RuntimeEndpointReference endpointReference) { - return new RPCOperationSelectorReferenceProvider(extensionPoints, endpointReference); - } - - public OperationSelectorProvider createServiceOperationSelectorProvider(RuntimeEndpoint endpoint) { - return new RPCOperationSelectorServiceProvider(extensionPoints, endpoint); - } - - public Class<RPCOperationSelector> getModelType() { - return RPCOperationSelector.class; - } - -} diff --git a/sca-java-2.x/branches/2.0-Beta2/modules/binding-rest-runtime/src/main/java/org/apache/tuscany/sca/binding/rest/operationselector/rpc/provider/RPCOperationSelectorReferenceProvider.java b/sca-java-2.x/branches/2.0-Beta2/modules/binding-rest-runtime/src/main/java/org/apache/tuscany/sca/binding/rest/operationselector/rpc/provider/RPCOperationSelectorReferenceProvider.java deleted file mode 100644 index c87b2fc21d..0000000000 --- a/sca-java-2.x/branches/2.0-Beta2/modules/binding-rest-runtime/src/main/java/org/apache/tuscany/sca/binding/rest/operationselector/rpc/provider/RPCOperationSelectorReferenceProvider.java +++ /dev/null @@ -1,50 +0,0 @@ -/* - * 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.rest.operationselector.rpc.provider; - -import org.apache.tuscany.sca.core.ExtensionPointRegistry; -import org.apache.tuscany.sca.invocation.Interceptor; -import org.apache.tuscany.sca.invocation.Phase; -import org.apache.tuscany.sca.provider.OperationSelectorProvider; -import org.apache.tuscany.sca.runtime.RuntimeEndpointReference; - -/** - * RPC operation selector Reference Provider. - * - * @version $Rev$ $Date$ -*/ -public class RPCOperationSelectorReferenceProvider implements OperationSelectorProvider { - private ExtensionPointRegistry extensionPoints; - private RuntimeEndpointReference endpointReference; - - public RPCOperationSelectorReferenceProvider(ExtensionPointRegistry extensionPoints, RuntimeEndpointReference endpointReference ) { - this.extensionPoints = extensionPoints; - this.endpointReference = endpointReference; - } - - public Interceptor createInterceptor() { - return null; - } - - public String getPhase() { - return Phase.SERVICE_BINDING_OPERATION_SELECTOR; - } - -} diff --git a/sca-java-2.x/branches/2.0-Beta2/modules/binding-rest-runtime/src/main/java/org/apache/tuscany/sca/binding/rest/operationselector/rpc/provider/RPCOperationSelectorServiceProvider.java b/sca-java-2.x/branches/2.0-Beta2/modules/binding-rest-runtime/src/main/java/org/apache/tuscany/sca/binding/rest/operationselector/rpc/provider/RPCOperationSelectorServiceProvider.java deleted file mode 100644 index e4a003d4b5..0000000000 --- a/sca-java-2.x/branches/2.0-Beta2/modules/binding-rest-runtime/src/main/java/org/apache/tuscany/sca/binding/rest/operationselector/rpc/provider/RPCOperationSelectorServiceProvider.java +++ /dev/null @@ -1,57 +0,0 @@ -/* - * 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.rest.operationselector.rpc.provider; - -import org.apache.tuscany.sca.assembly.Binding; -import org.apache.tuscany.sca.binding.rest.operationselector.rpc.RPCOperationSelector; -import org.apache.tuscany.sca.core.ExtensionPointRegistry; -import org.apache.tuscany.sca.invocation.Interceptor; -import org.apache.tuscany.sca.invocation.Phase; -import org.apache.tuscany.sca.provider.OperationSelectorProvider; -import org.apache.tuscany.sca.runtime.RuntimeEndpoint; - -/** - * RPC operation selector Service Provider. - * - * @version $Rev$ $Date$ -*/ -public class RPCOperationSelectorServiceProvider implements OperationSelectorProvider { - private ExtensionPointRegistry extensionPoints; - private RuntimeEndpoint endpoint; - - private Binding binding; - - public RPCOperationSelectorServiceProvider(ExtensionPointRegistry extensionPoints, RuntimeEndpoint endpoint) { - this.extensionPoints = extensionPoints; - this.endpoint = endpoint; - this.binding = endpoint.getBinding(); - } - - public Interceptor createInterceptor() { - if(binding.getOperationSelector() != null && binding.getOperationSelector() instanceof RPCOperationSelector) { - return new RPCOperationSelectorInterceptor(extensionPoints, endpoint); - } - return null; - } - - public String getPhase() { - return Phase.SERVICE_BINDING_OPERATION_SELECTOR; - } -} diff --git a/sca-java-2.x/branches/2.0-Beta2/modules/binding-rest-runtime/src/main/java/org/apache/tuscany/sca/binding/rest/provider/DataBindingJAXRSProvider.java b/sca-java-2.x/branches/2.0-Beta2/modules/binding-rest-runtime/src/main/java/org/apache/tuscany/sca/binding/rest/provider/DataBindingJAXRSProvider.java deleted file mode 100644 index 1ccdb868d7..0000000000 --- a/sca-java-2.x/branches/2.0-Beta2/modules/binding-rest-runtime/src/main/java/org/apache/tuscany/sca/binding/rest/provider/DataBindingJAXRSProvider.java +++ /dev/null @@ -1,203 +0,0 @@ -/* - * 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.rest.provider; - -import java.io.ByteArrayInputStream; -import java.io.ByteArrayOutputStream; -import java.io.IOException; -import java.io.InputStream; -import java.io.InputStreamReader; -import java.io.OutputStream; -import java.io.Reader; -import java.io.StringWriter; -import java.lang.annotation.Annotation; -import java.lang.reflect.Type; - -import javax.activation.DataSource; -import javax.jws.WebParam; -import javax.jws.WebResult; -import javax.ws.rs.core.MediaType; -import javax.ws.rs.ext.Provider; -import javax.xml.namespace.QName; - -import org.apache.tuscany.sca.core.ExtensionPointRegistry; -import org.apache.tuscany.sca.core.UtilityExtensionPoint; -import org.apache.tuscany.sca.databinding.DataBindingExtensionPoint; -import org.apache.tuscany.sca.databinding.Mediator; -import org.apache.tuscany.sca.interfacedef.DataType; -import org.apache.tuscany.sca.interfacedef.impl.DataTypeImpl; -import org.apache.tuscany.sca.interfacedef.util.XMLType; - -/** - * A JAX-RS provider that leverages Tuscany's databinding framework to handle read/write - * for JAX-RS runtime - */ -@Provider -public abstract class DataBindingJAXRSProvider { - protected DataBindingExtensionPoint dataBindingExtensionPoint; - protected Mediator mediator; - - public DataBindingJAXRSProvider(ExtensionPointRegistry registry) { - this.dataBindingExtensionPoint = registry.getExtensionPoint(DataBindingExtensionPoint.class); - UtilityExtensionPoint utilities = registry.getExtensionPoint(UtilityExtensionPoint.class); - this.mediator = utilities.getUtility(Mediator.class); - } - - protected <A extends Annotation> A getAnnotation(Annotation[] annotations, Class<A> type) { - for (Annotation a : annotations) { - if (a.annotationType() == type) { - return type.cast(a); - } - } - return null; - } - - protected void introspectAnnotations(Annotation[] annotations, DataType targetDataType) { - WebResult result = getAnnotation(annotations, WebResult.class); - if (result != null) { - QName name = new QName(result.targetNamespace(), result.name()); - targetDataType.setLogical(new XMLType(name, null)); - } - - WebParam param = getAnnotation(annotations, WebParam.class); - if (param != null) { - QName name = new QName(param.targetNamespace(), param.name()); - targetDataType.setLogical(new XMLType(name, null)); - } - } - - protected DataType createDataType(Class<?> type, Type genericType) { - DataType dataType = new DataTypeImpl(null, type, type, genericType); - dataBindingExtensionPoint.introspectType(dataType, null); - return dataType; - } - - protected boolean supports(Class<?> type, Type genericType, Annotation[] annotations, MediaType mediaType) { - // Some media types have parameters - mediaType = new MediaType(mediaType.getType(), mediaType.getSubtype()); - return MediaType.APPLICATION_JSON_TYPE.isCompatible(mediaType) || MediaType.APPLICATION_XML_TYPE.isCompatible(mediaType) - || MediaType.TEXT_XML_TYPE.isCompatible(mediaType); - } - - protected Object convert(InputStream content, String contentType, Class<?> type) throws IOException { - if (type == DataSource.class) { - return type.cast(new InputStreamDataSource(content, contentType)); - } else if (type == InputStream.class) { - return type.cast(content); - } else if (type == Reader.class) { - return type.cast(new InputStreamReader(content, "UTF-8")); - } else if (type == String.class) { - try { - StringWriter sw = new StringWriter(); - InputStreamReader reader = new InputStreamReader(content, "UTF-8"); - char[] buf = new char[8192]; - while (true) { - int size = reader.read(buf); - if (size < 0) { - break; - } - sw.write(buf, 0, size); - } - return type.cast(sw.toString()); - } catch (Exception e) { - throw new IllegalArgumentException(e); - } - } else if (type == byte[].class) { - try { - ByteArrayOutputStream bos = new ByteArrayOutputStream(); - byte[] buf = new byte[8192]; - while (true) { - int size = content.read(buf); - if (size < 0) { - break; - } - bos.write(buf, 0, size); - } - return type.cast(bos.toByteArray()); - } catch (Exception e) { - throw new IllegalArgumentException(e); - } - } else { - return content; - } - } - - protected void write(OutputStream out, Object content, Class<?> type) throws IOException { - if (content == null) { - return; - } - InputStream in = null; - if (DataSource.class.isAssignableFrom(type)) { - in = ((DataSource)content).getInputStream(); - } else if (InputStream.class.isAssignableFrom(type)) { - in = (InputStream)content; - } else if (type == String.class) { - in = new ByteArrayInputStream(((String)content).getBytes("UTF-8")); - } else if (type == byte[].class) { - in = new ByteArrayInputStream((byte[])content); - } - if (in == null) { - throw new IllegalArgumentException("Type is not supported: " + type); - } - byte[] buf = new byte[8192]; - while (true) { - int len = in.read(buf); - if (len < 0) { - in.close(); - break; - } - out.write(buf, 0, len); - } - } - - public static final class InputStreamDataSource implements DataSource { - - public static final String DEFAULT_TYPE = "application/octet-stream"; - - private final InputStream in; - private final String ctype; - - public InputStreamDataSource(InputStream in) { - this(in, null); - } - - public InputStreamDataSource(InputStream in, String ctype) { - this.in = in; - this.ctype = (ctype != null) ? ctype : DEFAULT_TYPE; - } - - public String getContentType() { - return ctype; - } - - public String getName() { - return null; - } - - public InputStream getInputStream() throws IOException { - return in; - } - - public OutputStream getOutputStream() throws IOException { - return null; - } - - } -} diff --git a/sca-java-2.x/branches/2.0-Beta2/modules/binding-rest-runtime/src/main/java/org/apache/tuscany/sca/binding/rest/provider/DataBindingJAXRSReader.java b/sca-java-2.x/branches/2.0-Beta2/modules/binding-rest-runtime/src/main/java/org/apache/tuscany/sca/binding/rest/provider/DataBindingJAXRSReader.java deleted file mode 100644 index d38881eb28..0000000000 --- a/sca-java-2.x/branches/2.0-Beta2/modules/binding-rest-runtime/src/main/java/org/apache/tuscany/sca/binding/rest/provider/DataBindingJAXRSReader.java +++ /dev/null @@ -1,88 +0,0 @@ -/* - * 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.rest.provider; - -import java.io.IOException; -import java.io.InputStream; -import java.lang.annotation.Annotation; -import java.lang.reflect.Type; -import java.util.Collections; - -import javax.ws.rs.WebApplicationException; -import javax.ws.rs.core.MediaType; -import javax.ws.rs.core.MultivaluedMap; -import javax.ws.rs.ext.MessageBodyReader; -import javax.ws.rs.ext.Provider; - -import org.apache.tuscany.sca.core.ExtensionPointRegistry; -import org.apache.tuscany.sca.interfacedef.DataType; -import org.apache.tuscany.sca.interfacedef.impl.DataTypeImpl; - -/** - * The generic JAX-RS message body reader based on Tuscany's databindingframework - */ -@Provider -public class DataBindingJAXRSReader<T> extends DataBindingJAXRSProvider implements MessageBodyReader<T> { - - public DataBindingJAXRSReader(ExtensionPointRegistry registry) { - super(registry); - } - - public boolean isReadable(Class<?> type, Type genericType, Annotation[] annotations, MediaType mediaType) { -// DataType dataType = createDataType(type, genericType); - return supports(type, genericType, annotations, mediaType); - } - - public T readFrom(Class<T> type, - Type genericType, - Annotation[] annotations, - MediaType mediaType, - MultivaluedMap<String, String> httpHeaders, - InputStream entityStream) throws IOException, WebApplicationException { - - Object source = entityStream; - DataType targetDataType = createDataType(type, genericType); - - String dataBinding = null; - - mediaType = new MediaType(mediaType.getType(), mediaType.getSubtype()); - // FIXME: [rfeng] This is a hack to handle application/json - if (MediaType.APPLICATION_JSON_TYPE.equals(mediaType)) { - dataBinding = mediaType.toString() + "#" + InputStream.class.getName(); - } else if ("application/x-protobuf".equals(mediaType.toString())) { - dataBinding = mediaType.toString() + "#" + InputStream.class.getName(); - } - else if (MediaType.APPLICATION_XML_TYPE.equals(mediaType) || MediaType.TEXT_XML_TYPE.equals(mediaType)) { - dataBinding = InputStream.class.getName(); - } else { - dataBinding = targetDataType.getDataBinding(); - source = convert(entityStream, mediaType.toString(), type); - return (T) source; - } - DataType sourceDataType = - new DataTypeImpl(dataBinding, InputStream.class, InputStream.class, InputStream.class); - - Object result = mediator.mediate(source, sourceDataType, targetDataType, Collections.<String, Object>emptyMap()); - return (T)result; - } - - - -} diff --git a/sca-java-2.x/branches/2.0-Beta2/modules/binding-rest-runtime/src/main/java/org/apache/tuscany/sca/binding/rest/provider/DataBindingJAXRSWriter.java b/sca-java-2.x/branches/2.0-Beta2/modules/binding-rest-runtime/src/main/java/org/apache/tuscany/sca/binding/rest/provider/DataBindingJAXRSWriter.java deleted file mode 100644 index be2a9555d7..0000000000 --- a/sca-java-2.x/branches/2.0-Beta2/modules/binding-rest-runtime/src/main/java/org/apache/tuscany/sca/binding/rest/provider/DataBindingJAXRSWriter.java +++ /dev/null @@ -1,89 +0,0 @@ -/* - * 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.rest.provider; - -import java.io.IOException; -import java.io.OutputStream; -import java.lang.annotation.Annotation; -import java.lang.reflect.Type; -import java.util.Collections; - -import javax.ws.rs.WebApplicationException; -import javax.ws.rs.core.MediaType; -import javax.ws.rs.core.MultivaluedMap; -import javax.ws.rs.ext.MessageBodyWriter; -import javax.ws.rs.ext.Provider; - -import org.apache.tuscany.sca.core.ExtensionPointRegistry; -import org.apache.tuscany.sca.interfacedef.DataType; -import org.apache.tuscany.sca.interfacedef.impl.DataTypeImpl; - -/** - * The generic JAX-RS message body writer based on Tuscany's databindingframework - */ -@Provider -public class DataBindingJAXRSWriter<T> extends DataBindingJAXRSProvider implements MessageBodyWriter<T> { - - public DataBindingJAXRSWriter(ExtensionPointRegistry registry) { - super(registry); - } - - public long getSize(T t, Class<?> type, Type genericType, Annotation[] annotations, MediaType mediaType) { - return -1; - } - - public boolean isWriteable(Class<?> type, Type genericType, Annotation[] annotations, MediaType mediaType) { - // DataType dataType = createDataType(type, genericType); - return supports(type, genericType, annotations, mediaType); - } - - public void writeTo(T t, - Class<?> type, - Type genericType, - Annotation[] annotations, - MediaType mediaType, - MultivaluedMap<String, Object> httpHeaders, - OutputStream entityStream) throws IOException, WebApplicationException { - DataType dataType = createDataType(type, genericType); - mediaType = new MediaType(mediaType.getType(), mediaType.getSubtype()); - String dataBinding = OutputStream.class.getName(); - // FIXME: [rfeng] This is a hack to handle application/json - if (MediaType.APPLICATION_JSON_TYPE.equals(mediaType)) { - dataBinding = mediaType.toString() + "#" + OutputStream.class.getName(); - } else if (MediaType.APPLICATION_XML_TYPE.equals(mediaType) || MediaType.TEXT_XML_TYPE.equals(mediaType)) { - dataBinding = OutputStream.class.getName(); - } else if ("application/x-protobuf".equals(mediaType.toString())) { - dataBinding = mediaType.toString() + "#" + OutputStream.class.getName(); - } - else { - dataBinding = dataType.getDataBinding(); - write(entityStream, t, type); - return; - } - DataType targetDataType = - new DataTypeImpl(dataBinding, OutputStream.class, OutputStream.class, OutputStream.class); - // dataBindingExtensionPoint.introspectType(targetDataType, null); - - introspectAnnotations(annotations, targetDataType); - - mediator.mediate(t, entityStream, dataType, targetDataType, Collections.<String, Object> emptyMap()); - } - -} diff --git a/sca-java-2.x/branches/2.0-Beta2/modules/binding-rest-runtime/src/main/java/org/apache/tuscany/sca/binding/rest/provider/JAXRSHelper.java b/sca-java-2.x/branches/2.0-Beta2/modules/binding-rest-runtime/src/main/java/org/apache/tuscany/sca/binding/rest/provider/JAXRSHelper.java deleted file mode 100644 index 2bf95f0677..0000000000 --- a/sca-java-2.x/branches/2.0-Beta2/modules/binding-rest-runtime/src/main/java/org/apache/tuscany/sca/binding/rest/provider/JAXRSHelper.java +++ /dev/null @@ -1,80 +0,0 @@ -/* - * 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.rest.provider; - -import java.lang.annotation.Annotation; -import java.lang.reflect.Method; - -import javax.ws.rs.HttpMethod; -import javax.ws.rs.Path; - -/** - * A utility class that deals with JAX-RS annotations - */ -public class JAXRSHelper { - private JAXRSHelper() { - - } - - /** - * A resource class is a Java class that uses JAX-RS annotations to implement a corresponding Web resource. - * Resource classes are POJOs that have at least one method annotated with @Path or a request method designator. - * @param cls - * @return - */ - public static boolean isJAXRSResource(Class<?> cls) { - for (Method method : cls.getMethods()) { - if (method.isAnnotationPresent(Path.class)) { - return true; - } - if (isResourceMethod(method)) { - return true; - } - } - return false; - } - - /** - * Root resource class is a resource class annotated with @Path. Root resource classes provide the roots of the - * resource class tree and provide access to sub-resources - * @param cls - * @return - */ - public static boolean isJAXRSRootResource(Class<?> cls) { - return cls.isAnnotationPresent(Path.class) && isJAXRSResource(cls); - } - - public static boolean isResourceMethod(Method method) { - for (Annotation a : method.getAnnotations()) { - Class<?> annotationType = a.annotationType(); - if (annotationType == HttpMethod.class) { - return true; - } - // Http method related annotations such as @GET, @POST will have itself annotated with - // @HttpMethod - HttpMethod m = a.annotationType().getAnnotation(HttpMethod.class); - if (m != null) { - return true; - } - } - return false; - - } -} diff --git a/sca-java-2.x/branches/2.0-Beta2/modules/binding-rest-runtime/src/main/java/org/apache/tuscany/sca/binding/rest/provider/RESTBindingInvoker.java b/sca-java-2.x/branches/2.0-Beta2/modules/binding-rest-runtime/src/main/java/org/apache/tuscany/sca/binding/rest/provider/RESTBindingInvoker.java deleted file mode 100644 index 2463883b80..0000000000 --- a/sca-java-2.x/branches/2.0-Beta2/modules/binding-rest-runtime/src/main/java/org/apache/tuscany/sca/binding/rest/provider/RESTBindingInvoker.java +++ /dev/null @@ -1,298 +0,0 @@ -/* - * 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.rest.provider; - -import java.lang.annotation.Annotation; -import java.lang.reflect.Method; -import java.net.URI; -import java.util.Calendar; -import java.util.Collections; -import java.util.Date; -import java.util.GregorianCalendar; -import java.util.HashMap; -import java.util.HashSet; -import java.util.Map; -import java.util.Set; - -import javax.ws.rs.Consumes; -import javax.ws.rs.CookieParam; -import javax.ws.rs.DELETE; -import javax.ws.rs.FormParam; -import javax.ws.rs.GET; -import javax.ws.rs.HEAD; -import javax.ws.rs.HeaderParam; -import javax.ws.rs.HttpMethod; -import javax.ws.rs.MatrixParam; -import javax.ws.rs.OPTIONS; -import javax.ws.rs.POST; -import javax.ws.rs.PUT; -import javax.ws.rs.Path; -import javax.ws.rs.PathParam; -import javax.ws.rs.Produces; -import javax.ws.rs.QueryParam; -import javax.ws.rs.core.Application; -import javax.ws.rs.core.Cookie; -import javax.ws.rs.core.MediaType; -import javax.ws.rs.core.UriBuilder; - -import org.apache.tuscany.sca.assembly.WireFormat; -import org.apache.tuscany.sca.binding.rest.RESTBinding; -import org.apache.tuscany.sca.binding.rest.wireformat.json.JSONWireFormat; -import org.apache.tuscany.sca.binding.rest.wireformat.xml.XMLWireFormat; -import org.apache.tuscany.sca.common.http.HTTPCacheContext; -import org.apache.tuscany.sca.common.http.HTTPHeader; -import org.apache.tuscany.sca.core.ExtensionPointRegistry; -import org.apache.tuscany.sca.interfacedef.Operation; -import org.apache.tuscany.sca.interfacedef.java.JavaOperation; -import org.apache.tuscany.sca.invocation.Invoker; -import org.apache.tuscany.sca.invocation.Message; -import org.apache.wink.client.ClientConfig; -import org.apache.wink.client.Resource; -import org.apache.wink.client.RestClient; -import org.apache.wink.client.handlers.BasicAuthSecurityHandler; - -/** - * - */ -public class RESTBindingInvoker implements Invoker { - private ExtensionPointRegistry registry; - private RESTBinding binding; - private Operation operation; - private RestClient restClient; - private String httpMethod; - private Class<?> responseType; - - public RESTBindingInvoker(ExtensionPointRegistry registry, RESTBinding binding, Operation operation) { - super(); - this.registry = registry; - this.binding = binding; - this.operation = operation; - this.restClient = createRestClient(); - } - - private static Map<Class<?>, String> mapping = new HashMap<Class<?>, String>(); - static { - mapping.put(GET.class, HttpMethod.GET); - mapping.put(POST.class, HttpMethod.POST); - mapping.put(PUT.class, HttpMethod.PUT); - mapping.put(DELETE.class, HttpMethod.DELETE); - mapping.put(HEAD.class, HttpMethod.HEAD); - mapping.put(OPTIONS.class, HttpMethod.OPTIONS); - } - - private static <T extends Annotation> T getAnnotation(Annotation[] annotations, Class<T> type) { - for (Annotation a : annotations) { - if (a.annotationType() == type) { - return type.cast(a); - } - } - return null; - } - - private RestClient createRestClient() { - ClientConfig config = new ClientConfig(); - - // configureBasicAuth(config, userName, password); - - config.applications(new Application() { - - @Override - public Set<Class<?>> getClasses() { - return Collections.emptySet(); - } - - @Override - public Set<Object> getSingletons() { - Set<Object> providers = new HashSet<Object>(); - providers.add(new DataBindingJAXRSReader(registry)); - providers.add(new DataBindingJAXRSWriter(registry)); - return providers; - } - - }); - RestClient client = new RestClient(config); - - // Default to GET for RPC - httpMethod = HttpMethod.GET; - - for (Map.Entry<Class<?>, String> e : mapping.entrySet()) { - if (operation.getAttributes().get(e.getKey()) != null) { - httpMethod = e.getValue(); - break; - } - } - - if (operation.getOutputType() != null) { - responseType = operation.getOutputType().getLogical().get(0).getPhysical(); - } else { - responseType = null; - } - return client; - } - - private void configureBasicAuth(ClientConfig config, String userName, String password) { - BasicAuthSecurityHandler basicAuthSecurityHandler = new BasicAuthSecurityHandler(); - basicAuthSecurityHandler.setUserName(userName); - basicAuthSecurityHandler.setPassword(password); - config.handlers(basicAuthSecurityHandler); - } - - public Message invoke(Message msg) { - - Object entity = null; - Object[] args = msg.getBody(); - - URI uri = URI.create(binding.getURI()); - UriBuilder uriBuilder = UriBuilder.fromUri(uri); - - Method method = ((JavaOperation)operation).getJavaMethod(); - - if (method.isAnnotationPresent(Path.class)) { - // Only for resource method - uriBuilder.path(method); - } - - if (!JAXRSHelper.isResourceMethod(method)) { - // This is RPC over GET - uriBuilder.replaceQueryParam("method", method.getName()); - } - - Map<String, Object> pathParams = new HashMap<String, Object>(); - Map<String, Object> matrixParams = new HashMap<String, Object>(); - Map<String, Object> queryParams = new HashMap<String, Object>(); - Map<String, Object> headerParams = new HashMap<String, Object>(); - Map<String, Object> formParams = new HashMap<String, Object>(); - Map<String, Object> cookieParams = new HashMap<String, Object>(); - - for (int i = 0; i < method.getParameterTypes().length; i++) { - boolean isEntity = true; - Annotation[] annotations = method.getParameterAnnotations()[i]; - PathParam pathParam = getAnnotation(annotations, PathParam.class); - if (pathParam != null) { - isEntity = false; - pathParams.put(pathParam.value(), args[i]); - } - MatrixParam matrixParam = getAnnotation(annotations, MatrixParam.class); - if (matrixParam != null) { - isEntity = false; - matrixParams.put(matrixParam.value(), args[i]); - } - QueryParam queryParam = getAnnotation(annotations, QueryParam.class); - if (queryParam != null) { - isEntity = false; - queryParams.put(queryParam.value(), args[i]); - } - HeaderParam headerParam = getAnnotation(annotations, HeaderParam.class); - if (headerParam != null) { - isEntity = false; - headerParams.put(headerParam.value(), args[i]); - } - FormParam formParam = getAnnotation(annotations, FormParam.class); - if (formParam != null) { - isEntity = false; - formParams.put(formParam.value(), args[i]); - } - CookieParam cookieParam = getAnnotation(annotations, CookieParam.class); - if (cookieParam != null) { - isEntity = false; - cookieParams.put(cookieParam.value(), args[i]); - } - if (isEntity) { - entity = args[i]; - } - } - - for (Map.Entry<String, Object> p : queryParams.entrySet()) { - uriBuilder.replaceQueryParam(p.getKey(), p.getValue()); - } - for (Map.Entry<String, Object> p : matrixParams.entrySet()) { - uriBuilder.replaceMatrixParam(p.getKey(), p.getValue()); - } - - uri = uriBuilder.buildFromMap(pathParams); - Resource resource = restClient.resource(uri); - - for (Map.Entry<String, Object> p : headerParams.entrySet()) { - resource.header(p.getKey(), String.valueOf(p.getValue())); - } - - for (Map.Entry<String, Object> p : cookieParams.entrySet()) { - Cookie cookie = new Cookie(p.getKey(), String.valueOf(p.getValue())); - resource.cookie(cookie); - } - - resource.contentType(getContentType()); - resource.accept(getAccepts()); - - //handles declarative headers configured on the composite - for (HTTPHeader header : binding.getHttpHeaders()) { - //treat special headers that need to be calculated - if (header.getName().equalsIgnoreCase("Expires")) { - GregorianCalendar calendar = new GregorianCalendar(); - calendar.setTime(new Date()); - - calendar.add(Calendar.HOUR, Integer.parseInt(header.getValue())); - - resource.header("Expires", HTTPCacheContext.RFC822DateFormat.format(calendar.getTime())); - } else { - //default behaviour to pass the header value to HTTP response - resource.header(header.getName(), header.getValue()); - } - } - - Object result = resource.invoke(httpMethod, responseType, entity); - msg.setBody(result); - return msg; - } - - private String getContentType() { - String contentType = MediaType.APPLICATION_OCTET_STREAM; - Consumes consumes = ((JavaOperation)operation).getJavaMethod().getAnnotation(Consumes.class); - if (consumes != null && consumes.value().length > 0) { - contentType = consumes.value()[0]; - } - WireFormat wf = binding.getRequestWireFormat(); - if (wf != null) { - if (XMLWireFormat.REST_WIREFORMAT_XML_QNAME.equals(wf.getSchemaName())) { - contentType = MediaType.APPLICATION_XML; - } else if (JSONWireFormat.REST_WIREFORMAT_JSON_QNAME.equals(wf.getSchemaName())) { - contentType = MediaType.APPLICATION_JSON; - } - } - return contentType; - } - - private String[] getAccepts() { - String accepts[] = {MediaType.APPLICATION_OCTET_STREAM}; - Produces produces = ((JavaOperation)operation).getJavaMethod().getAnnotation(Produces.class); - if (produces != null) { - accepts = produces.value(); - } - WireFormat wf = binding.getResponseWireFormat(); - if (wf != null) { - if (XMLWireFormat.REST_WIREFORMAT_XML_QNAME.equals(wf.getSchemaName())) { - accepts = new String[] {MediaType.APPLICATION_XML}; - } else if (JSONWireFormat.REST_WIREFORMAT_JSON_QNAME.equals(wf.getSchemaName())) { - accepts = new String[] {MediaType.APPLICATION_JSON}; - } - } - return accepts; - } -} diff --git a/sca-java-2.x/branches/2.0-Beta2/modules/binding-rest-runtime/src/main/java/org/apache/tuscany/sca/binding/rest/provider/RESTBindingListenerServlet.java b/sca-java-2.x/branches/2.0-Beta2/modules/binding-rest-runtime/src/main/java/org/apache/tuscany/sca/binding/rest/provider/RESTBindingListenerServlet.java deleted file mode 100644 index e0a681ed36..0000000000 --- a/sca-java-2.x/branches/2.0-Beta2/modules/binding-rest-runtime/src/main/java/org/apache/tuscany/sca/binding/rest/provider/RESTBindingListenerServlet.java +++ /dev/null @@ -1,583 +0,0 @@ -/* - * 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.rest.provider; - -import java.io.IOException; -import java.io.InputStream; -import java.io.OutputStream; -import java.net.URLDecoder; -import java.text.ParseException; -import java.util.Calendar; -import java.util.Date; -import java.util.GregorianCalendar; - -import javax.servlet.ServletException; -import javax.servlet.http.HttpServlet; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -import org.apache.tuscany.sca.assembly.Binding; -import org.apache.tuscany.sca.binding.rest.RESTBinding; -import org.apache.tuscany.sca.common.http.HTTPCacheContext; -import org.apache.tuscany.sca.common.http.HTTPContentTypeMapper; -import org.apache.tuscany.sca.common.http.HTTPContext; -import org.apache.tuscany.sca.common.http.HTTPHeader; -import org.apache.tuscany.sca.invocation.Invoker; -import org.apache.tuscany.sca.invocation.Message; -import org.apache.tuscany.sca.invocation.MessageFactory; - -/** - * Servlet responsible for dispatching HTTP requests to the - * target component implementation. - * - * @version $Rev$ $Date$ - */ -public class RESTBindingListenerServlet extends HttpServlet { - private static final long serialVersionUID = 2865466417329430610L; - - transient private MessageFactory messageFactory; - - transient private RESTBinding binding; - transient private Invoker bindingInvoker; - - private Invoker invoker; - private Invoker getInvoker; - private Invoker conditionalGetInvoker; - private Invoker putInvoker; - private Invoker conditionalPutInvoker; - private Invoker postInvoker; - private Invoker conditionalPostInvoker; - private Invoker deleteInvoker; - private Invoker conditionalDeleteInvoker; - - /** - * Constructs a new RESTServiceListenerServlet. - */ - public RESTBindingListenerServlet(Binding binding, Invoker bindingInvoker, MessageFactory messageFactory) { - this.binding = (RESTBinding) binding; - this.bindingInvoker = bindingInvoker; - this.messageFactory = messageFactory; - } - - @Override - protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { - if( binding.getOperationSelector() != null || binding.getRequestWireFormat() != null) { - HTTPContext bindingContext = new HTTPContext(); - bindingContext.setHttpRequest(request); - bindingContext.setHttpResponse(response); - - // Dispatch the service interaction to the service invoker - Message requestMessage = messageFactory.createMessage(); - requestMessage.setBindingContext(bindingContext); - - requestMessage.setBody(new Object[] {request.getInputStream()}); - - Message responseMessage = bindingInvoker.invoke(requestMessage); - - // return response to client - if (responseMessage.isFault()) { - // Turn a fault into an exception - Throwable e = (Throwable)responseMessage.getBody(); - response.sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR, e.toString()); - } else { - - for(HTTPHeader header : binding.getHttpHeaders()) { - //treat special headers that need to be calculated - if(header.getName().equalsIgnoreCase("Expires")) { - GregorianCalendar calendar = new GregorianCalendar(); - calendar.setTime(new Date()); - - calendar.add(Calendar.HOUR, Integer.parseInt(header.getValue())); - - response.setHeader("Expires", HTTPCacheContext.RFC822DateFormat.format( calendar.getTime() )); - } else { - //default behaviour to pass the header value to HTTP response - response.setHeader(header.getName(), header.getValue()); - } - - } - - //handle void operations - write(response.getOutputStream(), responseMessage.getBody()); - response.getOutputStream().flush(); - response.getOutputStream().close(); - } - } else { - super.service(request, response); - } - - - } - - @Override - protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { - // Get the request path - String pathInfo = request.getPathInfo(); - if (pathInfo == null || pathInfo.length() == 0) { - // Redirect to a URL ending with / to make relative hrefs work - // relative to the served resource. - response.sendRedirect(request.getRequestURL().append('/').toString()); - return; - } - String path = URLDecoder.decode(pathInfo, "UTF-8"); - - // Invoke the get operation on the service implementation - Message requestMessage = messageFactory.createMessage(); - - String id = path.substring(1); - - Message responseMessage = null; - HTTPCacheContext cacheContext = null; - try { - cacheContext = HTTPCacheContext.createCacheContextFromRequest(request); - } catch (ParseException e) { - - } - - if (path == null || path.length() == 0 || path.equals("/")) { - - } - - // Route message based on availability of cache info and cache methods - if (( cacheContext != null ) && (cacheContext.isEnabled()) && (conditionalGetInvoker != null )) { - if(id != null && id.length() > 0) { - requestMessage.setBody(new Object[] {id, cacheContext}); - } else { - requestMessage.setBody(new Object[] {cacheContext}); - } - - responseMessage = conditionalGetInvoker.invoke(requestMessage); - } else { - if(id != null && id.length() > 0) { - requestMessage.setBody(new Object[] {id}); - } else { - //requestMessage.setBody(new Object[] {id}); - } - - responseMessage = getInvoker.invoke(requestMessage); - } - - if (responseMessage.isFault()) { - Object body = responseMessage.getBody(); - - int index = -1; - if ( -1 < (index = body.getClass().getName().indexOf( "NotModifiedException")) ) { - if ( index > -1 ) { - response.sendError( HttpServletResponse.SC_NOT_MODIFIED, body.toString().substring( index )); - } else { - response.sendError( HttpServletResponse.SC_NOT_MODIFIED ); - } - return; - } else if ( -1 < (index = body.getClass().getName().indexOf( "PreconditionFailedException")) ) { - if ( index > -1 ) { - response.sendError( HttpServletResponse.SC_PRECONDITION_FAILED, body.toString().substring( index )); - } else { - response.sendError( HttpServletResponse.SC_PRECONDITION_FAILED ); - } - return; - } - - throw new ServletException((Throwable)responseMessage.getBody()); - } - - if(response.getContentType() == null || response.getContentType().length() == 0){ - // Calculate content-type based on extension - String contentType = HTTPContentTypeMapper.getContentType(id); - if(contentType != null && contentType.length() >0) { - response.setContentType(contentType); - } - } - - // Write the response from the service implementation to the response - // output stream - InputStream is = (InputStream)responseMessage.getBody(); - OutputStream os = response.getOutputStream(); - byte[] buffer = new byte[2048]; - for (;;) { - int n = is.read(buffer); - if (n <= 0) - break; - os.write(buffer, 0, n); - } - os.flush(); - os.close(); - } - - @Override - protected void doDelete(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { - // Get the request path - String path = URLDecoder.decode(request.getRequestURI().substring(request.getServletPath().length()), "UTF-8"); - if (path.length() ==0) { - // Redirect to a URL ending with / to make relative hrefs work - // relative to the served resource. - response.sendRedirect(request.getRequestURL().append('/').toString()); - return; - } - - // Invoke the get operation on the service implementation - Message requestMessage = messageFactory.createMessage(); - String id = path.substring(1); - - Message responseMessage = null; - HTTPCacheContext cacheContext = null; - try { - cacheContext = HTTPCacheContext.createCacheContextFromRequest(request); - } catch (ParseException e) { - } - - // Route message based on availability of cache info and cache methods - if (( cacheContext != null ) && (cacheContext.isEnabled()) && (conditionalDeleteInvoker != null )) { - requestMessage.setBody(new Object[] {id, cacheContext}); - responseMessage = conditionalDeleteInvoker.invoke(requestMessage); - } else { - requestMessage.setBody(new Object[] {id}); - responseMessage = deleteInvoker.invoke(requestMessage); - } - if (responseMessage.isFault()) { - Object body = responseMessage.getBody(); - - int index = -1; - if ( -1 < (index = body.getClass().getName().indexOf( "NotModifiedException")) ) { - if ( index > -1 ) { - response.sendError( HttpServletResponse.SC_NOT_MODIFIED, body.toString().substring( index )); - } else { - response.sendError( HttpServletResponse.SC_NOT_MODIFIED ); - } - return; - } else if ( -1 < (index = body.getClass().getName().indexOf( "PreconditionFailedException")) ) { - if ( index > -1 ) { - response.sendError( HttpServletResponse.SC_PRECONDITION_FAILED, body.toString().substring( index )); - } else { - response.sendError( HttpServletResponse.SC_PRECONDITION_FAILED ); - } - return; - } - - throw new ServletException((Throwable)responseMessage.getBody()); - } - - // Write the response from the service implementation to the response - // output stream - InputStream is = (InputStream)responseMessage.getBody(); - OutputStream os = response.getOutputStream(); - byte[] buffer = new byte[2048]; - for (;;) { - int n = is.read(buffer); - if (n <= 0) - break; - os.write(buffer, 0, n); - } - os.flush(); - os.close(); - } - - @Override - protected void doPut(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { - // Get the request path - String path = URLDecoder.decode(request.getRequestURI().substring(request.getServletPath().length()), "UTF-8"); - if (path.length() ==0) { - // Redirect to a URL ending with / to make relative hrefs work - // relative to the served resource. - response.sendRedirect(request.getRequestURL().append('/').toString()); - return; - } - - // Invoke the get operation on the service implementation - Message requestMessage = messageFactory.createMessage(); - String id = path.substring(1); - - Message responseMessage = null; - HTTPCacheContext cacheContext = null; - try { - cacheContext = HTTPCacheContext.createCacheContextFromRequest(request); - } catch (ParseException e) { - } - - // Route message based on availability of cache info and cache methods - if (( cacheContext != null ) && (cacheContext.isEnabled()) && (conditionalPutInvoker != null )) { - requestMessage.setBody(new Object[] {id, cacheContext}); - responseMessage = conditionalPutInvoker.invoke(requestMessage); - } else { - requestMessage.setBody(new Object[] {id}); - responseMessage = putInvoker.invoke(requestMessage); - } - if (responseMessage.isFault()) { - Object body = responseMessage.getBody(); - - int index = -1; - if ( -1 < (index = body.getClass().getName().indexOf( "NotModifiedException")) ) { - if ( index > -1 ) { - response.sendError( HttpServletResponse.SC_NOT_MODIFIED, body.toString().substring( index )); - } else { - response.sendError( HttpServletResponse.SC_NOT_MODIFIED ); - } - return; - } else if ( -1 < (index = body.getClass().getName().indexOf( "PreconditionFailedException")) ) { - if ( index > -1 ) { - response.sendError( HttpServletResponse.SC_PRECONDITION_FAILED, body.toString().substring( index )); - } else { - response.sendError( HttpServletResponse.SC_PRECONDITION_FAILED ); - } - return; - } - - throw new ServletException((Throwable)responseMessage.getBody()); - } - - // Write the response from the service implementation to the response - // output stream - InputStream is = (InputStream)responseMessage.getBody(); - OutputStream os = response.getOutputStream(); - byte[] buffer = new byte[2048]; - for (;;) { - int n = is.read(buffer); - if (n <= 0) - break; - os.write(buffer, 0, n); - } - os.flush(); - os.close(); - } - - @Override - protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { - // Get the request path - String path = URLDecoder.decode(request.getRequestURI().substring(request.getServletPath().length()), "UTF-8"); - if (path.length() ==0) { - // Redirect to a URL ending with / to make relative hrefs work - // relative to the served resource. - response.sendRedirect(request.getRequestURL().append('/').toString()); - return; - } - - // Invoke the get operation on the service implementation - Message requestMessage = messageFactory.createMessage(); - // String id = path.substring(1); - - Message responseMessage = null; - HTTPCacheContext cacheContext = null; - try { - cacheContext = HTTPCacheContext.createCacheContextFromRequest(request); - } catch (ParseException e) { - } - - // Route message based on availability of cache info and cache methods - if (( cacheContext != null ) && (cacheContext.isEnabled()) && (conditionalPostInvoker != null )) { - requestMessage.setBody(new Object[] {cacheContext}); - responseMessage = conditionalPostInvoker.invoke(requestMessage); - } else { - requestMessage.setBody(new Object[] {}); - responseMessage = postInvoker.invoke(requestMessage); - } - if (responseMessage.isFault()) { - Object body = responseMessage.getBody(); - - int index = -1; - if ( -1 < (index = body.getClass().getName().indexOf( "NotModifiedException")) ) { - if ( index > -1 ) - response.sendError( HttpServletResponse.SC_NOT_MODIFIED, body.toString().substring( index )); - else - response.sendError( HttpServletResponse.SC_NOT_MODIFIED ); - return; - } else if ( -1 < (index = body.getClass().getName().indexOf( "PreconditionFailedException")) ) { - if ( index > -1 ) - response.sendError( HttpServletResponse.SC_PRECONDITION_FAILED, body.toString().substring( index )); - else - response.sendError( HttpServletResponse.SC_PRECONDITION_FAILED ); - return; - } - - throw new ServletException((Throwable)responseMessage.getBody()); - } - - - // Test if the ETag and LastModified are returned as a cache context. - Object body = responseMessage.getBody(); - if ( body.getClass() == HTTPCacheContext.class ) { - // Transfer to header if so. - HTTPCacheContext cc = (HTTPCacheContext)responseMessage.getBody(); - if (( cc != null ) && ( cc.isEnabled() )) { - String eTag = cc.getETag(); - if ( eTag != null ) { - response.setHeader( "ETag", cc.getETag() ); - } - String lastModified = cc.getLastModified(); - if ( lastModified != null) { - response.setHeader( "LastModified", cc.getLastModified() ); - } - } - } - } - - - public void setInvoker(Invoker invoker) { - this.invoker = invoker; - } - - public Invoker getInvoker() { - return invoker; - } - - - /** - * @return the getInvoker - */ - public Invoker getGetInvoker() { - return getInvoker; - } - - /** - * @param getInvoker the getInvoker to set - */ - public void setGetInvoker(Invoker getInvoker) { - this.getInvoker = getInvoker; - } - - /** - * @return the conditionalGetInvoker - */ - public Invoker getConditionalGetInvoker() { - return conditionalGetInvoker; - } - - /** - * @param conditionalGetInvoker the conditionalGetInvoker to set - */ - public void setConditionalGetInvoker(Invoker conditionalGetInvoker) { - this.conditionalGetInvoker = conditionalGetInvoker; - } - - /** - * @return the putInvoker - */ - public Invoker getPutInvoker() { - return putInvoker; - } - - /** - * @param putInvoker the putInvoker to set - */ - public void setPutInvoker(Invoker putInvoker) { - this.putInvoker = putInvoker; - } - - /** - * @return the conditionalPutInvoker - */ - public Invoker getConditionalPutInvoker() { - return conditionalPutInvoker; - } - - /** - * @param conditionalPutInvoker the conditionalPutInvoker to set - */ - public void setConditionalPutInvoker(Invoker conditionalPutInvoker) { - this.conditionalPutInvoker = conditionalPutInvoker; - } - - /** - * @return the postInvoker - */ - public Invoker getPostInvoker() { - return postInvoker; - } - - /** - * @param postInvoker the postInvoker to set - */ - public void setPostInvoker(Invoker postInvoker) { - this.postInvoker = postInvoker; - } - - /** - * @return the conditionalPostInvoker - */ - public Invoker getConditionalPostInvoker() { - return conditionalPostInvoker; - } - - /** - * @param conditionalPostInvoker the conditionalPostInvoker to set - */ - public void setConditionalPostInvoker(Invoker conditionalPostInvoker) { - this.conditionalPostInvoker = conditionalPostInvoker; - } - - /** - * @return the deleteInvoker - */ - public Invoker getDeleteInvoker() { - return deleteInvoker; - } - - /** - * @param deleteInvoker the deleteInvoker to set - */ - public void setDeleteInvoker(Invoker deleteInvoker) { - this.deleteInvoker = deleteInvoker; - } - - /** - * @return the conditionalDeleteInvoker - */ - public Invoker getConditionalDeleteInvoker() { - return conditionalDeleteInvoker; - } - - /** - * @param conditionalDeleteInvoker the conditionalDeleteInvoker to set - */ - public void setConditionalDeleteInvoker(Invoker conditionalDeleteInvoker) { - this.conditionalDeleteInvoker = conditionalDeleteInvoker; - } - - /** - * - * Utility methods - * - */ - - - - private void write(OutputStream out, Object obj) throws IOException { - if (obj == null) { - return; - } - if (obj instanceof String) { - out.write(((String)obj).getBytes("UTF-8")); - } else if (obj instanceof byte[]) { - out.write((byte[])obj); - } else if (obj instanceof InputStream) { - byte[] buf = new byte[8192]; - InputStream in = (InputStream)obj; - while (true) { - int size = in.read(buf); - if (size < 0) { - break; - } - out.write(buf, 0, size); - } - } else { - out.write(obj.toString().getBytes("UTF-8")); - } - } - - -} diff --git a/sca-java-2.x/branches/2.0-Beta2/modules/binding-rest-runtime/src/main/java/org/apache/tuscany/sca/binding/rest/provider/RESTBindingProviderFactory.java b/sca-java-2.x/branches/2.0-Beta2/modules/binding-rest-runtime/src/main/java/org/apache/tuscany/sca/binding/rest/provider/RESTBindingProviderFactory.java deleted file mode 100644 index 0f5047deef..0000000000 --- a/sca-java-2.x/branches/2.0-Beta2/modules/binding-rest-runtime/src/main/java/org/apache/tuscany/sca/binding/rest/provider/RESTBindingProviderFactory.java +++ /dev/null @@ -1,63 +0,0 @@ -/* - * 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.rest.provider; - -import org.apache.tuscany.sca.binding.rest.RESTBinding; -import org.apache.tuscany.sca.core.ExtensionPointRegistry; -import org.apache.tuscany.sca.core.FactoryExtensionPoint; -import org.apache.tuscany.sca.host.http.ServletHost; -import org.apache.tuscany.sca.host.http.ServletHostHelper; -import org.apache.tuscany.sca.invocation.MessageFactory; -import org.apache.tuscany.sca.provider.BindingProviderFactory; -import org.apache.tuscany.sca.provider.ReferenceBindingProvider; -import org.apache.tuscany.sca.provider.ServiceBindingProvider; -import org.apache.tuscany.sca.runtime.RuntimeEndpoint; -import org.apache.tuscany.sca.runtime.RuntimeEndpointReference; - - -/** - * Factory for REST binding providers. - * - * @version $Rev$ $Date$ - */ -public class RESTBindingProviderFactory implements BindingProviderFactory<RESTBinding> { - private ExtensionPointRegistry extensionPoints; - private MessageFactory messageFactory; - private ServletHost servletHost; - - public RESTBindingProviderFactory(ExtensionPointRegistry extensionPoints) { - this.extensionPoints = extensionPoints; - this.servletHost = ServletHostHelper.getServletHost(extensionPoints); - FactoryExtensionPoint modelFactories = extensionPoints.getExtensionPoint(FactoryExtensionPoint.class); - messageFactory = modelFactories.getFactory(MessageFactory.class); - } - - public ReferenceBindingProvider createReferenceBindingProvider(RuntimeEndpointReference endpointReference) { - return new RESTReferenceBindingProvider(extensionPoints, endpointReference); - } - - public ServiceBindingProvider createServiceBindingProvider(RuntimeEndpoint endpoint) { - return new RESTServiceBindingProvider(endpoint, extensionPoints, messageFactory, servletHost); - } - - public Class<RESTBinding> getModelType() { - return RESTBinding.class; - } -} diff --git a/sca-java-2.x/branches/2.0-Beta2/modules/binding-rest-runtime/src/main/java/org/apache/tuscany/sca/binding/rest/provider/RESTReferenceBindingProvider.java b/sca-java-2.x/branches/2.0-Beta2/modules/binding-rest-runtime/src/main/java/org/apache/tuscany/sca/binding/rest/provider/RESTReferenceBindingProvider.java deleted file mode 100644 index e218f32573..0000000000 --- a/sca-java-2.x/branches/2.0-Beta2/modules/binding-rest-runtime/src/main/java/org/apache/tuscany/sca/binding/rest/provider/RESTReferenceBindingProvider.java +++ /dev/null @@ -1,64 +0,0 @@ -/* - * 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.rest.provider; - -import org.apache.tuscany.sca.binding.rest.RESTBinding; -import org.apache.tuscany.sca.core.ExtensionPointRegistry; -import org.apache.tuscany.sca.interfacedef.InterfaceContract; -import org.apache.tuscany.sca.interfacedef.Operation; -import org.apache.tuscany.sca.invocation.Invoker; -import org.apache.tuscany.sca.provider.EndpointReferenceProvider; -import org.apache.tuscany.sca.runtime.RuntimeEndpointReference; - -/** - * - */ -public class RESTReferenceBindingProvider implements EndpointReferenceProvider { - private ExtensionPointRegistry registry; - private RuntimeEndpointReference endpointReference; - - public RESTReferenceBindingProvider(ExtensionPointRegistry registry, RuntimeEndpointReference endpointReference) { - super(); - this.registry = registry; - this.endpointReference = endpointReference; - } - - public void configure() { - } - - public Invoker createInvoker(Operation operation) { - return new RESTBindingInvoker(registry, (RESTBinding)endpointReference.getBinding(), operation); - } - - public InterfaceContract getBindingInterfaceContract() { - return endpointReference.getComponentReferenceInterfaceContract(); - } - - public boolean supportsOneWayInvocation() { - return false; - } - - public void start() { - } - - public void stop() { - } - -} diff --git a/sca-java-2.x/branches/2.0-Beta2/modules/binding-rest-runtime/src/main/java/org/apache/tuscany/sca/binding/rest/provider/RESTServiceBindingProvider.java b/sca-java-2.x/branches/2.0-Beta2/modules/binding-rest-runtime/src/main/java/org/apache/tuscany/sca/binding/rest/provider/RESTServiceBindingProvider.java deleted file mode 100644 index ec607e9e13..0000000000 --- a/sca-java-2.x/branches/2.0-Beta2/modules/binding-rest-runtime/src/main/java/org/apache/tuscany/sca/binding/rest/provider/RESTServiceBindingProvider.java +++ /dev/null @@ -1,372 +0,0 @@ -/* - * 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.rest.provider; - -import java.net.URI; -import java.util.HashMap; -import java.util.HashSet; -import java.util.Map; -import java.util.Set; - -import javax.servlet.Servlet; -import javax.ws.rs.core.Application; -import javax.ws.rs.core.MediaType; -import javax.xml.namespace.QName; - -import org.apache.tuscany.sca.binding.rest.RESTBinding; -import org.apache.tuscany.sca.binding.rest.wireformat.json.JSONWireFormat; -import org.apache.tuscany.sca.binding.rest.wireformat.xml.XMLWireFormat; -import org.apache.tuscany.sca.core.ExtensionPointRegistry; -import org.apache.tuscany.sca.core.invocation.ExtensibleProxyFactory; -import org.apache.tuscany.sca.core.invocation.ProxyFactory; -import org.apache.tuscany.sca.host.http.ServletHost; -import org.apache.tuscany.sca.interfacedef.InterfaceContract; -import org.apache.tuscany.sca.interfacedef.Operation; -import org.apache.tuscany.sca.interfacedef.java.JavaInterface; -import org.apache.tuscany.sca.interfacedef.java.jaxrs.RootResourceClassGenerator; -import org.apache.tuscany.sca.invocation.Interceptor; -import org.apache.tuscany.sca.invocation.InvocationChain; -import org.apache.tuscany.sca.invocation.Invoker; -import org.apache.tuscany.sca.invocation.MessageFactory; -import org.apache.tuscany.sca.invocation.Phase; -import org.apache.tuscany.sca.provider.EndpointProvider; -import org.apache.tuscany.sca.provider.OperationSelectorProvider; -import org.apache.tuscany.sca.provider.OperationSelectorProviderFactory; -import org.apache.tuscany.sca.provider.ProviderFactoryExtensionPoint; -import org.apache.tuscany.sca.provider.WireFormatProvider; -import org.apache.tuscany.sca.provider.WireFormatProviderFactory; -import org.apache.tuscany.sca.runtime.RuntimeComponent; -import org.apache.tuscany.sca.runtime.RuntimeComponentService; -import org.apache.tuscany.sca.runtime.RuntimeEndpoint; -import org.apache.wink.server.utils.RegistrationUtils; -import org.oasisopen.sca.ServiceRuntimeException; - -/** - * Implementation of an HTTP binding provider. - * - * @version $Rev$ $Date$ - */ -public class RESTServiceBindingProvider implements EndpointProvider { - private static Map<QName, String> wireFormatToMediaTypeMapping = new HashMap<QName, String>(); - - static { - wireFormatToMediaTypeMapping.put(JSONWireFormat.REST_WIREFORMAT_JSON_QNAME, MediaType.APPLICATION_JSON); - wireFormatToMediaTypeMapping.put(XMLWireFormat.REST_WIREFORMAT_XML_QNAME, MediaType.APPLICATION_XML); - } - - private ExtensionPointRegistry extensionPoints; - - private RuntimeEndpoint endpoint; - private RuntimeComponent component; - private RuntimeComponentService service; - private InterfaceContract serviceContract; - private RESTBinding binding; - private MessageFactory messageFactory; - - private OperationSelectorProvider osProvider; - private WireFormatProvider wfProvider; - private WireFormatProvider wfResponseProvider; - - private ServletHost servletHost; - private String servletMapping; - private RESTBindingListenerServlet bindingListenerServlet; - - private SimpleApplication application; - - public RESTServiceBindingProvider(RuntimeEndpoint endpoint, - ExtensionPointRegistry extensionPoints, - MessageFactory messageFactory, - ServletHost servletHost) { - - this.endpoint = endpoint; - this.component = (RuntimeComponent)endpoint.getComponent(); - this.service = (RuntimeComponentService)endpoint.getService(); - this.binding = (RESTBinding)endpoint.getBinding(); - - this.extensionPoints = extensionPoints; - this.messageFactory = messageFactory; - this.servletHost = servletHost; - - // retrieve operation selector and wire format service providers - - ProviderFactoryExtensionPoint providerFactories = - extensionPoints.getExtensionPoint(ProviderFactoryExtensionPoint.class); - - if (binding.getOperationSelector() != null) { - // Configure the interceptors for operation selection - OperationSelectorProviderFactory osProviderFactory = - (OperationSelectorProviderFactory)providerFactories.getProviderFactory(binding.getOperationSelector() - .getClass()); - if (osProviderFactory != null) { - this.osProvider = osProviderFactory.createServiceOperationSelectorProvider(endpoint); - } - } - - if (binding.getRequestWireFormat() != null) { - // Configure the interceptors for wire format - WireFormatProviderFactory wfProviderFactory = - (WireFormatProviderFactory)providerFactories.getProviderFactory(binding.getRequestWireFormat() - .getClass()); - if (wfProviderFactory != null) { - this.wfProvider = wfProviderFactory.createServiceWireFormatProvider(endpoint); - } - } - - if (binding.getResponseWireFormat() != null) { - // Configure the interceptors for wire format - WireFormatProviderFactory wfProviderFactory = - (WireFormatProviderFactory)providerFactories.getProviderFactory(binding.getResponseWireFormat() - .getClass()); - if (wfProviderFactory != null) { - this.wfResponseProvider = wfProviderFactory.createServiceWireFormatProvider(endpoint); - } - } - - //clone the service contract to avoid databinding issues - try { - this.serviceContract = (InterfaceContract)service.getInterfaceContract().clone(); - - // configure data binding - if (wfProvider != null) { - wfProvider.configureWireFormatInterfaceContract(serviceContract); - } - - if (wfResponseProvider != null) { - wfResponseProvider.configureWireFormatInterfaceContract(serviceContract); - } - } catch (CloneNotSupportedException e) { - this.serviceContract = service.getInterfaceContract(); - } - - } - - public void start() { - InvocationChain bindingChain = endpoint.getBindingInvocationChain(); - - application = registerWithJAXRS(); - if (application != null) { - return; - } - - // Get the invokers for the supported operations - Servlet servlet = null; - Invoker bindingInvoker = bindingChain.getHeadInvoker(); - bindingListenerServlet = new RESTBindingListenerServlet(binding, bindingInvoker, messageFactory); - for (InvocationChain invocationChain : endpoint.getInvocationChains()) { - - Operation operation = invocationChain.getTargetOperation(); - Invoker serviceInvoker = invocationChain.getHeadInvoker(); - String operationName = operation.getName(); - - if (binding.getOperationSelector() != null || binding.getRequestWireFormat() != null) { - bindingListenerServlet.setInvoker(serviceInvoker); - servlet = bindingListenerServlet; - } else if (operationName.equals("get")) { - bindingListenerServlet.setGetInvoker(serviceInvoker); - servlet = bindingListenerServlet; - } else if (operationName.equals("conditionalGet")) { - bindingListenerServlet.setConditionalGetInvoker(serviceInvoker); - servlet = bindingListenerServlet; - } else if (operationName.equals("delete")) { - bindingListenerServlet.setDeleteInvoker(serviceInvoker); - servlet = bindingListenerServlet; - } else if (operationName.equals("conditionalDelete")) { - bindingListenerServlet.setConditionalDeleteInvoker(serviceInvoker); - servlet = bindingListenerServlet; - } else if (operationName.equals("put")) { - bindingListenerServlet.setPutInvoker(serviceInvoker); - servlet = bindingListenerServlet; - } else if (operationName.equals("conditionalPut")) { - bindingListenerServlet.setConditionalPutInvoker(serviceInvoker); - servlet = bindingListenerServlet; - } else if (operationName.equals("post")) { - bindingListenerServlet.setPostInvoker(serviceInvoker); - servlet = bindingListenerServlet; - } else if (operationName.equals("conditionalPost")) { - bindingListenerServlet.setConditionalPostInvoker(serviceInvoker); - servlet = bindingListenerServlet; - } else if (operationName.equals("service")) { - servlet = new RESTServiceListenerServlet(binding, serviceInvoker, messageFactory); - break; - } - } - if (servlet == null) { - throw new IllegalStateException("No get or service method found on the service"); - } - - servletMapping = registerServlet(servlet); - } - - public String registerServlet(Servlet servlet) { - // Create our HTTP service listener Servlet and register it with the - // Servlet host - String servletMapping = binding.getURI(); - if (!servletMapping.endsWith("/")) { - servletMapping += "/"; - } - if (!servletMapping.endsWith("*")) { - servletMapping += "*"; - } - - String mappedURI = servletHost.addServletMapping(servletMapping, servlet); - String deployedURI = mappedURI; - if (deployedURI.endsWith("*")) { - deployedURI = deployedURI.substring(0, deployedURI.length() - 1); - } - binding.setURI(deployedURI); - return mappedURI; - } - - public void stop() { - if (application != null) { - application.destroy(); - } - // Unregister the Servlet from the Servlet host - servletHost.removeServletMapping(servletMapping); - } - - public InterfaceContract getBindingInterfaceContract() { - return serviceContract; - } - - public boolean supportsOneWayInvocation() { - return false; - } - - /** - * Register a Tuscany REST Servlet to handle JAX-RS Resources on a binding endpoint - * @return - */ - private SimpleApplication registerWithJAXRS() { - try { - SimpleApplication application = null; - - JavaInterface javaInterface = (JavaInterface)endpoint.getComponentServiceInterfaceContract().getInterface(); - Class<?> interfaze = javaInterface.getJavaClass(); - - // The @Path annotation can be from the binding uri - boolean isJAXRS = JAXRSHelper.isJAXRSResource(interfaze); - if (isJAXRS) { - application = new SimpleApplication(interfaze); - - TuscanyRESTServlet restServlet = new TuscanyRESTServlet(extensionPoints, binding, application.resourceClass); - - servletMapping = registerServlet(restServlet); - - RegistrationUtils.registerApplication(application, restServlet.getServletContext()); - return application; - } else { - return null; - } - } catch (Exception e) { - throw new ServiceRuntimeException(e); - } - } - - private class SimpleApplication extends Application { - private Class<?> resourceClass; - - public SimpleApplication(Class<?> resourceClass) { - super(); - if (resourceClass.isInterface()) { - this.resourceClass = generateResourceClass(resourceClass); - } else { - this.resourceClass = resourceClass; - } - } - - @Override - public Set<Class<?>> getClasses() { - Set<Class<?>> classes = new HashSet<Class<?>>(); - classes.add(resourceClass); - return classes; - } - - private Class<?> generateResourceClass(Class<?> interfaze) { - try { - QName requestWireFormat = null; - if (binding.getRequestWireFormat() != null) { - requestWireFormat = binding.getRequestWireFormat().getSchemaName(); - } - QName responeWireFormat = null; - if (binding.getResponseWireFormat() != null) { - responeWireFormat = binding.getRequestWireFormat().getSchemaName(); - } - String requestMediaType = wireFormatToMediaTypeMapping.get(requestWireFormat); - String responseMediaType = wireFormatToMediaTypeMapping.get(responeWireFormat); - - String uri = endpoint.getBinding().getURI(); - String path = URI.create(uri).getPath(); - - // FIXME: [rfeng] We need to have a better way to deal with URI template for bindings - if (path.startsWith(servletHost.getContextPath())) { - path = path.substring(servletHost.getContextPath().length()); - } - Class<?> cls = - RootResourceClassGenerator.generateRootResourceClass(interfaze, - path, - requestMediaType, - responseMediaType); - ProxyFactory proxyFactory = ExtensibleProxyFactory.getInstance(extensionPoints); - Object proxy = proxyFactory.createProxy(interfaze, endpoint); - RootResourceClassGenerator.injectProxy(cls, proxy); - return cls; - } catch (Exception e) { - throw new ServiceRuntimeException(e); - } - } - - public void destroy() { - resourceClass = null; - } - } - - /** - * Add specific rest interceptor to invocation chain - */ - public void configure() { - - InvocationChain bindingChain = endpoint.getBindingInvocationChain(); - - if (wfProvider != null) { - Interceptor interceptor = wfProvider.createInterceptor(); - if (interceptor != null) { - bindingChain.addInterceptor(Phase.SERVICE_BINDING_WIREFORMAT, interceptor); - } - } - - if (wfResponseProvider != null) { - Interceptor interceptor = wfResponseProvider.createInterceptor(); - if (interceptor != null) { - bindingChain.addInterceptor(Phase.SERVICE_BINDING_WIREFORMAT, interceptor); - } - - } - - if (osProvider != null) { - Interceptor interceptor = osProvider.createInterceptor(); - if (interceptor != null) { - bindingChain.addInterceptor(Phase.SERVICE_BINDING_OPERATION_SELECTOR, interceptor); - } - } - - } - -} diff --git a/sca-java-2.x/branches/2.0-Beta2/modules/binding-rest-runtime/src/main/java/org/apache/tuscany/sca/binding/rest/provider/RESTServiceListenerServlet.java b/sca-java-2.x/branches/2.0-Beta2/modules/binding-rest-runtime/src/main/java/org/apache/tuscany/sca/binding/rest/provider/RESTServiceListenerServlet.java deleted file mode 100644 index 1dac8a2c9a..0000000000 --- a/sca-java-2.x/branches/2.0-Beta2/modules/binding-rest-runtime/src/main/java/org/apache/tuscany/sca/binding/rest/provider/RESTServiceListenerServlet.java +++ /dev/null @@ -1,118 +0,0 @@ -/* - * 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.rest.provider; - -import java.io.IOException; -import java.util.Calendar; -import java.util.Date; -import java.util.GregorianCalendar; - -import javax.servlet.Servlet; -import javax.servlet.ServletConfig; -import javax.servlet.ServletException; -import javax.servlet.http.HttpServlet; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -import org.apache.tuscany.sca.assembly.Binding; -import org.apache.tuscany.sca.binding.rest.RESTBinding; -import org.apache.tuscany.sca.common.http.HTTPCacheContext; -import org.apache.tuscany.sca.common.http.HTTPContext; -import org.apache.tuscany.sca.common.http.HTTPHeader; -import org.apache.tuscany.sca.invocation.Invoker; -import org.apache.tuscany.sca.invocation.Message; -import org.apache.tuscany.sca.invocation.MessageFactory; - -/** - * Servlet responsible for dispatching HTTP service requests to the - * target component implementation. - * - * @version $Rev$ $Date$ - */ -public class RESTServiceListenerServlet extends HttpServlet implements Servlet { - - private static final long serialVersionUID = -5543706958107836637L; - - transient private RESTBinding binding; - transient private ServletConfig config; - transient private MessageFactory messageFactory; - transient private Invoker serviceInvoker; - - /** - * Constructs a new HTTPServiceListenerServlet. - */ - public RESTServiceListenerServlet(Binding binding, Invoker serviceInvoker, MessageFactory messageFactory) { - this.binding = (RESTBinding) binding; - this.serviceInvoker = serviceInvoker; - this.messageFactory = messageFactory; - } - - public ServletConfig getServletConfig() { - return config; - } - - public String getServletInfo() { - return ""; - } - - public void init(ServletConfig config) throws ServletException { - this.config = config; - } - - public void destroy() { - - } - - @Override - public void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { - HTTPContext bindingContext = new HTTPContext(); - bindingContext.setHttpRequest(request); - bindingContext.setHttpResponse(response); - - // Dispatch the service interaction to the service invoker - Message requestMessage = messageFactory.createMessage(); - requestMessage.setBindingContext(bindingContext); - requestMessage.setBody(new Object[]{request, response}); - Message responseMessage = serviceInvoker.invoke(requestMessage); - if (responseMessage.isFault()) { - // Turn a fault into an exception - //throw new ServletException((Throwable)responseMessage.getBody()); - Throwable e = (Throwable)responseMessage.getBody(); - ((HttpServletResponse)response).sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR, e.toString()); - } else { - //handles declarative headers configured on the composite - for(HTTPHeader header : binding.getHttpHeaders()) { - //treat special headers that need to be calculated - if(header.getName().equalsIgnoreCase("Expires")) { - GregorianCalendar calendar = new GregorianCalendar(); - calendar.setTime(new Date()); - - calendar.add(Calendar.HOUR, Integer.parseInt(header.getValue())); - - response.setHeader("Expires", HTTPCacheContext.RFC822DateFormat.format( calendar.getTime() )); - } else { - //default behaviour to pass the header value to HTTP response - response.setHeader(header.getName(), header.getValue()); - } - - } - } - } -} diff --git a/sca-java-2.x/branches/2.0-Beta2/modules/binding-rest-runtime/src/main/java/org/apache/tuscany/sca/binding/rest/provider/TuscanyRESTServlet.java b/sca-java-2.x/branches/2.0-Beta2/modules/binding-rest-runtime/src/main/java/org/apache/tuscany/sca/binding/rest/provider/TuscanyRESTServlet.java deleted file mode 100644 index 061d615d3e..0000000000 --- a/sca-java-2.x/branches/2.0-Beta2/modules/binding-rest-runtime/src/main/java/org/apache/tuscany/sca/binding/rest/provider/TuscanyRESTServlet.java +++ /dev/null @@ -1,220 +0,0 @@ -/* - * 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.rest.provider; - -import java.io.IOException; -import java.util.Calendar; -import java.util.Date; -import java.util.Enumeration; -import java.util.GregorianCalendar; -import java.util.Properties; -import java.util.logging.Level; -import java.util.logging.Logger; - -import javax.servlet.FilterConfig; -import javax.servlet.ServletContext; -import javax.servlet.ServletException; -import javax.servlet.http.HttpServletResponse; - -import org.apache.tuscany.sca.assembly.Binding; -import org.apache.tuscany.sca.binding.rest.RESTBinding; -import org.apache.tuscany.sca.common.http.HTTPCacheContext; -import org.apache.tuscany.sca.common.http.HTTPHeader; -import org.apache.tuscany.sca.core.ExtensionPointRegistry; -import org.apache.tuscany.sca.extensibility.ClassLoaderContext; -import org.apache.wink.common.internal.registry.ProvidersRegistry; -import org.apache.wink.server.handlers.HandlersChain; -import org.apache.wink.server.handlers.MessageContext; -import org.apache.wink.server.handlers.ResponseHandler; -import org.apache.wink.server.internal.DeploymentConfiguration; -import org.apache.wink.server.internal.servlet.RestServlet; - -/** - * - */ -public class TuscanyRESTServlet extends RestServlet { - private static final Logger logger = Logger.getLogger(TuscanyRESTServlet.class.getName()); - - private static final long serialVersionUID = 89997233133964915L; - private ExtensionPointRegistry registry; - private RESTBinding binding; - private Class<?> resourceClass; - private boolean fixed; - - public TuscanyRESTServlet(ExtensionPointRegistry registry, Binding binding, Class<?> resourceClass) { - super(); - this.registry = registry; - this.binding = (RESTBinding) binding; - this.resourceClass = resourceClass; - } - - public void init() throws ServletException { - ClassLoader cl = - ClassLoaderContext.setContextClassLoader(Thread.currentThread().getContextClassLoader(), - registry.getServiceDiscovery(), - "/META-INF/server/wink-providers", - "javax.ws.rs.ext.RuntimeDelegate"); - try { - super.init(); - } finally { - if (cl != null) { - // return previous classLoader - Thread.currentThread().setContextClassLoader(cl); - } - } - } - - @SuppressWarnings({"unchecked", "rawtypes"}) - @Override - public DeploymentConfiguration getDeploymentConfiguration() throws ClassNotFoundException, InstantiationException, - IllegalAccessException, IOException { - - - // setup proper classLoader to work on OSGi environment - ClassLoader cl = - ClassLoaderContext.setContextClassLoader(Thread.currentThread().getContextClassLoader(), - registry.getServiceDiscovery(), - "javax.ws.rs.ext.RuntimeDelegate", - "/META-INF/wink-alternate-shortcuts.properties", - "/META-INF/server/wink-providers"); - - DeploymentConfiguration config = null; - try { - config = super.getDeploymentConfiguration(); - } finally { - if (cl != null) { - // return previous classLoader - Thread.currentThread().setContextClassLoader(cl); - } - } - - // [rfeng] FIXME: This is a hack to fool Apache wink to not remove the servlet path - config.setFilterConfig(new FilterConfig() { - - public ServletContext getServletContext() { - return getServletContext(); - } - - public Enumeration getInitParameterNames() { - return getInitParameterNames(); - } - - public String getInitParameter(String arg0) { - return getInitParameter(arg0); - } - - public String getFilterName() { - return getServletName(); - } - }); - - ProvidersRegistry providers = config.getProvidersRegistry(); - providers.addProvider(new DataBindingJAXRSReader(registry), 0.001, true); - providers.addProvider(new DataBindingJAXRSWriter(registry), 0.001, true); - - config.getResponseUserHandlers().add(new TuscanyResponseHandler()); - - return config; - } - - /* - private synchronized void fixMediaTypes(DeploymentConfiguration config) { - if (fixed) { - return; - } - // FIXME: A hacky workaround for https://issues.apache.org/jira/browse/TUSCANY-3572 - ResourceRecord record = config.getResourceRegistry().getRecord(resourceClass); - - for (MethodMetadata methodMetadata : record.getMetadata().getResourceMethods()) { - String method = methodMetadata.getHttpMethod(); - if (HttpMethod.GET.equals(method) || HttpMethod.HEAD.equals(method) || HttpMethod.DELETE.equals(method)) { - methodMetadata.addConsumes(MediaType.APPLICATION_OCTET_STREAM_TYPE); - methodMetadata.addConsumes(MediaType.WILDCARD_TYPE); - } - if (HttpMethod.HEAD.equals(method) || HttpMethod.DELETE.equals(method)) { - methodMetadata.addProduces(MediaType.APPLICATION_OCTET_STREAM_TYPE); - methodMetadata.addConsumes(MediaType.WILDCARD_TYPE); - } - } - for (MethodMetadata methodMetadata : record.getMetadata().getSubResourceMethods()) { - String method = methodMetadata.getHttpMethod(); - if (HttpMethod.GET.equals(method) || HttpMethod.HEAD.equals(method) || HttpMethod.DELETE.equals(method)) { - methodMetadata.addConsumes(MediaType.APPLICATION_OCTET_STREAM_TYPE); - methodMetadata.addConsumes(MediaType.WILDCARD_TYPE); - } - if (HttpMethod.HEAD.equals(method) || HttpMethod.DELETE.equals(method)) { - methodMetadata.addProduces(MediaType.APPLICATION_OCTET_STREAM_TYPE); - methodMetadata.addConsumes(MediaType.WILDCARD_TYPE); - } - } - fixed = true; - } - - @Override - public RequestProcessor getRequestProcessor() { - RequestProcessor processor = super.getRequestProcessor(); - // The 1st call returns null - if (processor != null) { - fixMediaTypes(processor.getConfiguration()); - } - return processor; - } - */ - - /** - * TuscanyResponseHandler - * - * Required to support declartive HTTP Headers - */ - class TuscanyResponseHandler implements ResponseHandler { - public void handleResponse(MessageContext context, HandlersChain chain) throws Throwable { - - // assert response is not committed - final HttpServletResponse httpResponse = context.getAttribute(HttpServletResponse.class); - if (httpResponse.isCommitted()) { - logger.log(Level.FINE, "The response is already committed. Nothing to do."); - return; - } - - //process declarative headers - for(HTTPHeader header : binding.getHttpHeaders()) { - //treat special headers that need to be calculated - if(header.getName().equalsIgnoreCase("Expires")) { - GregorianCalendar calendar = new GregorianCalendar(); - calendar.setTime(new Date()); - - calendar.add(Calendar.HOUR, Integer.parseInt(header.getValue())); - - httpResponse.setHeader("Expires", HTTPCacheContext.RFC822DateFormat.format( calendar.getTime() )); - } else { - //default behaviour to pass the header value to HTTP response - httpResponse.setHeader(header.getName(), header.getValue()); - } - } - - chain.doChain(context); - } - - public void init(Properties props) { - - } - } - -} diff --git a/sca-java-2.x/branches/2.0-Beta2/modules/binding-rest-runtime/src/main/java/org/apache/tuscany/sca/binding/rest/wireformat/json/provider/JSONWireFormatInterceptor.java b/sca-java-2.x/branches/2.0-Beta2/modules/binding-rest-runtime/src/main/java/org/apache/tuscany/sca/binding/rest/wireformat/json/provider/JSONWireFormatInterceptor.java deleted file mode 100644 index e5ce32328c..0000000000 --- a/sca-java-2.x/branches/2.0-Beta2/modules/binding-rest-runtime/src/main/java/org/apache/tuscany/sca/binding/rest/wireformat/json/provider/JSONWireFormatInterceptor.java +++ /dev/null @@ -1,159 +0,0 @@ -/* - * 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.rest.wireformat.json.provider; - -import java.io.IOException; -import java.io.InputStream; -import java.io.InputStreamReader; -import java.io.StringWriter; - -import org.apache.tuscany.sca.binding.rest.RESTBinding; -import org.apache.tuscany.sca.binding.rest.wireformat.json.JSONWireFormat; -import org.apache.tuscany.sca.common.http.HTTPContext; -import org.apache.tuscany.sca.core.ExtensionPointRegistry; -import org.apache.tuscany.sca.interfacedef.Operation; -import org.apache.tuscany.sca.invocation.Interceptor; -import org.apache.tuscany.sca.invocation.Invoker; -import org.apache.tuscany.sca.invocation.Message; -import org.apache.tuscany.sca.runtime.RuntimeEndpoint; -import org.json.JSONObject; - -/** - * JSON wire format Interceptor. - * - * @version $Rev$ $Date$ -*/ -public class JSONWireFormatInterceptor implements Interceptor { - private Invoker next; - private RESTBinding binding; - - public JSONWireFormatInterceptor(ExtensionPointRegistry extensionPoints, RuntimeEndpoint endpoint) { - this.binding = (RESTBinding) endpoint.getBinding(); - } - - public Invoker getNext() { - return next; - } - - public void setNext(Invoker next) { - this.next = next; - } - - public Message invoke(Message msg) { - HTTPContext bindingContext = (HTTPContext) msg.getBindingContext(); - if (bindingContext == null) { - return getNext().invoke(msg); - } - - - if (binding.getRequestWireFormat() instanceof JSONWireFormat) { - if( isPayloadSupported(bindingContext.getHttpRequest().getMethod()) && msg.getBody() != null) { - msg = invokeRequest(bindingContext, msg); - } - } - - msg = getNext().invoke(msg); - - //if it's oneway return back - Operation operation = msg.getOperation(); - if (operation != null && operation.isNonBlocking()) { - return msg; - } - - if (binding.getResponseWireFormat() instanceof JSONWireFormat) { - msg = invokeResponse(bindingContext, msg); - } - - return msg; - } - - /** - * Handle any wire format specific transformations required for request data - * @param bindingContext the binding context (e.g. HTTP Request, Response objects) - * @param msg the invocation message - * @return processed request message - */ - private Message invokeRequest(HTTPContext bindingContext, Message msg) { - - // Decode using the charset in the request if it exists otherwise - // use UTF-8 as this is what all browser implementations use. - String charset = bindingContext.getHttpRequest().getCharacterEncoding(); - if (charset == null) { - charset = "UTF-8"; - } - - try { - Object[] args = msg.getBody(); - InputStream in = (InputStream) args[0]; - String data = read(in, charset); - JSONObject jsonPayload = new JSONObject(data); - msg.setBody(new Object[]{jsonPayload}); - } catch(Exception e) { - throw new RuntimeException("Unable to parse json paylod: " + msg.getBody().toString()); - } - - return msg; - } - - /** - * Handle any wire format specific transformation required for the response data - * @param bindingContext the binding context (e.g. HTTP Request, Response objects) - * @param msg the response message - * @return processed response message - */ - private Message invokeResponse(HTTPContext bindingContext, Message msg) { - return msg; - } - - - /** - * Check if HTTP Operation should support payload - * @param operation - * @return - */ - private static boolean isPayloadSupported(String operation) { - boolean isGet = "get".equalsIgnoreCase(operation); - boolean isDelete = "delete".equalsIgnoreCase(operation); - - return isGet == false && isDelete == false; - } - - /** - * Read JSON payload from HTTP Request Body - * @param in - * @param charset - * @return - * @throws IOException - */ - private static String read(InputStream in, String charset) throws IOException { - StringWriter sw = new StringWriter(); - InputStreamReader reader = new InputStreamReader(in, "UTF-8"); - char[] buf = new char[8192]; - while (true) { - int size = reader.read(buf); - if (size < 0) { - break; - } - sw.write(buf, 0, size); - } - return sw.toString(); - } - -} diff --git a/sca-java-2.x/branches/2.0-Beta2/modules/binding-rest-runtime/src/main/java/org/apache/tuscany/sca/binding/rest/wireformat/json/provider/JSONWireFormatProviderFactory.java b/sca-java-2.x/branches/2.0-Beta2/modules/binding-rest-runtime/src/main/java/org/apache/tuscany/sca/binding/rest/wireformat/json/provider/JSONWireFormatProviderFactory.java deleted file mode 100644 index 6b1bb6cca7..0000000000 --- a/sca-java-2.x/branches/2.0-Beta2/modules/binding-rest-runtime/src/main/java/org/apache/tuscany/sca/binding/rest/wireformat/json/provider/JSONWireFormatProviderFactory.java +++ /dev/null @@ -1,52 +0,0 @@ -/* - * 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.rest.wireformat.json.provider; - -import org.apache.tuscany.sca.binding.rest.wireformat.json.JSONWireFormat; -import org.apache.tuscany.sca.core.ExtensionPointRegistry; -import org.apache.tuscany.sca.provider.WireFormatProvider; -import org.apache.tuscany.sca.provider.WireFormatProviderFactory; -import org.apache.tuscany.sca.runtime.RuntimeEndpoint; -import org.apache.tuscany.sca.runtime.RuntimeEndpointReference; - -/** - * JSON wire format Provider Factory. - * - * @version $Rev$ $Date$ -*/ -public class JSONWireFormatProviderFactory implements WireFormatProviderFactory<JSONWireFormat>{ - private ExtensionPointRegistry extensionPoints; - - public JSONWireFormatProviderFactory(ExtensionPointRegistry extensionPoints) { - this.extensionPoints = extensionPoints; - } - public WireFormatProvider createReferenceWireFormatProvider(RuntimeEndpointReference endpointReference) { - return new JSONWireFormatReferenceProvider(extensionPoints, endpointReference); - } - - public WireFormatProvider createServiceWireFormatProvider(RuntimeEndpoint endpoint) { - return new JSONWireFormatServiceProvider(extensionPoints, endpoint); - } - - public Class<JSONWireFormat> getModelType() { - return JSONWireFormat.class; - } - -} diff --git a/sca-java-2.x/branches/2.0-Beta2/modules/binding-rest-runtime/src/main/java/org/apache/tuscany/sca/binding/rest/wireformat/json/provider/JSONWireFormatReferenceProvider.java b/sca-java-2.x/branches/2.0-Beta2/modules/binding-rest-runtime/src/main/java/org/apache/tuscany/sca/binding/rest/wireformat/json/provider/JSONWireFormatReferenceProvider.java deleted file mode 100644 index 830b02a3e8..0000000000 --- a/sca-java-2.x/branches/2.0-Beta2/modules/binding-rest-runtime/src/main/java/org/apache/tuscany/sca/binding/rest/wireformat/json/provider/JSONWireFormatReferenceProvider.java +++ /dev/null @@ -1,54 +0,0 @@ -/* - * 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.rest.wireformat.json.provider; - -import org.apache.tuscany.sca.core.ExtensionPointRegistry; -import org.apache.tuscany.sca.interfacedef.InterfaceContract; -import org.apache.tuscany.sca.invocation.Interceptor; -import org.apache.tuscany.sca.invocation.Phase; -import org.apache.tuscany.sca.provider.WireFormatProvider; -import org.apache.tuscany.sca.runtime.RuntimeEndpointReference; - -/** - * JSON wire format Reference Provider. - * - * @version $Rev$ $Date$ -*/ -public class JSONWireFormatReferenceProvider implements WireFormatProvider { - private ExtensionPointRegistry extensionPoints; - private RuntimeEndpointReference endpointReference; - - public JSONWireFormatReferenceProvider(ExtensionPointRegistry extensionPoints,RuntimeEndpointReference endpointReference ) { - this.extensionPoints = extensionPoints; - this.endpointReference = endpointReference; - } - public InterfaceContract configureWireFormatInterfaceContract(InterfaceContract interfaceContract) { - return null; - } - - public Interceptor createInterceptor() { - return null; - } - - public String getPhase() { - return Phase.REFERENCE_BINDING_WIREFORMAT; - } - -} diff --git a/sca-java-2.x/branches/2.0-Beta2/modules/binding-rest-runtime/src/main/java/org/apache/tuscany/sca/binding/rest/wireformat/json/provider/JSONWireFormatServiceProvider.java b/sca-java-2.x/branches/2.0-Beta2/modules/binding-rest-runtime/src/main/java/org/apache/tuscany/sca/binding/rest/wireformat/json/provider/JSONWireFormatServiceProvider.java deleted file mode 100644 index 754fdfc73e..0000000000 --- a/sca-java-2.x/branches/2.0-Beta2/modules/binding-rest-runtime/src/main/java/org/apache/tuscany/sca/binding/rest/wireformat/json/provider/JSONWireFormatServiceProvider.java +++ /dev/null @@ -1,138 +0,0 @@ -/* - * 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.rest.wireformat.json.provider; - -import java.util.List; - -import org.apache.tuscany.sca.assembly.Binding; -import org.apache.tuscany.sca.binding.rest.provider.JAXRSHelper; -import org.apache.tuscany.sca.binding.rest.wireformat.json.JSONWireFormat; -import org.apache.tuscany.sca.core.ExtensionPointRegistry; -import org.apache.tuscany.sca.databinding.javabeans.SimpleJavaDataBinding; -import org.apache.tuscany.sca.databinding.json.JSONDataBinding; -import org.apache.tuscany.sca.interfacedef.DataType; -import org.apache.tuscany.sca.interfacedef.Interface; -import org.apache.tuscany.sca.interfacedef.InterfaceContract; -import org.apache.tuscany.sca.interfacedef.Operation; -import org.apache.tuscany.sca.interfacedef.java.JavaInterface; -import org.apache.tuscany.sca.invocation.Interceptor; -import org.apache.tuscany.sca.invocation.Phase; -import org.apache.tuscany.sca.provider.WireFormatProvider; -import org.apache.tuscany.sca.runtime.RuntimeEndpoint; - -/** - * JSON wire format service provider. - * - * @version $Rev$ $Date$ -*/ -public class JSONWireFormatServiceProvider implements WireFormatProvider { - private ExtensionPointRegistry extensionPoints; - private RuntimeEndpoint endpoint; - - private InterfaceContract serviceContract; - private Binding binding; - private boolean jaxrs; - - public JSONWireFormatServiceProvider(ExtensionPointRegistry extensionPoints, RuntimeEndpoint endpoint) { - this.extensionPoints = extensionPoints; - this.endpoint = endpoint; - this.binding = endpoint.getBinding(); - this.jaxrs = isJAXRSResource(); - } - - private boolean isJAXRSResource() { - Interface interfaze = endpoint.getComponentServiceInterfaceContract().getInterface(); - if (interfaze instanceof JavaInterface) { - if (JAXRSHelper.isJAXRSResource(((JavaInterface)interfaze).getJavaClass())) { - return true; - } - } - return false; - } - - public InterfaceContract configureWireFormatInterfaceContract(InterfaceContract interfaceContract) { - serviceContract = interfaceContract; - - if (!jaxrs) { - boolean configureInput = binding.getRequestWireFormat() != null; - boolean configureOutput = binding.getRequestWireFormat() != null || binding.getResponseWireFormat() != null; - - //set JSON databinding - setDataBinding(serviceContract.getInterface(), configureInput, configureOutput); - } - - return serviceContract; - } - - public Interceptor createInterceptor() { - if (jaxrs) { - return null; - } - if( (binding.getRequestWireFormat() != null && binding.getRequestWireFormat() instanceof JSONWireFormat) || - (binding.getResponseWireFormat() != null && binding.getResponseWireFormat() instanceof JSONWireFormat) ){ - return new JSONWireFormatInterceptor(extensionPoints, endpoint); - } - return null; - } - - public String getPhase() { - return Phase.SERVICE_BINDING_WIREFORMAT; - } - - - /** - * Utility method to reset data binding for the interface contract. - * We need to handle special case where : - * - global wire format for binding - * - wire format configured only for response - * @param interfaze - */ - @SuppressWarnings({"deprecation", "unchecked"}) - private void setDataBinding(Interface interfaze, boolean configureInput, boolean configureOutput) { - List<Operation> operations = interfaze.getOperations(); - for (Operation operation : operations) { - // handle input types - if (configureInput) { - operation.setDataBinding(JSONDataBinding.NAME); - DataType<List<DataType>> inputType = operation.getInputType(); - if (inputType != null) { - List<DataType> logical = inputType.getLogical(); - for (DataType inArg : logical) { - if (!SimpleJavaDataBinding.NAME.equals(inArg.getDataBinding())) { - inArg.setDataBinding(JSONDataBinding.NAME); - } - } - } - } - - // handle output types - if (configureOutput) { - List<DataType> outputTypes = operation.getOutputType().getLogical(); - for ( DataType outputType : outputTypes) { - if (outputType != null) { - if (!SimpleJavaDataBinding.NAME.equals(outputType.getDataBinding())) { - outputType.setDataBinding(JSONDataBinding.NAME); - } - } - } - } - } - } -} diff --git a/sca-java-2.x/branches/2.0-Beta2/modules/binding-rest-runtime/src/main/java/org/apache/tuscany/sca/binding/rest/wireformat/xml/provider/XMLWireFormatInterceptor.java b/sca-java-2.x/branches/2.0-Beta2/modules/binding-rest-runtime/src/main/java/org/apache/tuscany/sca/binding/rest/wireformat/xml/provider/XMLWireFormatInterceptor.java deleted file mode 100644 index d5055b6701..0000000000 --- a/sca-java-2.x/branches/2.0-Beta2/modules/binding-rest-runtime/src/main/java/org/apache/tuscany/sca/binding/rest/wireformat/xml/provider/XMLWireFormatInterceptor.java +++ /dev/null @@ -1,143 +0,0 @@ -/* - * 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.rest.wireformat.xml.provider; - -import java.io.InputStream; - -import javax.xml.stream.XMLInputFactory; -import javax.xml.stream.XMLStreamReader; - -import org.apache.tuscany.sca.binding.rest.RESTBinding; -import org.apache.tuscany.sca.binding.rest.wireformat.json.JSONWireFormat; -import org.apache.tuscany.sca.binding.rest.wireformat.xml.XMLWireFormat; -import org.apache.tuscany.sca.common.http.HTTPContext; -import org.apache.tuscany.sca.core.ExtensionPointRegistry; -import org.apache.tuscany.sca.core.FactoryExtensionPoint; -import org.apache.tuscany.sca.interfacedef.Operation; -import org.apache.tuscany.sca.invocation.Interceptor; -import org.apache.tuscany.sca.invocation.Invoker; -import org.apache.tuscany.sca.invocation.Message; -import org.apache.tuscany.sca.runtime.RuntimeEndpoint; - -/** - * JSON wire format Interceptor. - * - * @version $Rev$ $Date$ -*/ -public class XMLWireFormatInterceptor implements Interceptor { - private XMLInputFactory inputFactory; - - private Invoker next; - private RESTBinding binding; - - public XMLWireFormatInterceptor(ExtensionPointRegistry extensionPoints, RuntimeEndpoint endpoint) { - FactoryExtensionPoint factories = extensionPoints.getExtensionPoint(FactoryExtensionPoint.class); - inputFactory = factories.getFactory(XMLInputFactory.class); - - this.binding = (RESTBinding) endpoint.getBinding(); - } - - public Invoker getNext() { - return next; - } - - public void setNext(Invoker next) { - this.next = next; - } - - public Message invoke(Message msg) { - HTTPContext bindingContext = (HTTPContext) msg.getBindingContext(); - if (bindingContext == null) { - return getNext().invoke(msg); - } - - - if (binding.getRequestWireFormat() instanceof XMLWireFormat) { - if( isPayloadSupported(bindingContext.getHttpRequest().getMethod()) && msg.getBody() != null) { - msg = invokeRequest(bindingContext, msg); - } - } - - msg = getNext().invoke(msg); - - //if it's oneway return back - Operation operation = msg.getOperation(); - if (operation != null && operation.isNonBlocking()) { - return msg; - } - - if (binding.getResponseWireFormat() instanceof XMLWireFormat) { - msg = invokeResponse(bindingContext, msg); - } - - return msg; - } - - /** - * Handle any wire format specific transformations required for request data - * @param bindingContext the binding context (e.g. HTTP Request, Response objects) - * @param msg the invocation message - * @return processed request message - */ - private Message invokeRequest(HTTPContext bindingContext, Message msg) { - // Decode using the charset in the request if it exists otherwise - // use UTF-8 as this is what all browser implementations use. - String charset = bindingContext.getHttpRequest().getCharacterEncoding(); - if (charset == null) { - charset = "UTF-8"; - } - - try { - if(msg.getBody() != null) { - Object[] args = msg.getBody(); - InputStream data = (InputStream) args[0]; - XMLStreamReader xmlPayload = inputFactory.createXMLStreamReader(data, charset); - msg.setBody(new Object[]{xmlPayload}); - } - } catch(Exception e) { - throw new RuntimeException("Unable to process xml paylod: " + msg.getBody().toString()); - } - - return msg; - } - - - /** - * Handle any wire format specific transformation required for the response data - * @param bindingContext the binding context (e.g. HTTP Request, Response objects) - * @param msg the response message - * @return processed response message - */ - private Message invokeResponse(HTTPContext bindingContext, Message msg) { - return msg; - } - - /** - * Check if HTTP Operation should support payload - * @param operation - * @return - */ - private static boolean isPayloadSupported(String operation) { - boolean isGet = "get".equalsIgnoreCase(operation); - boolean isDelete = "delete".equalsIgnoreCase(operation); - - return isGet == false && isDelete == false; - } -} diff --git a/sca-java-2.x/branches/2.0-Beta2/modules/binding-rest-runtime/src/main/java/org/apache/tuscany/sca/binding/rest/wireformat/xml/provider/XMLWireFormatProviderFactory.java b/sca-java-2.x/branches/2.0-Beta2/modules/binding-rest-runtime/src/main/java/org/apache/tuscany/sca/binding/rest/wireformat/xml/provider/XMLWireFormatProviderFactory.java deleted file mode 100644 index 33900b3de9..0000000000 --- a/sca-java-2.x/branches/2.0-Beta2/modules/binding-rest-runtime/src/main/java/org/apache/tuscany/sca/binding/rest/wireformat/xml/provider/XMLWireFormatProviderFactory.java +++ /dev/null @@ -1,52 +0,0 @@ -/* - * 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.rest.wireformat.xml.provider; - -import org.apache.tuscany.sca.binding.rest.wireformat.xml.XMLWireFormat; -import org.apache.tuscany.sca.core.ExtensionPointRegistry; -import org.apache.tuscany.sca.provider.WireFormatProvider; -import org.apache.tuscany.sca.provider.WireFormatProviderFactory; -import org.apache.tuscany.sca.runtime.RuntimeEndpoint; -import org.apache.tuscany.sca.runtime.RuntimeEndpointReference; - -/** - * XML wire format Provider Factory. - * - * @version $Rev$ $Date$ -*/ -public class XMLWireFormatProviderFactory implements WireFormatProviderFactory<XMLWireFormat>{ - private ExtensionPointRegistry extensionPoints; - - public XMLWireFormatProviderFactory(ExtensionPointRegistry extensionPoints) { - this.extensionPoints = extensionPoints; - } - public WireFormatProvider createReferenceWireFormatProvider(RuntimeEndpointReference endpointReference) { - return new XMLWireFormatReferenceProvider(extensionPoints, endpointReference); - } - - public WireFormatProvider createServiceWireFormatProvider(RuntimeEndpoint endpoint) { - return new XMLWireFormatServiceProvider(extensionPoints, endpoint); - } - - public Class<XMLWireFormat> getModelType() { - return XMLWireFormat.class; - } - -} diff --git a/sca-java-2.x/branches/2.0-Beta2/modules/binding-rest-runtime/src/main/java/org/apache/tuscany/sca/binding/rest/wireformat/xml/provider/XMLWireFormatReferenceProvider.java b/sca-java-2.x/branches/2.0-Beta2/modules/binding-rest-runtime/src/main/java/org/apache/tuscany/sca/binding/rest/wireformat/xml/provider/XMLWireFormatReferenceProvider.java deleted file mode 100644 index c9e0ac4578..0000000000 --- a/sca-java-2.x/branches/2.0-Beta2/modules/binding-rest-runtime/src/main/java/org/apache/tuscany/sca/binding/rest/wireformat/xml/provider/XMLWireFormatReferenceProvider.java +++ /dev/null @@ -1,54 +0,0 @@ -/* - * 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.rest.wireformat.xml.provider; - -import org.apache.tuscany.sca.core.ExtensionPointRegistry; -import org.apache.tuscany.sca.interfacedef.InterfaceContract; -import org.apache.tuscany.sca.invocation.Interceptor; -import org.apache.tuscany.sca.invocation.Phase; -import org.apache.tuscany.sca.provider.WireFormatProvider; -import org.apache.tuscany.sca.runtime.RuntimeEndpointReference; - -/** - * XML wire format Reference Provider. - * - * @version $Rev$ $Date$ -*/ -public class XMLWireFormatReferenceProvider implements WireFormatProvider { - private ExtensionPointRegistry extensionPoints; - private RuntimeEndpointReference endpointReference; - - public XMLWireFormatReferenceProvider(ExtensionPointRegistry extensionPoints,RuntimeEndpointReference endpointReference ) { - this.extensionPoints = extensionPoints; - this.endpointReference = endpointReference; - } - public InterfaceContract configureWireFormatInterfaceContract(InterfaceContract interfaceContract) { - return null; - } - - public Interceptor createInterceptor() { - return null; - } - - public String getPhase() { - return Phase.REFERENCE_BINDING_WIREFORMAT; - } - -} diff --git a/sca-java-2.x/branches/2.0-Beta2/modules/binding-rest-runtime/src/main/java/org/apache/tuscany/sca/binding/rest/wireformat/xml/provider/XMLWireFormatServiceProvider.java b/sca-java-2.x/branches/2.0-Beta2/modules/binding-rest-runtime/src/main/java/org/apache/tuscany/sca/binding/rest/wireformat/xml/provider/XMLWireFormatServiceProvider.java deleted file mode 100644 index 01b439961c..0000000000 --- a/sca-java-2.x/branches/2.0-Beta2/modules/binding-rest-runtime/src/main/java/org/apache/tuscany/sca/binding/rest/wireformat/xml/provider/XMLWireFormatServiceProvider.java +++ /dev/null @@ -1,139 +0,0 @@ -/* - * 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.rest.wireformat.xml.provider; - -import java.util.List; - -import javax.xml.stream.XMLStreamReader; - -import org.apache.tuscany.sca.assembly.Binding; -import org.apache.tuscany.sca.binding.rest.provider.JAXRSHelper; -import org.apache.tuscany.sca.binding.rest.wireformat.xml.XMLWireFormat; -import org.apache.tuscany.sca.core.ExtensionPointRegistry; -import org.apache.tuscany.sca.databinding.javabeans.SimpleJavaDataBinding; -import org.apache.tuscany.sca.databinding.xml.XMLStringDataBinding; -import org.apache.tuscany.sca.interfacedef.DataType; -import org.apache.tuscany.sca.interfacedef.Interface; -import org.apache.tuscany.sca.interfacedef.InterfaceContract; -import org.apache.tuscany.sca.interfacedef.Operation; -import org.apache.tuscany.sca.interfacedef.java.JavaInterface; -import org.apache.tuscany.sca.invocation.Interceptor; -import org.apache.tuscany.sca.invocation.Phase; -import org.apache.tuscany.sca.provider.WireFormatProvider; -import org.apache.tuscany.sca.runtime.RuntimeEndpoint; - -/** - * XML wire format service provider. - * - * @version $Rev$ $Date$ -*/ -public class XMLWireFormatServiceProvider implements WireFormatProvider { - private static final String DATABABINDING = XMLStreamReader.class.getName(); - - private ExtensionPointRegistry extensionPoints; - private RuntimeEndpoint endpoint; - - private InterfaceContract serviceContract; - private Binding binding; - - private boolean jaxrs; - - public XMLWireFormatServiceProvider(ExtensionPointRegistry extensionPoints, RuntimeEndpoint endpoint) { - this.extensionPoints = extensionPoints; - this.endpoint = endpoint; - this.binding = endpoint.getBinding(); - this.jaxrs = isJAXRSResource(); - } - - private boolean isJAXRSResource() { - Interface interfaze = endpoint.getComponentServiceInterfaceContract().getInterface(); - if (interfaze instanceof JavaInterface) { - if (JAXRSHelper.isJAXRSResource(((JavaInterface)interfaze).getJavaClass())) { - return true; - } - } - return false; - } - - public InterfaceContract configureWireFormatInterfaceContract(InterfaceContract interfaceContract) { - serviceContract = interfaceContract; - - if (!jaxrs) { - boolean configureInput = binding.getRequestWireFormat() != null; - boolean configureOutput = binding.getRequestWireFormat() != null || binding.getResponseWireFormat() != null; - - //set XML databinding - setDataBinding(serviceContract.getInterface(), configureInput, configureOutput); - } - - return serviceContract; - } - - public Interceptor createInterceptor() { - if (jaxrs) { - return null; - } - - if( (binding.getRequestWireFormat() != null && binding.getRequestWireFormat() instanceof XMLWireFormat) || - (binding.getResponseWireFormat() != null && binding.getResponseWireFormat() instanceof XMLWireFormat) ){ - return new XMLWireFormatInterceptor(extensionPoints, endpoint); - } - return null; - } - - public String getPhase() { - return Phase.SERVICE_BINDING_WIREFORMAT; - } - - - /** - * Utility method to reset data binding for the interface contract - * @param interfaze - */ - @SuppressWarnings({"deprecation", "unchecked"}) - private void setDataBinding(Interface interfaze, boolean configureInput, boolean configureOutput) { - List<Operation> operations = interfaze.getOperations(); - for (Operation operation : operations) { - // handle input types - if (configureInput) { - operation.setDataBinding(DATABABINDING); - DataType<List<DataType>> inputType = operation.getInputType(); - if (inputType != null) { - List<DataType> logical = inputType.getLogical(); - for (DataType inArg : logical) { - if (!SimpleJavaDataBinding.NAME.equals(inArg.getDataBinding())) { - inArg.setDataBinding(DATABABINDING); - } - } - } - } - - // handle output types - if (configureOutput) { - List<DataType> outputTypes = operation.getOutputType().getLogical(); - for ( DataType outputType : outputTypes ) { - if (outputType != null) { - outputType.setDataBinding(XMLStringDataBinding.NAME); - } - } - } - } - } -} diff --git a/sca-java-2.x/branches/2.0-Beta2/modules/binding-rest-runtime/src/main/resources/META-INF/services/org.apache.tuscany.sca.provider.BindingProviderFactory b/sca-java-2.x/branches/2.0-Beta2/modules/binding-rest-runtime/src/main/resources/META-INF/services/org.apache.tuscany.sca.provider.BindingProviderFactory deleted file mode 100644 index 4a682c1cb6..0000000000 --- a/sca-java-2.x/branches/2.0-Beta2/modules/binding-rest-runtime/src/main/resources/META-INF/services/org.apache.tuscany.sca.provider.BindingProviderFactory +++ /dev/null @@ -1,19 +0,0 @@ -# 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.
-
-# Implementation class for the binding extension
-org.apache.tuscany.sca.binding.rest.provider.RESTBindingProviderFactory;model=org.apache.tuscany.sca.binding.rest.RESTBinding
diff --git a/sca-java-2.x/branches/2.0-Beta2/modules/binding-rest-runtime/src/main/resources/META-INF/services/org.apache.tuscany.sca.provider.OperationSelectorProviderFactory b/sca-java-2.x/branches/2.0-Beta2/modules/binding-rest-runtime/src/main/resources/META-INF/services/org.apache.tuscany.sca.provider.OperationSelectorProviderFactory deleted file mode 100644 index be5e3ab636..0000000000 --- a/sca-java-2.x/branches/2.0-Beta2/modules/binding-rest-runtime/src/main/resources/META-INF/services/org.apache.tuscany.sca.provider.OperationSelectorProviderFactory +++ /dev/null @@ -1,20 +0,0 @@ -# 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. - -# Implementation class for the wire format provider factory -org.apache.tuscany.sca.binding.rest.operationselector.jaxrs.provider.JAXRSOperationSelectorProviderFactory;model=org.apache.tuscany.sca.binding.rest.operationselector.jaxrs.JAXRSOperationSelector -org.apache.tuscany.sca.binding.rest.operationselector.rpc.provider.RPCOperationSelectorProviderFactory;model=org.apache.tuscany.sca.binding.rest.operationselector.rpc.RPCOperationSelector
\ No newline at end of file diff --git a/sca-java-2.x/branches/2.0-Beta2/modules/binding-rest-runtime/src/main/resources/META-INF/services/org.apache.tuscany.sca.provider.WireFormatProviderFactory b/sca-java-2.x/branches/2.0-Beta2/modules/binding-rest-runtime/src/main/resources/META-INF/services/org.apache.tuscany.sca.provider.WireFormatProviderFactory deleted file mode 100644 index 80062349ff..0000000000 --- a/sca-java-2.x/branches/2.0-Beta2/modules/binding-rest-runtime/src/main/resources/META-INF/services/org.apache.tuscany.sca.provider.WireFormatProviderFactory +++ /dev/null @@ -1,20 +0,0 @@ -# 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. - -# Implementation class for the wire format provider factory -org.apache.tuscany.sca.binding.rest.wireformat.json.provider.JSONWireFormatProviderFactory;model=org.apache.tuscany.sca.binding.rest.wireformat.json.JSONWireFormat -org.apache.tuscany.sca.binding.rest.wireformat.xml.provider.XMLWireFormatProviderFactory;model=org.apache.tuscany.sca.binding.rest.wireformat.xml.XMLWireFormat
\ No newline at end of file diff --git a/sca-java-2.x/branches/2.0-Beta2/modules/binding-rest-runtime/src/test/java/org/apache/tuscany/sca/binding/rest/NotModifiedException.java b/sca-java-2.x/branches/2.0-Beta2/modules/binding-rest-runtime/src/test/java/org/apache/tuscany/sca/binding/rest/NotModifiedException.java deleted file mode 100644 index 49e7d67a76..0000000000 --- a/sca-java-2.x/branches/2.0-Beta2/modules/binding-rest-runtime/src/test/java/org/apache/tuscany/sca/binding/rest/NotModifiedException.java +++ /dev/null @@ -1,44 +0,0 @@ -/* - * 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.rest; - -/** - * Indicates that a resource was not modified. - * - * @version $Rev$ $Date$ - */ -public class NotModifiedException extends Exception { - private static final long serialVersionUID = -5046027674128627383L; - - public NotModifiedException() { - } - - public NotModifiedException(String message) { - super(message); - } - - public NotModifiedException(Throwable cause) { - super(cause); - } - - public NotModifiedException(String message, Throwable cause) { - super(message, cause); - } -} diff --git a/sca-java-2.x/branches/2.0-Beta2/modules/binding-rest-runtime/src/test/java/org/apache/tuscany/sca/binding/rest/PreconditionFailedException.java b/sca-java-2.x/branches/2.0-Beta2/modules/binding-rest-runtime/src/test/java/org/apache/tuscany/sca/binding/rest/PreconditionFailedException.java deleted file mode 100644 index 1463e1a5db..0000000000 --- a/sca-java-2.x/branches/2.0-Beta2/modules/binding-rest-runtime/src/test/java/org/apache/tuscany/sca/binding/rest/PreconditionFailedException.java +++ /dev/null @@ -1,44 +0,0 @@ -/* - * 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.rest; - -/** - * Indicates that a resource was not modified. - * - * @version $Rev$ $Date$ - */ -public class PreconditionFailedException extends Exception { - private static final long serialVersionUID = -5046027674128627383L; - - public PreconditionFailedException() { - } - - public PreconditionFailedException(String message) { - super(message); - } - - public PreconditionFailedException(Throwable cause) { - super(cause); - } - - public PreconditionFailedException(String message, Throwable cause) { - super(message, cause); - } -} diff --git a/sca-java-2.x/branches/2.0-Beta2/modules/binding-rest-runtime/src/test/java/org/apache/tuscany/sca/binding/rest/RESTBindingCacheTestCase.java b/sca-java-2.x/branches/2.0-Beta2/modules/binding-rest-runtime/src/test/java/org/apache/tuscany/sca/binding/rest/RESTBindingCacheTestCase.java deleted file mode 100644 index 4db7fd64dc..0000000000 --- a/sca-java-2.x/branches/2.0-Beta2/modules/binding-rest-runtime/src/test/java/org/apache/tuscany/sca/binding/rest/RESTBindingCacheTestCase.java +++ /dev/null @@ -1,903 +0,0 @@ -/* - * 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.rest; - -import java.io.BufferedReader; -import java.io.IOException; -import java.io.InputStreamReader; -import java.io.OutputStream; -import java.net.Socket; -import java.text.MessageFormat; -import java.text.SimpleDateFormat; -import java.util.Date; - -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; - -/** - * HTTP binding unit tests. - * - * @version $Rev$ $Date$ - */ -public class RESTBindingCacheTestCase { - // RFC 822 date time - protected static final SimpleDateFormat dateFormat = new SimpleDateFormat( - "EEE, dd MMM yyyy HH:mm:ss Z"); - - // Request with no predicates in header. - private static final String REQUEST1 = "{0} /httpbinding/{1} HTTP/1.0\n" - + "Host: localhost\n" + "Content-Type: text/xml\n" - + "Connection: close\n" + "Content-Length: {2}" + "\n\n{3}"; - - // Request with predicates in header - private static final String REQUEST2 = "{0} /httpbinding/{1} HTTP/1.0\n" - + "Host: localhost\n" + "Content-Type: text/xml\n" + "{2}: {3}\n" // predicate (If-Match, If-None-Match, If-Modified-Since, If-NotModified-Since): value (date or ETag) - + "Connection: close\n" + "Content-Length: {4}" + "\n\n{5}"; - - private static final int HTTP_PORT = 8085; - - private static Node node; - - @BeforeClass - public static void setUp() throws Exception { - try { - String contribution = ContributionLocationHelper.getContributionLocation(RESTBindingCacheTestCase.class); - node = NodeFactory.newInstance().createNode("testCache.composite", new Contribution("test", contribution)); - node.start(); - } catch (Exception e) { - e.printStackTrace(); - } - } - - @AfterClass - public static void tearDown() throws Exception { - node.stop(); - } - - /** - * Test invoking a POJO get method implementation using the HTTP binding. - * @throws Exception - */ - @Test - public void testGet() throws Exception { - Socket client = new Socket("127.0.0.1", HTTP_PORT); - OutputStream os = client.getOutputStream(); - int index = 0; - String content = ""; - String request = MessageFormat.format(REQUEST1, "GET", index, content - .getBytes().length, content); - os.write(request.getBytes()); - os.flush(); - - String document = read(client); - Assert.assertTrue(document.indexOf("<body><p>item=" + index) != -1); - } - - /** - * Test invoking a conditional method implementation using the HTTP binding. - * @throws Exception - */ - @Test - public void testConditionalGetIfModifiedNegative() throws Exception { - Socket client = new Socket("127.0.0.1", HTTP_PORT); - OutputStream os = client.getOutputStream(); - int index = 0; - String content = ""; - String request = MessageFormat.format(REQUEST2, "GET", index, - "If-Modified-Since", dateFormat.format(new Date(0)), - content.getBytes().length, content); - os.write(request.getBytes()); - os.flush(); - - String document = read(client); - // Should return item - Assert.assertTrue(document.indexOf("<body><p>item=" + index) != -1); - // Should return code 304 Not Modified. - // assertTrue(document.indexOf("HTTP/1.1 304") != -1); - } - - /** - * Test invoking a conditional method implementation using the HTTP binding. - * @throws Exception - */ - @Test - public void testConditionalGetIfModifiedPositive() throws Exception { - Socket client = new Socket("127.0.0.1", HTTP_PORT); - OutputStream os = client.getOutputStream(); - int index = 1; - String content = ""; - String request = MessageFormat.format(REQUEST2, "GET", index, - "If-Modified-Since", dateFormat.format(new Date(0)), content - .getBytes().length, content); - os.write(request.getBytes()); - os.flush(); - - String document = read(client); - // Should return item - // assertTrue(document.indexOf("<body><p>item=" + index) != -1); - // Should return code 304 Not Modified. - Assert.assertTrue(document.indexOf("HTTP/1.1 304") != -1); - } - - /** - * Test invoking a conditional method implementation using the HTTP binding. - * @throws Exception - */ - @Test - public void testConditionalGetIfUnmodifiedNegative() throws Exception { - Socket client = new Socket("127.0.0.1", HTTP_PORT); - OutputStream os = client.getOutputStream(); - int index = 1; - String content = ""; - String request = MessageFormat.format(REQUEST2, "GET", index, - "If-Unmodified-Since", dateFormat.format(new Date()), content - .getBytes().length, content); - os.write(request.getBytes()); - os.flush(); - - String document = read(client); - // Should return item - Assert.assertTrue(document.indexOf("<body><p>item=" + index) != -1); - // Should return code 304 Not Modified. - // assertTrue(document.indexOf("HTTP/1.1 304") != -1); - } - - /** - * Test invoking a conditional method implementation using the HTTP binding. - * @throws Exception - */ - @Test - public void testConditionalGetIfUnmodifiedPositive() throws Exception { - Socket client = new Socket("127.0.0.1", HTTP_PORT); - OutputStream os = client.getOutputStream(); - int index = 0; - String content = ""; - String request = MessageFormat.format(REQUEST2, "GET", index, - "If-Unmodified-Since", dateFormat.format(new Date(0)), content - .getBytes().length, content); - os.write(request.getBytes()); - os.flush(); - - String document = read(client); - // Should return item - // assertTrue(document.indexOf("<body><p>item=" + index) != -1); - // Should return code 412 PreconditionFailed. - Assert.assertTrue(document.indexOf("HTTP/1.1 412") != -1); - } - - /** - * Test invoking a conditional method implementation using the HTTP binding. - * @throws Exception - */ - @Test - public void testConditionalGetIfMatchNegative() throws Exception { - Socket client = new Socket("127.0.0.1", HTTP_PORT); - OutputStream os = client.getOutputStream(); - int index = 1; - String content = ""; - String request = MessageFormat.format(REQUEST2, "GET", index, - "If-Match", "eTagXXX", content.getBytes().length, content); - os.write(request.getBytes()); - os.flush(); - - String document = read(client); - // Should return item - // assertTrue(document.indexOf("<body><p>item=" + index) != -1); - // Should return code 412 precondition failed. - Assert.assertTrue(document.indexOf("HTTP/1.1 412") != -1); - } - - /** - * Test invoking a conditional method implementation using the HTTP binding. - * @throws Exception - */ - @Test - public void testConditionalGetIfMatchPositive() throws Exception { - Socket client = new Socket("127.0.0.1", HTTP_PORT); - OutputStream os = client.getOutputStream(); - int index = 0; - String content = ""; - String request = MessageFormat.format(REQUEST2, "GET", index, - "If-Match", "eTagXXX", content.getBytes().length, content); - os.write(request.getBytes()); - os.flush(); - - String document = read(client); - // Should return item - Assert.assertTrue(document.indexOf("<body><p>item=" + index) != -1); - // Should return code 412 PreconditionFailed. - // assertTrue(document.indexOf("HTTP/1.1 412") != -1); - } - - /** - * Test invoking a conditional method implementation using the HTTP binding. - * @throws Exception - */ - @Test - public void testConditionalGetIfNoneMatchNegative() throws Exception { - Socket client = new Socket("127.0.0.1", HTTP_PORT); - OutputStream os = client.getOutputStream(); - int index = 1; - String content = ""; - String request = MessageFormat.format(REQUEST2, "GET", index, - "If-None-Match", "eTagXXX", content.getBytes().length, content); - os.write(request.getBytes()); - os.flush(); - - String document = read(client); - // Should return item - Assert.assertTrue(document.indexOf("<body><p>item=" + index) != -1); - // Should return code 412 precondition failed. - // assertTrue(document.indexOf("HTTP/1.1 412") != -1); - } - - /** - * Test invoking a conditional method implementation using the HTTP binding. - * @throws Exception - */ - @Test - public void testConditionalGetIfNoneMatchPositive() throws Exception { - Socket client = new Socket("127.0.0.1", HTTP_PORT); - OutputStream os = client.getOutputStream(); - int index = 0; - String content = ""; - String request = MessageFormat.format(REQUEST2, "GET", index, - "If-None-Match", "eTagXXX", content.getBytes().length, content); - os.write(request.getBytes()); - os.flush(); - - String document = read(client); - // Should return item - // assertTrue(document.indexOf("<body><p>item=" + index) != -1); - // Should return code 412 PreconditionFailed. - Assert.assertTrue(document.indexOf("HTTP/1.1 412") != -1); - } - - /** - * Test invoking a POJO get method implementation using the HTTP binding. - * @throws Exception - */ - @Test - public void testDelete() throws Exception { - Socket client = new Socket("127.0.0.1", HTTP_PORT); - OutputStream os = client.getOutputStream(); - int index = 0; - String content = ""; - String request = MessageFormat.format(REQUEST1, "DELETE", index, - content.getBytes().length, content); - os.write(request.getBytes()); - os.flush(); - - String document = read(client); - Assert.assertTrue(document.indexOf("deleted item=" + index) != -1); - } - - /** - * Test invoking a conditional method implementation using the HTTP binding. - * @throws Exception - */ - @Test - public void testConditionalDeleteIfModifiedNegative() throws Exception { - Socket client = new Socket("127.0.0.1", HTTP_PORT); - OutputStream os = client.getOutputStream(); - int index = 0; - String content = ""; - String request = MessageFormat.format(REQUEST2, "DELETE", index, - "If-Modified-Since", dateFormat.format(new Date(0)), content - .getBytes().length, content); - os.write(request.getBytes()); - os.flush(); - - String document = read(client); - // Should return item - Assert.assertTrue(document.indexOf("deleted item=" + index) != -1); - // Should return code 304 Not Modified. - // assertTrue(document.indexOf("HTTP/1.1 304") != -1); - } - - /** - * Test invoking a conditional method implementation using the HTTP binding. - * @throws Exception - */ - @Test - public void testConditionalDeleteIfModifiedPositive() throws Exception { - Socket client = new Socket("127.0.0.1", HTTP_PORT); - OutputStream os = client.getOutputStream(); - int index = 1; - String content = ""; - String request = MessageFormat.format(REQUEST2, "DELETE", index, - "If-Modified-Since", dateFormat.format(new Date(0)), content - .getBytes().length, content); - os.write(request.getBytes()); - os.flush(); - - String document = read(client); - // Should return item - // assertTrue(document.indexOf("deleted item=" + index) != -1); - // Should return code 304 Not Modified. - Assert.assertTrue(document.indexOf("HTTP/1.1 304") != -1); - } - - /** - * Test invoking a conditional method implementation using the HTTP binding. - * @throws Exception - */ - @Test - public void testConditionalDeleteIfUnmodifiedNegative() throws Exception { - Socket client = new Socket("127.0.0.1", HTTP_PORT); - OutputStream os = client.getOutputStream(); - int index = 1; - String content = ""; - String request = MessageFormat.format(REQUEST2, "DELETE", index, - "If-Unmodified-Since", dateFormat.format(new Date()), content - .getBytes().length, content); - os.write(request.getBytes()); - os.flush(); - - String document = read(client); - // Should return item - Assert.assertTrue(document.indexOf("deleted item=" + index) != -1); - // Should return code 304 Not Modified. - // assertTrue(document.indexOf("HTTP/1.1 304") != -1); - } - - /** - * Test invoking a conditional method implementation using the HTTP binding. - * @throws Exception - */ - @Test - public void testConditionalDeleteIfUnmodifiedPositive() throws Exception { - Socket client = new Socket("127.0.0.1", HTTP_PORT); - OutputStream os = client.getOutputStream(); - int index = 0; - String content = ""; - String request = MessageFormat.format(REQUEST2, "DELETE", index, - "If-Unmodified-Since", dateFormat.format(new Date(0)), content - .getBytes().length, content); - os.write(request.getBytes()); - os.flush(); - - String document = read(client); - // Should return item - // assertTrue(document.indexOf("deleted item=" + index) != -1); - // Should return code 412 PreconditionFailed. - Assert.assertTrue(document.indexOf("HTTP/1.1 412") != -1); - } - - /** - * Test invoking a conditional method implementation using the HTTP binding. - * @throws Exception - */ - @Test - public void testConditionalDeleteIfMatchNegative() throws Exception { - Socket client = new Socket("127.0.0.1", HTTP_PORT); - OutputStream os = client.getOutputStream(); - int index = 1; - String content = ""; - String request = MessageFormat.format(REQUEST2, "DELETE", index, - "If-Match", "eTagXXX", content.getBytes().length, content); - os.write(request.getBytes()); - os.flush(); - - String document = read(client); - // Should return item - // assertTrue(document.indexOf("deleted item=" + index) != -1); - // Should return code 412 precondition failed. - Assert.assertTrue(document.indexOf("HTTP/1.1 412") != -1); - } - - /** - * Test invoking a conditional method implementation using the HTTP binding. - * @throws Exception - */ - @Test - public void testConditionalDeleteIfMatchPositive() throws Exception { - Socket client = new Socket("127.0.0.1", HTTP_PORT); - OutputStream os = client.getOutputStream(); - int index = 0; - String content = ""; - String request = MessageFormat.format(REQUEST2, "DELETE", index, - "If-Match", "eTagXXX", content.getBytes().length, content); - os.write(request.getBytes()); - os.flush(); - - String document = read(client); - // Should return item - Assert.assertTrue(document.indexOf("deleted item=" + index) != -1); - // Should return code 412 PreconditionFailed. - // assertTrue(document.indexOf("HTTP/1.1 412") != -1); - } - - /** - * Test invoking a conditional method implementation using the HTTP binding. - * @throws Exception - */ - @Test - public void testConditionalDeleteIfNoneMatchNegative() throws Exception { - Socket client = new Socket("127.0.0.1", HTTP_PORT); - OutputStream os = client.getOutputStream(); - int index = 1; - String content = ""; - String request = MessageFormat.format(REQUEST2, "DELETE", index, - "If-None-Match", "eTagXXX", content.getBytes().length, content); - os.write(request.getBytes()); - os.flush(); - - String document = read(client); - // Should return item - Assert.assertTrue(document.indexOf("deleted item=" + index) != -1); - // Should return code 412 precondition failed. - // assertTrue(document.indexOf("HTTP/1.1 412") != -1); - } - - /** - * Test invoking a conditional method implementation using the HTTP binding. - * @throws Exception - */ - @Test - public void testConditionalDeleteIfNoneMatchPositive() throws Exception { - Socket client = new Socket("127.0.0.1", HTTP_PORT); - OutputStream os = client.getOutputStream(); - int index = 0; - String content = ""; - String request = MessageFormat.format(REQUEST2, "DELETE", index, - "If-None-Match", "eTagXXX", content.getBytes().length, content); - os.write(request.getBytes()); - os.flush(); - - String document = read(client); - // Should return item - // assertTrue(document.indexOf("deleted item=" + index) != -1); - // Should return code 412 PreconditionFailed. - Assert.assertTrue(document.indexOf("HTTP/1.1 412") != -1); - } - - /** - * Test invoking a POJO get method implementation using the HTTP binding. - * @throws Exception - */ - @Test - public void testPost() throws Exception { - Socket client = new Socket("127.0.0.1", HTTP_PORT); - OutputStream os = client.getOutputStream(); - int index = 0; - String content = ""; - String request = MessageFormat.format(REQUEST1, "POST", index, content - .getBytes().length, content); - os.write(request.getBytes()); - os.flush(); - - String document = read(client); - Assert.assertTrue(document.indexOf("HTTP/1.1 200 OK") != -1); - } - - /** - * Test invoking a conditional method implementation using the HTTP binding. - * @throws Exception - */ - @Test - public void testConditionalPostIfModifiedNegative() throws Exception { - Socket client = new Socket("127.0.0.1", HTTP_PORT); - OutputStream os = client.getOutputStream(); - int index = 0; - String content = ""; - String request = MessageFormat.format(REQUEST2, "POST", index, - "If-Modified-Since", dateFormat.format(new Date()), content - .getBytes().length, content); - os.write(request.getBytes()); - os.flush(); - - String document = read(client); - // Should return code 200 OK - // assertTrue(document.indexOf("posted item=" + index) != -1); - Assert.assertTrue(document.indexOf("HTTP/1.1 200 OK") != -1); - // Should return code 304 Not Modified. - // assertTrue(document.indexOf("HTTP/1.1 304") != -1); - } - - /** - * Test invoking a conditional method implementation using the HTTP binding. - * @throws Exception - */ - @Test - public void testConditionalPostIfModifiedPositive() throws Exception { - Socket client = new Socket("127.0.0.1", HTTP_PORT); - OutputStream os = client.getOutputStream(); - int index = 1; - String content = ""; - String request = MessageFormat.format(REQUEST2, "POST", index, - "If-Modified-Since", dateFormat.format(new Date(0)), content - .getBytes().length, content); - os.write(request.getBytes()); - os.flush(); - - String document = read(client); - // Should return item - // assertTrue(document.indexOf("posted item=" + index) != -1); - // Should return code 304 Not Modified. - Assert.assertTrue(document.indexOf("HTTP/1.1 304") != -1); - } - - /** - * Test invoking a conditional method implementation using the HTTP binding. - * @throws Exception - */ - @Test - public void testConditionalPostIfUnmodifiedNegative() throws Exception { - Socket client = new Socket("127.0.0.1", HTTP_PORT); - OutputStream os = client.getOutputStream(); - int index = 1; - String content = ""; - String request = MessageFormat.format(REQUEST2, "POST", index, - "If-Unmodified-Since", dateFormat.format(new Date()), content - .getBytes().length, content); - os.write(request.getBytes()); - os.flush(); - - String document = read(client); - // Should return code 200 OK - Assert.assertTrue(document.indexOf("HTTP/1.1 200 OK") != -1); - // Should return code 304 Not Modified. - // assertTrue(document.indexOf("HTTP/1.1 304") != -1); - } - - /** - * Test invoking a conditional method implementation using the HTTP binding. - * @throws Exception - */ - @Test - public void testConditionalPostIfUnmodifiedPositive() throws Exception { - Socket client = new Socket("127.0.0.1", HTTP_PORT); - OutputStream os = client.getOutputStream(); - int index = 0; - String content = ""; - String request = MessageFormat.format(REQUEST2, "POST", index, - "If-Unmodified-Since", dateFormat.format(new Date(0)), content - .getBytes().length, content); - os.write(request.getBytes()); - os.flush(); - - String document = read(client); - // Should return item - // assertTrue(document.indexOf("posted item=" + index) != -1); - // Should return code 412 PreconditionFailed. - Assert.assertTrue(document.indexOf("HTTP/1.1 412") != -1); - } - - /** - * Test invoking a conditional method implementation using the HTTP binding. - * @throws Exception - */ - @Test - public void testConditionalPostIfMatchNegative() throws Exception { - Socket client = new Socket("127.0.0.1", HTTP_PORT); - OutputStream os = client.getOutputStream(); - int index = 1; - String content = ""; - String request = MessageFormat.format(REQUEST2, "POST", index, - "If-Match", "eTagMatch", content.getBytes().length, content); - os.write(request.getBytes()); - os.flush(); - - String document = read(client); - // Should return code 200 OK. - Assert.assertTrue(document.indexOf("HTTP/1.1 200 OK") != -1); - // Should return code 412 precondition failed. - // assertTrue(document.indexOf("HTTP/1.1 412") != -1); - } - - /** - * Test invoking a conditional method implementation using the HTTP binding. - * @throws Exception - */ - @Test - public void testConditionalPostIfMatchPositive() throws Exception { - Socket client = new Socket("127.0.0.1", HTTP_PORT); - OutputStream os = client.getOutputStream(); - int index = 0; - String content = ""; - String request = MessageFormat - .format(REQUEST2, "POST", index, "If-Match", "eTagNoneMatch", - content.getBytes().length, content); - os.write(request.getBytes()); - os.flush(); - - String document = read(client); - // Should return item - // assertTrue(document.indexOf("posted item=" + index) != -1); - // Should return code 412 PreconditionFailed. - Assert.assertTrue(document.indexOf("HTTP/1.1 412") != -1); - } - - /** - * Test invoking a conditional method implementation using the HTTP binding. - * @throws Exception - */ - @Test - public void testConditionalPostIfNoneMatchNegative() throws Exception { - Socket client = new Socket("127.0.0.1", HTTP_PORT); - OutputStream os = client.getOutputStream(); - int index = 1; - String content = ""; - String request = MessageFormat.format(REQUEST2, "POST", index, - "If-None-Match", "eTagNoneMatch", content.getBytes().length, - content); - os.write(request.getBytes()); - os.flush(); - - String document = read(client); - // Should return code 200 OK - Assert.assertTrue(document.indexOf("HTTP/1.1 200 OK") != -1); - // Should return code 412 precondition failed. - // assertTrue(document.indexOf("HTTP/1.1 412") != -1); - } - - /** - * Test invoking a conditional method implementation using the HTTP binding. - * @throws Exception - */ - @Test - public void testConditionalPostIfNoneMatchPositive() throws Exception { - Socket client = new Socket("127.0.0.1", HTTP_PORT); - OutputStream os = client.getOutputStream(); - int index = 0; - String content = ""; - String request = MessageFormat.format(REQUEST2, "POST", index, - "If-None-Match", "eTagMatch", content.getBytes().length, - content); - os.write(request.getBytes()); - os.flush(); - - String document = read(client); - // Should return item - // assertTrue(document.indexOf("posted item=" + index) != -1); - // Should return code 412 PreconditionFailed. - Assert.assertTrue(document.indexOf("HTTP/1.1 412") != -1); - } - - /** - * Test invoking a POJO get method implementation using the HTTP binding. - * @throws Exception - */ - @Test - public void testPut() throws Exception { - Socket client = new Socket("127.0.0.1", HTTP_PORT); - OutputStream os = client.getOutputStream(); - int index = 0; - String content = ""; - String request = MessageFormat.format(REQUEST1, "PUT", index, content - .getBytes().length, content); - os.write(request.getBytes()); - os.flush(); - - String document = read(client); - Assert.assertTrue(document.indexOf("updated item=" + index) != -1); - } - - /** - * Test invoking a conditional method implementation using the HTTP binding. - * @throws Exception - */ - @Test - public void testConditionalPutIfModifiedNegative() throws Exception { - Socket client = new Socket("127.0.0.1", HTTP_PORT); - OutputStream os = client.getOutputStream(); - int index = 0; - String content = ""; - String request = MessageFormat.format(REQUEST2, "PUT", index, - "If-Modified-Since", dateFormat.format(new Date(0)), content - .getBytes().length, content); - os.write(request.getBytes()); - os.flush(); - - String document = read(client); - // Should return item - Assert.assertTrue(document.indexOf("updated item=" + index) != -1); - // Should return code 304 Not Modified. - // assertTrue(document.indexOf("HTTP/1.1 304") != -1); - } - - /** - * Test invoking a conditional method implementation using the HTTP binding. - * @throws Exception - */ - @Test - public void testConditionalPutIfModifiedPositive() throws Exception { - Socket client = new Socket("127.0.0.1", HTTP_PORT); - OutputStream os = client.getOutputStream(); - int index = 1; - String content = ""; - String request = MessageFormat.format(REQUEST2, "PUT", index, - "If-Modified-Since", dateFormat.format(new Date(0)), content - .getBytes().length, content); - os.write(request.getBytes()); - os.flush(); - - String document = read(client); - // Should return item - // assertTrue(document.indexOf("updated item=" + index) != -1); - // Should return code 304 Not Modified. - Assert.assertTrue(document.indexOf("HTTP/1.1 304") != -1); - } - - /** - * Test invoking a conditional method implementation using the HTTP binding. - * @throws Exception - */ - @Test - public void testConditionalPutIfUnmodifiedNegative() throws Exception { - Socket client = new Socket("127.0.0.1", HTTP_PORT); - OutputStream os = client.getOutputStream(); - int index = 1; - String content = ""; - String request = MessageFormat.format(REQUEST2, "PUT", index, - "If-Unmodified-Since", dateFormat.format(new Date()), content - .getBytes().length, content); - os.write(request.getBytes()); - os.flush(); - - String document = read(client); - // Should return item - Assert.assertTrue(document.indexOf("updated item=" + index) != -1); - // Should return code 304 Not Modified. - // assertTrue(document.indexOf("HTTP/1.1 304") != -1); - } - - /** - * Test invoking a conditional method implementation using the HTTP binding. - * @throws Exception - */ - @Test - public void testConditionalPutIfUnmodifiedPositive() throws Exception { - Socket client = new Socket("127.0.0.1", HTTP_PORT); - OutputStream os = client.getOutputStream(); - int index = 0; - String content = ""; - String request = MessageFormat.format(REQUEST2, "PUT", index, - "If-Unmodified-Since", dateFormat.format(new Date(0)), content - .getBytes().length, content); - os.write(request.getBytes()); - os.flush(); - - String document = read(client); - // Should return item - // assertTrue(document.indexOf("updated item=" + index) != -1); - // Should return code 412 PreconditionFailed. - Assert.assertTrue(document.indexOf("HTTP/1.1 412") != -1); - } - - /** - * Test invoking a conditional method implementation using the HTTP binding. - * @throws Exception - */ - @Test - public void testConditionalPutIfMatchNegative() throws Exception { - Socket client = new Socket("127.0.0.1", HTTP_PORT); - OutputStream os = client.getOutputStream(); - int index = 1; - String content = ""; - String request = MessageFormat.format(REQUEST2, "PUT", index, - "If-Match", "eTagXXX", content.getBytes().length, content); - os.write(request.getBytes()); - os.flush(); - - String document = read(client); - // Should return item - // assertTrue(document.indexOf("updated item=" + index) != -1); - // Should return code 412 precondition failed. - Assert.assertTrue(document.indexOf("HTTP/1.1 412") != -1); - } - - /** - * Test invoking a conditional method implementation using the HTTP binding. - * @throws Exception - */ - @Test - public void testConditionalPutIfMatchPositive() throws Exception { - Socket client = new Socket("127.0.0.1", HTTP_PORT); - OutputStream os = client.getOutputStream(); - int index = 0; - String content = ""; - String request = MessageFormat.format(REQUEST2, "PUT", index, - "If-Match", "eTagXXX", content.getBytes().length, content); - os.write(request.getBytes()); - os.flush(); - - String document = read(client); - // Should return item - Assert.assertTrue(document.indexOf("updated item=" + index) != -1); - // Should return code 412 PreconditionFailed. - // assertTrue(document.indexOf("HTTP/1.1 412") != -1); - } - - /** - * Test invoking a conditional method implementation using the HTTP binding. - * @throws Exception - */ - @Test - public void testConditionalPutIfNoneMatchNegative() throws Exception { - Socket client = new Socket("127.0.0.1", HTTP_PORT); - OutputStream os = client.getOutputStream(); - int index = 1; - String content = ""; - String request = MessageFormat.format(REQUEST2, "PUT", index, - "If-None-Match", "eTagXXX", content.getBytes().length, content); - os.write(request.getBytes()); - os.flush(); - - String document = read(client); - // Should return item - Assert.assertTrue(document.indexOf("updated item=" + index) != -1); - // Should return code 412 precondition failed. - // assertTrue(document.indexOf("HTTP/1.1 412") != -1); - } - - /** - * Test invoking a conditional method implementation using the HTTP binding. - * @throws Exception - */ - @Test - public void testConditionalPutIfNoneMatchPositive() throws Exception { - Socket client = new Socket("127.0.0.1", HTTP_PORT); - OutputStream os = client.getOutputStream(); - int index = 0; - String content = ""; - String request = MessageFormat.format(REQUEST2, "PUT", index, - "If-None-Match", "eTagXXX", content.getBytes().length, content); - os.write(request.getBytes()); - os.flush(); - - String document = read(client); - // Should return item - // assertTrue(document.indexOf("updated item=" + index) != -1); - // Should return code 412 PreconditionFailed. - Assert.assertTrue(document.indexOf("HTTP/1.1 412") != -1); - } - - /** - * Read response stream from the given socket. - * @param socket - * @return - * @throws IOException - */ - private static String read(Socket socket) throws IOException { - BufferedReader reader = null; - try { - reader = new BufferedReader(new InputStreamReader(socket - .getInputStream())); - StringBuffer sb = new StringBuffer(); - String str; - while ((str = reader.readLine()) != null) { - sb.append(str); - } - return sb.toString(); - } finally { - if (reader != null) { - reader.close(); - } - } - } -} diff --git a/sca-java-2.x/branches/2.0-Beta2/modules/binding-rest-runtime/src/test/java/org/apache/tuscany/sca/binding/rest/RESTBindingTestCase.java b/sca-java-2.x/branches/2.0-Beta2/modules/binding-rest-runtime/src/test/java/org/apache/tuscany/sca/binding/rest/RESTBindingTestCase.java deleted file mode 100644 index e08069f479..0000000000 --- a/sca-java-2.x/branches/2.0-Beta2/modules/binding-rest-runtime/src/test/java/org/apache/tuscany/sca/binding/rest/RESTBindingTestCase.java +++ /dev/null @@ -1,163 +0,0 @@ -/* - * 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.rest; - -import java.io.BufferedReader; -import java.io.IOException; -import java.io.InputStreamReader; -import java.io.OutputStream; -import java.net.Socket; -import java.text.MessageFormat; - -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.Ignore; -import org.junit.Test; - -/** - * HTTP binding unit tests. - * - * @version $Rev$ $Date$ - */ -public class RESTBindingTestCase { - - private static final String REQUEST1_HEADER = - "GET /httpservice/test HTTP/1.0\n" + "Host: localhost\n" - + "Content-Type: text/xml\n" - + "Connection: close\n" - + "Content-Length: "; - private static final String REQUEST1_CONTENT = ""; - private static final String REQUEST1 = - REQUEST1_HEADER + REQUEST1_CONTENT.getBytes().length + "\n\n" + REQUEST1_CONTENT; - - private static final String REQUEST2_HEADER = - "GET /webcontent/test.html HTTP/1.0\n" + "Host: localhost\n" - + "Content-Type: text/xml\n" - + "Connection: close\n" - + "Content-Length: "; - private static final String REQUEST2_CONTENT = ""; - private static final String REQUEST2 = - REQUEST2_HEADER + REQUEST2_CONTENT.getBytes().length + "\n\n" + REQUEST2_CONTENT; - - private static final String REQUEST3_HEADER = - "GET /httpget/{0} HTTP/1.0\n" + "Host: localhost\n" - + "Content-Type: text/xml\n" - + "Connection: close\n" - + "Content-Length: "; - private static final String REQUEST3_CONTENT = ""; - private static final String REQUEST3 = - REQUEST3_HEADER + REQUEST3_CONTENT.getBytes().length + "\n\n" + REQUEST3_CONTENT; - - private static final int HTTP_PORT = 8085; - - private static Node node; - - @BeforeClass - public static void setUp() throws Exception { - try { - String contribution = ContributionLocationHelper.getContributionLocation(RESTBindingCacheTestCase.class); - node = NodeFactory.newInstance().createNode("test.composite", new Contribution("test", contribution)); - node.start(); - } catch (Exception e) { - e.printStackTrace(); - } - } - - @AfterClass - public static void tearDown() throws Exception { - node.stop(); - } - - /** - * Test invoking a POJO service implementation using the HTTP binding. - * @throws Exception - */ - @Test - public void testServiceImplementation() throws Exception { - Socket client = new Socket("127.0.0.1", HTTP_PORT); - OutputStream os = client.getOutputStream(); - os.write(REQUEST1.getBytes()); - os.flush(); - - String document = read(client); - Assert.assertTrue(document.indexOf("<body><p>hey</body>") != -1); - } - - /** - * Test invoking a POJO get method implementation using the HTTP binding. - * @throws Exception - */ - @Test - public void testGetImplementation() throws Exception { - Socket client = new Socket("127.0.0.1", HTTP_PORT); - OutputStream os = client.getOutputStream(); - int index = 0; - String request = MessageFormat.format( REQUEST3, index ); - os.write( request.getBytes()); - os.flush(); - - String document = read(client); - Assert.assertTrue(document.indexOf("<body><p>item=" + index) != -1); - } - - /** - * Test getting a static resource provided using the HTTP binding. - * @throws Exception - */ - @Ignore("Implementation resource not available") - public void testStaticResourceImplementation() throws Exception { - Socket client = new Socket("127.0.0.1", HTTP_PORT); - OutputStream os = client.getOutputStream(); - os.write(REQUEST2.getBytes()); - os.flush(); - - String document = read(client); - Assert.assertTrue(document.indexOf("<body><p>hello</body>") != -1); - } - - /** - * Read response stream from the given socket. - * @param socket - * @return - * @throws IOException - */ - private static String read(Socket socket) throws IOException { - BufferedReader reader = null; - try { - reader = new BufferedReader(new InputStreamReader(socket.getInputStream())); - StringBuffer sb = new StringBuffer(); - String str; - while ((str = reader.readLine()) != null) { - sb.append(str); - } - return sb.toString(); - } finally { - if (reader != null) { - reader.close(); - } - } - } - -} diff --git a/sca-java-2.x/branches/2.0-Beta2/modules/binding-rest-runtime/src/test/java/org/apache/tuscany/sca/binding/rest/TestBindingCacheImpl.java b/sca-java-2.x/branches/2.0-Beta2/modules/binding-rest-runtime/src/test/java/org/apache/tuscany/sca/binding/rest/TestBindingCacheImpl.java deleted file mode 100644 index 5c5e4db8ed..0000000000 --- a/sca-java-2.x/branches/2.0-Beta2/modules/binding-rest-runtime/src/test/java/org/apache/tuscany/sca/binding/rest/TestBindingCacheImpl.java +++ /dev/null @@ -1,199 +0,0 @@ -/* - * 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.rest; - -import java.io.ByteArrayInputStream; -import java.io.InputStream; -import java.util.Date; - -import org.apache.tuscany.sca.common.http.HTTPCacheContext; - -/** - * Test service implementation that implements a various conditional HTTP - * methods. For testing, the id==0 items are very old (Date(0)), not modified, - * and always match ETags and the id==1 items are always brand new (Date()), - * modified, and never match ETags. Using these ids one can test the - * LastModified and ETag headers of the requests. - * - * @version $Rev$ $Date$ - */ -public class TestBindingCacheImpl { - - /** - * Implements the HTTP get method of the collection implementation. - * @param id - * @return - */ - public InputStream get(String id) { - return new ByteArrayInputStream(("<html><body><p>item=" + id + "</body></html>").getBytes()); - } - - /** - * Implements the HTTP conditional get method of the collection implementation. - * @param id - * @return - */ - public InputStream conditionalGet(String id, HTTPCacheContext cacheContext) throws NotModifiedException, - PreconditionFailedException { - - if (cacheContext != null) { - if (cacheContext.ifModifiedSince) { - if ((id.equals("1")) && (0 > cacheContext.lastModifiedDate.compareTo(new Date()))) - throw new NotModifiedException("item 1 was modified on " + new Date()); - } - if (cacheContext.ifUnmodifiedSince) { - if ((id.equals("0")) && (0 > cacheContext.lastModifiedDate.compareTo(new Date()))) - throw new PreconditionFailedException("item 0 was modified on " + new Date(0)); - } - if (cacheContext.ifMatch) { - if (id.equals("1")) - throw new PreconditionFailedException("item 1 eTag does not match " + cacheContext.getETag()); - } - if (cacheContext.ifNoneMatch) { - if (id.equals("0")) - throw new PreconditionFailedException("item 0 eTag matches " + cacheContext.getETag()); - } - } - return new ByteArrayInputStream(("<html><body><p>item=" + id + "</body></html>").getBytes()); - } - - /** - * Implements the HTTP delete method of the collection implementation. - * @param id - * @return - */ - public InputStream delete(String id) { - return new ByteArrayInputStream(("<html><body><p>deleted item=" + id + "</body></html>").getBytes()); - } - - /** - * Implements the HTTP conditional delete method of the collection implementation. - * @param id - * @return - */ - public InputStream conditionalDelete(String id, HTTPCacheContext cacheContext) throws NotModifiedException, - PreconditionFailedException { - - if (cacheContext != null) { - if (cacheContext.ifModifiedSince) { - if ((id.equals("1")) && (0 > cacheContext.lastModifiedDate.compareTo(new Date()))) - throw new NotModifiedException("item 1 was modified on " + new Date()); - } - if (cacheContext.ifUnmodifiedSince) { - if ((id.equals("0")) && (0 > cacheContext.lastModifiedDate.compareTo(new Date()))) - throw new PreconditionFailedException("item 0 was modified on " + new Date(0)); - } - if (cacheContext.ifMatch) { - if (id.equals("1")) - throw new PreconditionFailedException("item 1 eTag does not match " + cacheContext.getETag()); - } - if (cacheContext.ifNoneMatch) { - if (id.equals("0")) - throw new PreconditionFailedException("item 0 eTag matches " + cacheContext.getETag()); - } - } - return new ByteArrayInputStream(("<html><body><p>deleted item=" + id + "</body></html>").getBytes()); - } - - /** - * Implements the HTTP post method of the collection implementation. - * @param id - * @return - */ - public InputStream post() { - int id = (new java.util.Random()).nextInt(Integer.MAX_VALUE); - return new ByteArrayInputStream(("<html><body><p>posted item=" + id + "</body></html>").getBytes()); - } - - /** - * Implements the HTTP conditional post method of the collection implementation. - * @param id - * @return - */ - public HTTPCacheContext conditionalPost(HTTPCacheContext cacheContext) throws NotModifiedException, - PreconditionFailedException { - String id = "" + (new java.util.Random()).nextInt(Integer.MAX_VALUE); - - if (cacheContext != null) { - if (cacheContext.ifModifiedSince) { - if (0 >= cacheContext.lastModifiedDate.compareTo(new Date(0))) - throw new NotModifiedException("item was modified on " + new Date()); - } - if (cacheContext.ifUnmodifiedSince) { - if ((0 >= cacheContext.lastModifiedDate.compareTo(new Date(0)))) - throw new PreconditionFailedException("item was modified on " + new Date(0)); - } - if (cacheContext.ifMatch) { - if (cacheContext.getETag().equalsIgnoreCase("ETagNoneMatch")) - throw new PreconditionFailedException("item eTag does not match " + cacheContext.getETag()); - } - if (cacheContext.ifNoneMatch) { - if (cacheContext.getETag().equalsIgnoreCase("ETagMatch")) - throw new PreconditionFailedException("item eTag matches " + cacheContext.getETag()); - } - } - - // Return the ETag and LastModfied fields by serialize to a byte array - HTTPCacheContext returnContext = new HTTPCacheContext(); - returnContext.setETag("ETag" + (new java.util.Random()).nextInt(Integer.MAX_VALUE)); - returnContext.setLastModified(new Date()); - return returnContext; - } - - /** - * Implements the HTTP update/put method of the collection implementation. - * @param id - * @return - */ - public InputStream put(String id) { - return new ByteArrayInputStream(("<html><body><p>updated item=" + id + "</body></html>").getBytes()); - } - - /** - * Implements the HTTP conditional update/put method of the collection implementation. - * @param id - * @return - */ - public InputStream conditionalPut(String id, HTTPCacheContext cacheContext) throws NotModifiedException, - PreconditionFailedException { - - if (cacheContext != null) { - if (cacheContext.ifModifiedSince) { - if ((id.equals("1")) && (0 > cacheContext.lastModifiedDate.compareTo(new Date()))) - throw new NotModifiedException("item 1 was modified on " + new Date()); - } - if (cacheContext.ifUnmodifiedSince) { - if ((id.equals("0")) && (0 > cacheContext.lastModifiedDate.compareTo(new Date()))) - throw new PreconditionFailedException("item 0 was modified on " + new Date(0)); - } - if (cacheContext.ifMatch) { - if (id.equals("1")) - throw new PreconditionFailedException("item 1 eTag does not match " + cacheContext.getETag()); - } - if (cacheContext.ifNoneMatch) { - if (id.equals("0")) - throw new PreconditionFailedException("item 0 eTag matches " + cacheContext.getETag()); - } - } - - return new ByteArrayInputStream(("<html><body><p>updated item=" + id + "</body></html>").getBytes()); - } - -} diff --git a/sca-java-2.x/branches/2.0-Beta2/modules/binding-rest-runtime/src/test/java/org/apache/tuscany/sca/binding/rest/TestGetImpl.java b/sca-java-2.x/branches/2.0-Beta2/modules/binding-rest-runtime/src/test/java/org/apache/tuscany/sca/binding/rest/TestGetImpl.java deleted file mode 100644 index 4cb1bce73f..0000000000 --- a/sca-java-2.x/branches/2.0-Beta2/modules/binding-rest-runtime/src/test/java/org/apache/tuscany/sca/binding/rest/TestGetImpl.java +++ /dev/null @@ -1,37 +0,0 @@ -/* - * 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.rest; - -import java.io.ByteArrayInputStream; -import java.io.InputStream; - -/** - * Test service implementation that implements a get method. - * - * @version $Rev$ $Date$ - */ -public class TestGetImpl { - - public InputStream get(String id) { - return new ByteArrayInputStream(("<html><body><p>item=" + id + "</body></html>").getBytes()); - - } - -} diff --git a/sca-java-2.x/branches/2.0-Beta2/modules/binding-rest-runtime/src/test/java/org/apache/tuscany/sca/binding/rest/TestServiceImpl.java b/sca-java-2.x/branches/2.0-Beta2/modules/binding-rest-runtime/src/test/java/org/apache/tuscany/sca/binding/rest/TestServiceImpl.java deleted file mode 100644 index 6b21d6094f..0000000000 --- a/sca-java-2.x/branches/2.0-Beta2/modules/binding-rest-runtime/src/test/java/org/apache/tuscany/sca/binding/rest/TestServiceImpl.java +++ /dev/null @@ -1,60 +0,0 @@ -/* - * 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.rest; - -import java.io.IOException; - -import javax.servlet.Servlet; -import javax.servlet.ServletConfig; -import javax.servlet.ServletException; -import javax.servlet.ServletRequest; -import javax.servlet.ServletResponse; - -import org.oasisopen.sca.annotation.Service; - -/** - * Test service implementation. - * - * @version $Rev$ $Date$ - */ - -@Service(Servlet.class) -public class TestServiceImpl implements Servlet { - - public void init(ServletConfig config) throws ServletException { - } - - public void service(ServletRequest request, ServletResponse response) throws ServletException, IOException { - //HttpServletResponse httpResponse = (HttpServletResponse)response; - response.getOutputStream().print("<html><body><p>hey</body></html>"); - } - - public void destroy() { - } - - public ServletConfig getServletConfig() { - return null; - } - - public String getServletInfo() { - return null; - } - -} diff --git a/sca-java-2.x/branches/2.0-Beta2/modules/binding-rest-runtime/src/test/java/org/apache/tuscany/sca/binding/rest/rpc/EchoServiceTestCase.java b/sca-java-2.x/branches/2.0-Beta2/modules/binding-rest-runtime/src/test/java/org/apache/tuscany/sca/binding/rest/rpc/EchoServiceTestCase.java deleted file mode 100644 index a96f8ebb03..0000000000 --- a/sca-java-2.x/branches/2.0-Beta2/modules/binding-rest-runtime/src/test/java/org/apache/tuscany/sca/binding/rest/rpc/EchoServiceTestCase.java +++ /dev/null @@ -1,145 +0,0 @@ -/* - * 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.rest.rpc; - -import java.net.Socket; - -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.Assert; -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; - -public class EchoServiceTestCase { - 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 = "" + - "<?xml version=\"1.0\" encoding=\"UTF-8\"?>" + - "<return xmlns:ns2=\"http://echo.services/\" "+ - "xmlns:xs=\"http://www.w3.org/2001/XMLSchema\" " + - "xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" "+ - "xsi:type=\"xs:string\">Hello RPC</return>"; - - private static Node node; - - @BeforeClass - public static void init() throws Exception { - try { - String contribution = ContributionLocationHelper.getContributionLocation(EchoServiceTestCase.class); - node = NodeFactory.newInstance().createNode("echo.composite", new Contribution("echo", contribution)); - node.start(); - } catch (Exception e) { - e.printStackTrace(); - } - } - - @AfterClass - public static void destroy() throws Exception { - if(node != null) { - node.stop(); - } - } - - @Test - public void testPing() throws Exception { - new Socket("127.0.0.1", 8085); - // System.in.read(); - } - - @Test - public void testJSONRPCGetOperationWithString() throws Exception { - String queryString = "?method=echo&msg=Hello RPC"; - - WebConversation wc = new WebConversation(); - 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 testJSONRPCGetOperationWithInt() throws Exception { - String queryString = "?method=echoInt¶m=1000"; - - WebConversation wc = new WebConversation(); - 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("1000", response.getText()); - } - - @Test - public void testRPCGetArrayOperationWithString() throws Exception { - String queryString = "?method=echoArrayString&msgArray=Hello RPC1&msgArray=Hello RPC2"; - - WebConversation wc = new WebConversation(); - 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 testRPCGetArrayOperationWithInt() throws Exception { - String queryString = "?method=echoArrayInt&intArray=1000&intArray=2000"; - - WebConversation wc = new WebConversation(); - 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("[1000,2000]", 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/branches/2.0-Beta2/modules/binding-rest-runtime/src/test/java/org/apache/tuscany/sca/binding/rest/wireformat/binary/BinaryServiceTestCase.java b/sca-java-2.x/branches/2.0-Beta2/modules/binding-rest-runtime/src/test/java/org/apache/tuscany/sca/binding/rest/wireformat/binary/BinaryServiceTestCase.java deleted file mode 100644 index 2ca662ec4e..0000000000 --- a/sca-java-2.x/branches/2.0-Beta2/modules/binding-rest-runtime/src/test/java/org/apache/tuscany/sca/binding/rest/wireformat/binary/BinaryServiceTestCase.java +++ /dev/null @@ -1,106 +0,0 @@ -/* - * 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.rest.wireformat.binary; - -import java.io.ByteArrayInputStream; -import java.net.Socket; - -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.Assert; -import org.junit.BeforeClass; -import org.junit.Test; - -import com.meterware.httpunit.GetMethodWebRequest; -import com.meterware.httpunit.PostMethodWebRequest; -import com.meterware.httpunit.PutMethodWebRequest; -import com.meterware.httpunit.WebConversation; -import com.meterware.httpunit.WebRequest; -import com.meterware.httpunit.WebResponse; - -public class BinaryServiceTestCase { - private static final String SERVICE_URL = "http://localhost:8085/Binary"; - - private static final String CONTENT = "ABCDefgh"; - private static final String UPDATED_CONTENT = "abcdEFGH"; - - private static Node node; - - @BeforeClass - public static void init() throws Exception { - try { - String contribution = ContributionLocationHelper.getContributionLocation(BinaryServiceTestCase.class); - node = NodeFactory.newInstance().createNode("binary.composite", new Contribution("binary", contribution)); - node.start(); - } catch (Exception e) { - e.printStackTrace(); - } - } - - @AfterClass - public static void destroy() throws Exception { - if (node != null) { - node.stop(); - } - } - - @Test - public void testPing() throws Exception { - new Socket("127.0.0.1", 8085); - //System.in.read(); - } - - @Test - public void testMethods() throws Exception { - WebConversation wc = new WebConversation(); - - // Create content - WebRequest request = - new PostMethodWebRequest(SERVICE_URL, new ByteArrayInputStream(CONTENT.getBytes("UTF-8")), - "application/octet-stream"); - WebResponse response = wc.getResource(request); - - Assert.assertEquals(204, response.getResponseCode()); - - // Read the content - request = new GetMethodWebRequest(SERVICE_URL); - response = wc.getResource(request); - - Assert.assertEquals(200, response.getResponseCode()); - Assert.assertEquals(CONTENT, response.getText()); - - request = - new PutMethodWebRequest(SERVICE_URL, new ByteArrayInputStream(UPDATED_CONTENT.getBytes("UTF-8")), - "application/octet-stream"); - 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); - response = wc.getResource(request); - - Assert.assertEquals(200, response.getResponseCode()); - Assert.assertEquals(UPDATED_CONTENT, response.getText()); - } -} diff --git a/sca-java-2.x/branches/2.0-Beta2/modules/binding-rest-runtime/src/test/java/org/apache/tuscany/sca/binding/rest/wireformat/json/CatalogServiceTestCase.java b/sca-java-2.x/branches/2.0-Beta2/modules/binding-rest-runtime/src/test/java/org/apache/tuscany/sca/binding/rest/wireformat/json/CatalogServiceTestCase.java deleted file mode 100644 index 2aa59af508..0000000000 --- a/sca-java-2.x/branches/2.0-Beta2/modules/binding-rest-runtime/src/test/java/org/apache/tuscany/sca/binding/rest/wireformat/json/CatalogServiceTestCase.java +++ /dev/null @@ -1,150 +0,0 @@ -/* - * 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.rest.wireformat.json; - -import java.io.ByteArrayInputStream; -import java.net.Socket; - -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; -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; - -public class CatalogServiceTestCase { - private static final String SERVICE_URL = "http://localhost:8085/Catalog"; - - private static final String GET_RESPONSE = "{\"items\":[{\"price\":\"$1.55\",\"name\":\"Pear\"},{\"price\":\"$2.99\",\"name\":\"Apple\"},{\"price\":\"$3.55\",\"name\":\"Orange\"}]}"; - 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 Node node; - - @BeforeClass - public static void init() throws Exception { - try { - String contribution = ContributionLocationHelper.getContributionLocation(CatalogServiceTestCase.class); - node = NodeFactory.newInstance().createNode("store.composite", new Contribution("catalog", contribution)); - node.start(); - } catch (Exception e) { - e.printStackTrace(); - } - } - - @AfterClass - public static void destroy() throws Exception { - if(node != null) { - node.stop(); - } - } - - @Test - public void testPing() throws Exception { - new Socket("127.0.0.1", 8085); - //System.in.read(); - } - - @Test - 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.assertNotNull(response.getText()); - Assert.assertTrue(validateJsonResponse(GET_RESPONSE,response.getText())); - } - - - @Test - 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"); - request.setHeaderField("Content-Type", "application/json"); - 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.assertNotNull(response.getText()); - Assert.assertTrue(validateJsonResponse(GET_NEW_RESPONSE,response.getText())); - } - - @Test - 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"); - request.setHeaderField("Content-Type", "application/json"); - 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.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/branches/2.0-Beta2/modules/binding-rest-runtime/src/test/java/org/apache/tuscany/sca/binding/rest/wireformat/xml/CustomerServiceTestCase.java b/sca-java-2.x/branches/2.0-Beta2/modules/binding-rest-runtime/src/test/java/org/apache/tuscany/sca/binding/rest/wireformat/xml/CustomerServiceTestCase.java deleted file mode 100644 index cd69cd0c41..0000000000 --- a/sca-java-2.x/branches/2.0-Beta2/modules/binding-rest-runtime/src/test/java/org/apache/tuscany/sca/binding/rest/wireformat/xml/CustomerServiceTestCase.java +++ /dev/null @@ -1,119 +0,0 @@ -/* - * 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.rest.wireformat.xml; - -import java.io.ByteArrayInputStream; -import java.net.Socket; - -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.Assert; -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; - -public class CustomerServiceTestCase { - private static final String SERVICE_URL = "http://localhost:8085/Customer"; - - private static final String GET_RESPONSE = "<?xml version=\"1.0\" encoding=\"UTF-8\"?><Customer xmlns:ns2=\"http://tuscany.apache.org/xmlns/sca/databinding/jaxb/1.0\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xsi:type=\"customer\"><email>john@domain.com</email><id>John</id><name>John</name></Customer>"; - private static final String UPDATED_ITEM = "<?xml version=\"1.0\" encoding=\"UTF-8\"?><Customer xmlns:ns2=\"http://customer.services/\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xsi:type=\"customer\"><email>john@updated-domain.com</email><id>John</id><name>John</name></Customer>"; - private static final String GET_UPDATED_RESPONSE = "<?xml version=\"1.0\" encoding=\"UTF-8\"?><Customer xmlns:ns2=\"http://tuscany.apache.org/xmlns/sca/databinding/jaxb/1.0\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xsi:type=\"customer\"><email>john@updated-domain.com</email><id>John</id><name>John</name></Customer>"; - - private static Node node; - - @BeforeClass - public static void init() throws Exception { - try { - String contribution = ContributionLocationHelper.getContributionLocation(CustomerServiceTestCase.class); - node = NodeFactory.newInstance().createNode("customer.composite", new Contribution("customer", contribution)); - node.start(); - } catch (Exception e) { - e.printStackTrace(); - } - } - - @AfterClass - public static void destroy() throws Exception { - if(node != null) { - node.stop(); - } - } - - @Test - public void testPing() throws Exception { - new Socket("127.0.0.1", 8085); - //System.in.read(); - } - - @Test - public void testGetInvocation() throws Exception { - WebConversation wc = new WebConversation(); - WebRequest request = new GetMethodWebRequest(SERVICE_URL); - request.setHeaderField("Content-Type", "application/xml"); - WebResponse response = wc.getResource(request); - - //for debug purposes - //list the response headers - //for(String headerField : response.getHeaderFieldNames()) { - // System.out.println(">>> Header:" + headerField + " - " + response.getHeaderField(headerField)); - //} - - //for debug purposes - System.out.println(">>>" + GET_RESPONSE); - System.out.println(">>>" + response.getText()); - - Assert.assertEquals(200, response.getResponseCode()); - Assert.assertEquals("no-cache", response.getHeaderField("Cache-Control")); - Assert.assertEquals("tuscany", response.getHeaderField("X-Tuscany")); - Assert.assertEquals(GET_RESPONSE, response.getText()); - - } - - @Test - 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/xml"); - WebResponse response = wc.getResource(request); - - Assert.assertEquals(201, response.getResponseCode()); - System.out.println(response.getHeaderField("Location")); - - //read new results and expect to get new item back in the response - request = new GetMethodWebRequest(SERVICE_URL); - request.setHeaderField("Content-Type", "application/xml"); - 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()); - } -} diff --git a/sca-java-2.x/branches/2.0-Beta2/modules/binding-rest-runtime/src/test/java/services/binary/BinaryService.java b/sca-java-2.x/branches/2.0-Beta2/modules/binding-rest-runtime/src/test/java/services/binary/BinaryService.java deleted file mode 100644 index 4749383a0c..0000000000 --- a/sca-java-2.x/branches/2.0-Beta2/modules/binding-rest-runtime/src/test/java/services/binary/BinaryService.java +++ /dev/null @@ -1,45 +0,0 @@ -/* - * 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 services.binary; - -import java.io.IOException; -import java.io.InputStream; - -import javax.activation.DataSource; -import javax.ws.rs.GET; -import javax.ws.rs.POST; -import javax.ws.rs.PUT; - -import org.oasisopen.sca.annotation.Remotable; - -/** - * - */ -@Remotable -public interface BinaryService { - @GET - InputStream get(); - - @PUT - void update(InputStream is) throws IOException; - - @POST - void create(DataSource dataSource) throws IOException; -} diff --git a/sca-java-2.x/branches/2.0-Beta2/modules/binding-rest-runtime/src/test/java/services/binary/BinaryServiceImpl.java b/sca-java-2.x/branches/2.0-Beta2/modules/binding-rest-runtime/src/test/java/services/binary/BinaryServiceImpl.java deleted file mode 100644 index aefbf64504..0000000000 --- a/sca-java-2.x/branches/2.0-Beta2/modules/binding-rest-runtime/src/test/java/services/binary/BinaryServiceImpl.java +++ /dev/null @@ -1,57 +0,0 @@ -/* - * 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 services.binary; - -import java.io.ByteArrayInputStream; -import java.io.IOException; -import java.io.InputStream; - -import javax.activation.DataSource; - -import org.oasisopen.sca.annotation.Scope; - -/** - * - */ -@Scope("COMPOSITE") -public class BinaryServiceImpl implements BinaryService { - private byte[] content; - private int length; - - public void create(DataSource dataSource) throws IOException { - content = new byte[10240]; - InputStream is = dataSource.getInputStream(); - length = is.read(content); - System.out.println("Content received: " + length); - } - - public InputStream get() { - byte[] bytes = new byte[length]; - System.arraycopy(content, 0, bytes, 0, length); - System.out.println("Content sent: " + length); - return new ByteArrayInputStream(bytes); - } - - public void update(InputStream is) throws IOException { - length = is.read(content); - System.out.println("Content updated: " + length); - } - -} diff --git a/sca-java-2.x/branches/2.0-Beta2/modules/binding-rest-runtime/src/test/java/services/customer/Customer.java b/sca-java-2.x/branches/2.0-Beta2/modules/binding-rest-runtime/src/test/java/services/customer/Customer.java deleted file mode 100644 index 08506ebd48..0000000000 --- a/sca-java-2.x/branches/2.0-Beta2/modules/binding-rest-runtime/src/test/java/services/customer/Customer.java +++ /dev/null @@ -1,70 +0,0 @@ -/* - * 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 services.customer; - - -/** - * Customer data - */ -public class Customer { - private String id; - private String email; - private String name; - - public Customer() { - super(); - } - - public Customer(String id, String name, String email) { - super(); - this.id = id; - this.email = email; - this.name = name; - } - - public String getId() { - return id; - } - - public void setId(String id) { - this.id = id; - } - - public String getEmail() { - return email; - } - - public void setEmail(String email) { - this.email = email; - } - - public String getName() { - return name; - } - - public void setName(String name) { - this.name = name; - } - - public String toString() { - return "id: " + id + " name: " + name + " e-mail: " + email; - } - -} diff --git a/sca-java-2.x/branches/2.0-Beta2/modules/binding-rest-runtime/src/test/java/services/customer/CustomerService.java b/sca-java-2.x/branches/2.0-Beta2/modules/binding-rest-runtime/src/test/java/services/customer/CustomerService.java deleted file mode 100644 index 94ebc1e1b8..0000000000 --- a/sca-java-2.x/branches/2.0-Beta2/modules/binding-rest-runtime/src/test/java/services/customer/CustomerService.java +++ /dev/null @@ -1,46 +0,0 @@ -/* - * 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 services.customer; - -import javax.jws.WebResult; -import javax.ws.rs.GET; -import javax.ws.rs.POST; -import javax.ws.rs.PUT; -import javax.ws.rs.core.Response; - -import org.oasisopen.sca.annotation.Remotable; - -@Remotable -public interface CustomerService { - - @GET - @WebResult(name = "Customer", targetNamespace = "") - Customer get(); - - @GET - @WebResult(name = "Customer", targetNamespace = "") - Response getResponse(); - - @POST - Response addCustomer(Customer customer); - - @PUT - void updateCustomer(Customer customer); -} diff --git a/sca-java-2.x/branches/2.0-Beta2/modules/binding-rest-runtime/src/test/java/services/customer/CustomerServiceImpl.java b/sca-java-2.x/branches/2.0-Beta2/modules/binding-rest-runtime/src/test/java/services/customer/CustomerServiceImpl.java deleted file mode 100644 index 22e63e0f91..0000000000 --- a/sca-java-2.x/branches/2.0-Beta2/modules/binding-rest-runtime/src/test/java/services/customer/CustomerServiceImpl.java +++ /dev/null @@ -1,58 +0,0 @@ -/* - * 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 services.customer; - -import java.net.URI; -import java.util.HashMap; -import java.util.Map; - -import javax.ws.rs.core.Response; - -import org.oasisopen.sca.annotation.Init; -import org.oasisopen.sca.annotation.Scope; - -@Scope("COMPOSITE") -public class CustomerServiceImpl implements CustomerService { - private Map<String, Customer> customers = new HashMap<String, Customer>(); - - @Init - public void init() { - customers.put("John", new Customer("John", "John", "john@domain.com")); - } - - public Customer get() { - return customers.values().iterator().next(); - } - - public Response getResponse() { - return Response.ok(get()).build(); - } - - public Response addCustomer(Customer customer) { - customers.put(customer.getName(), customer); - return Response.created(URI.create("/001")).build(); - } - - public void updateCustomer(Customer customer) { - if(customers.get(customer.getName()) != null) { - customers.put(customer.getName(), customer); - } - } -} diff --git a/sca-java-2.x/branches/2.0-Beta2/modules/binding-rest-runtime/src/test/java/services/echo/Echo.java b/sca-java-2.x/branches/2.0-Beta2/modules/binding-rest-runtime/src/test/java/services/echo/Echo.java deleted file mode 100644 index b93ff0838b..0000000000 --- a/sca-java-2.x/branches/2.0-Beta2/modules/binding-rest-runtime/src/test/java/services/echo/Echo.java +++ /dev/null @@ -1,41 +0,0 @@ -/* - * 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 services.echo; - -import javax.ws.rs.QueryParam; - -import org.oasisopen.sca.annotation.Remotable; - -/** - * Interface of our sample JSONRPC service. - * - * @version $Rev$ $Date$ - */ -@Remotable -public interface Echo { - - String echo(@QueryParam("msg") String msg); - - int echoInt(@QueryParam("param") int param); - - String [] echoArrayString(@QueryParam("msgArray") String[] stringArray); - - int [] echoArrayInt(@QueryParam("intArray") int[] intArray); - -} diff --git a/sca-java-2.x/branches/2.0-Beta2/modules/binding-rest-runtime/src/test/java/services/echo/EchoImpl.java b/sca-java-2.x/branches/2.0-Beta2/modules/binding-rest-runtime/src/test/java/services/echo/EchoImpl.java deleted file mode 100644 index 6bc22bd41a..0000000000 --- a/sca-java-2.x/branches/2.0-Beta2/modules/binding-rest-runtime/src/test/java/services/echo/EchoImpl.java +++ /dev/null @@ -1,45 +0,0 @@ -/* - * 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 services.echo; - - -/** - * A simple client component that uses a reference with an JSONRPC binding. - * - * @version $Rev$ $Date$ - */ -public class EchoImpl implements Echo { - - public String echo(String msg) { - return msg; - } - - public int echoInt(int param) { - int value = param; - return value; - } - - public String[] echoArrayString(String[] stringArray) { - return stringArray; - } - - public int[] echoArrayInt(int[] intArray) { - return intArray; - } -} diff --git a/sca-java-2.x/branches/2.0-Beta2/modules/binding-rest-runtime/src/test/java/services/store/Catalog.java b/sca-java-2.x/branches/2.0-Beta2/modules/binding-rest-runtime/src/test/java/services/store/Catalog.java deleted file mode 100644 index 7e579c6aba..0000000000 --- a/sca-java-2.x/branches/2.0-Beta2/modules/binding-rest-runtime/src/test/java/services/store/Catalog.java +++ /dev/null @@ -1,51 +0,0 @@ -/* - * 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 services.store; - -import javax.ws.rs.DELETE; -import javax.ws.rs.GET; -import javax.ws.rs.POST; -import javax.ws.rs.PUT; -import javax.ws.rs.Path; -import javax.ws.rs.PathParam; - -import org.oasisopen.sca.annotation.Remotable; - - -@Remotable -public interface Catalog { - - @GET - Items getItem(); - - @GET - @Path("{id}") - Item getItemById(@PathParam("id") String itemId); - - @POST - void addItem(Item item); - - @PUT - void updateItem(Item item); - - @DELETE - @Path("{id}") - void deleteItem(@PathParam("id") String itemId); -} diff --git a/sca-java-2.x/branches/2.0-Beta2/modules/binding-rest-runtime/src/test/java/services/store/CurrencyConverter.java b/sca-java-2.x/branches/2.0-Beta2/modules/binding-rest-runtime/src/test/java/services/store/CurrencyConverter.java deleted file mode 100644 index 45f8949633..0000000000 --- a/sca-java-2.x/branches/2.0-Beta2/modules/binding-rest-runtime/src/test/java/services/store/CurrencyConverter.java +++ /dev/null @@ -1,29 +0,0 @@ -/* - * 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 services.store; - -import org.oasisopen.sca.annotation.Remotable; - -@Remotable -public interface CurrencyConverter { - public double getConversion(String fromCurrenycCode, String toCurrencyCode, double amount); - - public String getCurrencySymbol(String currencyCode); -} diff --git a/sca-java-2.x/branches/2.0-Beta2/modules/binding-rest-runtime/src/test/java/services/store/CurrencyConverterImpl.java b/sca-java-2.x/branches/2.0-Beta2/modules/binding-rest-runtime/src/test/java/services/store/CurrencyConverterImpl.java deleted file mode 100644 index 9956e207e1..0000000000 --- a/sca-java-2.x/branches/2.0-Beta2/modules/binding-rest-runtime/src/test/java/services/store/CurrencyConverterImpl.java +++ /dev/null @@ -1,38 +0,0 @@ -/* - * 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 services.store; - -public class CurrencyConverterImpl implements CurrencyConverter { - public double getConversion(String fromCurrencyCode, String toCurrencyCode, double amount) { - if (toCurrencyCode.equals("USD")) - return amount; - else if (toCurrencyCode.equals("EUR")) - return ((double)Math.round(amount * 0.7256 * 100)) /100; - return 0; - } - - public String getCurrencySymbol(String currencyCode) { - if (currencyCode.equals("USD")) - return "$"; - else if (currencyCode.equals("EUR")) - return "E"; //"€"; - return "?"; - } -} diff --git a/sca-java-2.x/branches/2.0-Beta2/modules/binding-rest-runtime/src/test/java/services/store/FruitsCatalogImpl.java b/sca-java-2.x/branches/2.0-Beta2/modules/binding-rest-runtime/src/test/java/services/store/FruitsCatalogImpl.java deleted file mode 100644 index afe3d3863e..0000000000 --- a/sca-java-2.x/branches/2.0-Beta2/modules/binding-rest-runtime/src/test/java/services/store/FruitsCatalogImpl.java +++ /dev/null @@ -1,76 +0,0 @@ -/* - * 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 services.store; - -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -import org.oasisopen.sca.annotation.Init; -import org.oasisopen.sca.annotation.Property; -import org.oasisopen.sca.annotation.Reference; -import org.oasisopen.sca.annotation.Scope; - -@Scope("COMPOSITE") -public class FruitsCatalogImpl implements Catalog { - - @Property - public String currencyCode = "USD"; - - @Reference - public CurrencyConverter currencyConverter; - - private Map<String, Item> catalog = new HashMap<String, Item>(); - - @Init - public void init() { - String currencySymbol = currencyConverter.getCurrencySymbol(currencyCode); - catalog.put("Apple", new Item("Apple", currencySymbol + currencyConverter.getConversion("USD", currencyCode, 2.99))); - catalog.put("Orange", new Item("Orange", currencySymbol + currencyConverter.getConversion("USD", currencyCode, 3.55))); - catalog.put("Pear", new Item("Pear", currencySymbol + currencyConverter.getConversion("USD", currencyCode, 1.55))); - } - - public Items getItem() { - Items items = new Items(); - items.setItems(new ArrayList<Item>(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/branches/2.0-Beta2/modules/binding-rest-runtime/src/test/java/services/store/Item.java b/sca-java-2.x/branches/2.0-Beta2/modules/binding-rest-runtime/src/test/java/services/store/Item.java deleted file mode 100644 index d5a298eee5..0000000000 --- a/sca-java-2.x/branches/2.0-Beta2/modules/binding-rest-runtime/src/test/java/services/store/Item.java +++ /dev/null @@ -1,50 +0,0 @@ -/* - * 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 services.store; - -public class Item { - private String name; - private String price; - - public Item() { - } - - public Item(String name, String price) { - this.name = name; - this.price = price; - } - - public String getName() { - return name; - } - - public void setName(String name) { - this.name = name; - } - - public String getPrice() { - return price; - } - - public void setPrice(String price) { - this.price = price; - } - -} diff --git a/sca-java-2.x/branches/2.0-Beta2/modules/binding-rest-runtime/src/test/java/services/store/Items.java b/sca-java-2.x/branches/2.0-Beta2/modules/binding-rest-runtime/src/test/java/services/store/Items.java deleted file mode 100644 index 82a995943d..0000000000 --- a/sca-java-2.x/branches/2.0-Beta2/modules/binding-rest-runtime/src/test/java/services/store/Items.java +++ /dev/null @@ -1,37 +0,0 @@ -/* - * 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 services.store; - -import java.util.List; - -/** - * - */ -public class Items { - private List<Item> items; - - public List<Item> getItems() { - return items; - } - - public void setItems(List<Item> items) { - this.items = items; - } -} diff --git a/sca-java-2.x/branches/2.0-Beta2/modules/binding-rest-runtime/src/test/resources/binary.composite b/sca-java-2.x/branches/2.0-Beta2/modules/binding-rest-runtime/src/test/resources/binary.composite deleted file mode 100644 index 821ae7fcbf..0000000000 --- a/sca-java-2.x/branches/2.0-Beta2/modules/binding-rest-runtime/src/test/resources/binary.composite +++ /dev/null @@ -1,33 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!-- - * 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. ---> -<composite xmlns="http://docs.oasis-open.org/ns/opencsa/sca/200912" - xmlns:tuscany="http://tuscany.apache.org/xmlns/sca/1.1" - targetNamespace="http://binary" - name="Binary"> - - <component name="BinaryService"> - <implementation.java class="services.binary.BinaryServiceImpl"/> - <service name="BinaryService"> - <tuscany:binding.rest uri="http://localhost:8085/Binary"> - <tuscany:operationSelector.jaxrs /> - </tuscany:binding.rest> - </service> - </component> -</composite> diff --git a/sca-java-2.x/branches/2.0-Beta2/modules/binding-rest-runtime/src/test/resources/content/test.html b/sca-java-2.x/branches/2.0-Beta2/modules/binding-rest-runtime/src/test/resources/content/test.html deleted file mode 100644 index f4b79d7f01..0000000000 --- a/sca-java-2.x/branches/2.0-Beta2/modules/binding-rest-runtime/src/test/resources/content/test.html +++ /dev/null @@ -1,21 +0,0 @@ -<html> -<!-- - * 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. ---> -<body><p>hello</body> -</html>
\ No newline at end of file diff --git a/sca-java-2.x/branches/2.0-Beta2/modules/binding-rest-runtime/src/test/resources/customer.composite b/sca-java-2.x/branches/2.0-Beta2/modules/binding-rest-runtime/src/test/resources/customer.composite deleted file mode 100644 index 7b33145afd..0000000000 --- a/sca-java-2.x/branches/2.0-Beta2/modules/binding-rest-runtime/src/test/resources/customer.composite +++ /dev/null @@ -1,39 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!-- - * 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. ---> -<composite xmlns="http://docs.oasis-open.org/ns/opencsa/sca/200912" - xmlns:tuscany="http://tuscany.apache.org/xmlns/sca/1.1" - targetNamespace="http://customer" - name="customer"> - - <component name="CustomerService"> - <implementation.java class="services.customer.CustomerServiceImpl"/> - <service name="CustomerService"> - <tuscany:binding.rest uri="http://localhost:8085/Customer"> - <tuscany:wireFormat.xml /> - <tuscany:operationSelector.jaxrs /> - <tuscany:http-headers> - <tuscany:header name="Cache-Control" value="no-cache"/> - <tuscany:header name="Expires" value="-1"/> - <tuscany:header name="X-Tuscany" value="tuscany"/> - </tuscany:http-headers> - </tuscany:binding.rest> - </service> - </component> -</composite> diff --git a/sca-java-2.x/branches/2.0-Beta2/modules/binding-rest-runtime/src/test/resources/echo.composite b/sca-java-2.x/branches/2.0-Beta2/modules/binding-rest-runtime/src/test/resources/echo.composite deleted file mode 100644 index 9e56b84315..0000000000 --- a/sca-java-2.x/branches/2.0-Beta2/modules/binding-rest-runtime/src/test/resources/echo.composite +++ /dev/null @@ -1,44 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?>
-<!--
- * 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.
--->
-<composite xmlns="http://docs.oasis-open.org/ns/opencsa/sca/200912"
- xmlns:tuscany="http://tuscany.apache.org/xmlns/sca/1.1"
- targetNamespace="http://echo"
- xmlns:echo="http://echo"
- name="Echo">
-
- <component name="EchoComponent">
- <implementation.java class="services.echo.EchoImpl"/>
- <service name="Echo">
- <tuscany:binding.rest name="json" uri="http://localhost:8085/EchoService/json">
- <tuscany:operationSelector.rpc />
- <tuscany:response>
- <tuscany:wireFormat.json />
- </tuscany:response>
- </tuscany:binding.rest>
-
- <tuscany:binding.rest name="xml" uri="http://localhost:8085/EchoService/xml">
- <tuscany:operationSelector.rpc />
- <tuscany:response>
- <tuscany:wireFormat.xml />
- </tuscany:response>
- </tuscany:binding.rest>
- </service>
- </component>
-</composite>
diff --git a/sca-java-2.x/branches/2.0-Beta2/modules/binding-rest-runtime/src/test/resources/store.composite b/sca-java-2.x/branches/2.0-Beta2/modules/binding-rest-runtime/src/test/resources/store.composite deleted file mode 100644 index 7a87929985..0000000000 --- a/sca-java-2.x/branches/2.0-Beta2/modules/binding-rest-runtime/src/test/resources/store.composite +++ /dev/null @@ -1,41 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!-- - * 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. ---> -<composite xmlns="http://docs.oasis-open.org/ns/opencsa/sca/200912" - xmlns:tuscany="http://tuscany.apache.org/xmlns/sca/1.1" - targetNamespace="http://store" - name="store"> - - <component name="Catalog"> - <implementation.java class="services.store.FruitsCatalogImpl"/> - <property name="currencyCode">USD</property> - <service name="Catalog"> - <tuscany:binding.rest uri="http://localhost:8085/Catalog"> - <tuscany:wireFormat.json /> - <tuscany:operationSelector.jaxrs /> - </tuscany:binding.rest> - </service> - <reference name="currencyConverter" target="CurrencyConverter"/> - </component> - - <component name="CurrencyConverter"> - <implementation.java class="services.store.CurrencyConverterImpl"/> - </component> - -</composite> diff --git a/sca-java-2.x/branches/2.0-Beta2/modules/binding-rest-runtime/src/test/resources/test.composite b/sca-java-2.x/branches/2.0-Beta2/modules/binding-rest-runtime/src/test/resources/test.composite deleted file mode 100644 index 835633ac6d..0000000000 --- a/sca-java-2.x/branches/2.0-Beta2/modules/binding-rest-runtime/src/test/resources/test.composite +++ /dev/null @@ -1,40 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!-- - * 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. ---> -<composite xmlns="http://docs.oasis-open.org/ns/opencsa/sca/200912" - targetNamespace="http://sample/test" - xmlns:tuscany="http://tuscany.apache.org/xmlns/sca/1.1" - xmlns:sr="http://sample/test" - name="test"> - - <component name="HTTPServiceComponent"> - <implementation.java class="org.apache.tuscany.sca.binding.rest.TestServiceImpl"/> - <service name="Servlet"> - <tuscany:binding.rest uri="http://localhost:8085/httpservice"/> - </service> - </component> - - <component name="HTTPGetComponent"> - <implementation.java class="org.apache.tuscany.sca.binding.rest.TestGetImpl"/> - <service name="TestGetImpl"> - <tuscany:binding.rest uri="http://localhost:8085/httpget"/> - </service> - </component> - -</composite> diff --git a/sca-java-2.x/branches/2.0-Beta2/modules/binding-rest-runtime/src/test/resources/testCache.composite b/sca-java-2.x/branches/2.0-Beta2/modules/binding-rest-runtime/src/test/resources/testCache.composite deleted file mode 100644 index 3401608c51..0000000000 --- a/sca-java-2.x/branches/2.0-Beta2/modules/binding-rest-runtime/src/test/resources/testCache.composite +++ /dev/null @@ -1,33 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!-- - * 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. ---> -<composite xmlns="http://docs.oasis-open.org/ns/opencsa/sca/200912" - targetNamespace="http://sample/test" - xmlns:tuscany="http://tuscany.apache.org/xmlns/sca/1.1" - xmlns:sr="http://sample/test" - name="testCache"> - - <component name="HTTPBindingComponent"> - <implementation.java class="org.apache.tuscany.sca.binding.rest.TestBindingCacheImpl"/> - <service name="TestBindingCacheImpl"> - <tuscany:binding.rest uri="http://localhost:8085/httpbinding"/> - </service> - </component> - -</composite> |