diff options
Diffstat (limited to '')
83 files changed, 0 insertions, 9637 deletions
diff --git a/sca-java-2.x/branches/2.0-Beta2/modules/interface-java-jaxrs/LICENSE b/sca-java-2.x/branches/2.0-Beta2/modules/interface-java-jaxrs/LICENSE deleted file mode 100644 index 8aa906c321..0000000000 --- a/sca-java-2.x/branches/2.0-Beta2/modules/interface-java-jaxrs/LICENSE +++ /dev/null @@ -1,205 +0,0 @@ - - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright [yyyy] [name of copyright owner] - - Licensed 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. - - - diff --git a/sca-java-2.x/branches/2.0-Beta2/modules/interface-java-jaxrs/META-INF/MANIFEST.MF b/sca-java-2.x/branches/2.0-Beta2/modules/interface-java-jaxrs/META-INF/MANIFEST.MF deleted file mode 100644 index f45e70ad23..0000000000 --- a/sca-java-2.x/branches/2.0-Beta2/modules/interface-java-jaxrs/META-INF/MANIFEST.MF +++ /dev/null @@ -1,18 +0,0 @@ -Manifest-Version: 1.0
-Export-Package: org.apache.tuscany.sca.interfacedef.java.jaxrs;version="2.0.0"
-SCA-Version: 1.1
-Bundle-Name: Apache Tuscany Java Interface for JAX-RS
-Bundle-Vendor: The Apache Software Foundation
-Bundle-Version: 2.0.0
-Bundle-ManifestVersion: 2
-Bundle-License: http://www.apache.org/licenses/LICENSE-2.0.txt
-Bundle-Description: Apache Tuscany Java Interface for JAXWS
-Bundle-SymbolicName: org.apache.tuscany.sca.interface.java.jaxrs
-Bundle-DocURL: http://www.apache.org/
-Bundle-RequiredExecutionEnvironment: J2SE-1.5,JavaSE-1.6 -Import-Package: javax.ws.rs,
- org.apache.tuscany.sca.interfacedef,
- org.apache.tuscany.sca.interfacedef.java,
- org.apache.tuscany.sca.interfacedef.java.impl,
- org.apache.tuscany.sca.interfacedef.java.introspect,
- org.objectweb.asm;version="3.1.0"
diff --git a/sca-java-2.x/branches/2.0-Beta2/modules/interface-java-jaxrs/NOTICE b/sca-java-2.x/branches/2.0-Beta2/modules/interface-java-jaxrs/NOTICE deleted file mode 100644 index ad2ba40961..0000000000 --- a/sca-java-2.x/branches/2.0-Beta2/modules/interface-java-jaxrs/NOTICE +++ /dev/null @@ -1,6 +0,0 @@ -${pom.name} -Copyright (c) 2005 - 2010 The Apache Software Foundation - -This product includes software developed by -The Apache Software Foundation (http://www.apache.org/). - diff --git a/sca-java-2.x/branches/2.0-Beta2/modules/interface-java-jaxrs/pom.xml b/sca-java-2.x/branches/2.0-Beta2/modules/interface-java-jaxrs/pom.xml deleted file mode 100644 index 4240514be5..0000000000 --- a/sca-java-2.x/branches/2.0-Beta2/modules/interface-java-jaxrs/pom.xml +++ /dev/null @@ -1,60 +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. ---> -<project> - <modelVersion>4.0.0</modelVersion> - <parent> - <groupId>org.apache.tuscany.sca</groupId> - <artifactId>tuscany-modules</artifactId> - <version>2.0-Beta2-SNAPSHOT</version> - <relativePath>../pom.xml</relativePath> - </parent> - <artifactId>tuscany-interface-java-jaxrs</artifactId> - <name>Apache Tuscany SCA Interface Java For JAX_RS</name> - - <dependencies> - <dependency> - <groupId>javax.ws.rs</groupId> - <artifactId>jsr311-api</artifactId> - <version>1.1.1</version> - </dependency> - - <dependency> - <groupId>org.apache.tuscany.sca</groupId> - <artifactId>tuscany-core-runtime-pom</artifactId> - <type>pom</type> - <scope>provided</scope> - <version>2.0-Beta2-SNAPSHOT</version> - </dependency> - - <dependency> - <groupId>junit</groupId> - <artifactId>junit</artifactId> - <version>4.8.1</version> - <scope>test</scope> - </dependency> - <dependency> - <groupId>asm</groupId> - <artifactId>asm</artifactId> - <version>3.1</version> - <type>jar</type> - <scope>provided</scope> - </dependency> - </dependencies> -</project> diff --git a/sca-java-2.x/branches/2.0-Beta2/modules/interface-java-jaxrs/src/main/java/org/apache/tuscany/sca/interfacedef/java/jaxrs/CodeGenerationHelper.java b/sca-java-2.x/branches/2.0-Beta2/modules/interface-java-jaxrs/src/main/java/org/apache/tuscany/sca/interfacedef/java/jaxrs/CodeGenerationHelper.java deleted file mode 100644 index e1891e6c0b..0000000000 --- a/sca-java-2.x/branches/2.0-Beta2/modules/interface-java-jaxrs/src/main/java/org/apache/tuscany/sca/interfacedef/java/jaxrs/CodeGenerationHelper.java +++ /dev/null @@ -1,280 +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.interfacedef.java.jaxrs; - -import java.lang.reflect.Array; -import java.lang.reflect.GenericArrayType; -import java.lang.reflect.ParameterizedType; -import java.lang.reflect.Type; -import java.lang.reflect.TypeVariable; -import java.lang.reflect.WildcardType; -import java.util.ArrayList; -import java.util.Collection; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -import org.objectweb.asm.Opcodes; - -/** - * @version $Rev$ $Date$ - */ -public class CodeGenerationHelper { - /** - * @param type - * @return - */ - public static Class<?> getErasure(Type type) { - if (type instanceof Class) { - return (Class<?>)type; - } else if (type instanceof GenericArrayType) { - GenericArrayType arrayType = (GenericArrayType)type; - Class<?> componentType = getErasure(arrayType.getGenericComponentType()); - return Array.newInstance(componentType, 0).getClass(); - } else if (type instanceof ParameterizedType) { - ParameterizedType pType = (ParameterizedType)type; - return getErasure(pType.getRawType()); - } else if (type instanceof WildcardType) { - WildcardType wType = (WildcardType)type; - Type[] types = wType.getUpperBounds(); - if (types.length == 0) { - return Object.class; - } - return getErasure(types[0]); - } else if (type instanceof TypeVariable) { - TypeVariable<?> var = (TypeVariable<?>)type; - Type[] types = var.getBounds(); - if (types.length == 0) { - return Object.class; - } - return getErasure(types[0]); - } - return null; - } - - /** - * @param type - * @return - */ - public static String getJAXWSSignature(Type type) { - Class<?> cls = getErasure(type); - if (Collection.class.isAssignableFrom(cls) && (type instanceof ParameterizedType)) { - ParameterizedType pType = (ParameterizedType)type; - Type p = pType.getActualTypeArguments()[0]; - StringBuffer sb = new StringBuffer(); - sb.append(getSignature(cls)); - sb.deleteCharAt(sb.length() - 1); // Remove ; - sb.append('<').append(getSignature(getErasure(p))).append(">;"); - return sb.toString(); - } else if (Map.class.isAssignableFrom(cls) && (type instanceof ParameterizedType)) { - ParameterizedType pType = (ParameterizedType)type; - Type key = pType.getActualTypeArguments()[0]; - Type value = pType.getActualTypeArguments()[1]; - StringBuffer sb = new StringBuffer(); - sb.append(getSignature(cls)); - sb.deleteCharAt(sb.length() - 1); // Remove ; - sb.append('<').append(getSignature(getErasure(key))).append(getSignature(getErasure(value))).append(">;"); - return sb.toString(); - } else { - return getSignature(cls); - } - } - - /** - * @param type - * @return - */ - public static String getSignature(Type type) { - if (!(type instanceof Class)) { - if (type instanceof ParameterizedType) { - ParameterizedType pType = (ParameterizedType)type; - StringBuffer sb = new StringBuffer(); - String rawType = getSignature(pType.getRawType()); - sb.append(rawType.substring(0, rawType.length() - 1)); - sb.append('<'); - for (Type t : pType.getActualTypeArguments()) { - String argType = getSignature(t); - sb.append(argType); - } - sb.append('>'); - sb.append(rawType.substring(rawType.length() - 1)); - return sb.toString(); - } - if (type instanceof TypeVariable) { - return "T" + ((TypeVariable<?>)type).getName() + ";"; - } - if (type instanceof GenericArrayType) { - GenericArrayType arrayType = (GenericArrayType)type; - return "[" + getSignature(arrayType.getGenericComponentType()); - } - if (type instanceof WildcardType) { - WildcardType wType = (WildcardType)type; - Type[] types = wType.getUpperBounds(); - StringBuffer sb = new StringBuffer(); - if (types.length == 0 || !(types.length == 1 && types[0] == Object.class)) { - sb.append('+'); - for (Type t : types) { - sb.append(getSignature(t)); - } - } - types = wType.getLowerBounds(); - if (types.length != 0) { - sb.append('-'); - for (Type t : wType.getLowerBounds()) { - sb.append(getSignature(t)); - } - } - if (sb.length() == 0) { - return "*"; - } - return sb.toString(); - } - } - Class<?> cls = (Class<?>)type; - return org.objectweb.asm.Type.getDescriptor(cls); - } - - /** - * Get the actual type arguments a child class has used to extend a generic base class. - * - * @param baseClass the base class - * @param childClass the child class - * @return a list of the raw classes for the actual type arguments. - */ - public static <T> List<Class<?>> resovleTypeArguments(Class<T> baseClass, Class<? extends T> childClass) { - Map<Type, Type> resolvedTypes = new HashMap<Type, Type>(); - Type type = childClass; - // start walking up the inheritance hierarchy until we hit baseClass - while (!getErasure(type).equals(baseClass)) { - if (type instanceof Class) { - // there is no useful information for us in raw types, so just keep going. - type = ((Class<?>)type).getGenericSuperclass(); - } else { - ParameterizedType parameterizedType = (ParameterizedType)type; - Class<?> rawType = getErasure(parameterizedType.getRawType()); - - Type[] actualTypeArguments = parameterizedType.getActualTypeArguments(); - TypeVariable<?>[] typeParameters = rawType.getTypeParameters(); - for (int i = 0; i < actualTypeArguments.length; i++) { - resolvedTypes.put(typeParameters[i], actualTypeArguments[i]); - } - - if (!rawType.equals(baseClass)) { - type = rawType.getGenericSuperclass(); - } - } - } - - // finally, for each actual type argument provided to baseClass, determine (if possible) - // the raw class for that type argument. - Type[] actualTypeArguments; - if (type instanceof Class) { - actualTypeArguments = ((Class<?>)type).getTypeParameters(); - } else { - actualTypeArguments = ((ParameterizedType)type).getActualTypeArguments(); - } - List<Class<?>> typeArgumentsAsClasses = new ArrayList<Class<?>>(); - // resolve types by chasing down type variables. - for (Type baseType : actualTypeArguments) { - while (resolvedTypes.containsKey(baseType)) { - baseType = resolvedTypes.get(baseType); - } - typeArgumentsAsClasses.add(getErasure(baseType)); - } - return typeArgumentsAsClasses; - } - - /* - signatures.put(boolean.class, "Z"); - signatures.put(byte.class, "B"); - signatures.put(char.class, "C"); - signatures.put(short.class, "S"); - signatures.put(int.class, "I"); - signatures.put(long.class, "J"); - signatures.put(float.class, "F"); - signatures.put(double.class, "D"); - */ - public static int getLoadOPCode(String signature) { - if ("Z".equals(signature) || "B".equals(signature) - || "C".equals(signature) - || "S".equals(signature) - || "I".equals(signature)) { - return Opcodes.ILOAD; - } - - if ("J".equals(signature)) { - return Opcodes.LLOAD; - } - - if ("F".equals(signature)) { - return Opcodes.FLOAD; - } - - if ("D".equals(signature)) { - return Opcodes.DLOAD; - } - - return Opcodes.ALOAD; - - } - - public static int getReturnOPCode(String signature) { - if ("Z".equals(signature) || "B".equals(signature) - || "C".equals(signature) - || "S".equals(signature) - || "I".equals(signature)) { - return Opcodes.IRETURN; - } - - if ("J".equals(signature)) { - return Opcodes.LRETURN; - } - - if ("F".equals(signature)) { - return Opcodes.FRETURN; - } - - if ("D".equals(signature)) { - return Opcodes.DRETURN; - } - if ("V".equals(signature)) { - return Opcodes.RETURN; - } - - return Opcodes.ARETURN; - - } - - /** - * Get the package prefix for generated JAXWS artifacts - * @param cls - * @return - */ - public static String getPackagePrefix(Class<?> cls) { - String name = cls.getName(); - int index = name.lastIndexOf('.'); - if (index == -1) { - return "jaxws."; - } else { - return name.substring(0, index) + ".jaxws."; - } - } - -} diff --git a/sca-java-2.x/branches/2.0-Beta2/modules/interface-java-jaxrs/src/main/java/org/apache/tuscany/sca/interfacedef/java/jaxrs/GeneratedClassLoader.java b/sca-java-2.x/branches/2.0-Beta2/modules/interface-java-jaxrs/src/main/java/org/apache/tuscany/sca/interfacedef/java/jaxrs/GeneratedClassLoader.java deleted file mode 100644 index 5d296dfe12..0000000000 --- a/sca-java-2.x/branches/2.0-Beta2/modules/interface-java-jaxrs/src/main/java/org/apache/tuscany/sca/interfacedef/java/jaxrs/GeneratedClassLoader.java +++ /dev/null @@ -1,86 +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.interfacedef.java.jaxrs; - -import java.net.URL; -import java.net.URLClassLoader; -import java.util.HashMap; -import java.util.Map; - -public class GeneratedClassLoader extends URLClassLoader { - private class GeneratedClass { - private String className; - private byte[] byteCode; - private Class<?> cls; - - public GeneratedClass(String className, byte[] byteCode) { - super(); - this.className = className; - this.byteCode = byteCode; - } - - public synchronized Class<?> getGeneratedClass() { - if (cls == null) { - cls = defineClass(className, byteCode, 0, byteCode.length); - } - return cls; - } - } - - private Map<String, GeneratedClass> generatedClasses = new HashMap<String, GeneratedClass>(); - - public GeneratedClassLoader(ClassLoader parentLoader) { - super(new URL[0], parentLoader); - } - - @Override - protected Class<?> findClass(String className) throws ClassNotFoundException { - GeneratedClass cls = generatedClasses.get(className); - if (cls != null) { - return cls.getGeneratedClass(); - } - return super.findClass(className); - } - - public synchronized Class<?> getGeneratedClass(String className, byte[] byteCode) { - GeneratedClass cls = generatedClasses.get(className); - if (cls == null) { - cls = new GeneratedClass(className, byteCode); - generatedClasses.put(className, cls); - } - return cls.getGeneratedClass(); - } - - @Override - public String toString() { - if( getParent() != null ) { - return "java.net.URLClassLoader:\n" - + "hashcode: " + hashCode() + "\n" - + "URLs: " + java.util.Arrays.asList( - getURLs() ) + "\n" - + "parent { " + getParent() + " }\n"; - } else { - return "java.net.URLClassLoader:\n" - + "hashcode: " + hashCode() + "\n" - + "URLs: " + java.util.Arrays.asList( - getURLs() ) + "\n"; - } - } -} diff --git a/sca-java-2.x/branches/2.0-Beta2/modules/interface-java-jaxrs/src/main/java/org/apache/tuscany/sca/interfacedef/java/jaxrs/JAXRSJavaInterfaceProcessor.java b/sca-java-2.x/branches/2.0-Beta2/modules/interface-java-jaxrs/src/main/java/org/apache/tuscany/sca/interfacedef/java/jaxrs/JAXRSJavaInterfaceProcessor.java deleted file mode 100644 index 83f88c98cb..0000000000 --- a/sca-java-2.x/branches/2.0-Beta2/modules/interface-java-jaxrs/src/main/java/org/apache/tuscany/sca/interfacedef/java/jaxrs/JAXRSJavaInterfaceProcessor.java +++ /dev/null @@ -1,116 +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.interfacedef.java.jaxrs; - -import java.lang.annotation.Annotation; -import java.lang.reflect.Method; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -import javax.ws.rs.DELETE; -import javax.ws.rs.GET; -import javax.ws.rs.HEAD; -import javax.ws.rs.HttpMethod; -import javax.ws.rs.OPTIONS; -import javax.ws.rs.POST; -import javax.ws.rs.PUT; - -import org.apache.tuscany.sca.interfacedef.InvalidInterfaceException; -import org.apache.tuscany.sca.interfacedef.Operation; -import org.apache.tuscany.sca.interfacedef.java.JavaInterface; -import org.apache.tuscany.sca.interfacedef.java.JavaOperation; -import org.apache.tuscany.sca.interfacedef.java.introspect.JavaInterfaceVisitor; - -public class JAXRSJavaInterfaceProcessor implements JavaInterfaceVisitor { - private static Map<String, Class<?>> mapping = new HashMap<String, Class<?>>(); - static { - mapping.put(HttpMethod.GET, GET.class); - mapping.put(HttpMethod.POST, POST.class); - mapping.put(HttpMethod.PUT, PUT.class); - mapping.put(HttpMethod.DELETE, DELETE.class); - mapping.put(HttpMethod.HEAD, HEAD.class); - mapping.put(HttpMethod.OPTIONS, OPTIONS.class); - } - - private boolean introspectHTTPMethod(JavaOperation operation) { - Method method = operation.getJavaMethod(); - - String methodName = null; - - /** - * A request method designator is a runtime annotation that is annotated with the @HttpMethod annotation. - * JAX-RS defines a set of request method designators for the common HTTP methods: @GET, @POST, @PUT, - * @DELETE, @HEAD. Users may define their own custom request method designators including alternate - * designators for the common HTTP methods. - */ - for (Annotation a : method.getAnnotations()) { - Class<?> annotationType = a.annotationType(); - if (annotationType == HttpMethod.class) { - methodName = ((HttpMethod)a).value(); - break; - } - // Http method related annotations such as @GET, @POST will have itself annotated with - // @HttpMethod - HttpMethod m = a.annotationType().getAnnotation(HttpMethod.class); - if (m != null) { - methodName = m.value(); - break; - } - } - - boolean jaxrs = false; - Class<?> type = mapping.get(methodName); - if (type != null) { - jaxrs = true; - operation.getAttributes().put(type, Boolean.TRUE); - Map<Object, Object> attrs = operation.getInterface().getAttributes(); - List<Operation> operations = (List<Operation>)attrs.get(type); - if (operations == null) { - operations = new ArrayList<Operation>(); - attrs.put(type, operations); - operations.add(operation); - } else { - operations.add(operation); - } - } - - return jaxrs; - - } - - public void visitInterface(JavaInterface contract) throws InvalidInterfaceException { - - boolean hasJAXRSAnnotarions = false; - - for (Operation op : contract.getOperations()) { - final JavaOperation operation = (JavaOperation)op; - if (introspectHTTPMethod(operation)) { - hasJAXRSAnnotarions = true; - } - } - - // Always set JAX-RS annotated interfaces as remotables - if (hasJAXRSAnnotarions) { - contract.setRemotable(true); - } - } -} diff --git a/sca-java-2.x/branches/2.0-Beta2/modules/interface-java-jaxrs/src/main/java/org/apache/tuscany/sca/interfacedef/java/jaxrs/RootResourceClassGenerator.java b/sca-java-2.x/branches/2.0-Beta2/modules/interface-java-jaxrs/src/main/java/org/apache/tuscany/sca/interfacedef/java/jaxrs/RootResourceClassGenerator.java deleted file mode 100644 index c3d1ec4421..0000000000 --- a/sca-java-2.x/branches/2.0-Beta2/modules/interface-java-jaxrs/src/main/java/org/apache/tuscany/sca/interfacedef/java/jaxrs/RootResourceClassGenerator.java +++ /dev/null @@ -1,210 +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.interfacedef.java.jaxrs; - -import java.lang.reflect.Field; -import java.lang.reflect.Method; - -import org.objectweb.asm.AnnotationVisitor; -import org.objectweb.asm.ClassWriter; -import org.objectweb.asm.FieldVisitor; -import org.objectweb.asm.Label; -import org.objectweb.asm.MethodVisitor; -import org.objectweb.asm.Opcodes; -import org.objectweb.asm.Type; - -public class RootResourceClassGenerator implements Opcodes { - - private static final String DELEGATE_FIELD = "delegate"; - - public static Class<?> generateRootResourceClass(Class<?> interfaze, String path, String consumes, String produces) - throws Exception { - if (!interfaze.isInterface()) { - throw new IllegalArgumentException(interfaze + " is not an interface."); - } - GeneratedClassLoader classLoader = new GeneratedClassLoader(interfaze.getClassLoader()); - String interfaceName = interfaze.getName(); - int index = interfaze.getName().lastIndexOf('.'); - String className = - interfaceName.substring(0, index) + ".Generated" + interfaceName.substring(index + 1) + "Impl"; - - final byte[] content = generate(interfaze, path, consumes, produces); - Class<?> cls = classLoader.getGeneratedClass(className, content); - return cls; - } - - public static void injectProxy(Class<?> generatedResourceClass, Object proxy) throws Exception { - Field field = generatedResourceClass.getField("delegate"); - field.set(null, proxy); - } - - public static byte[] generate(Class<?> interfaze, String path, String consumes, String produces) throws Exception { - String interfaceName = Type.getInternalName(interfaze); - int index = interfaceName.lastIndexOf('/'); - String className = - interfaceName.substring(0, index) + "/Generated" + interfaceName.substring(index + 1) + "Impl"; - - ClassWriter cw = new ClassWriter(ClassWriter.COMPUTE_MAXS); - - declareClass(cw, interfaceName, className); - - annotatePath(cw, path); - annotateContentTypes(cw, consumes, produces); - declareField(cw, interfaceName); - declareConstructor(cw, className); - - for (Method method : interfaze.getMethods()) { - if (!(method.getDeclaringClass() == Object.class)) { - generateMethod(cw, interfaceName, className, method, consumes, produces); - } - } - cw.visitEnd(); - - return cw.toByteArray(); - } - - // public <ReturnType> method(<Type0> arg0, ..., <TypeN> argN) throws <ExpectionType0>, ..., <ExceptionTypeK> - private static void generateMethod(ClassWriter cw, - String interfaceName, - String className, - Method method, - String consumes, - String produces) { - String methodDescriptor = Type.getMethodDescriptor(method); - - MethodVisitor mv = - cw.visitMethod(ACC_PUBLIC, method.getName(), methodDescriptor, null, getExceptionInternalNames(method)); - - mv.visitCode(); - mv.visitFieldInsn(GETSTATIC, className, DELEGATE_FIELD, getSignature(interfaceName)); - Class<?>[] paramTypes = method.getParameterTypes(); - for (int i = 0; i < paramTypes.length; i++) { - String signature = Type.getDescriptor(paramTypes[i]); - mv.visitVarInsn(CodeGenerationHelper.getLoadOPCode(signature), i + 1); - } - mv.visitMethodInsn(INVOKEINTERFACE, interfaceName, method.getName(), methodDescriptor); - - Class<?> returnType = method.getReturnType(); - mv.visitInsn(CodeGenerationHelper.getReturnOPCode(Type.getDescriptor(returnType))); - int size = paramTypes.length + 1; - mv.visitMaxs(size, size); - mv.visitEnd(); - } - - private static String[] getExceptionInternalNames(Method method) { - Class<?>[] types = method.getExceptionTypes(); - if (types.length == 0) { - return null; - } - String[] names = new String[types.length]; - for (int i = 0; i < types.length; i++) { - names[i] = Type.getInternalName(types[i]); - } - return names; - } - - private static String getSignature(String interfaceName) { - return "L" + interfaceName + ";"; - } - - private static void declareConstructor(ClassWriter cw, String className) { - MethodVisitor mv; - mv = cw.visitMethod(ACC_PUBLIC, "<init>", "()V", null, null); - mv.visitCode(); - Label l0 = new Label(); - mv.visitLabel(l0); - // mv.visitLineNumber(37, l0); - mv.visitVarInsn(ALOAD, 0); - mv.visitMethodInsn(INVOKESPECIAL, "java/lang/Object", "<init>", "()V"); - mv.visitInsn(RETURN); - Label l1 = new Label(); - mv.visitLabel(l1); - mv.visitLocalVariable("this", getSignature(className), null, l0, l1, 0); - mv.visitMaxs(1, 1); - mv.visitEnd(); - } - - // public static <Interface> delegate; - private static void declareField(ClassWriter cw, String interfaceName) { - FieldVisitor fv = - cw.visitField(ACC_PUBLIC + ACC_STATIC, DELEGATE_FIELD, getSignature(interfaceName), null, null); - fv.visitEnd(); - } - - // public class _<Interface>Impl implements <Interface> - private static void declareClass(ClassWriter cw, String interfaceName, String className) { - cw.visit(V1_5, ACC_PUBLIC + ACC_SUPER, className, null, "java/lang/Object", new String[] {interfaceName}); - } - - // @Path(<path>) - private static void annotatePath(ClassWriter cw, String path) { - AnnotationVisitor av = cw.visitAnnotation("Ljavax/ws/rs/Path;", true); - av.visit("value", path); - av.visitEnd(); - } - - // @Consumes(<contentTypes>) - // @Provides(<contentTypes>) - private static void annotateContentTypes(ClassWriter cw, String consumes, String produces) { - AnnotationVisitor av = null; - if (consumes != null) { - av = cw.visitAnnotation("Ljavax/ws/rs/Consumes;", true); - AnnotationVisitor av1 = av.visitArray("value"); - for (String s : consumes.split("(,| )")) { - av1.visit(null, s.trim()); - } - av1.visitEnd(); - av.visitEnd(); - } - if (produces != null) { - av = cw.visitAnnotation("Ljavax/ws/rs/Produces;", true); - AnnotationVisitor av1 = av.visitArray("value"); - for (String s : produces.split("(,| )")) { - av1.visit(null, s.trim()); - } - av1.visitEnd(); - av.visitEnd(); - } - } - - // @Consumes(<contentTypes>) - // @Provides(<contentTypes>) - private static void annotateContentTypes(MethodVisitor mv, String consumes, String produces) { - AnnotationVisitor av = null; - if (consumes != null) { - av = mv.visitAnnotation("Ljavax/ws/rs/Consumes;", true); - AnnotationVisitor av1 = av.visitArray("value"); - for (String s : consumes.split("(,| )")) { - av1.visit(null, s.trim()); - } - av1.visitEnd(); - av.visitEnd(); - } - if (produces != null) { - av = mv.visitAnnotation("Ljavax/ws/rs/Produces;", true); - AnnotationVisitor av1 = av.visitArray("value"); - for (String s : produces.split("(,| )")) { - av1.visit(null, s.trim()); - } - av1.visitEnd(); - av.visitEnd(); - } - } -} diff --git a/sca-java-2.x/branches/2.0-Beta2/modules/interface-java-jaxrs/src/main/resources/META-INF/services/org.apache.tuscany.sca.interfacedef.java.introspect.JavaInterfaceVisitor b/sca-java-2.x/branches/2.0-Beta2/modules/interface-java-jaxrs/src/main/resources/META-INF/services/org.apache.tuscany.sca.interfacedef.java.introspect.JavaInterfaceVisitor deleted file mode 100644 index 9101d744b3..0000000000 --- a/sca-java-2.x/branches/2.0-Beta2/modules/interface-java-jaxrs/src/main/resources/META-INF/services/org.apache.tuscany.sca.interfacedef.java.introspect.JavaInterfaceVisitor +++ /dev/null @@ -1,17 +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. -org.apache.tuscany.sca.interfacedef.java.jaxrs.JAXRSJavaInterfaceProcessor;ranking=100
diff --git a/sca-java-2.x/branches/2.0-Beta2/modules/interface-java-jaxrs/src/test/java/org/apache/tuscany/sca/interfacedef/java/jaxrs/Bean.java b/sca-java-2.x/branches/2.0-Beta2/modules/interface-java-jaxrs/src/test/java/org/apache/tuscany/sca/interfacedef/java/jaxrs/Bean.java deleted file mode 100644 index 20a4276b8b..0000000000 --- a/sca-java-2.x/branches/2.0-Beta2/modules/interface-java-jaxrs/src/test/java/org/apache/tuscany/sca/interfacedef/java/jaxrs/Bean.java +++ /dev/null @@ -1,31 +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.interfacedef.java.jaxrs; - -import javax.ws.rs.GET; - -import org.oasisopen.sca.annotation.Remotable; - -@Remotable -public interface Bean { - - @GET - String[] get(); -} diff --git a/sca-java-2.x/branches/2.0-Beta2/modules/interface-java-jaxrs/src/test/java/org/apache/tuscany/sca/interfacedef/java/jaxrs/JAXRSInterfaceProcessorTestCase.java b/sca-java-2.x/branches/2.0-Beta2/modules/interface-java-jaxrs/src/test/java/org/apache/tuscany/sca/interfacedef/java/jaxrs/JAXRSInterfaceProcessorTestCase.java deleted file mode 100644 index b680eaa491..0000000000 --- a/sca-java-2.x/branches/2.0-Beta2/modules/interface-java-jaxrs/src/test/java/org/apache/tuscany/sca/interfacedef/java/jaxrs/JAXRSInterfaceProcessorTestCase.java +++ /dev/null @@ -1,66 +0,0 @@ -package org.apache.tuscany.sca.interfacedef.java.jaxrs; -/* - * 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. - */ - - -import static org.junit.Assert.assertTrue; - -import java.util.List; - -import javax.ws.rs.GET; - -import junit.framework.Assert; - -import org.apache.tuscany.sca.core.DefaultExtensionPointRegistry; -import org.apache.tuscany.sca.core.ExtensionPointRegistry; -import org.apache.tuscany.sca.interfacedef.Operation; -import org.apache.tuscany.sca.interfacedef.java.DefaultJavaInterfaceFactory; -import org.apache.tuscany.sca.interfacedef.java.JavaInterface; -import org.junit.Before; -import org.junit.Test; - - -public class JAXRSInterfaceProcessorTestCase { - private ExtensionPointRegistry registry; - - @Before - public void setUp() throws Exception { - registry = new DefaultExtensionPointRegistry(); - } - - @Test - public final void testProcessor() throws Exception { - DefaultJavaInterfaceFactory iFactory = new DefaultJavaInterfaceFactory(registry); - JavaInterface contract = iFactory.createJavaInterface(Bean.class); - - assertTrue(contract.isRemotable()); - - Assert.assertEquals(1,contract.getOperations().size()); - - List<Operation> getOperations = (List<Operation>) contract.getAttributes().get(GET.class); - Assert.assertEquals(1,getOperations.size()); - - //list operation - System.out.println(">>> JAX-RS Operations"); - for(Operation o : contract.getOperations()) { - System.out.println(">>>>>>" + o); - } - - } -} diff --git a/sca-java-2.x/branches/2.0-Beta2/modules/interface-java-jaxrs/src/test/java/org/apache/tuscany/sca/interfacedef/java/jaxrs/MockedResource.java b/sca-java-2.x/branches/2.0-Beta2/modules/interface-java-jaxrs/src/test/java/org/apache/tuscany/sca/interfacedef/java/jaxrs/MockedResource.java deleted file mode 100644 index 46d501d4be..0000000000 --- a/sca-java-2.x/branches/2.0-Beta2/modules/interface-java-jaxrs/src/test/java/org/apache/tuscany/sca/interfacedef/java/jaxrs/MockedResource.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.interfacedef.java.jaxrs; - -public class MockedResource implements Resource { - private String value; - - public MockedResource() { - super(); - } - - public String get() { - return value; - } - - public void create(String value) { - this.value = value; - } - - public void delete() { - value = null; - } - - public void update(String value) { - this.value = value; - } -} diff --git a/sca-java-2.x/branches/2.0-Beta2/modules/interface-java-jaxrs/src/test/java/org/apache/tuscany/sca/interfacedef/java/jaxrs/Resource.java b/sca-java-2.x/branches/2.0-Beta2/modules/interface-java-jaxrs/src/test/java/org/apache/tuscany/sca/interfacedef/java/jaxrs/Resource.java deleted file mode 100644 index ac9fd514bd..0000000000 --- a/sca-java-2.x/branches/2.0-Beta2/modules/interface-java-jaxrs/src/test/java/org/apache/tuscany/sca/interfacedef/java/jaxrs/Resource.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.interfacedef.java.jaxrs; - -import javax.ws.rs.DELETE; -import javax.ws.rs.GET; -import javax.ws.rs.POST; -import javax.ws.rs.PUT; - -import org.oasisopen.sca.annotation.Remotable; - -@Remotable -public interface Resource { - - @GET - String get(); - - @PUT - void update(String value); - - @POST - void create(String value); - - @DELETE - void delete(); - -} diff --git a/sca-java-2.x/branches/2.0-Beta2/modules/interface-java-jaxrs/src/test/java/org/apache/tuscany/sca/interfacedef/java/jaxrs/ResourceWrapper.java b/sca-java-2.x/branches/2.0-Beta2/modules/interface-java-jaxrs/src/test/java/org/apache/tuscany/sca/interfacedef/java/jaxrs/ResourceWrapper.java deleted file mode 100644 index 23b674778e..0000000000 --- a/sca-java-2.x/branches/2.0-Beta2/modules/interface-java-jaxrs/src/test/java/org/apache/tuscany/sca/interfacedef/java/jaxrs/ResourceWrapper.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.interfacedef.java.jaxrs; - -import javax.ws.rs.Consumes; -import javax.ws.rs.Path; -import javax.ws.rs.Produces; - - -@Path("myURI") -@Produces({"application/xml", "application/json"}) -@Consumes({"application/xml", "application/json"}) -public class ResourceWrapper implements Resource { - public static Resource delegate; - - public ResourceWrapper() { - super(); - } - - - public String get() { - return delegate.get(); - } - - public void create(String value) { - delegate.create(value); - } - - public void delete() { - delegate.delete(); - } - - public void update(String value) { - delegate.update(value); - } - -} diff --git a/sca-java-2.x/branches/2.0-Beta2/modules/interface-java-jaxrs/src/test/java/org/apache/tuscany/sca/interfacedef/java/jaxrs/RootResourceClassGeneratorTestCase.java b/sca-java-2.x/branches/2.0-Beta2/modules/interface-java-jaxrs/src/test/java/org/apache/tuscany/sca/interfacedef/java/jaxrs/RootResourceClassGeneratorTestCase.java deleted file mode 100644 index aa6abcd5f6..0000000000 --- a/sca-java-2.x/branches/2.0-Beta2/modules/interface-java-jaxrs/src/test/java/org/apache/tuscany/sca/interfacedef/java/jaxrs/RootResourceClassGeneratorTestCase.java +++ /dev/null @@ -1,69 +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.interfacedef.java.jaxrs; - -import java.lang.reflect.Field; -import java.lang.reflect.Modifier; - -import javax.ws.rs.Consumes; -import javax.ws.rs.Path; -import javax.ws.rs.Produces; - -import org.junit.Assert; -import org.junit.Test; - -/** - * - */ -public class RootResourceClassGeneratorTestCase { - @Test - public void testGenerator() throws Exception { - Class<?> cls = RootResourceClassGenerator.generateRootResourceClass(Resource.class, "myURI", "application/xml,application/json", "application/xml,application/json"); - Assert.assertTrue(cls.isAnnotationPresent(Path.class)); - Path path = cls.getAnnotation(Path.class); - Assert.assertEquals("myURI", path.value()); - - Produces produces = cls.getAnnotation(Produces.class); - Assert.assertEquals("application/xml", produces.value()[0]); - - Consumes consumes = cls.getAnnotation(Consumes.class); - Assert.assertEquals("application/json", consumes.value()[1]); - - Field field = cls.getField("delegate"); - Assert.assertSame(Resource.class, field.getType()); - - Assert.assertTrue(Modifier.isPublic(field.getModifiers())); - Assert.assertTrue(Modifier.isStatic(field.getModifiers())); - - Assert.assertTrue(Resource.class.isAssignableFrom(cls)); - - Resource resource = new MockedResource(); - field.set(null, resource); - - Resource resourceProxy = (Resource)cls.newInstance(); - Assert.assertNull(resourceProxy.get()); - resourceProxy.create("123"); - Assert.assertEquals("123", resourceProxy.get()); - resourceProxy.update("ABC"); - Assert.assertEquals("ABC", resourceProxy.get()); - resourceProxy.delete(); - Assert.assertNull(resourceProxy.get()); - } -} diff --git a/sca-java-2.x/branches/2.0-Beta2/modules/interface-java-jaxws/LICENSE b/sca-java-2.x/branches/2.0-Beta2/modules/interface-java-jaxws/LICENSE deleted file mode 100644 index 8aa906c321..0000000000 --- a/sca-java-2.x/branches/2.0-Beta2/modules/interface-java-jaxws/LICENSE +++ /dev/null @@ -1,205 +0,0 @@ - - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright [yyyy] [name of copyright owner] - - Licensed 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. - - - diff --git a/sca-java-2.x/branches/2.0-Beta2/modules/interface-java-jaxws/META-INF/MANIFEST.MF b/sca-java-2.x/branches/2.0-Beta2/modules/interface-java-jaxws/META-INF/MANIFEST.MF deleted file mode 100644 index 5c36422a33..0000000000 --- a/sca-java-2.x/branches/2.0-Beta2/modules/interface-java-jaxws/META-INF/MANIFEST.MF +++ /dev/null @@ -1,49 +0,0 @@ -Manifest-Version: 1.0
-Export-Package: org.apache.tuscany.sca.interfacedef.java.jaxws;uses:="
- org.apache.tuscany.sca.databinding,org.apache.tuscany.sca.interfacede
- f.util,org.objectweb.asm,javax.jws,javax.xml.namespace,javax.jws.soap
- ,org.apache.tuscany.sca.interfacedef.java.impl,org.apache.tuscany.sca
- .databinding.annotation,org.oasisopen.sca,javax.xml.bind.annotation.adapte
- rs,org.apache.tuscany.sca.interfacedef.java,org.apache.tuscany.sca.in
- terfacedef,org.apache.tuscany.sca.interfacedef.java.introspect,javax.
- xml.bind.annotation,org.apache.tuscany.sca.databinding.jaxb,org.apach
- e.tuscany.sca.interfacedef.impl,javax.xml.ws";version="2.0.0"
-SCA-Version: 1.1
-Bundle-Name: Apache Tuscany Java Interface for JAXWS
-Bundle-Vendor: The Apache Software Foundation
-Bundle-Version: 2.0.0
-Bundle-ManifestVersion: 2
-Bundle-License: http://www.apache.org/licenses/LICENSE-2.0.txt
-Bundle-Description: Apache Tuscany Java Interface for JAXWS
-Import-Package: javax.jws,
- javax.jws.soap,
- javax.xml.bind;resolution:=optional,
- javax.xml.bind.annotation,
- javax.xml.bind.annotation.adapters,
- javax.xml.namespace,
- javax.xml.stream;resolution:=optional,
- javax.xml.transform;resolution:=optional,
- javax.xml.transform.stream;resolution:=optional,
- javax.xml.ws,
- org.apache.tuscany.sca.assembly;version="2.0.0",
- org.apache.tuscany.sca.core;version="2.0.0",
- org.apache.tuscany.sca.databinding;version="2.0.0",
- org.apache.tuscany.sca.databinding.annotation;version="2.0.0",
- org.apache.tuscany.sca.databinding.javabeans;version="2.0.0",
- org.apache.tuscany.sca.databinding.jaxb;version="2.0.0",
- org.apache.tuscany.sca.interfacedef;version="2.0.0",
- org.apache.tuscany.sca.interfacedef.impl;version="2.0.0",
- org.apache.tuscany.sca.interfacedef.java;version="2.0.0",
- org.apache.tuscany.sca.interfacedef.java.impl;version="2.0.0",
- org.apache.tuscany.sca.interfacedef.java.introspect;version="2.0.0",
- org.apache.tuscany.sca.interfacedef.java.jaxws;version="2.0.0",
- org.apache.tuscany.sca.interfacedef.util;version="2.0.0",
- org.apache.tuscany.sca.interfacedef.wsdl;version="2.0.0",
- org.apache.tuscany.sca.policy;version="2.0.0",
- org.oasisopen.sca;version="2.0.0",
- org.oasisopen.sca.annotation;version="2.0.0";resolution:=optional,
- org.objectweb.asm;version="3.1",
- org.objectweb.asm.util;version="3.1";resolution:=optional
-Bundle-SymbolicName: org.apache.tuscany.sca.interface.java.jaxws
-Bundle-DocURL: http://www.apache.org/
-Bundle-RequiredExecutionEnvironment: J2SE-1.5,JavaSE-1.6 diff --git a/sca-java-2.x/branches/2.0-Beta2/modules/interface-java-jaxws/NOTICE b/sca-java-2.x/branches/2.0-Beta2/modules/interface-java-jaxws/NOTICE deleted file mode 100644 index ad2ba40961..0000000000 --- a/sca-java-2.x/branches/2.0-Beta2/modules/interface-java-jaxws/NOTICE +++ /dev/null @@ -1,6 +0,0 @@ -${pom.name} -Copyright (c) 2005 - 2010 The Apache Software Foundation - -This product includes software developed by -The Apache Software Foundation (http://www.apache.org/). - diff --git a/sca-java-2.x/branches/2.0-Beta2/modules/interface-java-jaxws/pom.xml b/sca-java-2.x/branches/2.0-Beta2/modules/interface-java-jaxws/pom.xml deleted file mode 100644 index c95d9c5ff7..0000000000 --- a/sca-java-2.x/branches/2.0-Beta2/modules/interface-java-jaxws/pom.xml +++ /dev/null @@ -1,305 +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. ---> -<project> - <modelVersion>4.0.0</modelVersion> - <parent> - <groupId>org.apache.tuscany.sca</groupId> - <artifactId>tuscany-modules</artifactId> - <version>2.0-Beta2-SNAPSHOT</version> - <relativePath>../pom.xml</relativePath> - </parent> - <artifactId>tuscany-interface-java-jaxws</artifactId> - <name>Apache Tuscany SCA Interface Java For JAXWS</name> - - <dependencies> - <dependency> - <groupId>org.apache.tuscany.sca</groupId> - <artifactId>tuscany-core-spi</artifactId> - <version>2.0-Beta2-SNAPSHOT</version> - </dependency> - <dependency> - <groupId>org.apache.tuscany.sca</groupId> - <artifactId>tuscany-databinding-jaxb</artifactId> - <version>2.0-Beta2-SNAPSHOT</version> - </dependency> - <dependency> - <groupId>org.apache.tuscany.sca</groupId> - <artifactId>tuscany-interface-java</artifactId> - <version>2.0-Beta2-SNAPSHOT</version> - </dependency> - - <dependency> - <groupId>junit</groupId> - <artifactId>junit</artifactId> - <version>4.8.1</version> - <scope>test</scope> - </dependency> - - <dependency> - <groupId>javax.xml.ws</groupId> - <artifactId>jaxws-api</artifactId> - <version>2.1</version> - <exclusions> - <exclusion> - <groupId>javax.xml.soap</groupId> - <artifactId>saaj-api</artifactId> - </exclusion> - </exclusions> - </dependency> - - <!-- Explicitly add the transitive dependencies for jaxws-api - http://jira.codehaus.org/browse/MEV-498 - --> - <dependency> - <groupId>javax.jws</groupId> - <artifactId>jsr181-api</artifactId> - <version>1.0-MR1</version> - </dependency> - <dependency> - <groupId>javax.annotation</groupId> - <artifactId>jsr250-api</artifactId> - <version>1.0</version> - </dependency> - - <dependency> - <groupId>asm</groupId> - <artifactId>asm</artifactId> - <version>3.1</version> - </dependency> - - <dependency> - <groupId>asm</groupId> - <artifactId>asm-util</artifactId> - <version>3.1</version> - <scope>test</scope> - </dependency> - <dependency> - <groupId>asm</groupId> - <artifactId>asm-analysis</artifactId> - <version>3.1</version> - <scope>test</scope> - </dependency> - - </dependencies> - - <repositories> - <repository> - <id>java.net</id> - <name>java.net Maven 1.x Repository</name> - <url>http://download.java.net/maven/1</url> - <layout>legacy</layout> - </repository> - <repository> - <id>java.net2</id> - <name>java.net Maven 2.x Repository</name> - <url>http://download.java.net/maven/2</url> - </repository> - </repositories> - - <pluginRepositories> - <pluginRepository> - <id>java.net2</id> - <name>java.net Maven 2.x Repository</name> - <url>http://download.java.net/maven/2</url> - </pluginRepository> - </pluginRepositories> - - <build> - <plugins> - <plugin> - <groupId>org.apache.maven.plugins</groupId> - <artifactId>maven-surefire-plugin</artifactId> - <configuration> - <argLine>-Djava.endorsed.dirs=target/endorsed</argLine> - </configuration> - </plugin> - <plugin> - <groupId>org.apache.maven.plugins</groupId> - <artifactId>maven-dependency-plugin</artifactId> - <executions> - <execution> - <id>copy</id> - <phase>generate-sources</phase> - <goals> - <goal>copy</goal> - </goals> - <configuration> - <artifactItems> - <artifactItem> - <groupId>javax.xml.ws</groupId> - <artifactId>jaxws-api</artifactId> - <version>2.1</version> - <type>jar</type> - </artifactItem> - <artifactItem> - <groupId>javax.xml.bind</groupId> - <artifactId>jaxb-api</artifactId> - <version>2.1</version> - <type>jar</type> - </artifactItem> - </artifactItems> - <outputDirectory>${project.build.directory}/endorsed</outputDirectory> - <overWriteReleases>false</overWriteReleases> - <overWriteSnapshots>true</overWriteSnapshots> - </configuration> - </execution> - </executions> - </plugin> - <plugin> - <groupId>org.codehaus.mojo</groupId> - <artifactId>build-helper-maven-plugin</artifactId> - <version>1.0</version> - <executions> - <execution> - <id>add-test-source</id> - <phase>generate-sources</phase> - <goals> - <goal>add-test-source</goal> - </goals> - <configuration> - <sources> - <source>target/jaxws-source</source> - </sources> - </configuration> - </execution> - </executions> - </plugin> - <plugin> - <groupId>org.codehaus.mojo</groupId> - <artifactId>jaxws-maven-plugin</artifactId> - <version>1.12</version> - <!-- Explicitly add the transitive dependencies for jaxws-api - http://jira.codehaus.org/browse/MEV-498 - --> - <dependencies> - <dependency> - <groupId>javax.jws</groupId> - <artifactId>jsr181-api</artifactId> - <version>1.0-MR1</version> - </dependency> - <dependency> - <groupId>javax.annotation</groupId> - <artifactId>jsr250-api</artifactId> - <version>1.0</version> - </dependency> - </dependencies> - <executions> - <execution> - <id>wsimport</id> - <phase>generate-test-sources</phase> - <goals> - <goal>wsimport</goal> - </goals> - <configuration> - <packageName>com.example.stock</packageName> - <wsdlDirectory>${basedir}/src/test/resources/wsdl</wsdlDirectory> - <wsdlFiles> - <wsdlFile>StockExceptionTest.wsdl</wsdlFile> - </wsdlFiles> - <staleFile>${project.build.directory}/wsimport-sync.stale</staleFile> - <sourceDestDir>${project.build.directory}/jaxws-source</sourceDestDir> - <verbose>false</verbose> - <xnocompile>true</xnocompile> - </configuration> - </execution> - - <execution> - <id>wsimport-async</id> - <phase>generate-test-sources</phase> - <goals> - <goal>wsimport</goal> - </goals> - <configuration> - <packageName>com.example.stock.async</packageName> - <wsdlDirectory>${basedir}/src/test/resources/wsdl</wsdlDirectory> - <wsdlFiles> - <wsdlFile>StockExceptionTest.wsdl</wsdlFile> - </wsdlFiles> - <bindingDirectory>${basedir}/src/test/resources/wsdl</bindingDirectory> - <bindingFiles> - <bindingFile>bindings.xml</bindingFile> - </bindingFiles> - <staleFile>${project.build.directory}/wsimport-async.stale</staleFile> - <sourceDestDir>${project.build.directory}/jaxws-source</sourceDestDir> - <verbose>false</verbose> - <xnocompile>true</xnocompile> - </configuration> - </execution> - - <!-- - <execution> - <id>wsgen</id> - <phase>process-test-classes</phase> - <goals> - <goal>wsgen-test</goal> - </goals> - <configuration> - <sei>org.apache.tuscany.sca.interfacedef.java.jaxws.MyServiceImpl</sei> - <genWsdl>true</genWsdl> - <keep>true</keep> - <resourceDestDir>${project.build.directory}/jaxws-source</resourceDestDir> - <sourceDestDir>${project.build.directory}/jaxws-source</sourceDestDir> - </configuration> - </execution> - --> - </executions> - - </plugin> - - <!-- - wsimport cannot handle WSDL files without a service/binding element. - CXF wsdl2java plugin does support that. I had to override the default - value of wsdlRoot/testWsdlRoot to a non-existent file to avoid NPE --> - <!-- - <plugin> - <groupId>org.apache.cxf</groupId> - <artifactId>cxf-codegen-plugin</artifactId> - <version>2.1</version> - <executions> - <execution> - <id>generate-sources</id> - <phase>generate-sources</phase> - - <configuration> - <sourceRoot>${basedir}/target/jaxws-source</sourceRoot> - <wsdlRoot>NONE</wsdlRoot> - <testWsdlRoot>NONE</testWsdlRoot> - <wsdlOptions> - <wsdlOption> - <wsdl>${basedir}/src/test/resources/wsdl/Stock.wsdl</wsdl> - <outputDir>${basedir}/target/jaxws-source</outputDir> - <packagenames> - <packagename>com.example.stock.cxf</packagename> - </packagenames> - </wsdlOption> - </wsdlOptions> - </configuration> - <goals> - <goal>wsdl2java</goal> - </goals> - </execution> - </executions> - </plugin> - --> - - </plugins> - </build> - -</project> diff --git a/sca-java-2.x/branches/2.0-Beta2/modules/interface-java-jaxws/src/main/java/org/apache/tuscany/sca/interfacedef/java/jaxws/BaseBeanGenerator.java b/sca-java-2.x/branches/2.0-Beta2/modules/interface-java-jaxws/src/main/java/org/apache/tuscany/sca/interfacedef/java/jaxws/BaseBeanGenerator.java deleted file mode 100644 index 05a5dc89de..0000000000 --- a/sca-java-2.x/branches/2.0-Beta2/modules/interface-java-jaxws/src/main/java/org/apache/tuscany/sca/interfacedef/java/jaxws/BaseBeanGenerator.java +++ /dev/null @@ -1,560 +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.interfacedef.java.jaxws; - -import java.lang.annotation.Annotation; -import java.lang.reflect.Constructor; -import java.lang.reflect.Field; -import java.lang.reflect.Method; -import java.lang.reflect.ParameterizedType; -import java.lang.reflect.Type; -import java.util.ArrayList; -import java.util.Collections; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.WeakHashMap; - -import javax.xml.bind.annotation.XmlAttachmentRef; -import javax.xml.bind.annotation.XmlList; -import javax.xml.bind.annotation.XmlMimeType; -import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter; -import javax.xml.ws.Holder; - -import org.apache.tuscany.sca.databinding.jaxb.XMLAdapterExtensionPoint; -import org.objectweb.asm.AnnotationVisitor; -import org.objectweb.asm.ClassWriter; -import org.objectweb.asm.FieldVisitor; -import org.objectweb.asm.Label; -import org.objectweb.asm.MethodVisitor; -import org.objectweb.asm.Opcodes; - -public abstract class BaseBeanGenerator implements Opcodes { - private static final Map<String, String> COLLECTION_CLASSES = new HashMap<String, String>(); - static { - COLLECTION_CLASSES.put("Ljava/util/Collection;", "java/util/ArrayList"); - COLLECTION_CLASSES.put("Ljava/util/List;", "java/util/ArrayList"); - COLLECTION_CLASSES.put("Ljava/util/Set;", "java/util/HashSet"); - COLLECTION_CLASSES.put("Ljava/util/Queue;", "java/util/LinkedList"); - } - private final static Class[] KNOWN_JAXB_ANNOTATIONS = - {XmlAttachmentRef.class, XmlMimeType.class, XmlJavaTypeAdapter.class, XmlList.class}; - private static final Map<String, String> JAVA_KEYWORDS = new HashMap<String, String>(); - - static { - JAVA_KEYWORDS.put("abstract", "_abstract"); - JAVA_KEYWORDS.put("assert", "_assert"); - JAVA_KEYWORDS.put("boolean", "_boolean"); - JAVA_KEYWORDS.put("break", "_break"); - JAVA_KEYWORDS.put("byte", "_byte"); - JAVA_KEYWORDS.put("case", "_case"); - JAVA_KEYWORDS.put("catch", "_catch"); - JAVA_KEYWORDS.put("char", "_char"); - JAVA_KEYWORDS.put("class", "_class"); - JAVA_KEYWORDS.put("const", "_const"); - JAVA_KEYWORDS.put("continue", "_continue"); - JAVA_KEYWORDS.put("default", "_default"); - JAVA_KEYWORDS.put("do", "_do"); - JAVA_KEYWORDS.put("double", "_double"); - JAVA_KEYWORDS.put("else", "_else"); - JAVA_KEYWORDS.put("extends", "_extends"); - JAVA_KEYWORDS.put("false", "_false"); - JAVA_KEYWORDS.put("final", "_final"); - JAVA_KEYWORDS.put("finally", "_finally"); - JAVA_KEYWORDS.put("float", "_float"); - JAVA_KEYWORDS.put("for", "_for"); - JAVA_KEYWORDS.put("goto", "_goto"); - JAVA_KEYWORDS.put("if", "_if"); - JAVA_KEYWORDS.put("implements", "_implements"); - JAVA_KEYWORDS.put("import", "_import"); - JAVA_KEYWORDS.put("instanceof", "_instanceof"); - JAVA_KEYWORDS.put("int", "_int"); - JAVA_KEYWORDS.put("interface", "_interface"); - JAVA_KEYWORDS.put("long", "_long"); - JAVA_KEYWORDS.put("native", "_native"); - JAVA_KEYWORDS.put("new", "_new"); - JAVA_KEYWORDS.put("null", "_null"); - JAVA_KEYWORDS.put("package", "_package"); - JAVA_KEYWORDS.put("private", "_private"); - JAVA_KEYWORDS.put("protected", "_protected"); - JAVA_KEYWORDS.put("public", "_public"); - JAVA_KEYWORDS.put("return", "_return"); - JAVA_KEYWORDS.put("short", "_short"); - JAVA_KEYWORDS.put("static", "_static"); - JAVA_KEYWORDS.put("strictfp", "_strictfp"); - JAVA_KEYWORDS.put("super", "_super"); - JAVA_KEYWORDS.put("switch", "_switch"); - JAVA_KEYWORDS.put("synchronized", "_synchronized"); - JAVA_KEYWORDS.put("this", "_this"); - JAVA_KEYWORDS.put("throw", "_throw"); - JAVA_KEYWORDS.put("throws", "_throws"); - JAVA_KEYWORDS.put("transient", "_transient"); - JAVA_KEYWORDS.put("true", "_true"); - JAVA_KEYWORDS.put("try", "_try"); - JAVA_KEYWORDS.put("void", "_void"); - JAVA_KEYWORDS.put("volatile", "_volatile"); - JAVA_KEYWORDS.put("while", "_while"); - JAVA_KEYWORDS.put("enum", "_enum"); - } - - protected static final Map<Object, Class<?>> generatedClasses = - Collections.synchronizedMap(new WeakHashMap<Object, Class<?>>()); - - protected XMLAdapterExtensionPoint xmlAdapters; - - public byte[] defineClass(ClassWriter cw, - String classDescriptor, - String classSignature, - String namespace, - String name, - BeanProperty[] properties) { - // Declare the class - declareClass(cw, classDescriptor); - - // Compute the propOrder - String[] propOrder = null; - if (properties != null && properties.length > 0) { - int size = properties.length; - propOrder = new String[size]; - for (int i = 0; i < size; i++) { - propOrder[i] = getFieldName(properties[i].getName()); - } - } - // Annotate the class - annotateClass(cw, name, namespace, propOrder); - - // Decalre the default constructor - declareConstructor(cw, classSignature); - if (properties != null) { - for (BeanProperty p : properties) { - boolean isElement = p.isElement() && (!Map.class.isAssignableFrom(p.getType())); - String xmlAdapterClassSignature = null; - if (xmlAdapters != null) { - Class<?> adapterClass = xmlAdapters.getAdapter(p.getType()); - if (adapterClass != null) { - xmlAdapterClassSignature = CodeGenerationHelper.getSignature(adapterClass); - } - } - declareProperty(cw, classDescriptor, classSignature, p.getName(), p.getSignature(), p - .getGenericSignature(), isElement, p.isNillable(), xmlAdapterClassSignature, p.getJaxbAnnotaions()); - } - } - - // Close the generation - cw.visitEnd(); - return cw.toByteArray(); - } - - protected static boolean isHolder(java.lang.reflect.Type type) { - if (type instanceof ParameterizedType) { - Class<?> cls = CodeGenerationHelper.getErasure(type); - return cls == Holder.class; - } - return false; - } - - protected static java.lang.reflect.Type getHolderValueType(java.lang.reflect.Type paramType) { - if (paramType instanceof ParameterizedType) { - ParameterizedType p = (ParameterizedType)paramType; - Class<?> cls = CodeGenerationHelper.getErasure(p); - if (cls == Holder.class) { - return p.getActualTypeArguments()[0]; - } - } - return paramType; - } - - protected void declareProperty(ClassWriter cw, - String classDescriptor, - String classSignature, - String propName, - String propClassSignature, - String propTypeSignature, - boolean isElement, - boolean isNillable, - String xmlAdapterClassSignature, - List<Annotation> jaxbAnnotations) { - if (propClassSignature.equals(propTypeSignature)) { - propTypeSignature = null; - } - declareField(cw, - propName, - propClassSignature, - propTypeSignature, - isElement, - isNillable, - xmlAdapterClassSignature, - jaxbAnnotations); - decalreGetter(cw, classDescriptor, classSignature, propName, propClassSignature, propTypeSignature); - declareSetter(cw, classDescriptor, classSignature, propName, propClassSignature, propTypeSignature); - } - - protected String getFieldName(String propName) { - String name = JAVA_KEYWORDS.get(propName); - return name != null ? name : propName; - } - - protected void declareField(ClassWriter cw, - String propName, - String propClassSignature, - String propTypeSignature, - boolean isElement, - boolean isNillable, - String xmlAdapterClassSignature, - List<Annotation> jaxbAnnotations) { - FieldVisitor fv; - AnnotationVisitor av0; - fv = cw.visitField(ACC_PROTECTED, getFieldName(propName), propClassSignature, propTypeSignature, null); - - // For Map property, we cannot have the XmlElement annotation - if (isElement && xmlAdapterClassSignature == null) { - av0 = fv.visitAnnotation("Ljavax/xml/bind/annotation/XmlElement;", true); - av0.visit("name", propName); - av0.visit("namespace", ""); - if (isNillable) { - av0.visit("nillable", Boolean.TRUE); - } - // FIXME: - // av0.visit("required", Boolean.FALSE); - av0.visitEnd(); - } - - if (xmlAdapterClassSignature != null) { - av0 = fv.visitAnnotation("Ljavax/xml/bind/annotation/XmlAnyElement;", true); - av0.visit("lax", Boolean.TRUE); - av0.visitEnd(); - av0 = fv.visitAnnotation("Ljavax/xml/bind/annotation/adapters/XmlJavaTypeAdapter;", true); - av0.visit("value", org.objectweb.asm.Type.getType(xmlAdapterClassSignature)); - av0.visitEnd(); - } - - for (Annotation ann : jaxbAnnotations) { - if (ann instanceof XmlMimeType) { - AnnotationVisitor mime = fv.visitAnnotation("Ljavax/xml/bind/annotation/XmlMimeType;", true); - mime.visit("value", ((XmlMimeType)ann).value()); - mime.visitEnd(); - } else if (ann instanceof XmlJavaTypeAdapter) { - AnnotationVisitor ada = fv.visitAnnotation("Ljavax/xml/bind/annotation/adapters/XmlJavaTypeAdapter;", true); - ada.visit("value", org.objectweb.asm.Type.getType(((XmlJavaTypeAdapter)ann).value())); - ada.visit("type", org.objectweb.asm.Type.getType(((XmlJavaTypeAdapter)ann).type())); - ada.visitEnd(); - } else if (ann instanceof XmlAttachmentRef) { - AnnotationVisitor att = fv.visitAnnotation("Ljavax/xml/bind/annotation/XmlAttachmentRef;", true); - att.visitEnd(); - } else if (ann instanceof XmlList) { - AnnotationVisitor list = fv.visitAnnotation("Ljavax/xml/bind/annotation/XmlList;", true); - list.visitEnd(); - } - } - - fv.visitEnd(); - } - - protected void declareSetter(ClassWriter cw, - String classDescriptor, - String classSignature, - String propName, - String propClassSignature, - String propTypeSignature) { - if ("Ljava/util/List;".equals(propClassSignature)) { - return; - } - MethodVisitor mv = - cw.visitMethod(ACC_PUBLIC, - "set" + capitalize(propName), - "(" + propClassSignature + ")V", - propTypeSignature == null ? null : "(" + propTypeSignature + ")V", - null); - mv.visitCode(); - Label l0 = new Label(); - mv.visitLabel(l0); - // mv.visitLineNumber(57, l0); - mv.visitVarInsn(ALOAD, 0); - mv.visitVarInsn(CodeGenerationHelper.getLoadOPCode(propClassSignature), 1); - mv.visitFieldInsn(PUTFIELD, classDescriptor, getFieldName(propName), propClassSignature); - Label l1 = new Label(); - mv.visitLabel(l1); - // mv.visitLineNumber(58, l1); - mv.visitInsn(RETURN); - Label l2 = new Label(); - mv.visitLabel(l2); - mv.visitLocalVariable("this", classSignature, null, l0, l2, 0); - mv.visitLocalVariable(getFieldName(propName), propClassSignature, propTypeSignature, l0, l2, 1); - mv.visitMaxs(3, 3); - mv.visitEnd(); - - } - - protected void decalreGetter(ClassWriter cw, - String classDescriptor, - String classSignature, - String propName, - String propClassSignature, - String propTypeSignature) { - String collectionImplClass = COLLECTION_CLASSES.get(propClassSignature); - if (collectionImplClass != null) { - decalreCollectionGetter(cw, - classDescriptor, - classSignature, - propName, - propClassSignature, - propTypeSignature, - collectionImplClass); - return; - } - - String getterName = ("Z".equals(propClassSignature) ? "is" : "get") + capitalize(propName); - MethodVisitor mv = - cw.visitMethod(ACC_PUBLIC, getterName, "()" + propClassSignature, propTypeSignature == null ? null - : "()" + propTypeSignature, null); - mv.visitCode(); - Label l0 = new Label(); - mv.visitLabel(l0); - // mv.visitLineNumber(48, l0); - mv.visitVarInsn(ALOAD, 0); - mv.visitFieldInsn(GETFIELD, classDescriptor, getFieldName(propName), propClassSignature); - mv.visitInsn(CodeGenerationHelper.getReturnOPCode(propClassSignature)); - Label l1 = new Label(); - mv.visitLabel(l1); - mv.visitLocalVariable("this", classSignature, null, l0, l1, 0); - mv.visitMaxs(2, 1); - mv.visitEnd(); - } - - protected void decalreCollectionGetter(ClassWriter cw, - String classDescriptor, - String classSignature, - String propName, - String propClassSignature, - String propTypeSignature, - String collectionImplClass) { - String getterName = "get" + capitalize(propName); - String fieldName = getFieldName(propName); - MethodVisitor mv = - cw.visitMethod(ACC_PUBLIC, getterName, "()" + propClassSignature, propTypeSignature == null ? null - : "()" + propTypeSignature, null); - mv.visitCode(); - Label l0 = new Label(); - mv.visitLabel(l0); - mv.visitLineNumber(63, l0); - mv.visitVarInsn(ALOAD, 0); - mv.visitFieldInsn(GETFIELD, classDescriptor, fieldName, propClassSignature); - Label l1 = new Label(); - mv.visitJumpInsn(IFNONNULL, l1); - Label l2 = new Label(); - mv.visitLabel(l2); - mv.visitLineNumber(64, l2); - mv.visitVarInsn(ALOAD, 0); - mv.visitTypeInsn(NEW, collectionImplClass); - mv.visitInsn(DUP); - mv.visitMethodInsn(INVOKESPECIAL, collectionImplClass, "<init>", "()V"); - mv.visitFieldInsn(PUTFIELD, classDescriptor, fieldName, propClassSignature); - mv.visitLabel(l1); - mv.visitLineNumber(66, l1); - mv.visitVarInsn(ALOAD, 0); - mv.visitFieldInsn(GETFIELD, classDescriptor, fieldName, propClassSignature); - mv.visitInsn(ARETURN); - Label l3 = new Label(); - mv.visitLabel(l3); - mv.visitLocalVariable("this", classSignature, null, l0, l3, 0); - mv.visitMaxs(3, 1); - mv.visitEnd(); - } - - protected static String capitalize(String name) { - if (name == null || name.length() == 0) { - return name; - } else { - return Character.toUpperCase(name.charAt(0)) + name.substring(1); - } - } - - protected void declareConstructor(ClassWriter cw, String classSignature) { - MethodVisitor mv; - mv = cw.visitMethod(ACC_PUBLIC, "<init>", "()V", null, null); - mv.visitCode(); - Label l0 = new Label(); - mv.visitLabel(l0); - // mv.visitLineNumber(37, l0); - mv.visitVarInsn(ALOAD, 0); - mv.visitMethodInsn(INVOKESPECIAL, "java/lang/Object", "<init>", "()V"); - mv.visitInsn(RETURN); - Label l1 = new Label(); - mv.visitLabel(l1); - mv.visitLocalVariable("this", classSignature, null, l0, l1, 0); - mv.visitMaxs(1, 1); - mv.visitEnd(); - } - - protected void declareClass(ClassWriter cw, String classDescriptor) { - cw.visit(V1_5, ACC_PUBLIC + ACC_SUPER, classDescriptor, null, "java/lang/Object", null); - } - - protected void annotateClass(ClassWriter cw, String name, String namespace, String[] propOrder) { - AnnotationVisitor av0; - // @XmlRootElement - av0 = cw.visitAnnotation("Ljavax/xml/bind/annotation/XmlRootElement;", true); - av0.visit("name", name); - av0.visit("namespace", namespace); - av0.visitEnd(); - // @XmlAccessorType - av0 = cw.visitAnnotation("Ljavax/xml/bind/annotation/XmlAccessorType;", true); - av0.visitEnum("value", "Ljavax/xml/bind/annotation/XmlAccessType;", "FIELD"); - av0.visitEnd(); - // @XmlType - av0 = cw.visitAnnotation("Ljavax/xml/bind/annotation/XmlType;", true); - av0.visit("name", name); - av0.visit("namespace", namespace); - if (propOrder != null) { - AnnotationVisitor pv = av0.visitArray("propOrder"); - for (String p : propOrder) { - pv.visit(null, p); - } - pv.visitEnd(); - } - av0.visitEnd(); - } - - public Class<?> generate(String classDescriptor, - String classSignature, - String namespace, - String name, - BeanProperty[] properties, - GeneratedClassLoader classLoader) { - - // The reflection code here allows for toleration of older versions of ASM. - ClassWriter cw; - try { - Constructor<ClassWriter> c = ClassWriter.class.getConstructor(new Class[] {int.class}); - Field f = ClassWriter.class.getField("COMPUTE_MAXS"); - cw = c.newInstance(f.get(null)); - } catch ( Exception ex ) { - try { - Constructor<ClassWriter> c = ClassWriter.class.getConstructor(new Class[] {boolean.class}); - cw = c.newInstance(true); - } catch ( Exception ex2 ) { - throw new IllegalArgumentException(ex2); - } - - } - - byte[] byteCode = defineClass(cw, classDescriptor, classSignature, namespace, name, properties); - String className = classDescriptor.replace('/', '.'); - Class<?> generated = classLoader.getGeneratedClass(className, byteCode); - return generated; - } - - public static class BeanProperty { - private Class<?> type; - private String namespace; - private String name; - private String signature; - private String genericSignature; - private List<Annotation> jaxbAnnotaions = new ArrayList<Annotation>(); - private boolean element; - private boolean nillable; - - public BeanProperty(String namespace, String name, Class<?> javaClass, Type type, boolean isElement) { - super(); - this.namespace = namespace; - this.name = name; - this.signature = CodeGenerationHelper.getJAXWSSignature(javaClass); - this.type = javaClass; - this.genericSignature = CodeGenerationHelper.getJAXWSSignature(type); - this.element = isElement; - // FIXME: How to test nillable? - // this.nillable = (type instanceof GenericArrayType) || Collection.class.isAssignableFrom(javaClass) || javaClass.isArray(); - // TUSCANY-2389: Set the nillable consistent with what wsgen produces - this.nillable = javaClass.isArray(); - } - - public String getName() { - return name; - } - - public String getSignature() { - return signature; - } - - public String getGenericSignature() { - return genericSignature; - } - - public Class<?> getType() { - return type; - } - - public List<Annotation> getJaxbAnnotaions() { - return jaxbAnnotaions; - } - - public String getNamespace() { - return namespace; - } - - public boolean isElement() { - return element; - } - - public boolean isNillable() { - return nillable; - } - } - - public XMLAdapterExtensionPoint getXmlAdapters() { - return xmlAdapters; - } - - public void setXmlAdapters(XMLAdapterExtensionPoint xmlAdapters) { - this.xmlAdapters = xmlAdapters; - } - - protected static <T extends Annotation> T findAnnotation(Annotation[] anns, Class<T> annotationClass) { - for (Annotation a : anns) { - if (a.annotationType() == annotationClass) { - return annotationClass.cast(a); - } - } - return null; - } - - protected static List<Annotation> findJAXBAnnotations(Annotation[] anns) { - List<Annotation> jaxbAnnotation = new ArrayList<Annotation>(); - for (Class<? extends Annotation> c : KNOWN_JAXB_ANNOTATIONS) { - Annotation a = findAnnotation(anns, c); - if (a != null) { - jaxbAnnotation.add(a); - } - } - return jaxbAnnotation; - } - - protected List<Annotation> findJAXBAnnotations(Method method) { - List<Annotation> anns = new ArrayList<Annotation>(); - for (Class<? extends Annotation> c : KNOWN_JAXB_ANNOTATIONS) { - Annotation ann = method.getAnnotation(c); - if (ann != null) { - anns.add(ann); - } - } - return anns; - } - -} diff --git a/sca-java-2.x/branches/2.0-Beta2/modules/interface-java-jaxws/src/main/java/org/apache/tuscany/sca/interfacedef/java/jaxws/CodeGenerationHelper.java b/sca-java-2.x/branches/2.0-Beta2/modules/interface-java-jaxws/src/main/java/org/apache/tuscany/sca/interfacedef/java/jaxws/CodeGenerationHelper.java deleted file mode 100644 index b05715b54e..0000000000 --- a/sca-java-2.x/branches/2.0-Beta2/modules/interface-java-jaxws/src/main/java/org/apache/tuscany/sca/interfacedef/java/jaxws/CodeGenerationHelper.java +++ /dev/null @@ -1,280 +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.interfacedef.java.jaxws; - -import java.lang.reflect.Array; -import java.lang.reflect.GenericArrayType; -import java.lang.reflect.ParameterizedType; -import java.lang.reflect.Type; -import java.lang.reflect.TypeVariable; -import java.lang.reflect.WildcardType; -import java.util.ArrayList; -import java.util.Collection; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -import org.objectweb.asm.Opcodes; - -/** - * @version $Rev$ $Date$ - */ -public class CodeGenerationHelper { - /** - * @param type - * @return - */ - public static Class<?> getErasure(Type type) { - if (type instanceof Class) { - return (Class<?>)type; - } else if (type instanceof GenericArrayType) { - GenericArrayType arrayType = (GenericArrayType)type; - Class<?> componentType = getErasure(arrayType.getGenericComponentType()); - return Array.newInstance(componentType, 0).getClass(); - } else if (type instanceof ParameterizedType) { - ParameterizedType pType = (ParameterizedType)type; - return getErasure(pType.getRawType()); - } else if (type instanceof WildcardType) { - WildcardType wType = (WildcardType)type; - Type[] types = wType.getUpperBounds(); - if (types.length == 0) { - return Object.class; - } - return getErasure(types[0]); - } else if (type instanceof TypeVariable) { - TypeVariable<?> var = (TypeVariable<?>)type; - Type[] types = var.getBounds(); - if (types.length == 0) { - return Object.class; - } - return getErasure(types[0]); - } - return null; - } - - /** - * @param type - * @return - */ - public static String getJAXWSSignature(Type type) { - Class<?> cls = getErasure(type); - if (Collection.class.isAssignableFrom(cls) && (type instanceof ParameterizedType)) { - ParameterizedType pType = (ParameterizedType)type; - Type p = pType.getActualTypeArguments()[0]; - StringBuffer sb = new StringBuffer(); - sb.append(getSignature(cls)); - sb.deleteCharAt(sb.length() - 1); // Remove ; - sb.append('<').append(getSignature(getErasure(p))).append(">;"); - return sb.toString(); - } else if (Map.class.isAssignableFrom(cls) && (type instanceof ParameterizedType)) { - ParameterizedType pType = (ParameterizedType)type; - Type key = pType.getActualTypeArguments()[0]; - Type value = pType.getActualTypeArguments()[1]; - StringBuffer sb = new StringBuffer(); - sb.append(getSignature(cls)); - sb.deleteCharAt(sb.length() - 1); // Remove ; - sb.append('<').append(getSignature(getErasure(key))).append(getSignature(getErasure(value))).append(">;"); - return sb.toString(); - } else { - return getSignature(cls); - } - } - - /** - * @param type - * @return - */ - public static String getSignature(Type type) { - if (!(type instanceof Class)) { - if (type instanceof ParameterizedType) { - ParameterizedType pType = (ParameterizedType)type; - StringBuffer sb = new StringBuffer(); - String rawType = getSignature(pType.getRawType()); - sb.append(rawType.substring(0, rawType.length() - 1)); - sb.append('<'); - for (Type t : pType.getActualTypeArguments()) { - String argType = getSignature(t); - sb.append(argType); - } - sb.append('>'); - sb.append(rawType.substring(rawType.length() - 1)); - return sb.toString(); - } - if (type instanceof TypeVariable) { - return "T" + ((TypeVariable<?>)type).getName() + ";"; - } - if (type instanceof GenericArrayType) { - GenericArrayType arrayType = (GenericArrayType)type; - return "[" + getSignature(arrayType.getGenericComponentType()); - } - if (type instanceof WildcardType) { - WildcardType wType = (WildcardType)type; - Type[] types = wType.getUpperBounds(); - StringBuffer sb = new StringBuffer(); - if (types.length == 0 || !(types.length == 1 && types[0] == Object.class)) { - sb.append('+'); - for (Type t : types) { - sb.append(getSignature(t)); - } - } - types = wType.getLowerBounds(); - if (types.length != 0) { - sb.append('-'); - for (Type t : wType.getLowerBounds()) { - sb.append(getSignature(t)); - } - } - if (sb.length() == 0) { - return "*"; - } - return sb.toString(); - } - } - Class<?> cls = (Class<?>)type; - return org.objectweb.asm.Type.getDescriptor(cls); - } - - /** - * Get the actual type arguments a child class has used to extend a generic base class. - * - * @param baseClass the base class - * @param childClass the child class - * @return a list of the raw classes for the actual type arguments. - */ - public static <T> List<Class<?>> resovleTypeArguments(Class<T> baseClass, Class<? extends T> childClass) { - Map<Type, Type> resolvedTypes = new HashMap<Type, Type>(); - Type type = childClass; - // start walking up the inheritance hierarchy until we hit baseClass - while (!getErasure(type).equals(baseClass)) { - if (type instanceof Class) { - // there is no useful information for us in raw types, so just keep going. - type = ((Class<?>)type).getGenericSuperclass(); - } else { - ParameterizedType parameterizedType = (ParameterizedType)type; - Class<?> rawType = getErasure(parameterizedType.getRawType()); - - Type[] actualTypeArguments = parameterizedType.getActualTypeArguments(); - TypeVariable<?>[] typeParameters = rawType.getTypeParameters(); - for (int i = 0; i < actualTypeArguments.length; i++) { - resolvedTypes.put(typeParameters[i], actualTypeArguments[i]); - } - - if (!rawType.equals(baseClass)) { - type = rawType.getGenericSuperclass(); - } - } - } - - // finally, for each actual type argument provided to baseClass, determine (if possible) - // the raw class for that type argument. - Type[] actualTypeArguments; - if (type instanceof Class) { - actualTypeArguments = ((Class<?>)type).getTypeParameters(); - } else { - actualTypeArguments = ((ParameterizedType)type).getActualTypeArguments(); - } - List<Class<?>> typeArgumentsAsClasses = new ArrayList<Class<?>>(); - // resolve types by chasing down type variables. - for (Type baseType : actualTypeArguments) { - while (resolvedTypes.containsKey(baseType)) { - baseType = resolvedTypes.get(baseType); - } - typeArgumentsAsClasses.add(getErasure(baseType)); - } - return typeArgumentsAsClasses; - } - - /* - signatures.put(boolean.class, "Z"); - signatures.put(byte.class, "B"); - signatures.put(char.class, "C"); - signatures.put(short.class, "S"); - signatures.put(int.class, "I"); - signatures.put(long.class, "J"); - signatures.put(float.class, "F"); - signatures.put(double.class, "D"); - */ - public static int getLoadOPCode(String signature) { - if ("Z".equals(signature) || "B".equals(signature) - || "C".equals(signature) - || "S".equals(signature) - || "I".equals(signature)) { - return Opcodes.ILOAD; - } - - if ("J".equals(signature)) { - return Opcodes.LLOAD; - } - - if ("F".equals(signature)) { - return Opcodes.FLOAD; - } - - if ("D".equals(signature)) { - return Opcodes.DLOAD; - } - - return Opcodes.ALOAD; - - } - - public static int getReturnOPCode(String signature) { - if ("Z".equals(signature) || "B".equals(signature) - || "C".equals(signature) - || "S".equals(signature) - || "I".equals(signature)) { - return Opcodes.IRETURN; - } - - if ("J".equals(signature)) { - return Opcodes.LRETURN; - } - - if ("F".equals(signature)) { - return Opcodes.FRETURN; - } - - if ("D".equals(signature)) { - return Opcodes.DRETURN; - } - if ("V".equals(signature)) { - return Opcodes.RETURN; - } - - return Opcodes.ARETURN; - - } - - /** - * Get the package prefix for generated JAXWS artifacts - * @param cls - * @return - */ - public static String getPackagePrefix(Class<?> cls) { - String name = cls.getName(); - int index = name.lastIndexOf('.'); - if (index == -1) { - return "jaxws."; - } else { - return name.substring(0, index) + ".jaxws."; - } - } - -} diff --git a/sca-java-2.x/branches/2.0-Beta2/modules/interface-java-jaxws/src/main/java/org/apache/tuscany/sca/interfacedef/java/jaxws/FaultBeanGenerator.java b/sca-java-2.x/branches/2.0-Beta2/modules/interface-java-jaxws/src/main/java/org/apache/tuscany/sca/interfacedef/java/jaxws/FaultBeanGenerator.java deleted file mode 100644 index 972d179bcc..0000000000 --- a/sca-java-2.x/branches/2.0-Beta2/modules/interface-java-jaxws/src/main/java/org/apache/tuscany/sca/interfacedef/java/jaxws/FaultBeanGenerator.java +++ /dev/null @@ -1,167 +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.interfacedef.java.jaxws; - -import java.beans.BeanInfo; -import java.beans.IntrospectionException; -import java.beans.Introspector; -import java.beans.PropertyDescriptor; -import java.lang.reflect.Constructor; -import java.lang.reflect.Field; -import java.lang.reflect.Method; -import java.util.ArrayList; -import java.util.Collections; -import java.util.Comparator; -import java.util.List; - -import javax.xml.namespace.QName; -import javax.xml.ws.WebFault; - -import org.apache.tuscany.sca.interfacedef.java.impl.JavaInterfaceUtil; -import org.objectweb.asm.ClassWriter; - -public class FaultBeanGenerator extends BaseBeanGenerator { - public FaultBeanGenerator() { - super(); - } - - protected BeanProperty[] getProperties(Class<? extends Throwable> exceptionClass) { - BeanInfo beanInfo; - try { - beanInfo = Introspector.getBeanInfo(exceptionClass); - } catch (IntrospectionException e) { - throw new IllegalArgumentException(e); - } - List<BeanProperty> props = new ArrayList<BeanProperty>(); - for (PropertyDescriptor pd : beanInfo.getPropertyDescriptors()) { - if (pd.getReadMethod() != null) { - String name = pd.getReadMethod().getName(); - if ("getClass".equals(name) || "getStackTrace".equals(name) - || "getCause".equals(name) - || "getLocalizedMessage".equals(name)) { - continue; - } - // Add the field - String field = pd.getName(); - Method getter = pd.getReadMethod(); - props.add(new BeanProperty("", field, getter.getReturnType(), getter.getGenericReturnType(), false)); - } - } - Collections.sort(props, new Comparator<BeanProperty>() { - public int compare(BeanProperty o1, BeanProperty o2) { - return o1.getName().compareTo(o2.getName()); - } - }); - return props.toArray(new BeanProperty[0]); - } - - public byte[] generate(Class<? extends Throwable> exceptionClass) { - String className = getFaultBeanName(exceptionClass); - - // The reflection code here allows for toleration of older versions of ASM. - ClassWriter cw; - try { - Constructor<ClassWriter> c = ClassWriter.class.getConstructor(new Class[] {int.class}); - Field f = ClassWriter.class.getField("COMPUTE_MAXS"); - cw = c.newInstance(f.get(null)); - } catch ( Exception ex ) { - try { - Constructor<ClassWriter> c = ClassWriter.class.getConstructor(new Class[] {boolean.class}); - cw = c.newInstance(true); - } catch ( Exception ex2 ) { - throw new IllegalArgumentException(ex2); - } - - } - - - - String classDescriptor = className.replace('.', '/'); - String classSignature = "L" + classDescriptor + ";"; - QName element = getElementName(exceptionClass); - String namespace = element.getNamespaceURI(); - String name = element.getLocalPart(); - return defineClass(cw, classDescriptor, classSignature, namespace, name, getProperties(exceptionClass)); - } - - public Class<?> generate(Class<? extends Throwable> exceptionClass, GeneratedClassLoader cl) { - synchronized (exceptionClass) { - Class<?> faultBeanClass = generatedClasses.get(exceptionClass); - if (faultBeanClass == null) { - String className = getFaultBeanName(exceptionClass); - String classDescriptor = className.replace('.', '/'); - String classSignature = "L" + classDescriptor + ";"; - QName element = getElementName(exceptionClass); - String namespace = element.getNamespaceURI(); - String name = element.getLocalPart(); - faultBeanClass = - generate(classDescriptor, classSignature, namespace, name, getProperties(exceptionClass), cl); - generatedClasses.put(exceptionClass, faultBeanClass); - } - return faultBeanClass; - } - } - - private static String getFaultBeanName(Class<?> exceptionClass) { - String faultBeanName = null; - WebFault webFault = exceptionClass.getAnnotation(WebFault.class); - if (webFault != null) { - faultBeanName = webFault.faultBean(); - if (!"".equals(faultBeanName)) { - return faultBeanName; - } - } - - String name = exceptionClass.getName(); - int index = name.lastIndexOf('.'); - String pkg = name.substring(0, index); - String clsName = name.substring(index + 1); - - // FIXME: [rfeng] This is a workaround to avoid "Prohibited package name: java.lang.jaxws" - if (pkg.startsWith("java.") || pkg.startsWith("javax.")) { - pkg = "tuscany"; - } - faultBeanName = (pkg + ".jaxws." + clsName + "Bean"); - return faultBeanName; - } - - public static QName getElementName(Class<? extends Throwable> exceptionClass) { - WebFault webFault = exceptionClass.getAnnotation(WebFault.class); - String namespace = null; - String name = null; - if (webFault != null) { - namespace = webFault.targetNamespace(); - name = webFault.name(); - } - if (namespace == null) { - namespace = JavaInterfaceUtil.getNamespace(exceptionClass); - } - if (name == null) { - name = exceptionClass.getSimpleName(); - } - return new QName(namespace, name); - } - - public static Class<?> generateFaultBeanClass(Class<? extends Throwable> exceptionClass) { - FaultBeanGenerator generator = new FaultBeanGenerator(); - GeneratedClassLoader cl = new GeneratedClassLoader(exceptionClass.getClassLoader()); - return generator.generate(exceptionClass, cl); - } -} diff --git a/sca-java-2.x/branches/2.0-Beta2/modules/interface-java-jaxws/src/main/java/org/apache/tuscany/sca/interfacedef/java/jaxws/GeneratedClassLoader.java b/sca-java-2.x/branches/2.0-Beta2/modules/interface-java-jaxws/src/main/java/org/apache/tuscany/sca/interfacedef/java/jaxws/GeneratedClassLoader.java deleted file mode 100644 index 3f035ce585..0000000000 --- a/sca-java-2.x/branches/2.0-Beta2/modules/interface-java-jaxws/src/main/java/org/apache/tuscany/sca/interfacedef/java/jaxws/GeneratedClassLoader.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 org.apache.tuscany.sca.interfacedef.java.jaxws; - -import java.net.URL; -import java.net.URLClassLoader; -import java.util.HashMap; -import java.util.Map; - -public class GeneratedClassLoader extends URLClassLoader { - private class GeneratedClass { - private String className; - private byte[] byteCode; - private Class<?> cls; - - public GeneratedClass(String className, byte[] byteCode) { - super(); - this.className = className; - this.byteCode = byteCode; - } - - public synchronized Class<?> getGeneratedClass() { - if (cls == null) { - cls = defineClass(className, byteCode, 0, byteCode.length); - } - return cls; - } - } - - private Map<String, GeneratedClass> generatedClasses = new HashMap<String, GeneratedClass>(); - - public GeneratedClassLoader(ClassLoader parentLoader) { - super(new URL[0], parentLoader); - } - - @Override - protected Class<?> findClass(String className) throws ClassNotFoundException { - GeneratedClass cls = generatedClasses.get(className); - if (cls != null) { - return cls.getGeneratedClass(); - } - return super.findClass(className); - } - - public synchronized Class<?> getGeneratedClass(String className, byte[] byteCode) { - GeneratedClass cls = generatedClasses.get(className); - if (cls == null) { - cls = new GeneratedClass(className, byteCode); - generatedClasses.put(className, cls); - } - return cls.getGeneratedClass(); - } -} diff --git a/sca-java-2.x/branches/2.0-Beta2/modules/interface-java-jaxws/src/main/java/org/apache/tuscany/sca/interfacedef/java/jaxws/GeneratedDataTypeImpl.java b/sca-java-2.x/branches/2.0-Beta2/modules/interface-java-jaxws/src/main/java/org/apache/tuscany/sca/interfacedef/java/jaxws/GeneratedDataTypeImpl.java deleted file mode 100644 index c3f568ef48..0000000000 --- a/sca-java-2.x/branches/2.0-Beta2/modules/interface-java-jaxws/src/main/java/org/apache/tuscany/sca/interfacedef/java/jaxws/GeneratedDataTypeImpl.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.interfacedef.java.jaxws; - -import java.lang.reflect.Method; -import java.lang.reflect.Type; -import java.util.Map; -import java.util.concurrent.ConcurrentHashMap; - -import javax.xml.namespace.QName; - -import org.apache.tuscany.sca.databinding.jaxb.JAXBDataBinding; -import org.apache.tuscany.sca.databinding.jaxb.XMLAdapterExtensionPoint; -import org.apache.tuscany.sca.interfacedef.DataType; -import org.apache.tuscany.sca.interfacedef.util.XMLType; - -/** - * A special data type that generate the class on demand - * @version $Rev$ $Date$ - */ -public class GeneratedDataTypeImpl implements DataType<XMLType> { - private XMLAdapterExtensionPoint xmlAdapters; - - private Class<?> physical; - private XMLType logical; - - private Map<Class<?>, Object> metaDataMap; - private Method method; - private String wrapperClassName; - private String wrapperNamespace; - private String wrapperName; - private boolean request; - private GeneratedClassLoader classLoader; - - private Class<? extends Throwable> exceptionClass; - - public GeneratedDataTypeImpl(XMLAdapterExtensionPoint xmlAdapters, Class<? extends Throwable> exceptionClass, GeneratedClassLoader cl) { - super(); - this.exceptionClass = exceptionClass; - this.classLoader = cl; - QName name = FaultBeanGenerator.getElementName(exceptionClass); - this.logical = new XMLType(name, name); - this.xmlAdapters = xmlAdapters; - } - - public GeneratedDataTypeImpl(XMLAdapterExtensionPoint xmlAdapters, - Method m, - String wrapperClassName, - String wrapperNamespace, - String wrapperName, - boolean request, - GeneratedClassLoader cl) { - super(); - this.method = m; - this.wrapperClassName = wrapperClassName; - this.wrapperNamespace = wrapperNamespace; - this.wrapperName = wrapperName; - this.classLoader = cl; - this.request = request; - QName name = new QName(wrapperNamespace, wrapperName); - this.logical = new XMLType(name, name); - this.xmlAdapters = xmlAdapters; - } - - public String getDataBinding() { - return JAXBDataBinding.NAME; - } - - public Type getGenericType() { - return getPhysical(); - } - - public XMLType getLogical() { - return logical; - } - - public synchronized Class<?> getPhysical() { - if (physical == null) { - if (method != null) { - WrapperBeanGenerator generator = new WrapperBeanGenerator(); - generator.setXmlAdapters(xmlAdapters); - physical = - request ? generator.generateRequestWrapper(method, wrapperClassName, wrapperNamespace, wrapperName, classLoader) - : generator.generateResponseWrapper(method, wrapperClassName, wrapperNamespace, wrapperName, classLoader); - ; - } else if (exceptionClass != null) { - FaultBeanGenerator faultBeanGenerator = new FaultBeanGenerator(); - faultBeanGenerator.setXmlAdapters(xmlAdapters); - physical = faultBeanGenerator.generate(exceptionClass, classLoader); - } - } - return physical; - } - - public void setDataBinding(String dataBinding) { - // NOP - } - - public void setGenericType(Type genericType) { - // NOP - } - - public void setLogical(XMLType logical) { - this.logical = logical; - } - - public void setPhysical(Class<?> cls) { - // NOP - } - - @Override - public Object clone() throws CloneNotSupportedException { - return super.clone(); - } - - public <T> T getMetaData(Class<T> type) { - return metaDataMap == null ? null : type.cast(metaDataMap.get(type)); - } - - public <T> void setMetaData(Class<T> type, T metaData) { - if (metaDataMap == null) { - metaDataMap = new ConcurrentHashMap<Class<?>, Object>(); - } - metaDataMap.put(type, metaData); - } -} diff --git a/sca-java-2.x/branches/2.0-Beta2/modules/interface-java-jaxws/src/main/java/org/apache/tuscany/sca/interfacedef/java/jaxws/JAXWSAsyncInterfaceProcessor.java b/sca-java-2.x/branches/2.0-Beta2/modules/interface-java-jaxws/src/main/java/org/apache/tuscany/sca/interfacedef/java/jaxws/JAXWSAsyncInterfaceProcessor.java deleted file mode 100644 index a57a0b4678..0000000000 --- a/sca-java-2.x/branches/2.0-Beta2/modules/interface-java-jaxws/src/main/java/org/apache/tuscany/sca/interfacedef/java/jaxws/JAXWSAsyncInterfaceProcessor.java +++ /dev/null @@ -1,286 +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.interfacedef.java.jaxws; - -import java.lang.reflect.ParameterizedType; -import java.lang.reflect.Type; -import java.util.ArrayList; -import java.util.List; -import java.util.concurrent.Future; - -import javax.xml.ws.AsyncHandler; -import javax.xml.ws.Response; - -import org.apache.tuscany.sca.core.ExtensionPointRegistry; -import org.apache.tuscany.sca.interfacedef.DataType; -import org.apache.tuscany.sca.interfacedef.InvalidInterfaceException; -import org.apache.tuscany.sca.interfacedef.Operation; -import org.apache.tuscany.sca.interfacedef.java.JavaInterface; -import org.apache.tuscany.sca.interfacedef.java.JavaOperation; -import org.apache.tuscany.sca.interfacedef.java.introspect.JavaInterfaceVisitor; - -public class JAXWSAsyncInterfaceProcessor implements JavaInterfaceVisitor { - private static String ASYNC = "Async"; - - public JAXWSAsyncInterfaceProcessor(ExtensionPointRegistry registry) { - } - - public void visitInterface(JavaInterface javaInterface) throws InvalidInterfaceException { - List<Operation> validOperations = new ArrayList<Operation>(); - List<Operation> asyncOperations = new ArrayList<Operation>(); - - validOperations.addAll(javaInterface.getOperations()); - for (Operation o : javaInterface.getOperations()) { - if (!o.getName().endsWith(ASYNC)) { - JavaOperation op = (JavaOperation)o; - if (op.getJavaMethod().getName().endsWith(ASYNC)) { - continue; - } - for (Operation asyncOp : getAsyncOperations(javaInterface.getOperations(), op)) { - if (isJAXWSAsyncPoolingOperation(op, asyncOp) || isJAXWSAsyncCallbackOperation(op, asyncOp)) { - validOperations.remove(asyncOp); - asyncOperations.add(asyncOp); - } - } - } - } - - javaInterface.getOperations().clear(); - javaInterface.getOperations().addAll(validOperations); - - javaInterface.getAttributes().put("JAXWS-ASYNC-OPERATIONS", asyncOperations); - } - - /** - * The additional client-side asynchronous polling and callback methods defined by JAX-WS are recognized in a Java interface as follows: - * For each method M in the interface, if another method P in the interface has - * - * a) a method name that is M's method name with the characters "Async" appended, and - * b) the same parameter signature as M, and - * c)a return type of Response<R> where R is the return type of M - * - * @param operation - * @param asyncOperation - * @return - */ - private static boolean isJAXWSAsyncPoolingOperation(Operation operation, Operation asyncOperation) { - - if (asyncOperation.getOutputType().getLogical().get(0) == null || Response.class != asyncOperation.getOutputType().getLogical().get(0).getPhysical()) { - // The return type is not Response<T> - return false; - } - - //the same parameter signature as M - List<DataType> operationInputType = operation.getInputType().getLogical(); - List<DataType> asyncOperationInputType = asyncOperation.getInputType().getLogical(); - int size = operationInputType.size(); - if (asyncOperationInputType.size() != size) { - return false; - } - for (int i = 0; i < size; i++) { - if (!isCompatible(operationInputType.get(i), asyncOperationInputType.get(i))) { - return false; - } - } - - //a return type of Response<R> where R is the return type of M - DataType<?> operationOutputType = operation.getOutputType().getLogical().get(0); - DataType<?> asyncOperationOutputType = asyncOperation.getOutputType().getLogical().get(0); - - if (operationOutputType != null && asyncOperationOutputType != null) { - Class<?> asyncReturnTypeClass = (Class<?>)asyncOperationOutputType.getPhysical(); - if (asyncReturnTypeClass == Response.class) { - //now check the actual type of the Response<R> with R - Class<?> returnType = operationOutputType.getPhysical(); - Class<?> asyncActualReturnTypeClass = Object.class; - if (asyncOperationOutputType.getGenericType() instanceof ParameterizedType) { - ParameterizedType asyncReturnType = (ParameterizedType)asyncOperationOutputType.getGenericType(); - asyncActualReturnTypeClass = (Class<?>)asyncReturnType.getActualTypeArguments()[0]; - } - - if (operation.getWrapper() != null) { - // The return type could be the wrapper type per JAX-WS spec - Class<?> wrapperClass = operation.getWrapper().getOutputWrapperClass(); - if (wrapperClass == asyncActualReturnTypeClass) { - return true; - } - } - if (returnType == asyncActualReturnTypeClass || returnType.isPrimitive() - && primitiveAssignable(returnType, asyncActualReturnTypeClass)) { - return true; - } else { - return false; - } - } - } - - return true; - } - - /** - * For each method M in the interface, if another method C in the interface has - * a) a method name that is M's method name with the characters "Async" appended, and - * b) a parameter signature that is M's parameter signature with an additional - * final parameter of type AsyncHandler<R> where R is the return type of M, and - * c) a return type of Future<?> - * - * then C is a JAX-WS callback method that isn't part of the SCA interface contract. - * - * @param operation - * @param asyncOperation - * @return - */ - private static boolean isJAXWSAsyncCallbackOperation(Operation operation, Operation asyncOperation) { - - if (asyncOperation.getOutputType().getLogical().get(0) == null || Future.class != asyncOperation.getOutputType().getLogical().get(0).getPhysical()) { - // The return type is not Future<?> - return false; - } - - //a parameter signature that is M's parameter signature - //with an additional final parameter of type AsyncHandler<R> where R is the return type of M, and - List<DataType> operationInputType = operation.getInputType().getLogical(); - List<DataType> asyncOperationInputType = asyncOperation.getInputType().getLogical(); - int size = operationInputType.size(); - if (asyncOperationInputType.size() != size + 1) { - return false; - } - for (int i = 0; i < size; i++) { - if (!isCompatible(operationInputType.get(i), asyncOperationInputType.get(i))) { - return false; - } - } - - Type genericParamType = asyncOperationInputType.get(size).getGenericType(); - - Class<?> asyncLastParameterTypeClass = asyncOperationInputType.get(size).getPhysical(); - if (asyncLastParameterTypeClass == AsyncHandler.class) { - //now check the actual type of the AsyncHandler<R> with R - Class<?> returnType = operation.getOutputType().getLogical().get(0).getPhysical(); - Class<?> asyncActualLastParameterTypeClass = Object.class; - if (genericParamType instanceof ParameterizedType) { - ParameterizedType asyncLastParameterType = (ParameterizedType)genericParamType; - asyncActualLastParameterTypeClass = (Class<?>)asyncLastParameterType.getActualTypeArguments()[0]; - } - - if (operation.getWrapper() != null) { - // The return type could be the wrapper type per JAX-WS spec - Class<?> wrapperClass = operation.getWrapper().getOutputWrapperClass(); - if (wrapperClass == asyncActualLastParameterTypeClass) { - return true; - } - } - - if (returnType == asyncActualLastParameterTypeClass || returnType.isPrimitive() - && primitiveAssignable(returnType, asyncActualLastParameterTypeClass)) { - return true; - } else { - return false; - } - } - - return true; - } - - /** - * Get operation by name - * - * @param operations - * @param operationName - * @return - */ - private static List<Operation> getAsyncOperations(List<Operation> operations, JavaOperation op) { - List<Operation> returnOperations = new ArrayList<Operation>(); - - for (Operation o : operations) { - if (o == op) { - continue; - } - String operationName = op.getName(); - if (o.getName().equals(operationName)) { - // Async operations have the same name when @WebMethod is present - /* - JavaOperation jop = (JavaOperation)o; - if (op.getJavaMethod().getName().equals(jop.getJavaMethod().getName() + ASYNC)) { - returnOperations.add(o); - } - */ - returnOperations.add(o); - } else if (o.getName().equals(operationName + ASYNC)) { - returnOperations.add(o); - } - } - - return returnOperations; - } - - /** - * Check if two operation parameters are compatible - * - * @param source - * @param target - * @return - */ - private static boolean isCompatible(DataType<?> source, DataType<?> target) { - if (source == target) { - return true; - } - - return target.getPhysical().isAssignableFrom(source.getPhysical()); - } - - /** - * Compares a two types, assuming one is a primitive, to determine if the - * other is its object counterpart - */ - private static boolean primitiveAssignable(Class<?> memberType, Class<?> param) { - if (memberType == Integer.class) { - return param == Integer.TYPE; - } else if (memberType == Double.class) { - return param == Double.TYPE; - } else if (memberType == Float.class) { - return param == Float.TYPE; - } else if (memberType == Short.class) { - return param == Short.TYPE; - } else if (memberType == Character.class) { - return param == Character.TYPE; - } else if (memberType == Boolean.class) { - return param == Boolean.TYPE; - } else if (memberType == Byte.class) { - return param == Byte.TYPE; - } else if (param == Integer.class) { - return memberType == Integer.TYPE; - } else if (param == Double.class) { - return memberType == Double.TYPE; - } else if (param == Float.class) { - return memberType == Float.TYPE; - } else if (param == Short.class) { - return memberType == Short.TYPE; - } else if (param == Character.class) { - return memberType == Character.TYPE; - } else if (param == Boolean.class) { - return memberType == Boolean.TYPE; - } else if (param == Byte.class) { - return memberType == Byte.TYPE; - } else { - return false; - } - } -} diff --git a/sca-java-2.x/branches/2.0-Beta2/modules/interface-java-jaxws/src/main/java/org/apache/tuscany/sca/interfacedef/java/jaxws/JAXWSFaultExceptionMapper.java b/sca-java-2.x/branches/2.0-Beta2/modules/interface-java-jaxws/src/main/java/org/apache/tuscany/sca/interfacedef/java/jaxws/JAXWSFaultExceptionMapper.java deleted file mode 100644 index fcf7006f16..0000000000 --- a/sca-java-2.x/branches/2.0-Beta2/modules/interface-java-jaxws/src/main/java/org/apache/tuscany/sca/interfacedef/java/jaxws/JAXWSFaultExceptionMapper.java +++ /dev/null @@ -1,403 +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.interfacedef.java.jaxws; - -import java.beans.BeanInfo; -import java.beans.Introspector; -import java.beans.PropertyDescriptor; -import java.lang.reflect.Constructor; -import java.lang.reflect.Method; -import java.security.AccessController; -import java.security.PrivilegedAction; - -import javax.xml.namespace.QName; -import javax.xml.ws.WebFault; - -import org.apache.tuscany.sca.core.ExtensionPointRegistry; -import org.apache.tuscany.sca.databinding.DataBindingExtensionPoint; -import org.apache.tuscany.sca.databinding.jaxb.XMLAdapterExtensionPoint; -import org.apache.tuscany.sca.interfacedef.DataType; -import org.apache.tuscany.sca.interfacedef.FaultExceptionMapper; -import org.apache.tuscany.sca.interfacedef.Operation; -import org.apache.tuscany.sca.interfacedef.impl.DataTypeImpl; -import org.apache.tuscany.sca.interfacedef.java.JavaInterface; -import org.apache.tuscany.sca.interfacedef.util.FaultException; -import org.apache.tuscany.sca.interfacedef.util.XMLType; -import org.oasisopen.sca.ServiceRuntimeException; - -/** - * JAX-WS ExceptionHandler - * - * @version $Rev$ $Date$ - */ -public class JAXWSFaultExceptionMapper implements FaultExceptionMapper { - public static final String GETCAUSE = "getCause"; - public static final String GETLOCALIZEDMESSAGE = "getLocalizedMessage"; - public static final String GETSTACKTRACE = "getStackTrace"; - public static final String GETCLASS = "getClass"; - - private static final Class<?>[] EMPTY_CLASS_ARRAY = new Class[0]; - private DataBindingExtensionPoint dataBindingExtensionPoint; - private XMLAdapterExtensionPoint xmlAdapterExtensionPoint; - - - public JAXWSFaultExceptionMapper(DataBindingExtensionPoint dataBindingExtensionPoint, XMLAdapterExtensionPoint xmlAdapters) { - super(); - this.dataBindingExtensionPoint = dataBindingExtensionPoint; - this.xmlAdapterExtensionPoint = xmlAdapters; - } - - public JAXWSFaultExceptionMapper(ExtensionPointRegistry registry) { - this.dataBindingExtensionPoint = registry.getExtensionPoint(DataBindingExtensionPoint.class); - this.xmlAdapterExtensionPoint = registry.getExtensionPoint(XMLAdapterExtensionPoint.class); - } - - /** - * The following is quoted from the JAX-WS Specification v2.1 - * <ul> - * <li>WrapperException(String message, FaultBean faultInfo) <br> - * A constructor where WrapperException is replaced with the name of the - * generated wrapper exception and FaultBean is replaced by the name of the - * generated fault bean. - * <li> WrapperException(String message, FaultBean faultInfo, Throwable - * cause) <br> - * A constructor where WrapperException is replaced with the name of the - * generated wrapper exception and FaultBean is replaced by the name of the - * generated fault bean. The last argument, cause, may be used to convey - * protocol specific fault information - * </ul> - */ - @SuppressWarnings("unchecked") - public Throwable wrapFaultInfo(DataType<DataType> exceptionType, String message, Object faultInfo, Throwable cause, Operation operation) { - Class<?> exceptionClass = exceptionType.getPhysical(); - if (exceptionClass.isInstance(faultInfo)) { - return (Throwable)faultInfo; - } - DataType<?> faultBeanType = exceptionType.getLogical(); - Class<?> faultBeanClass = faultBeanType.getPhysical(); - try { - Throwable exc = - newInstance((Class<? extends Throwable>)exceptionClass, message, faultBeanClass, faultInfo, cause); - // Include the elem name into the FaultException we build so it can be used for matching in the DataTransformationInterceptor - // - // Note this may happen even if we find a constructor above, that is the type of the non-generic fault exc may be an instance - // of FaultException - // - if ((exc instanceof FaultException) && (faultBeanType.getLogical() instanceof XMLType)) { - FaultException faultExc = (FaultException)exc; - DataType<XMLType> faultBeanXMLType = (DataType<XMLType>)faultBeanType; - XMLType faultLogical = faultBeanXMLType.getLogical(); - faultExc.setFaultName(faultLogical.getElementName()); - } - return exc; - } catch (Throwable e) { - throw new IllegalArgumentException(e); - } - } - - private Throwable newInstance(Class<? extends Throwable> exceptionClass, - String message, - Class<?> faultBeanClass, - Object faultInfo, - Throwable cause) throws Exception { - Throwable ex = null; - Constructor<? extends Throwable> ctor = null; - try { - // Get the message property - Method getMessage = faultBeanClass.getMethod("getMessage"); - message = (String)getMessage.invoke(faultInfo); - } catch (Throwable e) { - // Ignore - } - if (faultInfo == null) { - try { - ctor = exceptionClass.getConstructor(String.class, Throwable.class); - ex = ctor.newInstance(message, cause); - } catch (NoSuchMethodException e1) { - try { - ctor = exceptionClass.getConstructor(String.class); - ex = ctor.newInstance(message); - } catch (NoSuchMethodException e2) { - try { - ctor = exceptionClass.getConstructor(Throwable.class); - ex = ctor.newInstance(cause); - } catch (NoSuchMethodException e3) { - ctor = exceptionClass.getConstructor(); - ex = ctor.newInstance(); - } - } - } - } else { - try { - // FIXME: What about if the faultBeanClass is a subclass of the argument type? - ctor = exceptionClass.getConstructor(String.class, faultBeanClass, Throwable.class); - ex = ctor.newInstance(message, faultInfo, cause); - } catch (NoSuchMethodException e1) { - try { - ctor = exceptionClass.getConstructor(String.class, faultInfo.getClass()); - ex = ctor.newInstance(message, faultInfo); - } catch (NoSuchMethodException e2) { - try { - ctor = exceptionClass.getConstructor(String.class, Throwable.class); - ex = ctor.newInstance(message, cause); - populateException(ex, faultInfo); - } catch (NoSuchMethodException e3) { - try { - ctor = exceptionClass.getConstructor(String.class); - ex = ctor.newInstance(message); - populateException(ex, faultInfo); - } catch (NoSuchMethodException e4) { - try { - ctor = exceptionClass.getConstructor(); - if (ctor != null) { - ex = ctor.newInstance(); - populateException(ex, faultInfo); - } else { - ex = new FaultException(message, faultInfo, cause); - } - } catch (NoSuchMethodException e5) { - try { - ctor = exceptionClass.getConstructor(Throwable.class); - ex = ctor.newInstance(cause); - populateException(ex, faultInfo); - } catch (NoSuchMethodException e6) { - ctor = exceptionClass.getConstructor(); - ex = ctor.newInstance(); - } - } - } - } - } - } - } - - return ex; - } - - /** - * Populate the java exception from the fault bean - * @param ex - * @param faultBean - * @throws Exception - */ - private void populateException(Throwable ex, Object faultBean) throws Exception { - PropertyDescriptor props[] = Introspector.getBeanInfo(faultBean.getClass()).getPropertyDescriptors(); - for (PropertyDescriptor p : props) { - Method getter = p.getReadMethod(); - Method setter = p.getWriteMethod(); - if (getter == null || setter == null) { - continue; - } - try { - Method m = ex.getClass().getMethod(setter.getName(), setter.getParameterTypes()); - Object pv = getter.invoke(faultBean); - m.invoke(ex, pv); - } catch (Exception e) { - // Ignore; - } - } - } - - public Object getFaultInfo(Throwable exception, Class<?> faultBeanClass, Operation operation) { - if (exception == null) { - return null; - } - - // Check if it's the generic FaultException - if (exception instanceof FaultException) { - return ((FaultException)exception).getFaultInfo(); - } - - try { - Method method = exception.getClass().getMethod("getFaultInfo", EMPTY_CLASS_ARRAY); - return method.invoke(exception, (Object[])null); - } catch (NoSuchMethodException e) { - // Follow the JAX-WS v2.1 Specification section 3.7 - return createFaultBean(exception, faultBeanClass); - } catch (Throwable e) { - throw new IllegalArgumentException(e); - } - } - - private Object createFaultBean(Throwable exception, Class<?> faultBeanClass) { - /** - * For each getter in the exception and its superclasses, a property of the same - * type and name is added to the bean. The getCause, getLocalizedMessage and - * getStackTrace getters from java.lang.Throwable and the getClass getter from - * java.lang.Object are excluded from the list of getters to be mapped. - */ - // Return the exception as-is if it's already the fault bean - if (faultBeanClass.isInstance(exception)) { - return exception; - } - try { - Object faultBean = null; - for (Constructor<?> ctor : faultBeanClass.getConstructors()) { - Class<?>[] params = ctor.getParameterTypes(); - if (params.length == 1 && String.class == params[0]) { - faultBean = ctor.newInstance(exception.getMessage()); - } else if (params.length == 2 && String.class == params[0] - && Throwable.class.isAssignableFrom(params[1])) { - faultBean = ctor.newInstance(exception.getMessage(), exception); - } else if (params.length == 0) { - faultBean = ctor.newInstance(); - } - if (faultBean != null) { - break; - } - } - if (faultBean == null) { - return exception; - } - BeanInfo beanInfo = Introspector.getBeanInfo(exception.getClass()); - for (PropertyDescriptor pd : beanInfo.getPropertyDescriptors()) { - Method getter = pd.getReadMethod(); - String name = getter.getName(); - if (!isMappedGetter(name)) { - continue; - } - Method setter = null; - try { - setter = faultBeanClass.getMethod("set" + capitalize(pd.getName()), getter.getReturnType()); - } catch (NoSuchMethodException e) { - continue; - } - Object prop = getter.invoke(exception); - setter.invoke(faultBean, prop); - } - return faultBean; - } catch (Throwable ex) { - throw new IllegalArgumentException(ex); - } - } - - @SuppressWarnings("unchecked") - public boolean introspectFaultDataType(DataType<DataType> exceptionType, final Operation operation, final boolean generatingFaultBean) { - QName faultName = null; - boolean result = false; - - final Class<?> cls = exceptionType.getPhysical(); - if (cls == FaultException.class) { - return true; - } - DataType faultType = (DataType)exceptionType.getLogical(); - Class<?> faultBean = null; - final WebFault fault = cls.getAnnotation(WebFault.class); - if (fault != null) { - if (!"".equals(fault.name()) || !"".equals(fault.targetNamespace())) { - QName faultQName = ((XMLType)faultType.getLogical()).getElementName(); - String faultNS = - "".equals(fault.targetNamespace()) ? faultQName.getNamespaceURI() : fault.targetNamespace(); - String faultLocal = "".equals(fault.name()) ? faultQName.getLocalPart() : fault.name(); - faultName = new QName(faultNS, faultLocal); - XMLType xmlType = new XMLType(faultName, null); - faultType.setLogical(xmlType); - } - if (!"".equals(fault.faultBean())) { - faultBean = AccessController.doPrivileged(new PrivilegedAction<Class<?>>() { - public Class<?> run() { - try { - return Class.forName(fault.faultBean(), false, cls.getClassLoader()); - } catch (ClassNotFoundException e) { - throw new ServiceRuntimeException(e); - } - } - }); - } else { - Method m; - try { - m = cls.getMethod("getFaultInfo", (Class[])null); - faultBean = m.getReturnType(); - } catch (NoSuchMethodException e) { - // Ignore - } - } - } - - if (faultBean == null) { - final String faultBeanClassName = CodeGenerationHelper.getPackagePrefix(cls) + cls.getSimpleName() + "Bean"; - final QName qname = faultName; - faultType = AccessController.doPrivileged(new PrivilegedAction<DataType<XMLType>>() { - public DataType<XMLType> run() { - try { - Class<?> faultBean = Class.forName(faultBeanClassName, false, cls.getClassLoader()); - return new DataTypeImpl<XMLType>(faultBean, new XMLType(qname, qname)); - } catch (ClassNotFoundException e) { - if (generatingFaultBean) { - Class<? extends Throwable> t = (Class<? extends Throwable>)cls; - ClassLoader parent = - operation == null ? t.getClassLoader() : ((JavaInterface)operation.getInterface()) - .getJavaClass().getClassLoader(); - GeneratedClassLoader cl = new GeneratedClassLoader(parent); - GeneratedDataTypeImpl dt = new GeneratedDataTypeImpl(xmlAdapterExtensionPoint, t, cl); - return dt; - } else { - return new DataTypeImpl<XMLType>(cls, new XMLType(qname, qname)); - } - } - } - }); - } else { - faultType.setDataBinding(null); - faultType.setGenericType(faultBean); - faultType.setPhysical(faultBean); - } - - // TODO: Use the databinding framework to introspect the fault bean class - if (faultType.getDataBinding() == null && dataBindingExtensionPoint != null) { - faultBean = faultType.getPhysical(); - result = - dataBindingExtensionPoint.introspectType(faultType, operation); - } - ((DataType) exceptionType).setLogical(faultType); - - /* - The introspection of the fault DT may not have calculated the correct element name, - though we may have already done this in this method. Let's look at the DataType now - that introspection is done, and, if it has an XMLType, let's set the element to the - 'faultName' if we calculated one. - */ - if ((faultName != null) && (faultType.getLogical() instanceof XMLType)) { - XMLType faultTypeXML = (XMLType)faultType.getLogical(); - // The element name (if set) should match the fault name - faultTypeXML.setElementName(faultName); - } - - return result; - } - - public static boolean isMappedGetter(String methodName) { - if (GETCAUSE.equals(methodName) || GETLOCALIZEDMESSAGE.equals(methodName) - || GETSTACKTRACE.equals(methodName) - || GETCLASS.equals(methodName)) { - return false; - } else { - return true; - } - } - - private static String capitalize(String name) { - if (name == null || name.length() == 0) { - return name; - } else { - return Character.toUpperCase(name.charAt(0)) + name.substring(1); - } - } -} diff --git a/sca-java-2.x/branches/2.0-Beta2/modules/interface-java-jaxws/src/main/java/org/apache/tuscany/sca/interfacedef/java/jaxws/JAXWSJavaInterfaceProcessor.java b/sca-java-2.x/branches/2.0-Beta2/modules/interface-java-jaxws/src/main/java/org/apache/tuscany/sca/interfacedef/java/jaxws/JAXWSJavaInterfaceProcessor.java deleted file mode 100644 index 74b2b53543..0000000000 --- a/sca-java-2.x/branches/2.0-Beta2/modules/interface-java-jaxws/src/main/java/org/apache/tuscany/sca/interfacedef/java/jaxws/JAXWSJavaInterfaceProcessor.java +++ /dev/null @@ -1,401 +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.interfacedef.java.jaxws; - -import java.lang.annotation.Annotation; -import java.lang.reflect.Method; -import java.lang.reflect.Modifier; -import java.security.AccessController; -import java.security.PrivilegedAction; -import java.util.ArrayList; -import java.util.Iterator; -import java.util.List; - -import javax.jws.Oneway; -import javax.jws.WebMethod; -import javax.jws.WebParam; -import javax.jws.WebParam.Mode; -import javax.jws.WebResult; -import javax.jws.soap.SOAPBinding; -import javax.jws.soap.SOAPBinding.Style; -import javax.xml.namespace.QName; -import javax.xml.ws.RequestWrapper; -import javax.xml.ws.ResponseWrapper; - -import org.apache.tuscany.sca.core.ExtensionPointRegistry; -import org.apache.tuscany.sca.core.FactoryExtensionPoint; -import org.apache.tuscany.sca.core.UtilityExtensionPoint; -import org.apache.tuscany.sca.databinding.DataBindingExtensionPoint; -import org.apache.tuscany.sca.databinding.javabeans.JavaExceptionDataBinding; -import org.apache.tuscany.sca.databinding.jaxb.JAXBDataBinding; -import org.apache.tuscany.sca.databinding.jaxb.XMLAdapterExtensionPoint; -import org.apache.tuscany.sca.interfacedef.DataType; -import org.apache.tuscany.sca.interfacedef.FaultExceptionMapper; -import org.apache.tuscany.sca.interfacedef.InvalidInterfaceException; -import org.apache.tuscany.sca.interfacedef.Operation; -import org.apache.tuscany.sca.interfacedef.ParameterMode; -import org.apache.tuscany.sca.interfacedef.impl.DataTypeImpl; -import org.apache.tuscany.sca.interfacedef.java.JavaInterface; -import org.apache.tuscany.sca.interfacedef.java.JavaInterfaceFactory; -import org.apache.tuscany.sca.interfacedef.java.JavaOperation; -import org.apache.tuscany.sca.interfacedef.java.introspect.JavaInterfaceVisitor; -import org.apache.tuscany.sca.interfacedef.util.ElementInfo; -import org.apache.tuscany.sca.interfacedef.util.TypeInfo; -import org.apache.tuscany.sca.interfacedef.util.WrapperInfo; -import org.apache.tuscany.sca.interfacedef.util.XMLType; -import org.apache.tuscany.sca.interfacedef.wsdl.WSDLFactory; - -/** - * Introspect the java class/interface with JSR-181 and JAXWS annotations - * - * @version $Rev$ $Date$ - */ -public class JAXWSJavaInterfaceProcessor implements JavaInterfaceVisitor { - private static final String JAXB_DATABINDING = JAXBDataBinding.NAME; - private static final String GET = "get"; - private DataBindingExtensionPoint dataBindingExtensionPoint; - private FaultExceptionMapper faultExceptionMapper; - private XMLAdapterExtensionPoint xmlAdapterExtensionPoint; - protected JavaInterfaceFactory javaInterfaceFactory; - private WSDLFactory wsdlFactory; - - - public JAXWSJavaInterfaceProcessor(ExtensionPointRegistry registry) { - dataBindingExtensionPoint = registry.getExtensionPoint(DataBindingExtensionPoint.class); - faultExceptionMapper = registry.getExtensionPoint(UtilityExtensionPoint.class).getUtility(FaultExceptionMapper.class); - xmlAdapterExtensionPoint = registry.getExtensionPoint(XMLAdapterExtensionPoint.class); - - FactoryExtensionPoint factories = registry.getExtensionPoint(FactoryExtensionPoint.class); - this.javaInterfaceFactory = factories.getFactory(JavaInterfaceFactory.class); - this.wsdlFactory = factories.getFactory(WSDLFactory.class); - } - - - public JAXWSJavaInterfaceProcessor() { - super(); - } - - private ParameterMode getParameterMode(WebParam.Mode mode) { - if (mode == Mode.INOUT) { - return ParameterMode.INOUT; - } else if (mode == Mode.OUT) { - return ParameterMode.OUT; - } else { - return ParameterMode.IN; - } - } - - private static String capitalize(String name) { - if (name == null || name.length() == 0) { - return name; - } else { - return Character.toUpperCase(name.charAt(0)) + name.substring(1); - } - } - - public void visitInterface(JavaInterface contract) throws InvalidInterfaceException { - - final Class<?> clazz = contract.getJavaClass(); - - contract = JAXWSUtils.configureJavaInterface(contract, clazz); - String tns = contract.getQName().getNamespaceURI(); - - if (!contract.isRemotable()) { - return; - } - - // SOAP binding (doc/lit/wrapped|bare or rpc/lit) - SOAPBinding soapBinding = clazz.getAnnotation(SOAPBinding.class); - - for (Iterator<Operation> it = contract.getOperations().iterator(); it.hasNext();) { - final JavaOperation operation = (JavaOperation)it.next(); - final Method method = operation.getJavaMethod(); - introspectFaultTypes(operation); - - // SOAP binding (doc/lit/wrapped|bare or rpc/lit) - SOAPBinding methodSOAPBinding = method.getAnnotation(SOAPBinding.class); - if (methodSOAPBinding == null) { - methodSOAPBinding = soapBinding; - } - - boolean documentStyle = true; - boolean bare = false; - if (methodSOAPBinding != null) { - bare = methodSOAPBinding.parameterStyle() == SOAPBinding.ParameterStyle.BARE; - if(bare) { - // For BARE parameter style, the data won't be unwrapped - // The wrapper should be null - operation.setWrapperStyle(false); - } - documentStyle = methodSOAPBinding.style() == Style.DOCUMENT; - } - - String operationName = operation.getName(); - // WebMethod - WebMethod webMethod = method.getAnnotation(WebMethod.class); - if (webMethod != null) { - if (webMethod.exclude()) { - // Exclude the method - it.remove(); - continue; - } - operationName = getValue(webMethod.operationName(), operationName); - operation.setName(operationName); - operation.setAction(webMethod.action()); - } - - // Is one way? - Oneway oneway = method.getAnnotation(Oneway.class); - if (oneway != null) { - // JSR 181 - assert method.getReturnType() == void.class; - operation.setNonBlocking(true); - } - - // Handle BARE mapping - if (bare) { - for (int i = 0; i < method.getParameterTypes().length; i++) { - WebParam param = getAnnotation(method, i, WebParam.class); - if (param != null) { - String ns = getValue(param.targetNamespace(), tns); - // Default to <operationName> for doc-bare - String name = getValue(param.name(), documentStyle ? operationName : "arg" + i); - QName element = new QName(ns, name); - Object logical = operation.getInputType().getLogical().get(i).getLogical(); - if (logical instanceof XMLType) { - ((XMLType)logical).setElementName(element); - } - operation.getParameterModes().set(i, getParameterMode(param.mode())); - } - } - WebResult result = method.getAnnotation(WebResult.class); - if (result != null) { - String ns = getValue(result.targetNamespace(), tns); - // Default to <operationName>Response for doc-bare - String name = getValue(result.name(), documentStyle ? operationName + "Response" : "return"); - QName element = new QName(ns, name); - Object logical = operation.getOutputType().getLogical(); - if (logical instanceof XMLType) { - ((XMLType)logical).setElementName(element); - } - } - // FIXME: [rfeng] For the BARE mapping, do we need to create a Wrapper? - // it's null at this point - } else { - - RequestWrapper requestWrapper = method.getAnnotation(RequestWrapper.class); - String ns = requestWrapper == null ? tns : getValue(requestWrapper.targetNamespace(), tns); - String name = - requestWrapper == null ? operationName : getValue(requestWrapper.localName(), operationName); - String wrapperBeanName = requestWrapper == null ? "" : requestWrapper.className(); - if ("".equals(wrapperBeanName)) { - wrapperBeanName = CodeGenerationHelper.getPackagePrefix(clazz) + capitalize(method.getName()); - } - - DataType<XMLType> inputWrapperDT = null; - - final String inputWrapperClassName = wrapperBeanName; - final String inputNS = ns; - final String inputName = name; - inputWrapperDT = AccessController.doPrivileged(new PrivilegedAction<DataType<XMLType>>() { - public DataType<XMLType> run() { - try { - Class<?> wrapperClass = Class.forName(inputWrapperClassName, false, clazz.getClassLoader()); - QName qname = new QName(inputNS, inputName); - DataType dt = new DataTypeImpl<XMLType>(wrapperClass, new XMLType(qname, qname)); - dataBindingExtensionPoint.introspectType(dt, operation); - // TUSCANY-2505 - if (dt.getLogical() instanceof XMLType) { - XMLType xmlType = (XMLType)dt.getLogical(); - xmlType.setElementName(qname); - } - return dt; - } catch (ClassNotFoundException e) { - GeneratedClassLoader cl = new GeneratedClassLoader(clazz.getClassLoader()); - return new GeneratedDataTypeImpl(xmlAdapterExtensionPoint, method, inputWrapperClassName, inputNS, inputName, true, - cl); - } - } - }); - - QName inputWrapper = inputWrapperDT.getLogical().getElementName(); - - ResponseWrapper responseWrapper = method.getAnnotation(ResponseWrapper.class); - ns = responseWrapper == null ? tns : getValue(responseWrapper.targetNamespace(), tns); - name = - responseWrapper == null ? operationName + "Response" : getValue(responseWrapper.localName(), - operationName + "Response"); - wrapperBeanName = responseWrapper == null ? "" : responseWrapper.className(); - if ("".equals(wrapperBeanName)) { - wrapperBeanName = - CodeGenerationHelper.getPackagePrefix(clazz) + capitalize(method.getName()) + "Response"; - } - - DataType<XMLType> outputWrapperDT = null; - final String outputWrapperClassName = wrapperBeanName; - final String outputNS = ns; - final String outputName = name; - - outputWrapperDT = AccessController.doPrivileged(new PrivilegedAction<DataType<XMLType>>() { - public DataType<XMLType> run() { - try { - Class<?> wrapperClass = - Class.forName(outputWrapperClassName, false, clazz.getClassLoader()); - QName qname = new QName(outputNS, outputName); - DataType dt = new DataTypeImpl<XMLType>(wrapperClass, new XMLType(qname, qname)); - dataBindingExtensionPoint.introspectType(dt, operation); - // TUSCANY-2505 - if (dt.getLogical() instanceof XMLType) { - XMLType xmlType = (XMLType)dt.getLogical(); - xmlType.setElementName(qname); - } - return dt; - } catch (ClassNotFoundException e) { - GeneratedClassLoader cl = new GeneratedClassLoader(clazz.getClassLoader()); - return new GeneratedDataTypeImpl(xmlAdapterExtensionPoint, method, outputWrapperClassName, outputNS, outputName, - false, cl); - } - } - }); - QName outputWrapper = outputWrapperDT.getLogical().getElementName(); - - List<ElementInfo> inputElements = new ArrayList<ElementInfo>(); - for (int i = 0; i < method.getParameterTypes().length; i++) { - WebParam param = getAnnotation(method, i, WebParam.class); - ns = param != null ? param.targetNamespace() : ""; - // Default to "" for doc-lit-wrapped && non-header - ns = getValue(ns, documentStyle && (param == null || !param.header()) ? "" : tns); - name = param != null ? param.name() : ""; - name = getValue(name, "arg" + i); - QName element = new QName(ns, name); - Object logical = operation.getInputType().getLogical().get(i).getLogical(); - QName type = null; - if (logical instanceof XMLType) { - ((XMLType)logical).setElementName(element); - type = ((XMLType)logical).getTypeName(); - } - inputElements.add(new ElementInfo(element, new TypeInfo(type, false, null))); - if (param != null) { - operation.getParameterModes().set(i, getParameterMode(param.mode())); - } - } - - List<ElementInfo> outputElements = new ArrayList<ElementInfo>(); - WebResult result = method.getAnnotation(WebResult.class); - // Default to "" for doc-lit-wrapped && non-header - ns = result != null ? result.targetNamespace() : ""; - ns = getValue(ns, documentStyle && (result == null || !result.header()) ? "" : tns); - name = result != null ? result.name() : ""; - name = getValue(name, "return"); - QName element = new QName(ns, name); - - if ((operation.getOutputType() != null) && ( operation.getOutputType().getLogical().get(0) != null)) { - Object logical = operation.getOutputType().getLogical().get(0).getLogical(); - QName type = null; - if (logical instanceof XMLType) { - ((XMLType)logical).setElementName(element); - type = ((XMLType)logical).getTypeName(); - } - outputElements.add(new ElementInfo(element, new TypeInfo(type, false, null))); - } - - String db = inputWrapperDT != null ? inputWrapperDT.getDataBinding() : JAXB_DATABINDING; - WrapperInfo wrapperInfo = - new WrapperInfo(db, new ElementInfo(inputWrapper, null), new ElementInfo(outputWrapper, null), - inputElements, outputElements); - - wrapperInfo.setInputWrapperType(inputWrapperDT); - wrapperInfo.setOutputWrapperType(outputWrapperDT); - - operation.setWrapper(wrapperInfo); - } - } - } - - @SuppressWarnings("unchecked") - private void introspectFaultTypes(Operation operation) { - if (operation != null && operation.getFaultTypes() != null) { - for (DataType exceptionType : operation.getFaultTypes()) { - faultExceptionMapper.introspectFaultDataType(exceptionType, operation, true); - DataType faultType = (DataType)exceptionType.getLogical(); - if (JavaExceptionDataBinding.NAME.equals(faultType.getDataBinding())) { - // The exception class doesn't have an associated bean class, so - // synthesize a virtual bean by introspecting the exception class. - createSyntheticBean(operation, exceptionType); - } - } - } - } - - private void createSyntheticBean(Operation operation, DataType exceptionType) { - DataType faultType = (DataType)exceptionType.getLogical(); - QName faultBeanName = ((XMLType)faultType.getLogical()).getElementName(); - List<DataType<XMLType>> beanDataTypes = new ArrayList<DataType<XMLType>>(); - for (Method aMethod : exceptionType.getPhysical().getMethods()) { - if (Modifier.isPublic(aMethod.getModifiers()) && aMethod.getName().startsWith(GET) - && aMethod.getParameterTypes().length == 0 - && JAXWSFaultExceptionMapper.isMappedGetter(aMethod.getName())) { - String propName = resolvePropertyFromMethod(aMethod.getName()); - QName propQName = new QName(faultBeanName.getNamespaceURI(), propName); - Class<?> propType = aMethod.getReturnType(); - XMLType xmlPropType = new XMLType(propQName, null); - DataType<XMLType> propDT = new DataTypeImpl<XMLType>(propType, xmlPropType); - org.apache.tuscany.sca.databinding.annotation.DataType dt = - aMethod.getAnnotation(org.apache.tuscany.sca.databinding.annotation.DataType.class); - if (dt != null) { - propDT.setDataBinding(dt.value()); - } - dataBindingExtensionPoint.introspectType(propDT, operation); - - // sort the list lexicographically as specified in JAX-WS spec section 3.7 - int i = 0; - for (; i < beanDataTypes.size(); i++) { - if (beanDataTypes.get(i).getLogical().getElementName().getLocalPart().compareTo(propName) > 0) { - break; - } - } - beanDataTypes.add(i, propDT); - } - } - operation.getFaultBeans().put(faultBeanName, beanDataTypes); - } - - private String resolvePropertyFromMethod(String methodName) { - StringBuffer propName = new StringBuffer(); - propName.append(Character.toLowerCase(methodName.charAt(GET.length()))); - propName.append(methodName.substring(GET.length() + 1)); - return propName.toString(); - } - - private <T extends Annotation> T getAnnotation(Method method, int index, Class<T> annotationType) { - Annotation[] annotations = method.getParameterAnnotations()[index]; - for (Annotation annotation : annotations) { - if (annotation.annotationType() == annotationType) { - return annotationType.cast(annotation); - } - } - return null; - } - - private static String getValue(String value, String defaultValue) { - return "".equals(value) ? defaultValue : value; - } - -} diff --git a/sca-java-2.x/branches/2.0-Beta2/modules/interface-java-jaxws/src/main/java/org/apache/tuscany/sca/interfacedef/java/jaxws/JAXWSUtils.java b/sca-java-2.x/branches/2.0-Beta2/modules/interface-java-jaxws/src/main/java/org/apache/tuscany/sca/interfacedef/java/jaxws/JAXWSUtils.java deleted file mode 100644 index 011d74625d..0000000000 --- a/sca-java-2.x/branches/2.0-Beta2/modules/interface-java-jaxws/src/main/java/org/apache/tuscany/sca/interfacedef/java/jaxws/JAXWSUtils.java +++ /dev/null @@ -1,104 +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.interfacedef.java.jaxws;
-
-import javax.jws.WebService;
-import javax.xml.namespace.QName;
-import javax.xml.ws.WebServiceProvider;
-
-import org.apache.tuscany.sca.interfacedef.InvalidInterfaceException;
-import org.apache.tuscany.sca.interfacedef.java.JavaInterface;
-import org.apache.tuscany.sca.interfacedef.util.JavaXMLMapper;
-
-
-/**
- * A set of utility methods for processing JAXWS annotations that are
- * shared between Java inteface and implementation processing
- */
-public class JAXWSUtils {
-
- /**
- * JAXWS annotations may identify a service interface via either
- * - an interface class name, e.g. @WebService(endpointInterface="my.service.ServiceImpl")
- * - a wsdl file name, e.g. @WebService(wsdlLocation="some.wsdl")
- * - a Java class/interface, e.g. @WebService
- * This operation configures the Java interface based on these separate pieces
- * of information. The resulting interface contract must be subsequently resolved in order that
- * the named endpoint interface class or wsdl file is found
- *
- * @param javaInterface the Tuscany representation of the Java interface
- * @param clazz the Java class that the interface refers to (may have JAXWS annotations)
- * @return
- */
- public static JavaInterface configureJavaInterface(JavaInterface javaInterface,
- Class<?> clazz){
-
- String servineNamespace = JavaXMLMapper.getNamespace(clazz);
- String serviceName = clazz.getSimpleName();
- QName serviceQName = null;
- String serviceInterfaceClassName = null;
- String wsdlFileName = null;
-
- WebService webServiceAnnotation = clazz.getAnnotation(WebService.class);
- if (webServiceAnnotation != null) {
- servineNamespace = getValue(webServiceAnnotation.targetNamespace(), servineNamespace);
- serviceName = getValue(webServiceAnnotation.name(), serviceName);
- serviceInterfaceClassName = webServiceAnnotation.endpointInterface();
- wsdlFileName = webServiceAnnotation.wsdlLocation();
- javaInterface.setRemotable(true);
- }
-
- WebServiceProvider webServiceProviderAnnotation = clazz.getAnnotation(WebServiceProvider.class);
- if (webServiceProviderAnnotation != null) {
- servineNamespace = getValue(webServiceProviderAnnotation.targetNamespace(), servineNamespace);
- serviceName = getValue(webServiceProviderAnnotation.serviceName(), serviceName);
- wsdlFileName = webServiceProviderAnnotation.wsdlLocation();
- javaInterface.setRemotable(true);
- }
-
- serviceQName = new QName(servineNamespace, serviceName);
- javaInterface.setQName(serviceQName);
-
- // use the provided Java interface name to overwrite
- // any Java interface created from an implemented interfaces
- if (serviceInterfaceClassName != null &&
- serviceInterfaceClassName.length() > 0){
- javaInterface.setName(serviceInterfaceClassName);
- javaInterface.setJAXWSJavaInterfaceName(serviceInterfaceClassName);
- javaInterface.setUnresolved(true);
- }
-
- // Store the WSDL location if it's specified in
- // the @WebService annotation. Later this is resolved and is attached
- // to the Java interface contract in the normalized space so that effectively the contract
- // has both Java and WSDL interfaces. This allows databinding to
- // operate correctly as it still expects a Java interface for a Java implementation
- if (wsdlFileName != null &&
- wsdlFileName.length() > 0){
- javaInterface.setJAXWSWSDLLocation(wsdlFileName);
- }
-
- return javaInterface;
- }
-
- private static String getValue(String value, String defaultValue) {
- return "".equals(value) ? defaultValue : value;
- }
-}
diff --git a/sca-java-2.x/branches/2.0-Beta2/modules/interface-java-jaxws/src/main/java/org/apache/tuscany/sca/interfacedef/java/jaxws/WebServiceInterfaceProcessor.java b/sca-java-2.x/branches/2.0-Beta2/modules/interface-java-jaxws/src/main/java/org/apache/tuscany/sca/interfacedef/java/jaxws/WebServiceInterfaceProcessor.java deleted file mode 100644 index 18eda13efb..0000000000 --- a/sca-java-2.x/branches/2.0-Beta2/modules/interface-java-jaxws/src/main/java/org/apache/tuscany/sca/interfacedef/java/jaxws/WebServiceInterfaceProcessor.java +++ /dev/null @@ -1,49 +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.interfacedef.java.jaxws; - -import javax.jws.WebService; - -import org.apache.tuscany.sca.interfacedef.InvalidInterfaceException; -import org.apache.tuscany.sca.interfacedef.java.JavaInterface; -import org.apache.tuscany.sca.interfacedef.java.introspect.JavaInterfaceVisitor; - -/** - * Introspect the java class/interface to see if it has @WebService annotation - * - * @version $Rev$ $Date$ - */ -public class WebServiceInterfaceProcessor implements JavaInterfaceVisitor { - - public WebServiceInterfaceProcessor() { - super(); - } - - public void visitInterface(JavaInterface contract) throws InvalidInterfaceException { - - final Class<?> clazz = contract.getJavaClass(); - WebService webService = clazz.getAnnotation(WebService.class); - if (webService != null) { - // Mark SEI as Remotable - contract.setRemotable(true); - } - } - -} diff --git a/sca-java-2.x/branches/2.0-Beta2/modules/interface-java-jaxws/src/main/java/org/apache/tuscany/sca/interfacedef/java/jaxws/WrapperBeanGenerator.java b/sca-java-2.x/branches/2.0-Beta2/modules/interface-java-jaxws/src/main/java/org/apache/tuscany/sca/interfacedef/java/jaxws/WrapperBeanGenerator.java deleted file mode 100644 index 764c10ff00..0000000000 --- a/sca-java-2.x/branches/2.0-Beta2/modules/interface-java-jaxws/src/main/java/org/apache/tuscany/sca/interfacedef/java/jaxws/WrapperBeanGenerator.java +++ /dev/null @@ -1,238 +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.interfacedef.java.jaxws; - -import java.lang.annotation.Annotation; -import java.lang.reflect.Method; -import java.lang.reflect.Type; -import java.util.ArrayList; -import java.util.List; - -import javax.jws.WebParam; -import javax.jws.WebResult; - -import org.apache.tuscany.sca.interfacedef.java.impl.JavaInterfaceUtil; - -public class WrapperBeanGenerator extends BaseBeanGenerator { - - public List<Class<?>> generateWrapperBeans(Class<?> sei) { - GeneratedClassLoader cl = new GeneratedClassLoader(sei.getClassLoader()); - List<Class<?>> classes = new ArrayList<Class<?>>(); - for (Method m : sei.getMethods()) { - if (m.getDeclaringClass() == Object.class) { - continue; - } - classes.add(generateRequestWrapper(sei, m, cl)); - classes.add(generateResponseWrapper(sei, m, cl)); - } - return classes; - - } - - public Class<?> generateRequestWrapper(Class<?> sei, Method m, GeneratedClassLoader cl) { - String wrapperNamespace = JavaInterfaceUtil.getNamespace(sei); - String wrapperName = m.getName(); - String wrapperBeanName = capitalize(wrapperName); - String wrapperClassName = CodeGenerationHelper.getPackagePrefix(sei) + wrapperBeanName; - - return generateRequestWrapper(m, wrapperClassName, wrapperNamespace, wrapperName, cl); - } - - public Class<?> generateRequestWrapper(Method m, - String wrapperClassName, - String wrapperNamespace, - String wrapperName, - GeneratedClassLoader cl) { - synchronized (m.getDeclaringClass()) { - MethodKey key = new MethodKey(m, true); - Class<?> wrapperClass = generatedClasses.get(key); - if (wrapperClass == null) { - String wrapperClassDescriptor = wrapperClassName.replace('.', '/'); - String wrapperClassSignature = "L" + wrapperClassDescriptor + ";"; - - Class<?>[] paramTypes = m.getParameterTypes(); - Type[] genericParamTypes = m.getGenericParameterTypes(); - Annotation[][] paramAnnotations = m.getParameterAnnotations(); - List<BeanProperty> properties = new ArrayList<BeanProperty>(); - for (int i = 0; i < paramTypes.length; i++) { - String propNS = ""; - String propName = "arg" + i; - - WebParam webParam = findAnnotation(paramAnnotations[i], WebParam.class); - if (webParam != null && webParam.header()) { - continue; - } - WebParam.Mode mode = WebParam.Mode.IN; - if (webParam != null) { - mode = webParam.mode(); - if (webParam.name().length() > 0) { - propName = webParam.name(); - } - propNS = webParam.targetNamespace(); - } - if (mode.equals(WebParam.Mode.IN) || mode.equals(WebParam.Mode.INOUT)) { - java.lang.reflect.Type genericParamType = getHolderValueType(genericParamTypes[i]); - Class<?> paramType = CodeGenerationHelper.getErasure(genericParamType); - BeanProperty prop = new BeanProperty(propNS, propName, paramType, genericParamType, true); - prop.getJaxbAnnotaions().addAll(findJAXBAnnotations(paramAnnotations[i])); - properties.add(prop); - } - } - - wrapperClass = - generate(wrapperClassDescriptor, wrapperClassSignature, wrapperNamespace, wrapperName, properties - .toArray(new BeanProperty[properties.size()]), cl); - generatedClasses.put(key, wrapperClass); - } - return wrapperClass; - - } - } - - public Class<?> generateResponseWrapper(Class<?> sei, Method m, GeneratedClassLoader cl) { - String wrapperNamespace = JavaInterfaceUtil.getNamespace(sei); - - String wrapperName = m.getName() + "Response"; - String wrapperBeanName = capitalize(wrapperName); - String wrapperClassName = CodeGenerationHelper.getPackagePrefix(sei) + wrapperBeanName; - return generateResponseWrapper(m, wrapperClassName, wrapperNamespace, wrapperName, cl); - - } - - public Class<?> generateResponseWrapper(Method m, - String wrapperClassName, - String wrapperNamespace, - String wrapperName, - GeneratedClassLoader cl) { - synchronized (m.getDeclaringClass()) { - MethodKey key = new MethodKey(m, false); - Class<?> wrapperClass = generatedClasses.get(key); - if (wrapperClass == null) { - String wrapperClassDescriptor = wrapperClassName.replace('.', '/'); - String wrapperClassSignature = "L" + wrapperClassDescriptor + ";"; - - List<BeanProperty> properties = new ArrayList<BeanProperty>(); - // Collect all OUT, INOUT parameters as fields - Annotation[][] paramAnns = m.getParameterAnnotations(); - Class<?>[] paramTypes = m.getParameterTypes(); - java.lang.reflect.Type[] genericParamTypes = m.getGenericParameterTypes(); - for (int i = 0; i < paramTypes.length; i++) { - WebParam webParam = findAnnotation(paramAnns[i], WebParam.class); - if (webParam != null) { - if (webParam.header() || webParam.mode() == WebParam.Mode.IN) { - continue; - } - } - if (!isHolder(genericParamTypes[i])) { - continue; - } - - List<Annotation> jaxb = findJAXBAnnotations(paramAnns[i]); - - java.lang.reflect.Type genericParamType = getHolderValueType(genericParamTypes[i]); - Class<?> paramType = CodeGenerationHelper.getErasure(genericParamType); - - String paramNamespace = ""; - String paramName = "arg" + i; - - if (webParam != null) { - if (webParam.name().length() > 0) - paramName = webParam.name(); - if (webParam.targetNamespace().length() > 0) - paramNamespace = webParam.targetNamespace(); - } - - BeanProperty prop = new BeanProperty(paramNamespace, paramName, paramType, genericParamType, true); - prop.getJaxbAnnotaions().addAll(jaxb); - properties.add(prop); - } - - WebResult webResult = m.getAnnotation(WebResult.class); - Class<?> returnType = m.getReturnType(); - if (!((webResult != null && webResult.header()) || returnType == Void.TYPE)) { - String propName = "return"; - String propNS = ""; - - if (webResult != null) { - if (webResult.name().length() > 0) { - propName = webResult.name(); - } - if (webResult.targetNamespace().length() > 1) { - propNS = webResult.targetNamespace(); - } - } - - List<Annotation> jaxb = findJAXBAnnotations(m.getAnnotations()); - - Type genericReturnType = m.getGenericReturnType(); - BeanProperty prop = new BeanProperty(propNS, propName, returnType, genericReturnType, true); - prop.getJaxbAnnotaions().addAll(jaxb); - properties.add(prop); - } - wrapperClass = - generate(wrapperClassDescriptor, wrapperClassSignature, wrapperNamespace, wrapperName, properties - .toArray(new BeanProperty[properties.size()]), cl); - generatedClasses.put(key, wrapperClass); - } - return wrapperClass; - - } - } - - private static class MethodKey { - private Method m; - private boolean request; - - @Override - public int hashCode() { - final int prime = 31; - int result = 1; - result = prime * result + ((m == null) ? 0 : m.hashCode()); - result = prime * result + (request ? 1231 : 1237); - return result; - } - - @Override - public boolean equals(Object obj) { - if (this == obj) - return true; - if (obj == null) - return false; - if (getClass() != obj.getClass()) - return false; - final MethodKey other = (MethodKey)obj; - if (m == null) { - if (other.m != null) - return false; - } else if (!m.equals(other.m)) - return false; - if (request != other.request) - return false; - return true; - } - - public MethodKey(Method m, boolean request) { - super(); - this.m = m; - this.request = request; - } - } - -} diff --git a/sca-java-2.x/branches/2.0-Beta2/modules/interface-java-jaxws/src/main/resources/META-INF/services/org.apache.tuscany.sca.interfacedef.FaultExceptionMapper b/sca-java-2.x/branches/2.0-Beta2/modules/interface-java-jaxws/src/main/resources/META-INF/services/org.apache.tuscany.sca.interfacedef.FaultExceptionMapper deleted file mode 100644 index 6a968e11d3..0000000000 --- a/sca-java-2.x/branches/2.0-Beta2/modules/interface-java-jaxws/src/main/resources/META-INF/services/org.apache.tuscany.sca.interfacedef.FaultExceptionMapper +++ /dev/null @@ -1,17 +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.
-org.apache.tuscany.sca.interfacedef.java.jaxws.JAXWSFaultExceptionMapper
diff --git a/sca-java-2.x/branches/2.0-Beta2/modules/interface-java-jaxws/src/main/resources/META-INF/services/org.apache.tuscany.sca.interfacedef.java.introspect.JavaInterfaceVisitor b/sca-java-2.x/branches/2.0-Beta2/modules/interface-java-jaxws/src/main/resources/META-INF/services/org.apache.tuscany.sca.interfacedef.java.introspect.JavaInterfaceVisitor deleted file mode 100644 index 05b1ccea9b..0000000000 --- a/sca-java-2.x/branches/2.0-Beta2/modules/interface-java-jaxws/src/main/resources/META-INF/services/org.apache.tuscany.sca.interfacedef.java.introspect.JavaInterfaceVisitor +++ /dev/null @@ -1,23 +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. -# -# first one, set remotable flag -org.apache.tuscany.sca.interfacedef.java.jaxws.WebServiceInterfaceProcessor;ranking=400 -# second one, introspect the JAXWS annotations -org.apache.tuscany.sca.interfacedef.java.jaxws.JAXWSJavaInterfaceProcessor;ranking=100 -# third one, introspect JAXWS async methods -org.apache.tuscany.sca.interfacedef.java.jaxws.JAXWSAsyncInterfaceProcessor;ranking=50
diff --git a/sca-java-2.x/branches/2.0-Beta2/modules/interface-java-jaxws/src/test/java/org/apache/tuscany/sca/interfacedef/java/jaxws/Bean.java b/sca-java-2.x/branches/2.0-Beta2/modules/interface-java-jaxws/src/test/java/org/apache/tuscany/sca/interfacedef/java/jaxws/Bean.java deleted file mode 100644 index 1b07e25bad..0000000000 --- a/sca-java-2.x/branches/2.0-Beta2/modules/interface-java-jaxws/src/test/java/org/apache/tuscany/sca/interfacedef/java/jaxws/Bean.java +++ /dev/null @@ -1,27 +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.interfacedef.java.jaxws; - -/** - * - * @version $Rev$ $Date$ - */ -public interface Bean<T> { - T getP1(); -} diff --git a/sca-java-2.x/branches/2.0-Beta2/modules/interface-java-jaxws/src/test/java/org/apache/tuscany/sca/interfacedef/java/jaxws/Bean1.java b/sca-java-2.x/branches/2.0-Beta2/modules/interface-java-jaxws/src/test/java/org/apache/tuscany/sca/interfacedef/java/jaxws/Bean1.java deleted file mode 100644 index d38a21ba52..0000000000 --- a/sca-java-2.x/branches/2.0-Beta2/modules/interface-java-jaxws/src/test/java/org/apache/tuscany/sca/interfacedef/java/jaxws/Bean1.java +++ /dev/null @@ -1,40 +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.interfacedef.java.jaxws; - -/** - * - * @version $Rev$ $Date$ - */ -public class Bean1 { - private String p1; - private int p2; - public String getP1() { - return p1; - } - public void setP1(String p1) { - this.p1 = p1; - } - public int getP2() { - return p2; - } - public void setP2(int p2) { - this.p2 = p2; - } -} diff --git a/sca-java-2.x/branches/2.0-Beta2/modules/interface-java-jaxws/src/test/java/org/apache/tuscany/sca/interfacedef/java/jaxws/Bean2.java b/sca-java-2.x/branches/2.0-Beta2/modules/interface-java-jaxws/src/test/java/org/apache/tuscany/sca/interfacedef/java/jaxws/Bean2.java deleted file mode 100644 index 7b9375063d..0000000000 --- a/sca-java-2.x/branches/2.0-Beta2/modules/interface-java-jaxws/src/test/java/org/apache/tuscany/sca/interfacedef/java/jaxws/Bean2.java +++ /dev/null @@ -1,40 +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.interfacedef.java.jaxws; - -/** - * - * @version $Rev$ $Date$ - */ -public class Bean2 implements Bean<String>{ - private String p1; - private int p2; - public String getP1() { - return p1; - } - public void setP1(String p1) { - this.p1 = p1; - } - public int getP2() { - return p2; - } - public void setP2(int p2) { - this.p2 = p2; - } -} diff --git a/sca-java-2.x/branches/2.0-Beta2/modules/interface-java-jaxws/src/test/java/org/apache/tuscany/sca/interfacedef/java/jaxws/BeanInterface.java b/sca-java-2.x/branches/2.0-Beta2/modules/interface-java-jaxws/src/test/java/org/apache/tuscany/sca/interfacedef/java/jaxws/BeanInterface.java deleted file mode 100644 index 67b9c84399..0000000000 --- a/sca-java-2.x/branches/2.0-Beta2/modules/interface-java-jaxws/src/test/java/org/apache/tuscany/sca/interfacedef/java/jaxws/BeanInterface.java +++ /dev/null @@ -1,28 +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.interfacedef.java.jaxws; - -/** - * Bean Interface - */ -public interface BeanInterface { - String getAttr(); - void setAttr(String attr); -} diff --git a/sca-java-2.x/branches/2.0-Beta2/modules/interface-java-jaxws/src/test/java/org/apache/tuscany/sca/interfacedef/java/jaxws/BeanInterfaceImpl.java b/sca-java-2.x/branches/2.0-Beta2/modules/interface-java-jaxws/src/test/java/org/apache/tuscany/sca/interfacedef/java/jaxws/BeanInterfaceImpl.java deleted file mode 100644 index f964ea374b..0000000000 --- a/sca-java-2.x/branches/2.0-Beta2/modules/interface-java-jaxws/src/test/java/org/apache/tuscany/sca/interfacedef/java/jaxws/BeanInterfaceImpl.java +++ /dev/null @@ -1,35 +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.interfacedef.java.jaxws; - -/** - * Impl of BeanInterface - */ -public class BeanInterfaceImpl implements BeanInterface { - private String attr; - - public String getAttr() { - return attr; - } - - public void setAttr(String attr) { - this.attr = attr; - } -} diff --git a/sca-java-2.x/branches/2.0-Beta2/modules/interface-java-jaxws/src/test/java/org/apache/tuscany/sca/interfacedef/java/jaxws/FaultBeanGeneratorTestCase.java b/sca-java-2.x/branches/2.0-Beta2/modules/interface-java-jaxws/src/test/java/org/apache/tuscany/sca/interfacedef/java/jaxws/FaultBeanGeneratorTestCase.java deleted file mode 100644 index 3ea1427494..0000000000 --- a/sca-java-2.x/branches/2.0-Beta2/modules/interface-java-jaxws/src/test/java/org/apache/tuscany/sca/interfacedef/java/jaxws/FaultBeanGeneratorTestCase.java +++ /dev/null @@ -1,65 +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.interfacedef.java.jaxws; - -import java.io.IOException; -import java.io.PrintWriter; -import java.io.StringWriter; -import java.lang.annotation.Annotation; - -import javax.xml.bind.JAXBContext; - -import org.apache.tuscany.sca.core.DefaultExtensionPointRegistry; -import org.apache.tuscany.sca.databinding.jaxb.JAXBContextHelper; -import org.junit.Assert; -import org.junit.Test; -import org.objectweb.asm.ClassReader; -import org.objectweb.asm.util.CheckClassAdapter; - -/** - * @version $Rev$ $Date$ - */ -public class FaultBeanGeneratorTestCase { - - @Test - public void testGenerate() throws IOException { - byte[] content = new FaultBeanGenerator().generate(MyException.class); - ClassReader cr = new ClassReader(content); - PrintWriter pw = new PrintWriter(System.out); - CheckClassAdapter.verify(cr, false, pw); - } - - @Test - public void testGenerateClass() throws Exception { - Class<?> cls = FaultBeanGenerator.generateFaultBeanClass(MyException.class); - Assert.assertEquals("org.apache.tuscany.sca.interfacedef.java.jaxws.jaxws.MyExceptionBean", cls.getName()); - for (Annotation a : cls.getAnnotations()) { - System.out.println(a); - } - // XmlType xmlType = cls.getAnnotation(XmlType.class); - // System.out.println(xmlType); - Object bean = cls.newInstance(); - JAXBContext context = new JAXBContextHelper(new DefaultExtensionPointRegistry()).createJAXBContext(cls); - StringWriter sw = new StringWriter(); - context.createMarshaller().marshal(bean, sw); - System.out.println(sw.toString()); - - } -} diff --git a/sca-java-2.x/branches/2.0-Beta2/modules/interface-java-jaxws/src/test/java/org/apache/tuscany/sca/interfacedef/java/jaxws/JAXWSAsyncInterfaceProcessorTestCase.java b/sca-java-2.x/branches/2.0-Beta2/modules/interface-java-jaxws/src/test/java/org/apache/tuscany/sca/interfacedef/java/jaxws/JAXWSAsyncInterfaceProcessorTestCase.java deleted file mode 100644 index c53521db00..0000000000 --- a/sca-java-2.x/branches/2.0-Beta2/modules/interface-java-jaxws/src/test/java/org/apache/tuscany/sca/interfacedef/java/jaxws/JAXWSAsyncInterfaceProcessorTestCase.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.interfacedef.java.jaxws; - -import static org.junit.Assert.assertTrue; - -import java.util.List; - -import junit.framework.Assert; - -import org.apache.tuscany.sca.core.DefaultExtensionPointRegistry; -import org.apache.tuscany.sca.core.ExtensionPointRegistry; -import org.apache.tuscany.sca.interfacedef.Operation; -import org.apache.tuscany.sca.interfacedef.java.DefaultJavaInterfaceFactory; -import org.apache.tuscany.sca.interfacedef.java.JavaInterface; -import org.junit.Before; -import org.junit.Test; - -import com.example.stock.async.StockExceptionTest; - -public class JAXWSAsyncInterfaceProcessorTestCase { - private ExtensionPointRegistry registry; - - @Before - public void setUp() throws Exception { - registry = new DefaultExtensionPointRegistry(); - } - - /** - * Test method for - * {@link org.apache.tuscany.sca.interfacedef.java.jaxws.JAXWSAsyncInterfaceProcessor#visitInterface(JavaInterface)}. - */ - @Test - public final void testProcessor() throws Exception { - DefaultJavaInterfaceFactory iFactory = new DefaultJavaInterfaceFactory(registry); - JavaInterface contract = iFactory.createJavaInterface(StockQuote.class); - - assertTrue(contract.isRemotable()); - - Assert.assertEquals(1,contract.getOperations().size()); - - List<Operation> asyncOperations = (List<Operation>) contract.getAttributes().get("JAXWS-ASYNC-OPERATIONS"); - Assert.assertEquals(2,asyncOperations.size()); - - //list operation - System.out.println(">>> Filtered Operations"); - for(Operation o : contract.getOperations()) { - System.out.println(">>>>>>" + o); - } - - } - - @Test - public final void testProcessorGenerated() throws Exception { - DefaultJavaInterfaceFactory iFactory = new DefaultJavaInterfaceFactory(registry); - JavaInterface contract = iFactory.createJavaInterface(StockExceptionTest.class); - - assertTrue(contract.isRemotable()); - - Assert.assertEquals(1,contract.getOperations().size()); - - List<Operation> asyncOperations = (List<Operation>) contract.getAttributes().get("JAXWS-ASYNC-OPERATIONS"); - Assert.assertEquals(2,asyncOperations.size()); - - //list operation - System.out.println(">>> Filtered Operations"); - for(Operation o : contract.getOperations()) { - System.out.println(">>>>>>" + o); - } - - } -} diff --git a/sca-java-2.x/branches/2.0-Beta2/modules/interface-java-jaxws/src/test/java/org/apache/tuscany/sca/interfacedef/java/jaxws/JAXWSJavaInterfaceProcessorTestCase.java b/sca-java-2.x/branches/2.0-Beta2/modules/interface-java-jaxws/src/test/java/org/apache/tuscany/sca/interfacedef/java/jaxws/JAXWSJavaInterfaceProcessorTestCase.java deleted file mode 100644 index 5f3114a67c..0000000000 --- a/sca-java-2.x/branches/2.0-Beta2/modules/interface-java-jaxws/src/test/java/org/apache/tuscany/sca/interfacedef/java/jaxws/JAXWSJavaInterfaceProcessorTestCase.java +++ /dev/null @@ -1,121 +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.interfacedef.java.jaxws; - -import static org.junit.Assert.assertFalse; -import static org.junit.Assert.assertTrue; - -import javax.jws.WebMethod; -import javax.jws.WebService; -import javax.jws.soap.SOAPBinding; -import javax.xml.namespace.QName; - -import org.apache.tuscany.sca.core.DefaultExtensionPointRegistry; -import org.apache.tuscany.sca.core.ExtensionPointRegistry; -import org.apache.tuscany.sca.interfacedef.Operation; -import org.apache.tuscany.sca.interfacedef.java.DefaultJavaInterfaceFactory; -import org.apache.tuscany.sca.interfacedef.java.JavaInterface; -import org.junit.Assert; -import org.junit.Before; -import org.junit.Test; - -import com.example.stock.StockExceptionTest; - -/** - * - * @version $Rev$ $Date$ - */ -public class JAXWSJavaInterfaceProcessorTestCase { - private ExtensionPointRegistry registry; - // private JAXWSJavaInterfaceProcessor interfaceProcessor; - - @Before - public void setUp() throws Exception { - registry = new DefaultExtensionPointRegistry(); -// DataBindingExtensionPoint db = new DefaultDataBindingExtensionPoint(registry); -// XMLAdapterExtensionPoint xa = new DefaultXMLAdapterExtensionPoint(); - // interfaceProcessor = new JAXWSJavaInterfaceProcessor(db, new JAXWSFaultExceptionMapper(db, xa), xa); - } - - @Test - public void testWrapper() throws Exception { - DefaultJavaInterfaceFactory iFactory = new DefaultJavaInterfaceFactory(registry); - JavaInterface contract = iFactory.createJavaInterface(StockExceptionTest.class); - - // interfaceProcessor.visitInterface(contract); - Operation op = contract.getOperations().get(0); - Assert.assertTrue(!op.isWrapperStyle()); - Assert.assertEquals(new QName("http://www.example.com/stock", "stockQuoteOffer"), op.getWrapper().getInputWrapperElement().getQName()); - Assert.assertEquals(new QName("http://www.example.com/stock", "stockQuoteOfferResponse"), op.getWrapper().getOutputWrapperElement().getQName()); - } - - /** - * Test method for - * {@link org.apache.tuscany.sca.interfacedef.java.jaxws.JAXWSJavaInterfaceProcessor#visitInterface(JavaInterface)}. - */ - @Test - public final void testProcessor() throws Exception { - DefaultJavaInterfaceFactory iFactory = new DefaultJavaInterfaceFactory(registry); - JavaInterface contract = iFactory.createJavaInterface(WebServiceInterfaceWithoutAnnotation.class); - - // interfaceProcessor.visitInterface(contract); - assertFalse(contract.isRemotable()); - - contract = iFactory.createJavaInterface(WebServiceInterfaceWithAnnotation.class); - // interfaceProcessor.visitInterface(contract); - assertTrue(contract.isRemotable()); - - Operation op1 = contract.getOperations().get(0); - Operation op2 = contract.getOperations().get(1); - - Operation op = null; - if ("m1".equals(op1.getName())) { - op = op1; - } else { - op = op2; - } - - assertTrue(!op.isWrapperStyle() && op.getWrapper() == null); - - if ("M2".equals(op2.getName())) { - op = op2; - } else { - op = op1; - } - assertTrue(!op.isWrapperStyle() && op.getWrapper() != null); - - } - - @WebService - private static interface WebServiceInterfaceWithAnnotation { - - @SOAPBinding(parameterStyle = SOAPBinding.ParameterStyle.BARE) - @WebMethod(operationName = "m1") - String m1(String str); - - @SOAPBinding(parameterStyle = SOAPBinding.ParameterStyle.WRAPPED) - @WebMethod(operationName = "M2") - String m2(String str, int i); - } - - private static interface WebServiceInterfaceWithoutAnnotation { - - } -} diff --git a/sca-java-2.x/branches/2.0-Beta2/modules/interface-java-jaxws/src/test/java/org/apache/tuscany/sca/interfacedef/java/jaxws/JavaReflectionHelperTestCase.java b/sca-java-2.x/branches/2.0-Beta2/modules/interface-java-jaxws/src/test/java/org/apache/tuscany/sca/interfacedef/java/jaxws/JavaReflectionHelperTestCase.java deleted file mode 100644 index 6315e12ff8..0000000000 --- a/sca-java-2.x/branches/2.0-Beta2/modules/interface-java-jaxws/src/test/java/org/apache/tuscany/sca/interfacedef/java/jaxws/JavaReflectionHelperTestCase.java +++ /dev/null @@ -1,47 +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.interfacedef.java.jaxws; - -import java.lang.reflect.Field; - -import org.junit.Assert; -import org.junit.Test; - -/** - * @version $Rev$ $Date$ - */ -public class JavaReflectionHelperTestCase { - @Test - public void testErasure() throws Exception { - for (Field f : TestGenericClass.class.getDeclaredFields()) { - Class<?> cls = CodeGenerationHelper.getErasure(f.getGenericType()); - System.out.println(cls.getName()); - Assert.assertSame(f.getType(), cls); - } - } - - @Test - public void testSignature() throws Exception { - for (Field f : TestGenericClass.class.getDeclaredFields()) { - String sig = CodeGenerationHelper.getSignature(f.getGenericType()); - System.out.println(sig); - } - } -} diff --git a/sca-java-2.x/branches/2.0-Beta2/modules/interface-java-jaxws/src/test/java/org/apache/tuscany/sca/interfacedef/java/jaxws/MyException.java b/sca-java-2.x/branches/2.0-Beta2/modules/interface-java-jaxws/src/test/java/org/apache/tuscany/sca/interfacedef/java/jaxws/MyException.java deleted file mode 100644 index 4df0517de6..0000000000 --- a/sca-java-2.x/branches/2.0-Beta2/modules/interface-java-jaxws/src/test/java/org/apache/tuscany/sca/interfacedef/java/jaxws/MyException.java +++ /dev/null @@ -1,62 +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.interfacedef.java.jaxws; - -/** - * - * @version $Rev$ $Date$ - */ -public class MyException extends Exception { - private String error; - private int code; - - public MyException() { - super(); - } - - public MyException(String message, Throwable cause) { - super(message, cause); - } - - public MyException(String message) { - super(message); - } - - public MyException(Throwable cause) { - super(cause); - } - - public String getError() { - return error; - } - - public void setError(String error) { - this.error = error; - } - - public int getCode() { - return code; - } - - public void setCode(int code) { - this.code = code; - } - -} diff --git a/sca-java-2.x/branches/2.0-Beta2/modules/interface-java-jaxws/src/test/java/org/apache/tuscany/sca/interfacedef/java/jaxws/MyServiceImpl.java b/sca-java-2.x/branches/2.0-Beta2/modules/interface-java-jaxws/src/test/java/org/apache/tuscany/sca/interfacedef/java/jaxws/MyServiceImpl.java deleted file mode 100644 index 78527193d5..0000000000 --- a/sca-java-2.x/branches/2.0-Beta2/modules/interface-java-jaxws/src/test/java/org/apache/tuscany/sca/interfacedef/java/jaxws/MyServiceImpl.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.interfacedef.java.jaxws; - -import java.util.List; - -import javax.jws.WebMethod; -import javax.jws.WebService; - -/** - * @version $Rev$ $Date$ - */ -@WebService -public class MyServiceImpl { - - public MyServiceImpl() { - super(); - } - - @WebMethod - public <T extends Bean1> T getBean(T b, Bean2 b2) { - return null; - } - - @WebMethod - public List<? extends Bean1> getBeans() { - return null; - } - - @WebMethod - public String convert(String str, int i) throws MyException { - return "ME"; - } - -} diff --git a/sca-java-2.x/branches/2.0-Beta2/modules/interface-java-jaxws/src/test/java/org/apache/tuscany/sca/interfacedef/java/jaxws/StockQuote.java b/sca-java-2.x/branches/2.0-Beta2/modules/interface-java-jaxws/src/test/java/org/apache/tuscany/sca/interfacedef/java/jaxws/StockQuote.java deleted file mode 100644 index d1259e9120..0000000000 --- a/sca-java-2.x/branches/2.0-Beta2/modules/interface-java-jaxws/src/test/java/org/apache/tuscany/sca/interfacedef/java/jaxws/StockQuote.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.interfacedef.java.jaxws; - -import java.util.concurrent.Future; - -import javax.jws.WebService; -import javax.xml.ws.AsyncHandler; -import javax.xml.ws.Response; - -/** - * JAX-WS Async style interface - * - * @version $Rev$ $Date$ - */ - -@WebService -public interface StockQuote { - - float getPrice(String ticker); - - Response<Float> getPriceAsync(String ticker); - - Future<?> getPriceAsync(String ticker, AsyncHandler<Float> callback); - - -} diff --git a/sca-java-2.x/branches/2.0-Beta2/modules/interface-java-jaxws/src/test/java/org/apache/tuscany/sca/interfacedef/java/jaxws/TestAdapter.java b/sca-java-2.x/branches/2.0-Beta2/modules/interface-java-jaxws/src/test/java/org/apache/tuscany/sca/interfacedef/java/jaxws/TestAdapter.java deleted file mode 100644 index fb319a3b0f..0000000000 --- a/sca-java-2.x/branches/2.0-Beta2/modules/interface-java-jaxws/src/test/java/org/apache/tuscany/sca/interfacedef/java/jaxws/TestAdapter.java +++ /dev/null @@ -1,39 +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.interfacedef.java.jaxws; - -import javax.xml.bind.annotation.adapters.XmlAdapter; - -/** - * Test XML Adapter - */ -public class TestAdapter extends XmlAdapter<BeanInterfaceImpl, BeanInterface> { - - @Override - public BeanInterfaceImpl marshal(BeanInterface v) throws Exception { - return (BeanInterfaceImpl)v; - } - - @Override - public BeanInterface unmarshal(BeanInterfaceImpl v) throws Exception { - return v; - } - -} diff --git a/sca-java-2.x/branches/2.0-Beta2/modules/interface-java-jaxws/src/test/java/org/apache/tuscany/sca/interfacedef/java/jaxws/TestGenericClass.java b/sca-java-2.x/branches/2.0-Beta2/modules/interface-java-jaxws/src/test/java/org/apache/tuscany/sca/interfacedef/java/jaxws/TestGenericClass.java deleted file mode 100644 index 2ecf822904..0000000000 --- a/sca-java-2.x/branches/2.0-Beta2/modules/interface-java-jaxws/src/test/java/org/apache/tuscany/sca/interfacedef/java/jaxws/TestGenericClass.java +++ /dev/null @@ -1,40 +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.interfacedef.java.jaxws; - -import java.io.Serializable; -import java.util.List; -import java.util.Map; - -/** - * @version $Rev$ $Date$ - */ -public class TestGenericClass <T extends Serializable & List<String>, S> { - public TestGenericClass<?, S> i; - public T f1; - public T[] f2; - public S f3; - public List<? extends T> list1; - public List<?> list2; - public List<? extends Serializable> list3; - public int f4; - public int[] f5; - public Map<? super T, S> map; -} diff --git a/sca-java-2.x/branches/2.0-Beta2/modules/interface-java-jaxws/src/test/java/org/apache/tuscany/sca/interfacedef/java/jaxws/TestInterface.java b/sca-java-2.x/branches/2.0-Beta2/modules/interface-java-jaxws/src/test/java/org/apache/tuscany/sca/interfacedef/java/jaxws/TestInterface.java deleted file mode 100644 index 1f8e6cb445..0000000000 --- a/sca-java-2.x/branches/2.0-Beta2/modules/interface-java-jaxws/src/test/java/org/apache/tuscany/sca/interfacedef/java/jaxws/TestInterface.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 org.apache.tuscany.sca.interfacedef.java.jaxws; - -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -import javax.jws.WebMethod; -import javax.jws.WebParam; -import javax.jws.WebResult; -import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter; -import javax.xml.ws.Holder; - -import org.oasisopen.sca.annotation.Remotable; - -/** - * @version $Rev$ $Date$ - */ -@Remotable -public interface TestInterface { - int convert(String currency1, String currency2); - - List<Double> getRates(String currency); - - void check(boolean flag); - - String[] list(int[] list); - - int[][] map(String[][] strs); - - String getGreetings(String name); - - String[] getGreetingsArray(String[] names); - - List<String> getGreetingsList(List<String> names); - - ArrayList<String> getGreetingsArrayList(ArrayList<String> names); - - Map<String, String> getGreetingsMap(Map<String, String> namesMap); - - HashMap<String, String> getGreetingsHashMap(HashMap<String, String> namesMap); - - @WebMethod - @WebResult(name = "output") - String webMethod(@WebParam(name = "input", mode = WebParam.Mode.IN) String in, - @WebParam(name = "holder", mode = WebParam.Mode.INOUT) Holder<String> holder); - - @XmlJavaTypeAdapter(type = BeanInterface.class, value = TestAdapter.class) - BeanInterface beanMethod(@XmlJavaTypeAdapter(type = BeanInterface.class, value = TestAdapter.class) BeanInterface in, - String str); -} diff --git a/sca-java-2.x/branches/2.0-Beta2/modules/interface-java-jaxws/src/test/java/org/apache/tuscany/sca/interfacedef/java/jaxws/WrapperBeanGeneratorTestCase.java b/sca-java-2.x/branches/2.0-Beta2/modules/interface-java-jaxws/src/test/java/org/apache/tuscany/sca/interfacedef/java/jaxws/WrapperBeanGeneratorTestCase.java deleted file mode 100644 index f83c27e10a..0000000000 --- a/sca-java-2.x/branches/2.0-Beta2/modules/interface-java-jaxws/src/test/java/org/apache/tuscany/sca/interfacedef/java/jaxws/WrapperBeanGeneratorTestCase.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.interfacedef.java.jaxws; - -import java.io.StringReader; -import java.io.StringWriter; -import java.lang.annotation.Annotation; -import java.lang.reflect.Field; -import java.lang.reflect.Method; -import java.util.List; -import java.util.Map; - -import javax.xml.bind.JAXBContext; -import javax.xml.transform.stream.StreamSource; - -import org.apache.tuscany.sca.core.DefaultExtensionPointRegistry; -import org.apache.tuscany.sca.databinding.jaxb.JAXBContextHelper; -import org.apache.tuscany.sca.databinding.jaxb.JAXBTypeHelper; -import org.junit.Test; - -/** - * @version $Rev$ $Date$ - */ -public class WrapperBeanGeneratorTestCase { - @Test - public void testGenerate() throws Exception { - List<Class<?>> classes = new WrapperBeanGenerator().generateWrapperBeans(TestInterface.class); - for (Class<?> cls : classes) { - for (Field f : cls.getDeclaredFields()) { - System.out.println(f.getName()); - System.out.println(f.getGenericType()); - for (Annotation a : f.getAnnotations()) { - System.out.println(a); - } - } - for (Method m : cls.getDeclaredMethods()) { - System.out.println(m); - for (Annotation a : m.getAnnotations()) { - System.out.println(a); - } - } - } - JAXBContext context = new JAXBContextHelper(new DefaultExtensionPointRegistry()).createJAXBContext(classes.toArray(new Class<?>[classes.size()])); - for (Class<?> cls : classes) { - Object obj = cls.newInstance(); - StringWriter sw = new StringWriter(); - context.createMarshaller().marshal(obj, sw); - // System.out.println(sw.toString()); - StringReader sr = new StringReader(sw.toString()); - context.createUnmarshaller().unmarshal(new StreamSource(sr), cls); - } - } - - @Test - public void testGenerateSchema() throws Exception { - List<Class<?>> classes = new WrapperBeanGenerator().generateWrapperBeans(TestInterface.class); - JAXBContext context = new JAXBContextHelper(new DefaultExtensionPointRegistry()).createJAXBContext(classes.toArray(new Class<?>[classes.size()])); - Map<String, String> results = JAXBTypeHelper.generateSchema(context); - for (String xsd : results.values()) { - System.out.println(xsd); - } - } -} diff --git a/sca-java-2.x/branches/2.0-Beta2/modules/interface-java-jaxws/src/test/resources/wsdl/Stock.wsdl b/sca-java-2.x/branches/2.0-Beta2/modules/interface-java-jaxws/src/test/resources/wsdl/Stock.wsdl deleted file mode 100644 index 56a753f4ff..0000000000 --- a/sca-java-2.x/branches/2.0-Beta2/modules/interface-java-jaxws/src/test/resources/wsdl/Stock.wsdl +++ /dev/null @@ -1,142 +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. ---> -<wsdl:definitions targetNamespace="http://www.example.com/stock" xmlns:impl="http://www.example.com/stock" - xmlns:tns="http://www.example.com/stock" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" - xmlns:wsdlsoap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:wsi="http://ws-i.org/profiles/basic/1.1/xsd" - xmlns:xsd="http://www.w3.org/2001/XMLSchema" name="StockExceptionTest"> - <wsdl:types> - <schema targetNamespace="http://www.example.com/stock" xmlns="http://www.w3.org/2001/XMLSchema" - xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> - <complexType name="StockOffer"> - <sequence> - <element name="symbol" minOccurs="1" type="xsd:string" /> - <element name="price" minOccurs="1" type="xsd:float" nillable="true" /><!-- max price reqested, actual response --> - <element name="name" minOccurs="0" type="xsd:string" /> - <element name="list" minOccurs="0" maxOccurs="unbounded" type="xsd:string" /> - </sequence> - </complexType> - - <element name="stockQuoteOffer"> - <complexType> - <sequence> - <element name="input" minOccurs="0" maxOccurs="unbounded" type="tns:StockOffer" /> - </sequence> - </complexType> - </element> - <element name="stockQuoteOfferResponse"> - <complexType> - <sequence> - <element name="stockQuoteOfferReturn" minOccurs="0" type="tns:StockOffer" /> - </sequence> - </complexType> - </element> - - <!-- Faults --> - <element name="InvalidSymbolFault"> - <complexType> - <sequence> - <element name="message" minOccurs="1" type="xsd:string" /> - <element name="offer" minOccurs="1" type="tns:StockOffer" /> - </sequence> - </complexType> - </element> - - <element name="MarketClosedFault" type="xsd:int" /> - - <element name="TestNotDeclaredAtSourceFault" type="xsd:string" /> - - </schema> - </wsdl:types> - - - <wsdl:message name="stockQuoteOfferRequest"> - <wsdl:part element="tns:stockQuoteOffer" name="parameters" /> - </wsdl:message> - - <wsdl:message name="stockQuoteOfferResponse"> - <wsdl:part element="tns:stockQuoteOfferResponse" name="parameters" /> - </wsdl:message> - - <wsdl:message name="InvalidSymbolFault"> - <wsdl:part element="tns:InvalidSymbolFault" name="fault" /> - </wsdl:message> - - <wsdl:message name="MarketClosedFault"> - <wsdl:part element="tns:MarketClosedFault" name="fault" /> - </wsdl:message> - - <wsdl:message name="TestNotDeclaredAtSourceFault"> - <wsdl:part element="tns:TestNotDeclaredAtSourceFault" name="fault" /> - </wsdl:message> - - - <wsdl:portType name="StockExceptionTest"> - <wsdl:operation name="stockQuoteOffer"> - <wsdl:input message="tns:stockQuoteOfferRequest" name="stockQuoteOfferRequest" /> - - <wsdl:output message="tns:stockQuoteOfferResponse" name="stockQuoteOfferResponse" /> - - <wsdl:fault message="tns:InvalidSymbolFault" name="InvalidSymbolException" /> - - <wsdl:fault message="tns:MarketClosedFault" name="MarketClosedException" /> - - <wsdl:fault message="tns:TestNotDeclaredAtSourceFault" name="TestNotDeclaredAtSourceException" /> - </wsdl:operation> - - - </wsdl:portType> - - <wsdl:binding name="StockExceptionTestServiceSoapBinding" type="tns:StockExceptionTest"> - <!-- <wsaw:UsingAddressing wsdl:required="false" xmlns:wsaw="http://www.w3.org/2006/05/addressing/wsdl"/> --> - - <wsdlsoap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http" /> - - <wsdl:operation name="stockQuoteOffer"> - <wsdlsoap:operation soapAction="" /> - - <wsdl:input name="stockQuoteOfferRequest"> - <wsdlsoap:body use="literal" /> - </wsdl:input> - - <wsdl:output name="stockQuoteOfferResponse"> - <wsdlsoap:body use="literal" /> - </wsdl:output> - - <wsdl:fault name="InvalidSymbolException"> - <wsdlsoap:fault name="InvalidSymbolException" use="literal" /> - </wsdl:fault> - - <wsdl:fault name="MarketClosedException"> - <wsdlsoap:fault name="MarketClosedException" use="literal" /> - </wsdl:fault> - - <wsdl:fault name="TestNotDeclaredAtSourceException"> - <wsdlsoap:fault name="TestNotDeclaredAtSourceException" use="literal" /> - </wsdl:fault> - - - - </wsdl:operation> - - - </wsdl:binding> - - -</wsdl:definitions>
\ No newline at end of file diff --git a/sca-java-2.x/branches/2.0-Beta2/modules/interface-java-jaxws/src/test/resources/wsdl/StockExceptionTest.wsdl b/sca-java-2.x/branches/2.0-Beta2/modules/interface-java-jaxws/src/test/resources/wsdl/StockExceptionTest.wsdl deleted file mode 100644 index 494617f988..0000000000 --- a/sca-java-2.x/branches/2.0-Beta2/modules/interface-java-jaxws/src/test/resources/wsdl/StockExceptionTest.wsdl +++ /dev/null @@ -1,171 +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. - --> -<wsdl:definitions targetNamespace="http://www.example.com/stock" xmlns:impl="http://www.example.com/stock" - xmlns:tns="http://www.example.com/stock" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" - xmlns:wsdlsoap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:wsi="http://ws-i.org/profiles/basic/1.1/xsd" - xmlns:xsd="http://www.w3.org/2001/XMLSchema" name="StockExceptionTest"> - <wsdl:types> - <schema targetNamespace="http://www.example.com/stock" xmlns="http://www.w3.org/2001/XMLSchema" - xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" - xmlns:jaxb="http://java.sun.com/xml/ns/jaxb" jaxb:version="2.0"> - <complexType name="StockOffer"> - <sequence> - <element name="symbol" minOccurs="1" type="xsd:string" /> - <element name="price" minOccurs="1" type="xsd:float" nillable="true" /> <!-- max price reqested, actual response --> - <element name="name" minOccurs="0" type="xsd:string" /> - <element name="list" minOccurs="0" maxOccurs="unbounded" type="xsd:string" /> - </sequence> - </complexType> - - <element name="stockQuoteOffer"> - <complexType> - <sequence> - <element name="input" minOccurs="0" maxOccurs="unbounded" type="tns:StockOffer" /> - </sequence> - </complexType> - </element> - <!-- TUSCANY 2505, make the responseWrapper non-anonymous --> - <element name="stockQuoteOfferResponse" type="tns:StockQuoteOfferResponseType"> - </element> - <complexType name="StockQuoteOfferResponseType"> - <sequence> - <element name="stockQuoteOfferReturn" minOccurs="0" type="tns:StockOffer" /> - </sequence> - </complexType> - <!-- Faults --> - <element name="InvalidSymbolFault"> - <complexType> - <sequence> - <element name="message" minOccurs="1" type="xsd:string" /> - <element name="offer" minOccurs="1" type="tns:StockOffer" /> - </sequence> - </complexType> - </element> - - <element name="MarketClosedFault" type="xsd:int" /> - - <element name="TestNotDeclaredAtSourceFault" type="xsd:string" /> - - <element name="anyElement"> - <complexType> - <sequence> - <element name="first" type="anyType"> - <annotation> - <appinfo> - <jaxb:dom /> - </appinfo> - </annotation> - </element> - <any maxOccurs="unbounded" processContents="skip"> - <annotation> - <appinfo> - <jaxb:dom /> - </appinfo> - </annotation> - </any> - </sequence> - </complexType> - </element> - - </schema> - </wsdl:types> - - - <wsdl:message name="stockQuoteOfferRequest"> - <wsdl:part element="tns:stockQuoteOffer" name="parameters" /> - </wsdl:message> - - <wsdl:message name="stockQuoteOfferResponse"> - <wsdl:part element="tns:stockQuoteOfferResponse" name="parameters" /> - </wsdl:message> - - <wsdl:message name="InvalidSymbolFault"> - <wsdl:part element="tns:InvalidSymbolFault" name="fault" /> - </wsdl:message> - - <wsdl:message name="MarketClosedFault"> - <wsdl:part element="tns:MarketClosedFault" name="fault" /> - </wsdl:message> - - <wsdl:message name="TestNotDeclaredAtSourceFault"> - <wsdl:part element="tns:TestNotDeclaredAtSourceFault" name="fault" /> - </wsdl:message> - - - <wsdl:portType name="StockExceptionTest"> - <wsdl:operation name="stockQuoteOffer"> - <wsdl:input message="tns:stockQuoteOfferRequest" name="stockQuoteOfferRequest" /> - - <wsdl:output message="tns:stockQuoteOfferResponse" name="stockQuoteOfferResponse" /> - - <wsdl:fault message="tns:InvalidSymbolFault" name="InvalidSymbolException" /> - - <wsdl:fault message="tns:MarketClosedFault" name="MarketClosedException" /> - - <wsdl:fault message="tns:TestNotDeclaredAtSourceFault" name="TestNotDeclaredAtSourceException" /> - </wsdl:operation> - - - </wsdl:portType> - - <wsdl:binding name="StockExceptionTestServiceSoapBinding" type="tns:StockExceptionTest"> - <!-- <wsaw:UsingAddressing wsdl:required="false" xmlns:wsaw="http://www.w3.org/2006/05/addressing/wsdl"/> --> - - <wsdlsoap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http" /> - - <wsdl:operation name="stockQuoteOffer"> - <wsdlsoap:operation soapAction="" /> - - <wsdl:input name="stockQuoteOfferRequest"> - <wsdlsoap:body use="literal" /> - </wsdl:input> - - <wsdl:output name="stockQuoteOfferResponse"> - <wsdlsoap:body use="literal" /> - </wsdl:output> - - <wsdl:fault name="InvalidSymbolException"> - <wsdlsoap:fault name="InvalidSymbolException" use="literal" /> - </wsdl:fault> - - <wsdl:fault name="MarketClosedException"> - <wsdlsoap:fault name="MarketClosedException" use="literal" /> - </wsdl:fault> - - <wsdl:fault name="TestNotDeclaredAtSourceException"> - <wsdlsoap:fault name="TestNotDeclaredAtSourceException" use="literal" /> - </wsdl:fault> - - - - </wsdl:operation> - - - </wsdl:binding> - - <wsdl:service name="StockExceptionTestService"> - <wsdl:port binding="tns:StockExceptionTestServiceSoapBinding" name="StockExceptionTestServiceSoapPort"> - <wsdlsoap:address location="http://localhost:8085/services/exchangeJaxbService" /> - - </wsdl:port> - - </wsdl:service> - -</wsdl:definitions>
\ No newline at end of file diff --git a/sca-java-2.x/branches/2.0-Beta2/modules/interface-java-jaxws/src/test/resources/wsdl/bindings.xml b/sca-java-2.x/branches/2.0-Beta2/modules/interface-java-jaxws/src/test/resources/wsdl/bindings.xml deleted file mode 100644 index 078abb5ac1..0000000000 --- a/sca-java-2.x/branches/2.0-Beta2/modules/interface-java-jaxws/src/test/resources/wsdl/bindings.xml +++ /dev/null @@ -1,28 +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. ---> -<bindings - xmlns:xsd="http://www.w3.org/2001/XMLSchema" - xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" - wsdlLocation="StockExceptionTest.wsdl" - xmlns="http://java.sun.com/xml/ns/jaxws"> - <bindings node="wsdl:definitions"> - <enableAsyncMapping>true</enableAsyncMapping> - </bindings> -</bindings> diff --git a/sca-java-2.x/branches/2.0-Beta2/modules/interface-java/LICENSE b/sca-java-2.x/branches/2.0-Beta2/modules/interface-java/LICENSE deleted file mode 100644 index 8aa906c321..0000000000 --- a/sca-java-2.x/branches/2.0-Beta2/modules/interface-java/LICENSE +++ /dev/null @@ -1,205 +0,0 @@ - - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright [yyyy] [name of copyright owner] - - Licensed 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. - - - diff --git a/sca-java-2.x/branches/2.0-Beta2/modules/interface-java/META-INF/MANIFEST.MF b/sca-java-2.x/branches/2.0-Beta2/modules/interface-java/META-INF/MANIFEST.MF deleted file mode 100644 index a374cfca80..0000000000 --- a/sca-java-2.x/branches/2.0-Beta2/modules/interface-java/META-INF/MANIFEST.MF +++ /dev/null @@ -1,48 +0,0 @@ -Manifest-Version: 1.0
-Export-Package: org.apache.tuscany.sca.interfacedef.java.impl;uses:="o
- rg.osoa.sca.annotations,org.apache.tuscany.sca.interfacedef.util,org.
- apache.tuscany.sca.policy,org.apache.tuscany.sca.interfacedef.java,or
- g.apache.tuscany.sca.interfacedef,javax.xml.namespace,org.apache.tusc
- any.sca.interfacedef.java.introspect,org.apache.tuscany.sca.interface
- def.impl";version="2.0.0",org.apache.tuscany.sca.interfacedef.java.intr
- ospect;uses:="org.apache.tuscany.sca.interfacedef.java,org.apache.tus
- cany.sca.interfacedef";version="2.0.0",org.apache.tuscany.sca.interface
- def.java;uses:="org.apache.tuscany.sca.assembly,org.apache.tuscany.sc
- a.interfacedef.java.impl,org.apache.tuscany.sca.interfacedef.java.int
- rospect,org.apache.tuscany.sca.core,org.apache.tuscany.sca.policy,org
- .apache.tuscany.sca.interfacedef,org.apache.tuscany.sca.extensibility
- ,javax.xml.namespace";version="2.0.0"
-SCA-Version: 1.1
-Bundle-Name: Apache Tuscany SCA Java Interface Model
-Bundle-Vendor: The Apache Software Foundation
-Bundle-Version: 2.0.0
-Bundle-ManifestVersion: 2
-Bundle-License: http://www.apache.org/licenses/LICENSE-2.0.txt
-Bundle-Description: Apache Tuscany SCA Java Interface Model
-Import-Package: javax.jws,
- javax.jws.soap,
- javax.xml.namespace,
- javax.xml.stream,
- javax.xml.ws,
- org.apache.tuscany.sca.assembly;version="2.0.0",
- org.apache.tuscany.sca.assembly.xml;version="2.0.0",
- org.apache.tuscany.sca.contribution;version="2.0.0",
- org.apache.tuscany.sca.contribution.processor;version="2.0.0",
- org.apache.tuscany.sca.contribution.resolver;version="2.0.0",
- org.apache.tuscany.sca.core;version="2.0.0",
- org.apache.tuscany.sca.definitions;version="2.0.0";resolution:=optional,
- org.apache.tuscany.sca.extensibility;version="2.0.0",
- org.apache.tuscany.sca.interfacedef;version="2.0.0",
- org.apache.tuscany.sca.interfacedef.impl;version="2.0.0",
- org.apache.tuscany.sca.interfacedef.java;version="2.0.0",
- org.apache.tuscany.sca.interfacedef.java.impl;version="2.0.0",
- org.apache.tuscany.sca.interfacedef.java.introspect;version="2.0.0",
- org.apache.tuscany.sca.interfacedef.util;version="2.0.0",
- org.apache.tuscany.sca.interfacedef.wsdl;version="2.0.0",
- org.apache.tuscany.sca.monitor;version="2.0.0",
- org.apache.tuscany.sca.policy;version="2.0.0",
- org.oasisopen.sca;version="2.0.0",
- org.oasisopen.sca.annotation;version="2.0.0"
-Bundle-SymbolicName: org.apache.tuscany.sca.interface.java
-Bundle-DocURL: http://www.apache.org/
-Bundle-RequiredExecutionEnvironment: J2SE-1.5,JavaSE-1.6 diff --git a/sca-java-2.x/branches/2.0-Beta2/modules/interface-java/NOTICE b/sca-java-2.x/branches/2.0-Beta2/modules/interface-java/NOTICE deleted file mode 100644 index ad2ba40961..0000000000 --- a/sca-java-2.x/branches/2.0-Beta2/modules/interface-java/NOTICE +++ /dev/null @@ -1,6 +0,0 @@ -${pom.name} -Copyright (c) 2005 - 2010 The Apache Software Foundation - -This product includes software developed by -The Apache Software Foundation (http://www.apache.org/). - diff --git a/sca-java-2.x/branches/2.0-Beta2/modules/interface-java/pom.xml b/sca-java-2.x/branches/2.0-Beta2/modules/interface-java/pom.xml deleted file mode 100644 index 055673e62c..0000000000 --- a/sca-java-2.x/branches/2.0-Beta2/modules/interface-java/pom.xml +++ /dev/null @@ -1,64 +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. ---> -<project> - <modelVersion>4.0.0</modelVersion> - <parent> - <groupId>org.apache.tuscany.sca</groupId> - <artifactId>tuscany-modules</artifactId> - <version>2.0-Beta2-SNAPSHOT</version> - <relativePath>../pom.xml</relativePath> - </parent> - <artifactId>tuscany-interface-java</artifactId> - <name>Apache Tuscany SCA Interface Java Model</name> - - <dependencies> - <dependency> - <groupId>org.apache.tuscany.sca</groupId> - <artifactId>tuscany-extensibility</artifactId> - <version>2.0-Beta2-SNAPSHOT</version> - </dependency> - - <dependency> - <groupId>org.apache.tuscany.sca</groupId> - <artifactId>tuscany-assembly-xml</artifactId> - <version>2.0-Beta2-SNAPSHOT</version> - </dependency> - - <dependency> - <groupId>org.apache.tuscany.sca</groupId> - <artifactId>tuscany-sca-api</artifactId> - <version>2.0-Beta2-SNAPSHOT</version> - </dependency> - - <dependency> - <groupId>org.apache.tuscany.sca</groupId> - <artifactId>tuscany-contribution</artifactId> - <version>2.0-Beta2-SNAPSHOT</version> - </dependency> - - <dependency> - <groupId>org.apache.tuscany.sca</groupId> - <artifactId>tuscany-interface-wsdl</artifactId> - <version>2.0-Beta2-SNAPSHOT</version> - </dependency> - - </dependencies> - -</project> diff --git a/sca-java-2.x/branches/2.0-Beta2/modules/interface-java/src/main/java/org/apache/tuscany/sca/interfacedef/java/DefaultJavaInterfaceFactory.java b/sca-java-2.x/branches/2.0-Beta2/modules/interface-java/src/main/java/org/apache/tuscany/sca/interfacedef/java/DefaultJavaInterfaceFactory.java deleted file mode 100644 index 89b8c7193d..0000000000 --- a/sca-java-2.x/branches/2.0-Beta2/modules/interface-java/src/main/java/org/apache/tuscany/sca/interfacedef/java/DefaultJavaInterfaceFactory.java +++ /dev/null @@ -1,100 +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.interfacedef.java; - -import java.io.IOException; -import java.lang.reflect.Constructor; -import java.util.Collection; -import java.util.List; -import java.util.logging.Logger; - -import org.apache.tuscany.sca.core.ExtensionPointRegistry; -import org.apache.tuscany.sca.extensibility.ServiceDeclaration; -import org.apache.tuscany.sca.interfacedef.java.impl.JavaInterfaceFactoryImpl; -import org.apache.tuscany.sca.interfacedef.java.introspect.JavaInterfaceVisitor; - -/** - * A factory for the Java interface model. - * - * @version $Rev$ $Date$ - * @tuscany.spi.extension.asclient - */ -public class DefaultJavaInterfaceFactory extends JavaInterfaceFactoryImpl implements JavaInterfaceFactory { - private static final Logger logger = Logger.getLogger(DefaultJavaInterfaceFactory.class.getName()); - - private ExtensionPointRegistry registry; - // private Monitor monitor = null; - private boolean loadedVisitors; - - public DefaultJavaInterfaceFactory(ExtensionPointRegistry registry) { - super(); - this.registry = registry; - } - - @Override - public List<JavaInterfaceVisitor> getInterfaceVisitors() { - loadVisitors(); - return super.getInterfaceVisitors(); - } - - /** - * Load visitors declared under META-INF/services - */ - @SuppressWarnings("unchecked") - private synchronized void loadVisitors() { - if (loadedVisitors) - return; - - // Get the databinding service declarations - Collection<ServiceDeclaration> visitorDeclarations; - try { - visitorDeclarations = registry.getServiceDiscovery().getServiceDeclarations(JavaInterfaceVisitor.class, true); - } catch (IOException e) { - throw new IllegalStateException(e); - } - - // Load data bindings - for (ServiceDeclaration visitorDeclaration: visitorDeclarations) { - JavaInterfaceVisitor visitor = null; - try { - Class<JavaInterfaceVisitor> visitorClass = (Class<JavaInterfaceVisitor>)visitorDeclaration.loadClass(); - - try { - Constructor<JavaInterfaceVisitor> constructor = visitorClass.getConstructor(ExtensionPointRegistry.class); - visitor = constructor.newInstance(registry); - } catch (NoSuchMethodException e) { - visitor = visitorClass.newInstance(); - } - - - } catch (Exception e) { - IllegalStateException ie = new IllegalStateException(e); - throw ie; - } - - logger.fine("Adding Java Interface visitor: " + visitor.getClass().getName()); - - addInterfaceVisitor(visitor); - } - - loadedVisitors = true; - } - - -} diff --git a/sca-java-2.x/branches/2.0-Beta2/modules/interface-java/src/main/java/org/apache/tuscany/sca/interfacedef/java/JavaInterface.java b/sca-java-2.x/branches/2.0-Beta2/modules/interface-java/src/main/java/org/apache/tuscany/sca/interfacedef/java/JavaInterface.java deleted file mode 100644 index e042d863d7..0000000000 --- a/sca-java-2.x/branches/2.0-Beta2/modules/interface-java/src/main/java/org/apache/tuscany/sca/interfacedef/java/JavaInterface.java +++ /dev/null @@ -1,134 +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.interfacedef.java; - -import javax.xml.namespace.QName; - -import org.apache.tuscany.sca.assembly.Base; -import org.apache.tuscany.sca.contribution.Contribution; -import org.apache.tuscany.sca.interfacedef.Interface; - -/** - * Represents a Java interface. - * - * @version $Rev$ $Date$ - * @tuscany.spi.extension.asclient - */ -public interface JavaInterface extends Interface, Base { - - /** - * Returns the name of the Java interface class. - * - * @return the name of the Java interface class - */ - String getName(); - - /** - * Sets the name of the Java interface class. - * - * @param className the name of the Java interface class - */ - void setName(String className); - - /** - * Returns the QName of the JAX-WS interface. - * - * @return the QName of the JAX-WS interface - */ - QName getQName(); - - /** - * Sets the QName of the JAX-WS interface. - * - * @param interfaceName the QName of the JAX-WS interface - */ - void setQName(QName interfaceName); - - /** - * Returns the Java interface class. - * - * @return the Java interface class - */ - Class<?> getJavaClass(); - - /** - * Sets the Java interface class. - * - * @param javaClass the Java interface class - */ - void setJavaClass(Class<?> javaClass); - - /** - * Returns the callback class specified in an @Callback annotation. - * - * @return the callback class specified in an @Callback annotation - */ - Class<?> getCallbackClass(); - - /** - * Sets the callback class specified in an @Callback annotation. - * - * @param callbackClass the callback class specified in an @Callback annotation - */ - void setCallbackClass(Class<?> callbackClass); - - /** - * A Java interface may have JAXWS annotations that refer to a - * a WSDL document. The resulting WSDL location is stored here - * so that is can be resolved after the Java interface itself - * has been resolved - * - * @return WSDL interface - */ - String getJAXWSWSDLLocation(); - - /** - * A Java interface may have JAXWS annotations that refer to a - * a WSDL document. The resulting WSDL location is stored here - * so that is can be resolved after the Java interface itself - * has been resolved - * - * @param wsdlInterface - */ - void setJAXWSWSDLLocation(String wsdlLocation); - - /** - * A Java interface may have JAXWS annotations that refer to a - * a Java interface by name. The resulting class name is stored here - * so that is can be resolved after this Java interface - * has been resolved - * - * @return - */ - String getJAXWSJavaInterfaceName(); - - /** - * A Java interface may have JAXWS annotations that refer to a - * a Java interface by name. The resulting class name is stored here - * so that is can be resolved after this Java interface - * has been resolved - * - * @return - */ - void setJAXWSJavaInterfaceName(String javaInterfaceName); - - public Contribution getContributionContainingClass(); - - public void setContributionContainingClass(Contribution contributionContainingClass); -} diff --git a/sca-java-2.x/branches/2.0-Beta2/modules/interface-java/src/main/java/org/apache/tuscany/sca/interfacedef/java/JavaInterfaceContract.java b/sca-java-2.x/branches/2.0-Beta2/modules/interface-java/src/main/java/org/apache/tuscany/sca/interfacedef/java/JavaInterfaceContract.java deleted file mode 100644 index 25875dbd6a..0000000000 --- a/sca-java-2.x/branches/2.0-Beta2/modules/interface-java/src/main/java/org/apache/tuscany/sca/interfacedef/java/JavaInterfaceContract.java +++ /dev/null @@ -1,33 +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.interfacedef.java; - -import org.apache.tuscany.sca.interfacedef.InterfaceContract; - -/** - * Represents a Java interface contract. - * JavaInterfaceContract - * - * @version $Rev$ $Date$ - * @tuscany.spi.extension.asclient - */ -public interface JavaInterfaceContract extends InterfaceContract { - -} diff --git a/sca-java-2.x/branches/2.0-Beta2/modules/interface-java/src/main/java/org/apache/tuscany/sca/interfacedef/java/JavaInterfaceFactory.java b/sca-java-2.x/branches/2.0-Beta2/modules/interface-java/src/main/java/org/apache/tuscany/sca/interfacedef/java/JavaInterfaceFactory.java deleted file mode 100644 index 4f4e9d8268..0000000000 --- a/sca-java-2.x/branches/2.0-Beta2/modules/interface-java/src/main/java/org/apache/tuscany/sca/interfacedef/java/JavaInterfaceFactory.java +++ /dev/null @@ -1,91 +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.interfacedef.java; - -import java.lang.reflect.Method; -import java.util.List; - -import org.apache.tuscany.sca.interfacedef.InvalidInterfaceException; -import org.apache.tuscany.sca.interfacedef.java.introspect.JavaInterfaceVisitor; - -/** - * Factory for the Java interface model - * - * @version $Rev$ $Date$ - * @tuscany.spi.extension.asclient - */ -public interface JavaInterfaceFactory { - - /** - * Creates a new Java interface model. - * - * @return - */ - JavaInterface createJavaInterface(); - - /** - * Creates a new Java interface model from an interface class. - * @param interfaceClass the interface class to introspect. - * @return - */ - JavaInterface createJavaInterface(Class<?> interfaceClass) throws InvalidInterfaceException; - - /** - * Creates the contents of a Java interface model from an interface class. - * @param javaInterface the Java interface model - * @param interfaceClass the interface class to introspect. - * @return - */ - void createJavaInterface(JavaInterface javaInterface, Class<?> interfaceClass) throws InvalidInterfaceException; - - /** - * Create a JavaOperation - * @param method - * @return - */ - JavaOperation createJavaOperation(Method method); - - /** - * Creates a new Java interface contract. - * - * @return - */ - JavaInterfaceContract createJavaInterfaceContract(); - - /** - * Registers the given visitor. - * - * @param visitor - */ - void addInterfaceVisitor(JavaInterfaceVisitor visitor); - - /** - * Deregisters the given visitor. - * - * @param visitor - */ - void removeInterfaceVisitor(JavaInterfaceVisitor visitor); - - /** - * Returns a list of interface visitors. - * - * @return - */ - List<JavaInterfaceVisitor> getInterfaceVisitors(); -} diff --git a/sca-java-2.x/branches/2.0-Beta2/modules/interface-java/src/main/java/org/apache/tuscany/sca/interfacedef/java/JavaOperation.java b/sca-java-2.x/branches/2.0-Beta2/modules/interface-java/src/main/java/org/apache/tuscany/sca/interfacedef/java/JavaOperation.java deleted file mode 100644 index e894ac279b..0000000000 --- a/sca-java-2.x/branches/2.0-Beta2/modules/interface-java/src/main/java/org/apache/tuscany/sca/interfacedef/java/JavaOperation.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 org.apache.tuscany.sca.interfacedef.java; - -import java.lang.reflect.Method; - -import org.apache.tuscany.sca.interfacedef.Operation; - -/** - * Represents a Java operation. - * - * @version $Rev$ $Date$ - * @tuscany.spi.extension.asclient - */ -public interface JavaOperation extends Operation { - - /** - * Returns the Java method defining the operation. - * @return the Java method - */ - Method getJavaMethod(); - - /** - * Sets the Java method defining the operation. - * @param method the Java method - */ - void setJavaMethod(Method method); - - /** - * Returns the JAX-WS @WebMethod action parameter. - * @return the action value - */ - String getAction(); - - /** - * Sets the JAX-WS @WebMethod action parameter. - * @param action the action value - */ - void setAction(String action); - - /** - * Sets whether this operation has async server style - * @param isAsync - "true" marks this operation as async server style - */ - public void setAsyncServer( boolean isAsync ); - - /** - * Indicates whether this operation is async server style - * @return - true if the operation is async server style - */ - public boolean isAsyncServer(); - -} diff --git a/sca-java-2.x/branches/2.0-Beta2/modules/interface-java/src/main/java/org/apache/tuscany/sca/interfacedef/java/impl/JavaInterfaceContractImpl.java b/sca-java-2.x/branches/2.0-Beta2/modules/interface-java/src/main/java/org/apache/tuscany/sca/interfacedef/java/impl/JavaInterfaceContractImpl.java deleted file mode 100644 index cb0d5f3b27..0000000000 --- a/sca-java-2.x/branches/2.0-Beta2/modules/interface-java/src/main/java/org/apache/tuscany/sca/interfacedef/java/impl/JavaInterfaceContractImpl.java +++ /dev/null @@ -1,53 +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.interfacedef.java.impl; - -import org.apache.tuscany.sca.interfacedef.InterfaceContract; -import org.apache.tuscany.sca.interfacedef.impl.InterfaceContractImpl; -import org.apache.tuscany.sca.interfacedef.java.JavaInterfaceContract; - -/** - * Represents a Java interface contract. - * - * @version $Rev$ $Date$ - */ -public class JavaInterfaceContractImpl extends InterfaceContractImpl implements JavaInterfaceContract { - - // A cached WSDL version of the Java contract use during normalized - // interface comparison - private InterfaceContract normailizedWSDLInterfaceContract; - - protected JavaInterfaceContractImpl() { - } - - @Override - public JavaInterfaceContractImpl clone() throws CloneNotSupportedException { - return (JavaInterfaceContractImpl) super.clone(); - } - - @Override - public InterfaceContract getNormalizedWSDLContract() { - return normailizedWSDLInterfaceContract; - } - - @Override - public void setNormailizedWSDLContract(InterfaceContract wsdlInterfaceContract) { - normailizedWSDLInterfaceContract = wsdlInterfaceContract; - } -} diff --git a/sca-java-2.x/branches/2.0-Beta2/modules/interface-java/src/main/java/org/apache/tuscany/sca/interfacedef/java/impl/JavaInterfaceFactoryImpl.java b/sca-java-2.x/branches/2.0-Beta2/modules/interface-java/src/main/java/org/apache/tuscany/sca/interfacedef/java/impl/JavaInterfaceFactoryImpl.java deleted file mode 100644 index dbedf1d55a..0000000000 --- a/sca-java-2.x/branches/2.0-Beta2/modules/interface-java/src/main/java/org/apache/tuscany/sca/interfacedef/java/impl/JavaInterfaceFactoryImpl.java +++ /dev/null @@ -1,95 +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.interfacedef.java.impl; - -import java.lang.reflect.Method; -import java.util.ArrayList; -import java.util.Collections; -import java.util.List; -import java.util.Map; -import java.util.WeakHashMap; - -import org.apache.tuscany.sca.interfacedef.InvalidInterfaceException; -import org.apache.tuscany.sca.interfacedef.java.JavaInterface; -import org.apache.tuscany.sca.interfacedef.java.JavaInterfaceContract; -import org.apache.tuscany.sca.interfacedef.java.JavaInterfaceFactory; -import org.apache.tuscany.sca.interfacedef.java.JavaOperation; -import org.apache.tuscany.sca.interfacedef.java.introspect.JavaInterfaceVisitor; - -/** - * A factory for the Java model. - * - * @version $Rev$ $Date$ - */ -public abstract class JavaInterfaceFactoryImpl implements JavaInterfaceFactory { - - private List<JavaInterfaceVisitor> visitors = new ArrayList<JavaInterfaceVisitor>(); - private JavaInterfaceIntrospectorImpl introspector; - private Map<Class<?>, JavaInterface> cache = Collections.synchronizedMap(new WeakHashMap<Class<?>, JavaInterface>()); - - public JavaInterfaceFactoryImpl() { - introspector = new JavaInterfaceIntrospectorImpl(this); - } - - public JavaInterface createJavaInterface() { - return new JavaInterfaceImpl(); - } - - public JavaInterface createJavaInterface(Class<?> interfaceClass) throws InvalidInterfaceException { - // TODO: Review if the sharing of JavaInterface is ok - synchronized (interfaceClass) { - JavaInterface javaInterface = cache.get(interfaceClass); - if (javaInterface == null) { - javaInterface = createJavaInterface(); - introspector.introspectInterface(javaInterface, interfaceClass); - // Now that all introspection is complete we can mark the interface resolved - javaInterface.setUnresolved(false); - cache.put(interfaceClass, javaInterface); - } - return javaInterface; - } - } - - public void createJavaInterface(JavaInterface javaInterface, Class<?> interfaceClass) throws InvalidInterfaceException { - introspector.introspectInterface(javaInterface, interfaceClass); - } - - public JavaInterfaceContract createJavaInterfaceContract() { - return new JavaInterfaceContractImpl(); - } - - public void addInterfaceVisitor(JavaInterfaceVisitor extension) { - visitors.add(extension); - } - - public void removeInterfaceVisitor(JavaInterfaceVisitor extension) { - visitors.remove(extension); - } - - public List<JavaInterfaceVisitor> getInterfaceVisitors() { - return visitors; - } - - public JavaOperation createJavaOperation(Method method) { - JavaOperation op = new JavaOperationImpl(); - op.setJavaMethod(method); - op.setName(method.getName()); - return op; - } -} diff --git a/sca-java-2.x/branches/2.0-Beta2/modules/interface-java/src/main/java/org/apache/tuscany/sca/interfacedef/java/impl/JavaInterfaceImpl.java b/sca-java-2.x/branches/2.0-Beta2/modules/interface-java/src/main/java/org/apache/tuscany/sca/interfacedef/java/impl/JavaInterfaceImpl.java deleted file mode 100644 index 1dcd89ce2a..0000000000 --- a/sca-java-2.x/branches/2.0-Beta2/modules/interface-java/src/main/java/org/apache/tuscany/sca/interfacedef/java/impl/JavaInterfaceImpl.java +++ /dev/null @@ -1,367 +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.interfacedef.java.impl; - -import java.lang.ref.WeakReference; -import java.lang.reflect.Type; -import java.lang.reflect.TypeVariable; -import java.util.ArrayList; -import java.util.List; -import java.lang.reflect.ParameterizedType; - -import javax.xml.namespace.QName; - -import org.apache.tuscany.sca.assembly.xml.Constants; -import org.apache.tuscany.sca.contribution.Contribution; -import org.apache.tuscany.sca.interfacedef.DataType; -import org.apache.tuscany.sca.interfacedef.Operation; -import org.apache.tuscany.sca.interfacedef.impl.DataTypeImpl; -import org.apache.tuscany.sca.interfacedef.impl.InterfaceImpl; -import org.apache.tuscany.sca.interfacedef.java.JavaInterface; -import org.apache.tuscany.sca.interfacedef.java.JavaOperation; -import org.apache.tuscany.sca.interfacedef.util.XMLType; -import org.apache.tuscany.sca.policy.Intent; - -import org.oasisopen.sca.ResponseDispatch; - -/** - * Represents a Java interface. - * - * @version $Rev$ $Date$ - */ -public class JavaInterfaceImpl extends InterfaceImpl implements JavaInterface { - - private String className; - private WeakReference<Class<?>> javaClass; - private Class<?> callbackClass; - private QName qname; - private String jaxwsWSDLLocation; - private String jaxwsJavaInterfaceName; - private Contribution contributionContainingClass; - - protected JavaInterfaceImpl() { - super(); - // Mark the interface as unresolved until all the basic processing is complete - // including Intent & Policy introspection - this.setUnresolved(true); - } - - public String getName() { - if (isUnresolved()) { - return className; - } else if (javaClass != null) { - return javaClass.get().getName(); - } else { - return null; - } - } - - public void setName(String className) { - if (!isUnresolved()) { - throw new IllegalStateException(); - } - this.className = className; - } - - public QName getQName() { - return qname; - } - - public void setQName(QName interfacename) { - qname = interfacename; - } - - public Class<?> getJavaClass() { - if (javaClass != null){ - return javaClass.get(); - } else { - return null; - } - } - - public void setJavaClass(Class<?> javaClass) { - this.javaClass = new WeakReference<Class<?>>(javaClass); - if (javaClass != null) { - this.className = javaClass.getName(); - } - } - - public Class<?> getCallbackClass() { - return callbackClass; - } - - public void setCallbackClass(Class<?> callbackClass) { - this.callbackClass = callbackClass; - } - - @Override - public String toString() { - return getName(); - } - - @Override - public Object clone() throws CloneNotSupportedException { - return super.clone(); - } - - @Override - public int hashCode() { - final int prime = 31; - int result = 1; - result = prime * result + ((className == null) ? 0 : className.hashCode()); - return result; - } - - @Override - public boolean equals(Object obj) { - if (this == obj) - return true; - if (obj == null) - return false; - if (getClass() != obj.getClass()) - return false; - JavaInterfaceImpl other = (JavaInterfaceImpl)obj; - if (isUnresolved() || other.isUnresolved()) { - if (className == null) { - if (other.className != null) - return false; - } else if (!className.equals(other.className)) - return false; - } else { - if (javaClass == null) { - if (other.javaClass != null) - return false; - } else if (!javaClass.get().equals(other.javaClass.get())) - return false; - if (callbackClass == null) { - if (other.callbackClass != null) - return false; - } else if (!callbackClass.equals(other.callbackClass)) - return false; - } - - return true; - } - - public List<Operation> getOperations() { - if( !isUnresolved() && isAsyncServer() ) { - return equivalentSyncOperations(); - } else { - return super.getOperations(); - } - } // end method getOperations - - - private List<Operation> syncOperations = null; - private List<Operation> equivalentSyncOperations() { - if( syncOperations != null ) return syncOperations; - List<Operation> allOperations = super.getOperations(); - syncOperations = new ArrayList<Operation>(); - for( Operation operation: allOperations) { - syncOperations.add( getSyncFormOfOperation( (JavaOperation) operation ) ); - // Store the actual async operations under the attribute "ASYNC-SERVER-OPERATIONS" - this.getAttributes().put("ASYNC-SERVER-OPERATIONS", allOperations); - } // end for - - return syncOperations; - } // end method equivalentSyncOperations - - private static final String UNKNOWN_DATABINDING = null; - /** - * Prepares the synchronous form of an asynchronous operation - * - async form: void someOperationAsync( FooType inputParam, DispatchResponse<BarType> ) - * - sync form: BarType someOperation( FooType inputParam ) - * @param operation - the operation to convert - * @return - the synchronous form of the operation - for an input operation that is not async server in form, this - * method simply returns the original operation unchanged - */ - private Operation getSyncFormOfOperation( JavaOperation operation ) { - if( isAsyncServerOperation( operation ) ) { - JavaOperation syncOperation = new JavaOperationImpl(); - String opName = operation.getName().substring(0, operation.getName().length() - 5 ); - - // Prepare the list of equivalent input parameters, which simply excludes the (final) DispatchResponse object - // and the equivalent return parameter, which is the (generic) type from the DispatchResponse object - DataType<List<DataType>> requestParams = operation.getInputType(); - - DataType<List<DataType>> inputType = prepareSyncInputParams( requestParams ); - DataType<List<DataType>> returnDataType = prepareSyncReturnParam( requestParams ); - List<DataType> faultDataTypes = prepareSyncFaults( operation ); - - syncOperation.setName(opName); - syncOperation.setAsyncServer(true); - syncOperation.setInputType(inputType); - syncOperation.setOutputType(returnDataType); - syncOperation.setFaultTypes(faultDataTypes); - syncOperation.setNonBlocking(operation.isNonBlocking()); - syncOperation.setJavaMethod(operation.getJavaMethod()); - syncOperation.setInterface(this); - return syncOperation; - } else { - // If it's not Async form, then it's a synchronous operation - return operation; - } // end if - } // end getSyncFormOfOperation - - /** - * Produce the equivalent sync method input parameters from the input parameters of the async method - * @param requestParams - async method input parameters - * @return - the equivalent sync method input parameters - */ - private DataType<List<DataType>> prepareSyncInputParams( DataType<List<DataType>> requestParams ) { - List<DataType> requestLogical = requestParams.getLogical(); - int paramCount = requestLogical.size(); - - // Copy the list of async parameters, removing the final DispatchResponse - List<DataType> asyncParams = new ArrayList<DataType>( paramCount - 1); - for( int i = 0 ; i < (paramCount - 1) ; i++ ) { - asyncParams.add( requestLogical.get(i) ); - } // end for - - DataType<List<DataType>> inputType = - new DataTypeImpl<List<DataType>>(requestParams.getDataBinding(), - requestParams.getPhysical(), asyncParams); - return inputType; - } // end method prepareSyncInputParams - - /** - * Prepare the return data type of the equivalent sync operation, based on the parameterization of the ResponseDispatch object - * of the async operation - the return data type is the Generic type of the final DispatchResponse<?> - * @param requestParams - - async method input parameters - * @return - the sync method return parameter - */ - private DataType<List<DataType>> prepareSyncReturnParam( DataType<List<DataType>> requestParams ) { - List<DataType> requestLogical = requestParams.getLogical(); - int paramCount = requestLogical.size(); - - DataType<?> finalParam = requestLogical.get( paramCount - 1 ); - ParameterizedType t = (ParameterizedType)finalParam.getGenericType(); - XMLType returnXMLType = (XMLType)finalParam.getLogical(); - - String namespace = null; - if( returnXMLType.isElement() ) { - namespace = returnXMLType.getElementName().getNamespaceURI(); - } else { - namespace = returnXMLType.getTypeName().getNamespaceURI(); - } - - Type[] typeArgs = t.getActualTypeArguments(); - if( typeArgs.length != 1 ) throw new IllegalArgumentException( "ResponseDispatch parameter is not parameterized correctly"); - - Class<?> returnType = (Class<?>)typeArgs[0]; - - // Set outputType to null for void - XMLType xmlReturnType = new XMLType(new QName(namespace, "return"), null); - DataType<XMLType> returnDataType = - returnType == void.class ? null : new DataTypeImpl<XMLType>(UNKNOWN_DATABINDING, returnType, xmlReturnType); - - ArrayList<DataType> returnTypes = new ArrayList<DataType>(); - returnTypes.add(returnDataType); - - DataType<List<DataType>> outputType = - new DataTypeImpl<List<DataType>>(requestParams.getDataBinding(), - requestParams.getPhysical(), returnTypes); - - return outputType; - } // end method prepareSyncReturnParam - - /** - * Prepare the set of equivalent sync faults for a given async operation - * @return - the list of faults - */ - private List<DataType> prepareSyncFaults( JavaOperation operation ) { - //TODO - deal with Faults - for now just copy through whatever is associated with the async operation - return operation.getFaultTypes(); - } - - /** - * Determines if an interface operation has the form of an async server operation - * - async form: void someOperationAsync( FooType inputParam, ...., DispatchResponse<BarType> ) - * @param operation - the operation to examine - * @return - true if the operation has the form of an async operation, false otherwise - */ - private boolean isAsyncServerOperation( Operation operation ) { - // Async form operations have: - // 1) void return type - // 2) name ending in "Async" - // 3) final parameter which is of ResponseDispatch<?> type - DataType<?> response = operation.getOutputType().getLogical().get(0); - if( response != null ) { - if ( response.getPhysical() != void.class ) return false; - } // end if - - if ( !operation.getName().endsWith("Async") ) return false; - - DataType<List<DataType>> requestParams = operation.getInputType(); - int paramCount = requestParams.getLogical().size(); - if( paramCount < 1 ) return false; - DataType<?> finalParam = requestParams.getLogical().get( paramCount - 1 ); - if ( finalParam.getPhysical() != ResponseDispatch.class ) return false; - - return true; - } // end method isAsyncServerOperation - - static QName ASYNC_INVOCATION = new QName(Constants.SCA11_NS, "asyncInvocation"); - /** - * Indicates if this interface is an Async Server interface - * @return true if the interface is Async Server, false otherwise - */ - private boolean isAsyncServer() { - - List<Intent> intents = getRequiredIntents(); - for( Intent intent: intents ) { - if ( intent.getName().equals(ASYNC_INVOCATION) ) { - return true; - } - } // end for - return false; - } // end method isAsyncServer - - public String getJAXWSWSDLLocation() { - return jaxwsWSDLLocation; - } - - public void setJAXWSWSDLLocation(String wsdlLocation) { - this.jaxwsWSDLLocation = wsdlLocation; - } - - public String getJAXWSJavaInterfaceName() { - return jaxwsJavaInterfaceName; - } - - public void setJAXWSJavaInterfaceName(String javaInterfaceName) { - this.jaxwsJavaInterfaceName = javaInterfaceName; - } - - /** - * A Java class may reference a WSDL file via a JAXWS annotation. We need to resolve - * the WSDL file location in the context of the same contribution that holds the - * Java file. In order to do this we need to remember the actual contribution that - * was used to resolve a Java class. - * - * @return - */ - public Contribution getContributionContainingClass() { - return contributionContainingClass; - } - - public void setContributionContainingClass(Contribution contributionContainingClass) { - this.contributionContainingClass = contributionContainingClass; - } -} diff --git a/sca-java-2.x/branches/2.0-Beta2/modules/interface-java/src/main/java/org/apache/tuscany/sca/interfacedef/java/impl/JavaInterfaceIntrospectorImpl.java b/sca-java-2.x/branches/2.0-Beta2/modules/interface-java/src/main/java/org/apache/tuscany/sca/interfacedef/java/impl/JavaInterfaceIntrospectorImpl.java deleted file mode 100644 index a4629333d5..0000000000 --- a/sca-java-2.x/branches/2.0-Beta2/modules/interface-java/src/main/java/org/apache/tuscany/sca/interfacedef/java/impl/JavaInterfaceIntrospectorImpl.java +++ /dev/null @@ -1,393 +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.interfacedef.java.impl; - -import java.lang.annotation.Annotation; -import java.lang.reflect.Method; -import java.lang.reflect.ParameterizedType; -import java.lang.reflect.Type; -import java.lang.reflect.TypeVariable; -import java.rmi.Remote; -import java.rmi.RemoteException; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.HashSet; -import java.util.List; -import java.util.Map; -import java.util.Set; -import java.util.concurrent.Future; - -import javax.xml.namespace.QName; -import javax.xml.ws.AsyncHandler; -import javax.xml.ws.Holder; -import javax.xml.ws.Response; - -import org.apache.tuscany.sca.interfacedef.DataType; -import org.apache.tuscany.sca.interfacedef.InvalidAnnotationException; -import org.apache.tuscany.sca.interfacedef.InvalidCallbackException; -import org.apache.tuscany.sca.interfacedef.InvalidInterfaceException; -import org.apache.tuscany.sca.interfacedef.InvalidOperationException; -import org.apache.tuscany.sca.interfacedef.Operation; -import org.apache.tuscany.sca.interfacedef.OverloadedOperationException; -import org.apache.tuscany.sca.interfacedef.ParameterMode; -import org.apache.tuscany.sca.interfacedef.impl.DataTypeImpl; -import org.apache.tuscany.sca.interfacedef.java.JavaInterface; -import org.apache.tuscany.sca.interfacedef.java.JavaInterfaceFactory; -import org.apache.tuscany.sca.interfacedef.java.JavaOperation; -import org.apache.tuscany.sca.interfacedef.java.introspect.JavaInterfaceVisitor; -import org.apache.tuscany.sca.interfacedef.util.JavaXMLMapper; -import org.apache.tuscany.sca.interfacedef.util.XMLType; -import org.oasisopen.sca.annotation.AsyncFault; -import org.oasisopen.sca.annotation.OneWay; -import org.oasisopen.sca.annotation.Remotable; - -/** - * Default implementation of a Java interface introspector. - * - * @version $Rev$ $Date$ - */ -public class JavaInterfaceIntrospectorImpl { - public static final String IDL_INPUT = "idl:input"; - public static final String IDL_OUTPUT = "idl:output"; - - private static final String UNKNOWN_DATABINDING = null; - - private JavaInterfaceFactory javaFactory = null; - private List<JavaInterfaceVisitor> visitors = new ArrayList<JavaInterfaceVisitor>(); - private boolean loadedVisitors; - - public JavaInterfaceIntrospectorImpl(JavaInterfaceFactory javaFactory) { - this.javaFactory = javaFactory; - } - - public void introspectInterface(JavaInterface javaInterface, Class<?> clazz) throws InvalidInterfaceException { - - if(!loadedVisitors) { - this.visitors = javaFactory.getInterfaceVisitors(); - } - - javaInterface.setJavaClass(clazz); - - boolean remotable = clazz.isAnnotationPresent(Remotable.class); - - // Consider @javax.ejb.Remote, java.rmi.Remote and javax.ejb.EJBObject - // equivalent to @Remotable - if (!remotable) { - for (Annotation annotation : clazz.getAnnotations()) { - if ("javax.ejb.Remote".equals(annotation.annotationType().getName())) { - remotable = true; - break; - } - } - } - if (!remotable) { - for (Class<?> superInterface : clazz.getInterfaces()) { - if (Remote.class == superInterface || "javax.ejb.EJBObject".equals(superInterface.getName())) { - remotable = true; - break; - } - } - } - - if (remotable) { - if (javaInterface.isRemotableSet() && javaInterface.isRemotable() == false) { - throw new InvalidAnnotationException("[JCA30005] @Remotable annotation present in a interface marked as not remotable in the SCDL", Remotable.class); - } - } else { - if (javaInterface.isRemotableSet()) { - remotable = javaInterface.isRemotable(); - } - } - - javaInterface.setRemotable(remotable); - - Class<?> callbackClass = null; - org.oasisopen.sca.annotation.Callback callback = clazz.getAnnotation(org.oasisopen.sca.annotation.Callback.class); - if (callback != null && !Void.class.equals(callback.value())) { - callbackClass = callback.value(); - if (remotable && !callbackClass.isAnnotationPresent(Remotable.class)) { - throw new InvalidCallbackException("Callback " + callbackClass.getName() + - " must be remotable on remotable interface " + clazz.getName()); - } - if (!remotable && callbackClass.isAnnotationPresent(Remotable.class)) { - throw new InvalidCallbackException("Callback" + callbackClass.getName() + - " must not be remotable on local interface " + clazz.getName()); - } - } else if (callback != null && Void.class.equals(callback.value())) { - throw new InvalidCallbackException("No callback interface specified on callback annotation in " + clazz.getName()); - } - - javaInterface.setCallbackClass(callbackClass); - - String ns = JavaXMLMapper.getNamespace(clazz); - javaInterface.getOperations().addAll(getOperations(clazz, remotable, ns)); - - for (JavaInterfaceVisitor extension : visitors) { - extension.visitInterface(javaInterface); - } - } - - private Class<?>[] getActualTypes(Type[] types, Class<?>[] rawTypes, Map<String, Type> typeBindings) { - Class<?>[] actualTypes = new Class<?>[types.length]; - for (int i = 0; i < actualTypes.length; i++) { - actualTypes[i] = getActualType(types[i], rawTypes[i], typeBindings); - } - return actualTypes; - } - - private Class<?> getActualType(Type type, Class<?> rawType, Map<String, Type> typeBindings) { - if (type instanceof TypeVariable<?>) { - TypeVariable<?> typeVariable = (TypeVariable<?>)type; - type = typeBindings.get(typeVariable.getName()); - if (type instanceof Class<?>) { - return (Class<?>)type; - } - } - return rawType; - } - - private <T> List<Operation> getOperations(Class<T> clazz, - boolean remotable, - String ns) throws InvalidInterfaceException { - - Set<Type> genericInterfaces = new HashSet<Type>(); - for (Type t : clazz.getGenericInterfaces()) { - genericInterfaces.add(t); - } - Map<String, Type> typeBindings = new HashMap<String, Type>(); - for (Type genericInterface : genericInterfaces) { - if (genericInterface instanceof ParameterizedType) { - ParameterizedType parameterizedType = (ParameterizedType)genericInterface; - TypeVariable<?>[] typeVariables = ((Class<?>)parameterizedType.getRawType()).getTypeParameters(); - Type[] typeArguments = parameterizedType.getActualTypeArguments(); - for (int i = 0; i < typeArguments.length; i++) { - typeBindings.put(typeVariables[i].getName(), typeArguments[i]); - } - } - } - - Method[] methods = clazz.getMethods(); - List<Operation> operations = new ArrayList<Operation>(methods.length); - Set<String> names = remotable ? new HashSet<String>() : null; - for (Method method : methods) { - boolean hasHolders = false; - if (method.getDeclaringClass() == Object.class) { - // Skip the methods on the Object.class - continue; - } - String name = method.getName(); - if (remotable && names.contains(name)) { - throw new OverloadedOperationException(method); - } - if (remotable && !jaxwsAsyncMethod(method)) { - names.add(name); - } - - Class<?> returnType = getActualType(method.getGenericReturnType(), method.getReturnType(), typeBindings); - Class<?>[] parameterTypes = - getActualTypes(method.getGenericParameterTypes(), method.getParameterTypes(), typeBindings); - Class<?>[] faultTypes = - getActualTypes(method.getGenericExceptionTypes(), method.getExceptionTypes(), typeBindings); - Class<?>[] allOutputTypes = getOutputTypes(returnType, parameterTypes); - - // For async server interfaces, faults are described using the @AsyncFaults annotation - if( method.isAnnotationPresent(AsyncFault.class) ) { - faultTypes = readAsyncFaultTypes( method ); - } // end if - - boolean nonBlocking = method.isAnnotationPresent(OneWay.class); - if (nonBlocking) { - if (!(returnType == void.class)) { - throw new InvalidOperationException( - "Method should return 'void' when declared with an @OneWay annotation. " + method, - method); - } - if (!(faultTypes.length == 0)) { - throw new InvalidOperationException( - "Method should not declare exceptions with an @OneWay annotation. " + method, - method); - } - } - - JavaOperation operation = new JavaOperationImpl(); - operation.setName(name); - - // Set outputType to null for void - XMLType xmlReturnType = new XMLType(new QName(ns, "return"), null); - DataType<XMLType> returnDataType = - returnType == void.class ? null : new DataTypeImpl<XMLType>(UNKNOWN_DATABINDING, returnType, method - .getGenericReturnType(), xmlReturnType); - - - // Handle Input Types - List<DataType> paramDataTypes = new ArrayList<DataType>(parameterTypes.length); - List<Type> genericHolderTypes = new ArrayList<Type>(); - List<Class<?>> physicalHolderTypes = new ArrayList<Class<?>>(); - Type[] genericParamTypes = method.getGenericParameterTypes(); - for (int i = 0; i < parameterTypes.length; i++) { - Class<?> paramType = parameterTypes[i]; - XMLType xmlParamType = new XMLType(new QName(ns, "arg" + i), null); - - DataTypeImpl<XMLType> xmlDataType = new DataTypeImpl<XMLType>( - UNKNOWN_DATABINDING, paramType, genericParamTypes[i],xmlParamType); - ParameterMode mode = ParameterMode.IN; - // Holder pattern. Physical types of Holder<T> classes are updated to <T> to aid in transformations. - if ( Holder.class == paramType) { - hasHolders = true; - genericHolderTypes.add(genericParamTypes[i]); - Type firstActual = getFirstActualType( genericParamTypes[ i ] ); - if ( firstActual != null ) { - physicalHolderTypes.add((Class<?>)firstActual); - xmlDataType.setPhysical( (Class<?>)firstActual ); - mode = ParameterMode.INOUT; - } else { - physicalHolderTypes.add(xmlDataType.getPhysical()); - } - } - paramDataTypes.add( xmlDataType); - operation.getParameterModes().add(mode); - } - - - // Get Output Types - List<DataType> outputDataTypes = new ArrayList<DataType>(allOutputTypes.length); - Type genericReturnType = method.getGenericReturnType(); - - for ( int i=0; i <= genericHolderTypes.size(); i++ ) { - Class<?> paramType = allOutputTypes[i]; - XMLType xmlOutputType = new XMLType(new QName(ns, "out" + i), null); - - if ( i == 0 ) { - outputDataTypes.add(returnDataType); - } else { - DataTypeImpl<XMLType> xmlDataType = xmlDataType = new DataTypeImpl<XMLType>( - UNKNOWN_DATABINDING, physicalHolderTypes.get(i-1), genericHolderTypes.get(i-1), xmlOutputType); - outputDataTypes.add(xmlDataType); - } - - } - - // Fault types - List<DataType> faultDataTypes = new ArrayList<DataType>(faultTypes.length); - Type[] genericFaultTypes = method.getGenericExceptionTypes(); - if( method.isAnnotationPresent(AsyncFault.class) ) { - genericFaultTypes = readAsyncGenericFaultTypes( method ); - } // end if - for (int i = 0; i < faultTypes.length; i++) { - Class<?> faultType = faultTypes[i]; - // Only add checked exceptions - // JAXWS Specification v2.1 section 3.7 says RemoteException should not be mapped - if (Exception.class.isAssignableFrom(faultType) && (!RuntimeException.class.isAssignableFrom(faultType)) - && (!RemoteException.class.isAssignableFrom(faultType))) { - XMLType xmlFaultType = new XMLType(new QName(ns, faultType.getSimpleName()), null); - DataType<XMLType> faultDataType = - new DataTypeImpl<XMLType>(UNKNOWN_DATABINDING, faultType, genericFaultTypes[i], xmlFaultType); - faultDataTypes.add(new DataTypeImpl<DataType>(UNKNOWN_DATABINDING, faultType, genericFaultTypes[i], - faultDataType)); - } - } - - DataType<List<DataType>> inputType = - new DataTypeImpl<List<DataType>>(IDL_INPUT, Object[].class, paramDataTypes); - DataType<List<DataType>> outputType = - new DataTypeImpl<List<DataType>>(IDL_OUTPUT, Object[].class, outputDataTypes); - - operation.setOutputType(outputType); - - operation.setInputType(inputType); - operation.setFaultTypes(faultDataTypes); - operation.setNonBlocking(nonBlocking); - operation.setJavaMethod(method); - operation.setHasHolders(hasHolders); - operations.add(operation); - } - return operations; - } - - - private Class<?>[] getOutputTypes(Class<?> returnType, Class<?>[] parameterTypes) { - Class<?>[] returnTypes = new Class<?>[parameterTypes.length + 1]; - returnTypes[0] = returnType; - int idx = 1; - for ( Class<?> clazz : parameterTypes ) { - if ( Holder.class == clazz ) - returnTypes[idx++] = clazz; - } - - return returnTypes; - } - - - - /** - * Reads the fault types declared in an @AsyncFault annotation on an async server method - * @param method - the Method - * @return - an array of fault/exception classes - */ - private Class<?>[] readAsyncFaultTypes( Method method ) { - AsyncFault theFaults = method.getAnnotation(AsyncFault.class); - if ( theFaults == null ) return null; - return theFaults.value(); - } // end method readAsyncFaultTypes - - /** - * Reads the generic fault types declared in an @AsyncFault annotation on an async server method - * @param method - the Method - * @return - an array of fault/exception classes - */ - private Type[] readAsyncGenericFaultTypes( Method method ) { - AsyncFault theFaults = method.getAnnotation(AsyncFault.class); - if ( theFaults == null ) return null; - return theFaults.value(); - } // end method readAsyncFaultTypes - - private boolean jaxwsAsyncMethod(Method method) { - if (method.getName().endsWith("Async")) { - if (method.getReturnType().isAssignableFrom(Future.class)) { - if (method.getParameterTypes().length > 0) { - if (method.getParameterTypes()[method.getParameterTypes().length-1].isAssignableFrom(AsyncHandler.class)) { - return true; - } - } - } - if (method.getReturnType().isAssignableFrom(Response.class)) { - return true; - } - } - return false; - } - - - /** - * Given a Class<T>, returns T, otherwise null. - * @param testClass - * @return - */ - protected static Type getFirstActualType(Type genericType) { - if (genericType instanceof ParameterizedType) { - ParameterizedType pType = (ParameterizedType)genericType; - Type[] actualTypes = pType.getActualTypeArguments(); - if ((actualTypes != null) && (actualTypes.length > 0)) { - return actualTypes[0]; - } - } - return null; - } - -} diff --git a/sca-java-2.x/branches/2.0-Beta2/modules/interface-java/src/main/java/org/apache/tuscany/sca/interfacedef/java/impl/JavaInterfaceUtil.java b/sca-java-2.x/branches/2.0-Beta2/modules/interface-java/src/main/java/org/apache/tuscany/sca/interfacedef/java/impl/JavaInterfaceUtil.java deleted file mode 100644 index 352cffeef2..0000000000 --- a/sca-java-2.x/branches/2.0-Beta2/modules/interface-java/src/main/java/org/apache/tuscany/sca/interfacedef/java/impl/JavaInterfaceUtil.java +++ /dev/null @@ -1,223 +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.interfacedef.java.impl; - -import java.lang.reflect.Method; -import java.lang.reflect.Type; -import java.util.ArrayList; -import java.util.Collection; -import java.util.List; - -import org.apache.tuscany.sca.interfacedef.DataType; -import org.apache.tuscany.sca.interfacedef.Interface; -import org.apache.tuscany.sca.interfacedef.Operation; -import org.apache.tuscany.sca.interfacedef.java.JavaInterface; -import org.apache.tuscany.sca.interfacedef.java.JavaOperation; - -/** - * Contains methods for mapping between an operation in a - * {@link org.apache.tuscany.spi.model.ServiceContract} and a method defined by - * a Java interface - * - * @version $Rev$ $Date$ - * @tuscany.spi.extension.asclient - */ -public final class JavaInterfaceUtil { - - private JavaInterfaceUtil() { - } - - /** - * Return the method on the implementation class that matches the operation. - * - * @param implClass the implementation class or interface - * @param operation the operation to match - * @return the method described by the operation - * @throws NoSuchMethodException if no such method exists - * @Deprecated - */ - public static Method findMethod(Class<?> implClass, Operation operation) throws NoSuchMethodException { - String name = operation.getName(); - if (operation instanceof JavaOperation) { - if( ((JavaOperation)operation).isAsyncServer() ) { - // In this case, the operation is a mapped async server style method and needs special handling - return findAsyncServerMethod( implClass, (JavaOperation)operation ); - } else { - name = ((JavaOperation)operation).getJavaMethod().getName(); - } // end if - } - Interface interface1 = operation.getInterface(); - int numParams = operation.getInputType().getLogical().size(); - if (interface1 != null && interface1.isRemotable()) { - List<Method> matchingMethods = new ArrayList<Method>(); - for (Method m : implClass.getMethods()) { - if (m.getName().equals(name) && m.getParameterTypes().length == numParams) { - matchingMethods.add(m); - } - } - - // TUSCANY-2180 If there is only one method then we just match on the name - // (this is the same as the existing behaviour) - if (matchingMethods.size() == 1) { - return matchingMethods.get(0); - } - if (matchingMethods.size() > 1) { - // TUSCANY-2180 We need to check the parameter types too - Class<?>[] paramTypes = getPhysicalTypes(operation); - return implClass.getMethod(name, paramTypes); - } - - // No matching method found - throw new NoSuchMethodException("No matching method for operation " + operation.getName() - + " is found on " - + implClass); - } - Class<?>[] paramTypes = getPhysicalTypes(operation); - return implClass.getMethod(name, paramTypes); - } - - /** - * Return the method on the implementation class that matches the async server version of the operation. - * - * @param implClass the implementation class or interface - * @param operation the operation to match - this is the sync equivalent of an async server operation - * @return the method described by the operation - * @throws NoSuchMethodException if no such method exists - */ - public static Method findAsyncServerMethod(Class<?> implClass, JavaOperation operation) throws NoSuchMethodException { - String name = operation.getJavaMethod().getName(); - List<Operation> actualOps = (List<Operation>) operation.getInterface().getAttributes().get("ASYNC-SERVER-OPERATIONS"); - Operation matchingOp = null; - for( Operation op: actualOps ) { - if( op.getName().equals(name) ) { - matchingOp = op; - break; - } - } // end for - if( matchingOp == null ) throw new NoSuchMethodException("No matching async method for operation " + operation.getName()); - - int numParams = matchingOp.getInputType().getLogical().size(); - - List<Method> matchingMethods = new ArrayList<Method>(); - for (Method m : implClass.getMethods()) { - if (m.getName().equals(name) && m.getParameterTypes().length == (numParams) ) { - matchingMethods.add(m); - } - } - - if (matchingMethods.size() == 1) { - return matchingMethods.get(0); - } - if (matchingMethods.size() > 1) { - Class<?>[] paramTypes = getPhysicalTypes(matchingOp); - return implClass.getMethod(name, paramTypes); - } - - // No matching method found - throw new NoSuchMethodException("No matching method for operation " + operation.getName() - + " is found on " + implClass); - - } // end method findAsyncServerMethod - - /** - * @Deprecated - */ - private static Class<?>[] getPhysicalTypes(Operation operation) { - DataType<List<DataType>> inputType = operation.getInputType(); - if (inputType == null) { - return new Class<?>[] {}; - } - List<DataType> types = inputType.getLogical(); - Class<?>[] javaTypes = new Class<?>[types.size()]; - for (int i = 0; i < javaTypes.length; i++) { - Type physical = types.get(i).getPhysical(); - if (physical instanceof Class<?>) { - javaTypes[i] = (Class<?>)physical; - } else { - throw new UnsupportedOperationException(); - } - } - return javaTypes; - } - - /** - * Searches a collection of operations for a match against the given method - * - * @param method the method to match - * @param operations the operations to match against - * @return a matching operation or null - * @Deprecated - */ - public static Operation findOperation(Method method, Collection<Operation> operations) { - for (Operation operation : operations) { - if (match(operation, method)) { - return operation; - } - } - return null; - } - - /** - * Determines if the given operation matches the given method - * - * @return true if the operation matches, false if does not - */ - private static boolean match(Operation operation, Method method) { - Class<?>[] params = method.getParameterTypes(); - DataType<List<DataType>> inputType = operation.getInputType(); - List<DataType> types = inputType.getLogical(); - boolean found = true; - if (types.size() == params.length && method.getName().equals(operation.getName())) { - for (int i = 0; i < params.length; i++) { - Class<?> clazz = params[i]; - if (!clazz.equals(operation.getInputType().getLogical().get(i).getPhysical())) { - found = false; - } - } - } else { - found = false; - } - return found; - - } - - private static String getPackageName(Class<?> cls) { - String name = cls.getName(); - int index = name.lastIndexOf('.'); - return index == -1 ? "" : name.substring(0, index); - } - - public static String getNamespace(Class<?> cls) { - String packageName = getPackageName(cls); - if ("".equals(packageName)) { - return ""; - } - StringBuffer ns = new StringBuffer("http://"); - String[] names = packageName.split("\\."); - for (int i = names.length - 1; i >= 0; i--) { - ns.append(names[i]); - if (i != 0) { - ns.append('.'); - } - } - ns.append('/'); - return ns.toString(); - } - -} diff --git a/sca-java-2.x/branches/2.0-Beta2/modules/interface-java/src/main/java/org/apache/tuscany/sca/interfacedef/java/impl/JavaOperationImpl.java b/sca-java-2.x/branches/2.0-Beta2/modules/interface-java/src/main/java/org/apache/tuscany/sca/interfacedef/java/impl/JavaOperationImpl.java deleted file mode 100644 index 7169cc164d..0000000000 --- a/sca-java-2.x/branches/2.0-Beta2/modules/interface-java/src/main/java/org/apache/tuscany/sca/interfacedef/java/impl/JavaOperationImpl.java +++ /dev/null @@ -1,100 +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.interfacedef.java.impl; - -import java.lang.reflect.Method; - -import org.apache.tuscany.sca.interfacedef.impl.OperationImpl; -import org.apache.tuscany.sca.interfacedef.java.JavaOperation; - -/** - * Represents a Java operation. - * - * @version $Rev$ $Date$ - */ -public class JavaOperationImpl extends OperationImpl implements JavaOperation { - - private Method method; - private String action; - private boolean isAsyncServer = false; - - public Method getJavaMethod() { - return method; - } - - public void setJavaMethod(Method method) { - this.method = method; - } - - public String getAction() { - return action; - } - - public void setAction(String action) { - this.action = action; - } - - @Override - public int hashCode() { - final int prime = 31; - int result = super.hashCode(); - result = prime * result + ((method == null) ? 0 : method.hashCode()); - return result; - } - - @Override - public boolean equals(Object obj) { - if (this == obj) - return true; - if (!super.equals(obj)) - return false; - if (getClass() != obj.getClass()) - return false; - final JavaOperationImpl other = (JavaOperationImpl)obj; - if (method == null) { - if (other.method != null) - return false; - } else if (!method.equals(other.method)) - return false; - return true; - } - - /** - * Sets whether this operation has async server style - * @param isAsync - "true" marks this operation as async server style - */ - public void setAsyncServer( boolean isAsync ) { - isAsyncServer = isAsync; - } - - /** - * Indicates whether this operation is async server style - * @return - true if the operation is async server style - */ - public boolean isAsyncServer() { - return isAsyncServer; - } - - @Override - public String toString() { - return method == null ? "null" : method.toGenericString(); - } - -} diff --git a/sca-java-2.x/branches/2.0-Beta2/modules/interface-java/src/main/java/org/apache/tuscany/sca/interfacedef/java/impl/PolicyJavaInterfaceVisitor.java b/sca-java-2.x/branches/2.0-Beta2/modules/interface-java/src/main/java/org/apache/tuscany/sca/interfacedef/java/impl/PolicyJavaInterfaceVisitor.java deleted file mode 100644 index 1c0333f833..0000000000 --- a/sca-java-2.x/branches/2.0-Beta2/modules/interface-java/src/main/java/org/apache/tuscany/sca/interfacedef/java/impl/PolicyJavaInterfaceVisitor.java +++ /dev/null @@ -1,278 +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.interfacedef.java.impl; - -import java.lang.annotation.Annotation; -import java.lang.reflect.Method; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.HashSet; -import java.util.List; -import java.util.Set; - -import javax.jws.WebParam; -import javax.jws.WebResult; -import javax.jws.soap.SOAPBinding; -import javax.xml.namespace.QName; - -import org.apache.tuscany.sca.assembly.xml.Constants; -import org.apache.tuscany.sca.core.ExtensionPointRegistry; -import org.apache.tuscany.sca.core.FactoryExtensionPoint; -import org.apache.tuscany.sca.interfacedef.InvalidInterfaceException; -import org.apache.tuscany.sca.interfacedef.Operation; -import org.apache.tuscany.sca.interfacedef.java.JavaInterface; -import org.apache.tuscany.sca.interfacedef.java.JavaOperation; -import org.apache.tuscany.sca.interfacedef.java.introspect.JavaInterfaceVisitor; -import org.apache.tuscany.sca.policy.Intent; -import org.apache.tuscany.sca.policy.PolicyFactory; -import org.apache.tuscany.sca.policy.PolicySet; -import org.apache.tuscany.sca.policy.PolicySubject; -import org.oasisopen.sca.annotation.PolicySets; -import org.oasisopen.sca.annotation.Qualifier; -import org.oasisopen.sca.annotation.Requires; - -/** - * Processes an {@link org.oasisopen.sca.annotation.Requires} annotation - * - * @version $Rev$ $Date$ - */ -public class PolicyJavaInterfaceVisitor implements JavaInterfaceVisitor { - private PolicyFactory policyFactory; - - public PolicyJavaInterfaceVisitor(ExtensionPointRegistry registry) { - super(); - this.policyFactory = registry.getExtensionPoint(FactoryExtensionPoint.class).getFactory(PolicyFactory.class); - } - - private QName getQName(String intentName) { - QName qname; - if (intentName.startsWith("{")) { - int i = intentName.indexOf('}'); - if (i != -1) { - qname = new QName(intentName.substring(1, i), intentName.substring(i + 1)); - } else { - qname = new QName("", intentName); - } - } else { - qname = new QName("", intentName); - } - return qname; - } - - /** - * Read policy intents on the given interface or class - * @param clazz - * @param requiredIntents - */ - private void readIntentsAndPolicySets(Class<?> clazz, PolicySubject subject) { - Requires intentAnnotation = clazz.getAnnotation(Requires.class); - if (intentAnnotation != null) { - String[] intentNames = intentAnnotation.value(); - if (intentNames.length != 0) { - for (String intentName : intentNames) { - - // Add each intent to the list - Intent intent = policyFactory.createIntent(); - intent.setName(getQName(intentName)); - subject.getRequiredIntents().add(intent); - } - } - } - - readSpecificIntents(clazz.getAnnotations(), subject.getRequiredIntents()); - - PolicySets policySetAnnotation = clazz.getAnnotation(PolicySets.class); - if (policySetAnnotation != null) { - String[] policySetNames = policySetAnnotation.value(); - if (policySetNames.length != 0) { - for (String policySetName : policySetNames) { - - // Add each intent to the list - PolicySet policySet = policyFactory.createPolicySet(); - policySet.setName(getQName(policySetName)); - subject.getPolicySets().add(policySet); - } - } - } - - if ( clazz.isAnnotationPresent(SOAPBinding.class) ) { - // add soap intent - Intent intent = policyFactory.createIntent(); - intent.setName(Constants.SOAP_INTENT); - subject.getRequiredIntents().add(intent); - } - - - } - - private void readIntents(Requires intentAnnotation, List<Intent> requiredIntents) { - //Requires intentAnnotation = method.getAnnotation(Requires.class); - if (intentAnnotation != null) { - String[] intentNames = intentAnnotation.value(); - if (intentNames.length != 0) { - //Operation operation = assemblyFactory.createOperation(); - //operation.setName(method.getName()); - //operation.setUnresolved(true); - for (String intentName : intentNames) { - - // Add each intent to the list, associated with the - // operation corresponding to the annotated method - Intent intent = policyFactory.createIntent(); - intent.setName(getQName(intentName)); - //intent.getOperations().add(operation); - requiredIntents.add(intent); - } - } - } - } - - private void readPolicySets(PolicySets policySetAnnotation, List<PolicySet> policySets) { - if (policySetAnnotation != null) { - String[] policySetNames = policySetAnnotation.value(); - if (policySetNames.length != 0) { - //Operation operation = assemblyFactory.createOperation(); - //operation.setName(method.getName()); - //operation.setUnresolved(true); - for (String policySetName : policySetNames) { - // Add each intent to the list, associated with the - // operation corresponding to the annotated method - PolicySet policySet = policyFactory.createPolicySet(); - policySet.setName(getQName(policySetName)); - //intent.getOperations().add(operation); - policySets.add(policySet); - } - } - } - } - - public void readWebServicesAnnotations(Method m, Class<?> clazz, List<Intent> requiredIntents) { - - WebResult webResultAnnotation = m.getAnnotation(WebResult.class); - if (webResultAnnotation != null) { - if (webResultAnnotation.header()) { - // Add SOAP intent - Intent intent = policyFactory.createIntent(); - intent.setName(Constants.SOAP_INTENT); - requiredIntents.add(intent); - return; - } - } - - Annotation[][] parameterAnnotations = m.getParameterAnnotations(); - for ( int i=0; i < parameterAnnotations.length; i++ ) { - for ( int j=0; j < parameterAnnotations[i].length; j++) { - if ( parameterAnnotations[i][j] instanceof WebParam ) { - WebParam webParam = (WebParam)parameterAnnotations[i][j]; - if ( webParam.header() ) { - // Add SOAP intent - Intent intent = policyFactory.createIntent(); - intent.setName(Constants.SOAP_INTENT); - requiredIntents.add(intent); - return; - } - } - } - } - - } - public void visitInterface(JavaInterface javaInterface) throws InvalidInterfaceException { - - if (javaInterface.getJavaClass() != null) { - readIntentsAndPolicySets(javaInterface.getJavaClass(), javaInterface); - - // Read intents on the service interface methods - List<Operation> operations = javaInterface.getOperations(); - for (Operation op : operations) { - JavaOperation operation = (JavaOperation)op; - Method method = operation.getJavaMethod(); - - readIntents(method.getAnnotation(Requires.class), op.getRequiredIntents()); - readSpecificIntents(method.getAnnotations(), op.getRequiredIntents()); - readPolicySets(method.getAnnotation(PolicySets.class), op.getPolicySets()); - readWebServicesAnnotations(method, javaInterface.getJavaClass(), javaInterface.getRequiredIntents()); - inherit(javaInterface, op); - } - } - - - - - } - - private void inherit(JavaInterface javaInterface, Operation op) { - List<Intent> interfaceIntents = new ArrayList<Intent>(javaInterface.getRequiredIntents()); - for ( Intent intent : javaInterface.getRequiredIntents() ) { - - for ( Intent operationIntent : op.getRequiredIntents() ) { - if ( intent.getExcludedIntents().contains(operationIntent) || - operationIntent.getExcludedIntents().contains(intent) ) { - interfaceIntents.remove(intent); - continue; - } - } - } - op.getRequiredIntents().addAll(interfaceIntents); - - op.getPolicySets().addAll(javaInterface.getPolicySets()); - } - - private void readSpecificIntents(Annotation[] annotations, List<Intent> requiredIntents) { - for (Annotation a : annotations) { - org.oasisopen.sca.annotation.Intent intentAnnotation = - a.annotationType().getAnnotation(org.oasisopen.sca.annotation.Intent.class); - if (intentAnnotation == null) { - continue; - } - QName qname = null; - String value = intentAnnotation.value(); - if (!value.equals("")) { - qname = getQName(value); - } else { - qname = new QName(intentAnnotation.targetNamespace(), intentAnnotation.localPart()); - } - Set<String> qualifiers = new HashSet<String>(); - for(Method m: a.annotationType().getMethods()) { - Qualifier qualifier = m.getAnnotation(Qualifier.class); - if (qualifier != null && m.getReturnType() == String[].class) { - try { - qualifiers.addAll(Arrays.asList((String[]) m.invoke(a))); - } catch (Throwable e) { - e.printStackTrace(); - } - } - } - qualifiers.remove(""); - if (qualifiers.isEmpty()) { - Intent intent = policyFactory.createIntent(); - intent.setUnresolved(true); - intent.setName(qname); - requiredIntents.add(intent); - } else { - for (String q : qualifiers) { - Intent intent = policyFactory.createIntent(); - intent.setUnresolved(true); - qname = new QName(qname.getNamespaceURI(), qname.getLocalPart() + "." + q); - intent.setName(qname); - requiredIntents.add(intent); - } - } - } - } - -} diff --git a/sca-java-2.x/branches/2.0-Beta2/modules/interface-java/src/main/java/org/apache/tuscany/sca/interfacedef/java/introspect/JavaInterfaceVisitor.java b/sca-java-2.x/branches/2.0-Beta2/modules/interface-java/src/main/java/org/apache/tuscany/sca/interfacedef/java/introspect/JavaInterfaceVisitor.java deleted file mode 100644 index 3bc03a528e..0000000000 --- a/sca-java-2.x/branches/2.0-Beta2/modules/interface-java/src/main/java/org/apache/tuscany/sca/interfacedef/java/introspect/JavaInterfaceVisitor.java +++ /dev/null @@ -1,39 +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.interfacedef.java.introspect; - -import org.apache.tuscany.sca.interfacedef.InvalidInterfaceException; -import org.apache.tuscany.sca.interfacedef.java.JavaInterface; - -/** - * Implementations introspect metadata on a Java interface, populating the - * corresponding {@link JavaInterface} - * - * @version $Rev$ $Date$ - */ -public interface JavaInterfaceVisitor { - - /** - * Visit a java interface - * @param javaInterface - * @throws InvalidInterfaceException - */ - void visitInterface(JavaInterface javaInterface) throws InvalidInterfaceException; - -} diff --git a/sca-java-2.x/branches/2.0-Beta2/modules/interface-java/src/main/java/org/apache/tuscany/sca/interfacedef/java/package.html b/sca-java-2.x/branches/2.0-Beta2/modules/interface-java/src/main/java/org/apache/tuscany/sca/interfacedef/java/package.html deleted file mode 100644 index 828c112479..0000000000 --- a/sca-java-2.x/branches/2.0-Beta2/modules/interface-java/src/main/java/org/apache/tuscany/sca/interfacedef/java/package.html +++ /dev/null @@ -1,30 +0,0 @@ -<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN"> -<!-- - * 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. ---> -<html> -<head> -</head> -<body> - -The Tuscany Java Interface Extension - -@tuscany.spi.extension - -</body> -</html> diff --git a/sca-java-2.x/branches/2.0-Beta2/modules/interface-java/src/main/java/org/apache/tuscany/sca/interfacedef/java/xml/JavaConstants.java b/sca-java-2.x/branches/2.0-Beta2/modules/interface-java/src/main/java/org/apache/tuscany/sca/interfacedef/java/xml/JavaConstants.java deleted file mode 100644 index 2db916e2d3..0000000000 --- a/sca-java-2.x/branches/2.0-Beta2/modules/interface-java/src/main/java/org/apache/tuscany/sca/interfacedef/java/xml/JavaConstants.java +++ /dev/null @@ -1,36 +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.interfacedef.java.xml; - -import javax.xml.namespace.QName; - -/** - * Interface Java XML Constants. - * - * @version $Rev$ $Date$ - */ -public interface JavaConstants { - String SCA11_NS = "http://docs.oasis-open.org/ns/opencsa/sca/200912"; - String INTERFACE_JAVA = "interface.java"; - QName INTERFACE_JAVA_QNAME = new QName(SCA11_NS, "interface.java"); - String INTERFACE = "interface"; - String CALLBACK_INTERFACE = "callbackInterface"; - String REMOTABLE = "remotable"; - -} diff --git a/sca-java-2.x/branches/2.0-Beta2/modules/interface-java/src/main/java/org/apache/tuscany/sca/interfacedef/java/xml/JavaInterfaceProcessor.java b/sca-java-2.x/branches/2.0-Beta2/modules/interface-java/src/main/java/org/apache/tuscany/sca/interfacedef/java/xml/JavaInterfaceProcessor.java deleted file mode 100644 index 9e013746ce..0000000000 --- a/sca-java-2.x/branches/2.0-Beta2/modules/interface-java/src/main/java/org/apache/tuscany/sca/interfacedef/java/xml/JavaInterfaceProcessor.java +++ /dev/null @@ -1,445 +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.interfacedef.java.xml; - -import static javax.xml.stream.XMLStreamConstants.END_ELEMENT; - -import java.lang.annotation.Annotation; -import java.lang.reflect.Field; -import java.lang.reflect.Method; -import java.util.Arrays; -import java.util.List; - -import javax.xml.namespace.QName; -import javax.xml.stream.XMLStreamException; -import javax.xml.stream.XMLStreamReader; -import javax.xml.stream.XMLStreamWriter; -import javax.xml.ws.WebServiceClient; - -import org.apache.tuscany.sca.assembly.xml.PolicySubjectProcessor; -import org.apache.tuscany.sca.contribution.processor.ContributionReadException; -import org.apache.tuscany.sca.contribution.processor.ContributionResolveException; -import org.apache.tuscany.sca.contribution.processor.ContributionWriteException; -import org.apache.tuscany.sca.contribution.processor.ProcessorContext; -import org.apache.tuscany.sca.contribution.processor.StAXArtifactProcessor; -import org.apache.tuscany.sca.contribution.resolver.ClassReference; -import org.apache.tuscany.sca.contribution.resolver.ModelResolver; -import org.apache.tuscany.sca.core.ExtensionPointRegistry; -import org.apache.tuscany.sca.core.FactoryExtensionPoint; -import org.apache.tuscany.sca.core.UtilityExtensionPoint; -import org.apache.tuscany.sca.interfacedef.Compatibility; -import org.apache.tuscany.sca.interfacedef.IncompatibleInterfaceContractException; -import org.apache.tuscany.sca.interfacedef.InterfaceContractMapper; -import org.apache.tuscany.sca.interfacedef.InvalidInterfaceException; -import org.apache.tuscany.sca.interfacedef.java.JavaInterface; -import org.apache.tuscany.sca.interfacedef.java.JavaInterfaceContract; -import org.apache.tuscany.sca.interfacedef.java.JavaInterfaceFactory; -import org.apache.tuscany.sca.interfacedef.wsdl.WSDLFactory; -import org.apache.tuscany.sca.interfacedef.wsdl.WSDLInterface; -import org.apache.tuscany.sca.interfacedef.wsdl.WSDLInterfaceContract; -import org.apache.tuscany.sca.monitor.Monitor; -import org.apache.tuscany.sca.monitor.Problem; -import org.apache.tuscany.sca.monitor.Problem.Severity; -import org.apache.tuscany.sca.policy.PolicyFactory; -import org.oasisopen.sca.annotation.AllowsPassByReference; -import org.oasisopen.sca.annotation.Callback; -import org.oasisopen.sca.annotation.ComponentName; -import org.oasisopen.sca.annotation.Constructor; -import org.oasisopen.sca.annotation.Context; -import org.oasisopen.sca.annotation.Destroy; -import org.oasisopen.sca.annotation.EagerInit; -import org.oasisopen.sca.annotation.Init; -import org.oasisopen.sca.annotation.Intent; -import org.oasisopen.sca.annotation.Property; -import org.oasisopen.sca.annotation.Qualifier; -import org.oasisopen.sca.annotation.Reference; -import org.oasisopen.sca.annotation.Scope; -import org.oasisopen.sca.annotation.Service; - -/** - * - * @version $Rev$ $Date$ - */ -public class JavaInterfaceProcessor implements StAXArtifactProcessor<JavaInterfaceContract>, JavaConstants { - private static final String SCA11_NS = "http://docs.oasis-open.org/ns/opencsa/sca/200912"; - - private JavaInterfaceFactory javaFactory; - private ExtensionPointRegistry extensionPoints; - private PolicyFactory policyFactory; - private PolicySubjectProcessor policyProcessor; - private WSDLFactory wsdlFactory; - private StAXArtifactProcessor<Object> extensionProcessor; - private transient InterfaceContractMapper interfaceContractMapper; - - public JavaInterfaceProcessor(ExtensionPointRegistry extensionPoints, StAXArtifactProcessor<?> staxProcessor) { - this.extensionPoints = extensionPoints; - FactoryExtensionPoint modelFactories = extensionPoints.getExtensionPoint(FactoryExtensionPoint.class); - this.policyFactory = modelFactories.getFactory(PolicyFactory.class); - this.policyProcessor = new PolicySubjectProcessor(policyFactory); - this.javaFactory = modelFactories.getFactory(JavaInterfaceFactory.class); - this.wsdlFactory = modelFactories.getFactory(WSDLFactory.class); - this.extensionProcessor = (StAXArtifactProcessor<Object>)staxProcessor; - UtilityExtensionPoint utilities = extensionPoints.getExtensionPoint(UtilityExtensionPoint.class); - this.interfaceContractMapper = utilities.getUtility(InterfaceContractMapper.class); - } - - /** - * Report a exception. - * - * @param problems - * @param message - * @param model - */ - private void error(Monitor monitor, String message, Object model, Exception ex) { - if (monitor != null) { - Problem problem = - monitor.createProblem(this.getClass().getName(), - "interface-javaxml-validation-messages", - Severity.ERROR, - model, - message, - ex); - monitor.problem(problem); - } - } - - /** - * Report a error. - * - * @param problems - * @param message - * @param model - */ - private void error(Monitor monitor, String message, Object model, Object... messageParameters) { - if (monitor != null) { - Problem problem = - monitor.createProblem(this.getClass().getName(), - "interface-javaxml-validation-messages", - Severity.ERROR, - model, - message, - (Object[])messageParameters); - monitor.problem(problem); - } - } - - private JavaInterface createJavaInterface(String interfaceName) { - JavaInterface javaInterface = javaFactory.createJavaInterface(); - javaInterface.setUnresolved(true); - javaInterface.setName(interfaceName); - return javaInterface; - } - - public JavaInterfaceContract read(XMLStreamReader reader, ProcessorContext context) throws ContributionReadException, XMLStreamException { - - // Read an <interface.java> - JavaInterfaceContract javaInterfaceContract = javaFactory.createJavaInterfaceContract(); - String interfaceName = reader.getAttributeValue(null, INTERFACE); - if (interfaceName != null) { - JavaInterface javaInterface = createJavaInterface(interfaceName); - javaInterfaceContract.setInterface(javaInterface); - } - - String callbackInterfaceName = reader.getAttributeValue(null, CALLBACK_INTERFACE); - if (callbackInterfaceName != null) { - JavaInterface javaCallbackInterface = createJavaInterface(callbackInterfaceName); - javaInterfaceContract.setCallbackInterface(javaCallbackInterface); - } - - String remotable = reader.getAttributeValue(null, REMOTABLE); - if (remotable != null) { - javaInterfaceContract.getInterface().setRemotable(Boolean.parseBoolean(remotable)); - } - - // Read intents and policy sets - policyProcessor.readPolicies(javaInterfaceContract.getInterface(), reader); - - // Skip to end element - while (reader.hasNext()) { - if (reader.next() == END_ELEMENT && INTERFACE_JAVA_QNAME.equals(reader.getName())) { - break; - } - } - return javaInterfaceContract; - } - - public void write(JavaInterfaceContract javaInterfaceContract, XMLStreamWriter writer, ProcessorContext context) throws ContributionWriteException, XMLStreamException { - - // Write an <interface.java> - writer.writeStartElement(SCA11_NS, INTERFACE_JAVA); - JavaInterface javaInterface = (JavaInterface)javaInterfaceContract.getInterface(); - - if (javaInterface != null && javaInterface.getName() != null) { - writer.writeAttribute(INTERFACE, javaInterface.getName()); - } - - if(javaInterface != null && javaInterface.isRemotableSet()) { - writer.writeAttribute(REMOTABLE, String.valueOf(javaInterface.isRemotable())); - } - - JavaInterface javaCallbackInterface = (JavaInterface)javaInterfaceContract.getCallbackInterface(); - if (javaCallbackInterface != null && javaCallbackInterface.getName() != null) { - writer.writeAttribute(CALLBACK_INTERFACE, javaCallbackInterface.getName()); - } - - policyProcessor.writePolicyAttributes(javaInterface, writer); - - writer.writeEndElement(); - } - - private JavaInterface resolveJavaInterface(JavaInterface javaInterface, ModelResolver resolver, ProcessorContext context) throws ContributionResolveException { - - if (javaInterface != null && javaInterface.isUnresolved()) { - Monitor monitor = context.getMonitor(); - // Resolve the Java interface - javaInterface = resolver.resolveModel(JavaInterface.class, javaInterface, context); - if (javaInterface.isUnresolved()) { - - // If the Java interface has never been resolved yet, do it now - ClassReference classReference = new ClassReference(javaInterface.getName()); - classReference = resolver.resolveModel(ClassReference.class, classReference, context); - Class<?> javaClass = classReference.getJavaClass(); - if (javaClass == null) { - error(monitor, "ClassNotFoundException", resolver, javaInterface.getName()); - return javaInterface; - //throw new ContributionResolveException(new ClassNotFoundException(javaInterface.getName())); - } - - try { - // Introspect the Java interface and populate the interface and - // operations - javaFactory.createJavaInterface(javaInterface, javaClass); - - // cache the contribution that was used to resolve the Java interface - // in case we need it to reolve a referenced WSDL file - javaInterface.setContributionContainingClass(classReference.getContributionContainingClass()); - - } catch (InvalidInterfaceException e) { - ContributionResolveException ce = new ContributionResolveException("Resolving Java interface " + javaInterface.getName(), e); - //error("ContributionResolveException", javaFactory, ce); - error(monitor, "InvalidInterfaceException", javaFactory, e); - return javaInterface; - //throw ce; - } catch ( Exception e ) { - throw new ContributionResolveException( "Resolving Java interface " + javaInterface.getName(), e ); - } // end try - - // Cache the resolved interface - javaInterface.setUnresolved(false); - resolver.addModel(javaInterface, context); - } - } - return javaInterface; - } - - public void resolve(JavaInterfaceContract javaInterfaceContract, ModelResolver resolver, ProcessorContext context) - throws ContributionResolveException { - try { - Monitor monitor = context.getMonitor(); - // Resolve the interface and callback interface - JavaInterface javaInterface = - resolveJavaInterface((JavaInterface)javaInterfaceContract.getInterface(), resolver, context); - javaInterfaceContract.setInterface(javaInterface); - - JavaInterface javaCallbackInterface = - resolveJavaInterface((JavaInterface)javaInterfaceContract.getCallbackInterface(), resolver, context); - javaInterfaceContract.setCallbackInterface(javaCallbackInterface); - - postJAXWSProcessorResolve(javaInterfaceContract, resolver, context); - - checkForbiddenAnnotations(monitor, javaInterfaceContract); - - } catch (Exception e) { - throw new ContributionResolveException("Resolving Java Interface " + javaInterfaceContract.getInterface() - .toString(), e); - } // end try - } - - private static List<Class<?>> JCA30006_ANNOTATIONS = - Arrays.asList(new Class<?>[] {AllowsPassByReference.class, ComponentName.class, Constructor.class, Context.class, - Destroy.class, EagerInit.class, Init.class, Intent.class, Property.class, Qualifier.class, - Reference.class, Scope.class, Service.class}); - private static List<Class<?>> JCA30007_ANNOTATIONS = - Arrays.asList(new Class<?>[] {AllowsPassByReference.class, Callback.class, ComponentName.class, Constructor.class, - Context.class, Destroy.class, EagerInit.class, Init.class, Intent.class, - Property.class, Qualifier.class, Reference.class, Scope.class, Service.class}); - private static List<Class<?>> JCA30008_ANNOTATIONS = Arrays.asList(new Class<?>[] {Intent.class, Qualifier.class}); - - private void checkForbiddenAnnotations(Monitor monitor, JavaInterfaceContract javaInterfaceContract) { - if (javaInterfaceContract.getInterface() == null) { - return; - } - Class<?> ifc = ((JavaInterface) javaInterfaceContract.getInterface()).getJavaClass(); - if (ifc == null) { - return; - } - for (Annotation a : ifc.getAnnotations()) { - if (ifc.isInterface()) { - if (JCA30006_ANNOTATIONS.contains(a.annotationType())) { - error(monitor, "ForbiddenAnnotationJCA30006", javaInterfaceContract, a.annotationType(), ifc.getName()); - } - } else { - if (JCA30008_ANNOTATIONS.contains(a.annotationType())) { - error(monitor, "ForbiddenAnnotationJCA30008", javaInterfaceContract, a.annotationType(), ifc.getName()); - } - } - - if ( a.annotationType().equals(WebServiceClient.class) ) { - error(monitor, "ForbiddenAnnotationJCA100018", javaInterfaceContract, a.annotationType(), ifc.getName()); - } - - } - for (Method m : ifc.getMethods()) { - for (Annotation a : m.getAnnotations()) { - if (ifc.isInterface()) { - if (JCA30006_ANNOTATIONS.contains(a.annotationType())) { - error(monitor, "ForbiddenAnnotationJCA30006", javaInterfaceContract, a.annotationType(), ifc.getName()); - } - } else { - if (JCA30008_ANNOTATIONS.contains(a.annotationType())) { - error(monitor, "ForbiddenAnnotationJCA30008", javaInterfaceContract, a.annotationType(), ifc.getName()); - } - } - } - } - for (Field f : ifc.getFields()) { - for (Annotation a : f.getAnnotations()) { - if (ifc.isInterface()) { - if (JCA30006_ANNOTATIONS.contains(a.annotationType())) { - error(monitor, "ForbiddenAnnotationJCA30006", javaInterfaceContract, a.annotationType(), ifc.getName()); - } - } else { - if (JCA30008_ANNOTATIONS.contains(a.annotationType())) { - error(monitor, "ForbiddenAnnotationJCA30008", javaInterfaceContract, a.annotationType(), ifc.getName()); - } - } - } - } - - if (javaInterfaceContract.getCallbackInterface() == null) { - return; - } - ifc = ((JavaInterface) javaInterfaceContract.getCallbackInterface()).getJavaClass(); - if (ifc == null) { - return; - } - - for (Annotation a : ifc.getAnnotations()) { - if (ifc.isInterface()) { - if (JCA30007_ANNOTATIONS.contains(a.annotationType())) { - error(monitor, "ForbiddenAnnotationJCA30007", javaInterfaceContract, a.annotationType(), ifc.getName()); - } - } else { - if (JCA30008_ANNOTATIONS.contains(a.annotationType())) { - error(monitor, "ForbiddenAnnotationJCA30008", javaInterfaceContract, a.annotationType(), ifc.getName()); - } - } - } - for (Method m : ifc.getMethods()) { - for (Annotation a : m.getAnnotations()) { - if (ifc.isInterface()) { - if (JCA30007_ANNOTATIONS.contains(a.annotationType())) { - error(monitor, "ForbiddenAnnotationJCA30007", javaInterfaceContract, a.annotationType(), ifc.getName()); - } - } else { - if (JCA30008_ANNOTATIONS.contains(a.annotationType())) { - error(monitor, "ForbiddenAnnotationJCA30008", javaInterfaceContract, a.annotationType(), ifc.getName()); - } - } - } - } - for (Field f : ifc.getFields()) { - for (Annotation a : f.getAnnotations()) { - if (ifc.isInterface()) { - if (JCA30007_ANNOTATIONS.contains(a.annotationType())) { - error(monitor, "ForbiddenAnnotationJCA30007", javaInterfaceContract, a.annotationType(), ifc.getName()); - } - } else { - if (JCA30008_ANNOTATIONS.contains(a.annotationType())) { - error(monitor, "ForbiddenAnnotationJCA30008", javaInterfaceContract, a.annotationType(), ifc.getName()); - } - } - } - } - } - - public QName getArtifactType() { - return INTERFACE_JAVA_QNAME; - } - - public Class<JavaInterfaceContract> getModelType() { - return JavaInterfaceContract.class; - } - - private void postJAXWSProcessorResolve(JavaInterfaceContract javaInterfaceContract, ModelResolver resolver, ProcessorContext context) - throws ContributionResolveException, IncompatibleInterfaceContractException { - - JavaInterface javaInterface = (JavaInterface)javaInterfaceContract.getInterface(); - - // the Java interface may now be marked as unresolved due to a new Java interface - // name retrieved from JAXWS annotations. Resolve it again if it is. - if (javaInterface != null && javaInterface.isUnresolved()){ - javaInterface = resolveJavaInterface(javaInterface, resolver, context); - javaInterfaceContract.setInterface(javaInterface); - } - - JavaInterface javaCallbackInterface = (JavaInterface)javaInterfaceContract.getCallbackInterface(); - // the Java callback interface may now be marked as unresolved due to a new Java interface - // name retrieved from JAXWS annotations. Resolve it again if it is. - if (javaCallbackInterface != null && javaCallbackInterface.isUnresolved()){ - javaCallbackInterface = resolveJavaInterface(javaCallbackInterface, resolver, context); - javaInterfaceContract.setCallbackInterface(javaCallbackInterface); - } - - // the Java interface may be replaced by a WSDL contract picked up from JAXWS annotation - // if so we need to fluff up a WSDL contract and set it to be the normalized contract - // for the Java interface so it's used during contract mapping - if (javaInterface != null && javaInterface.getJAXWSWSDLLocation() != null){ - WSDLInterface wsdlInterface = wsdlFactory.createWSDLInterface(); - wsdlInterface.setUnresolved(true); - wsdlInterface.setRemotable(true); - - WSDLInterfaceContract wsdlInterfaceContract = wsdlFactory.createWSDLInterfaceContract(); - wsdlInterfaceContract.setInterface(wsdlInterface); - wsdlInterfaceContract.setLocation(javaInterface.getJAXWSWSDLLocation()); - javaInterfaceContract.setNormailizedWSDLContract(wsdlInterfaceContract); - - ProcessorContext wsdlContext = new ProcessorContext(javaInterface.getContributionContainingClass(), - context.getMonitor()); - extensionProcessor.resolve(wsdlInterfaceContract, resolver, wsdlContext); - - // check that the Java and WSDL contracts are compatible - interfaceContractMapper.checkCompatibility(wsdlInterfaceContract, - javaInterfaceContract, - Compatibility.SUBSET, - false, - false); - - // copy policy from the WSDL interface to the Java interface - javaInterface.getPolicySets().addAll(wsdlInterface.getPolicySets()); - javaInterface.getRequiredIntents().addAll(wsdlInterface.getRequiredIntents()); - - // TODO - is there anything else to be copied from the user specified WSDL? - - } - - // TODO - how to handle callbacks as the location is stored at the contract level? - } -} diff --git a/sca-java-2.x/branches/2.0-Beta2/modules/interface-java/src/main/resources/META-INF/services/org.apache.tuscany.sca.contribution.processor.StAXArtifactProcessor b/sca-java-2.x/branches/2.0-Beta2/modules/interface-java/src/main/resources/META-INF/services/org.apache.tuscany.sca.contribution.processor.StAXArtifactProcessor deleted file mode 100644 index 2cbda24dd8..0000000000 --- a/sca-java-2.x/branches/2.0-Beta2/modules/interface-java/src/main/resources/META-INF/services/org.apache.tuscany.sca.contribution.processor.StAXArtifactProcessor +++ /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 artifact processor extension -org.apache.tuscany.sca.interfacedef.java.xml.JavaInterfaceProcessor;qname=http://docs.oasis-open.org/ns/opencsa/sca/200912#interface.java,model=org.apache.tuscany.sca.interfacedef.java.JavaInterfaceContract -
diff --git a/sca-java-2.x/branches/2.0-Beta2/modules/interface-java/src/main/resources/META-INF/services/org.apache.tuscany.sca.interfacedef.java.JavaInterfaceFactory b/sca-java-2.x/branches/2.0-Beta2/modules/interface-java/src/main/resources/META-INF/services/org.apache.tuscany.sca.interfacedef.java.JavaInterfaceFactory deleted file mode 100644 index 82972f856a..0000000000 --- a/sca-java-2.x/branches/2.0-Beta2/modules/interface-java/src/main/resources/META-INF/services/org.apache.tuscany.sca.interfacedef.java.JavaInterfaceFactory +++ /dev/null @@ -1,18 +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. - -org.apache.tuscany.sca.interfacedef.java.DefaultJavaInterfaceFactory
diff --git a/sca-java-2.x/branches/2.0-Beta2/modules/interface-java/src/main/resources/META-INF/services/org.apache.tuscany.sca.interfacedef.java.introspect.JavaInterfaceVisitor b/sca-java-2.x/branches/2.0-Beta2/modules/interface-java/src/main/resources/META-INF/services/org.apache.tuscany.sca.interfacedef.java.introspect.JavaInterfaceVisitor deleted file mode 100644 index ef73adb3e6..0000000000 --- a/sca-java-2.x/branches/2.0-Beta2/modules/interface-java/src/main/resources/META-INF/services/org.apache.tuscany.sca.interfacedef.java.introspect.JavaInterfaceVisitor +++ /dev/null @@ -1,18 +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. -org.apache.tuscany.sca.interfacedef.java.impl.PolicyJavaInterfaceVisitor;ranking=1000 -
diff --git a/sca-java-2.x/branches/2.0-Beta2/modules/interface-java/src/main/resources/interface-javaxml-validation-messages.properties b/sca-java-2.x/branches/2.0-Beta2/modules/interface-java/src/main/resources/interface-javaxml-validation-messages.properties deleted file mode 100644 index 329f55e0a7..0000000000 --- a/sca-java-2.x/branches/2.0-Beta2/modules/interface-java/src/main/resources/interface-javaxml-validation-messages.properties +++ /dev/null @@ -1,28 +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. -# -# -ClassNotFoundException = Class Not Found Exception: {0} -ContributionResolveException = ContributionResolveException occurred due to: {0} -InvalidInterfaceException = InvalidInterfaceException due to: {0} -ForbiddenAnnotationJCA30006 = [JCA30006] Forbidden annotation {0} found on service interface in class {1} -ForbiddenAnnotationJCA30007 = [JCA30007] Forbidden annotation {0} found on callback interface in class {1} -ForbiddenAnnotationJCA30008 = [JCA30008] Forbidden annotation {0} found in class {1} -ForbiddenAnnotationJCA100018 = [JCA100018] Forbidden annotation {0} found in class {1} - diff --git a/sca-java-2.x/branches/2.0-Beta2/modules/interface-java/src/test/java/org/apache/tuscany/sca/interfacedef/java/impl/JavaInterfaceUtilDuplicateRemotableTestCase.java b/sca-java-2.x/branches/2.0-Beta2/modules/interface-java/src/test/java/org/apache/tuscany/sca/interfacedef/java/impl/JavaInterfaceUtilDuplicateRemotableTestCase.java deleted file mode 100644 index c70bdcaf47..0000000000 --- a/sca-java-2.x/branches/2.0-Beta2/modules/interface-java/src/test/java/org/apache/tuscany/sca/interfacedef/java/impl/JavaInterfaceUtilDuplicateRemotableTestCase.java +++ /dev/null @@ -1,317 +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.interfacedef.java.impl; - -import static org.junit.Assert.assertEquals; - -import java.lang.reflect.Method; -import java.util.ArrayList; -import java.util.List; - -import org.apache.tuscany.sca.core.DefaultExtensionPointRegistry; -import org.apache.tuscany.sca.core.ExtensionPointRegistry; -import org.apache.tuscany.sca.interfacedef.DataType; -import org.apache.tuscany.sca.interfacedef.Interface; -import org.apache.tuscany.sca.interfacedef.InvalidInterfaceException; -import org.apache.tuscany.sca.interfacedef.Operation; -import org.apache.tuscany.sca.interfacedef.OverloadedOperationException; -import org.apache.tuscany.sca.interfacedef.impl.DataTypeImpl; -import org.apache.tuscany.sca.interfacedef.impl.InterfaceImpl; -import org.apache.tuscany.sca.interfacedef.impl.OperationImpl; -import org.apache.tuscany.sca.interfacedef.java.DefaultJavaInterfaceFactory; -import org.apache.tuscany.sca.interfacedef.java.JavaInterfaceFactory; -import org.junit.Assert; -import org.junit.Test; -import org.oasisopen.sca.annotation.Remotable; - -/** - * This test case will test that a Component that has multiple Remotable interfaces - * that contain methods with the same name will correctly select the right method. - * - * @version $Rev$ $Date$ - */ -public class JavaInterfaceUtilDuplicateRemotableTestCase { - - /** - * Test to get the getTime() method from the LocalTimeService - * - * @throws Exception Test failed - */ - @Test - public void testLocalTimeServiceGetTime() throws Exception { - doTestLocalTimeServiceGetTime(LocalTimeService.class); - } - - /** - * Test to get the getTime() method from the LocalTimeService interface from - * the specified class - * - * @param timeServiceClass The class that implements the LocalTimeService - * @throws Exception Test failed - */ - private void doTestLocalTimeServiceGetTime(Class<?> timeServiceClass) throws Exception { - // Add a getTime() method - Operation operation = newOperation("getTime", LocalTimeService.class); - - Method method = JavaInterfaceUtil.findMethod(timeServiceClass, operation); - assertEquals("getTime", method.getName()); - assertEquals(0, method.getParameterTypes().length); - } - - /** - * Test to get the getTime(String) method from the WorldTimeService - * - * @throws Exception Test failed - */ - @Test - public void testWorldTimeServiceGetTime() throws Exception { - doTestWorldTimeServiceGetTime(WorldTimeService.class); - } - - /** - * Test to get the getTime(String) method from the WorldTimeService interface from - * the specified class - * - * @param timeServiceClass The class that implements the WorldTimeService - * @throws Exception Test failed - */ - private void doTestWorldTimeServiceGetTime(Class<?> timeServiceClass) throws Exception { - // Add a getTime(String) method - Operation operation = newOperation("getTime", WorldTimeService.class, String.class); - - Method method = JavaInterfaceUtil.findMethod(timeServiceClass, operation); - assertEquals("getTime", method.getName()); - assertEquals(1, method.getParameterTypes().length); - assertEquals(String.class, method.getParameterTypes()[0]); - } - - /** - * Test to get the getTime(int) method from the GMTTimeService - * - * @throws Exception Test failed - */ - @Test - public void testGMTTimeServiceGetTime() throws Exception { - doTestGMTTimeServiceGetTime(GMTTimeService.class); - } - - /** - * Test to get the getTime(int) method from the GMTTimeService interface from - * the specified class - * - * @param timeServiceClass The class that implements the WorldTimeService - * @throws Exception Test failed - */ - private void doTestGMTTimeServiceGetTime(Class<?> timeServiceClass) throws Exception { - // Add a getTime(String) method - Operation operation = newOperation("getTime", GMTTimeService.class, Integer.TYPE); - - Method method = JavaInterfaceUtil.findMethod(timeServiceClass, operation); - assertEquals("getTime", method.getName()); - assertEquals(1, method.getParameterTypes().length); - assertEquals(Integer.TYPE, method.getParameterTypes()[0]); - } - - /** - * Test to get the getTime() method from the LocalTimeService on the - * TimeServiceImpl class - * - * @throws Exception Test failed - */ - @Test - public void testLocalTimeServiceGetTimeFromTimeServiceImpl() throws Exception { - doTestLocalTimeServiceGetTime(TimeServiceImpl.class); - } - - /** - * Test to get the getTime(String) method from the WorldTimeService on the - * TimeServiceImpl class - * - * @throws Exception Test failed - */ - @Test - public void testWorldTimeServiceGetTimeFromTimeServiceImpl() throws Exception { - doTestWorldTimeServiceGetTime(TimeServiceImpl.class); - } - - /** - * Test to get the getTime(int) method from the GMTTimeService - * - * @throws Exception Test failed - */ - @Test - public void testGMTTimeServiceGetTimeFromTimeServiceImpl() throws Exception { - doTestGMTTimeServiceGetTime(TimeServiceImpl.class); - } - - /** - * Test case that validates that a @Remotable interface with Overloaded operations - * is detected. - * - * This test case is for TUSCANY-2194 - */ - @Test - public void testDuplicateOpeartionOnRemotableInterface() - { - ExtensionPointRegistry registry = new DefaultExtensionPointRegistry(); - JavaInterfaceFactory javaFactory = new DefaultJavaInterfaceFactory(registry); - JavaInterfaceIntrospectorImpl introspector = new JavaInterfaceIntrospectorImpl(javaFactory); - JavaInterfaceImpl javaInterface = new JavaInterfaceImpl(); - - try { - introspector.introspectInterface(javaInterface, DuplicateMethodOnRemotableInterface.class); - Assert.fail("Should have thrown an exception as @Remotable interface has overloaded methods"); - } catch (OverloadedOperationException ex) { - // As expected - // Make sure that the class and method names are in the exception - String exMsg = ex.toString(); - Assert.assertTrue("Method name missing from exception", exMsg.indexOf("aDuplicateMethod") != -1); - Assert.assertTrue("Class name missing from exception", - exMsg.indexOf(DuplicateMethodOnRemotableInterface.class.getName()) != -1); - } catch (InvalidInterfaceException ex) { - // Should have thrown OverloadedOperationException - Assert.fail("Should have thrown an OverloadedOperationException but threw " + ex); - } - } - - /** - * Creates a new operation with the specified name and parameter types - * - * @param name The name of the operation - * @param operationInterface The interface to which the operation belongs - * @param parameterTypes The types of the parameters for this operation - * @return An operation with the specified name and parameter types - */ - private static Operation newOperation(String name, Class<?> operationInterface, Class<?>... parameterTypes) { - // Create and set the operation name - Operation operation = new OperationImpl(); - operation.setName(name); - - // Make the operation remotable - Interface iface = new InterfaceImpl(); - iface.setRemotable(true); - operation.setInterface(iface); - - // Construct the parameters - List<DataType> types = new ArrayList<DataType>(); - DataType<List<DataType>> inputType = new DataTypeImpl<List<DataType>>(Object[].class, types); - for (Class<?> parameterType : parameterTypes) { - DataType type = new DataTypeImpl<Class>(parameterType, Object.class); - types.add(type); - } - operation.setInputType(inputType); - - // Return the created operation - return operation; - } - - /** - * Sample @Remotable interface that has an overloaded operation which is not - * allowed according to the SCA Assembly Specification. - */ - @Remotable - private interface DuplicateMethodOnRemotableInterface { - void aNonDuplicateMethod(); - void aDuplicateMethod(); - void aDuplicateMethod(String aParam); - } - - - /** - * Sample interface needed for the unit tests - */ - @Remotable - private interface LocalTimeService { - - /** - * Gets the local time - * - * @return The Local Time - */ - String getTime(); - } - - /** - * Sample interface needed for the unit tests - */ - @Remotable - private interface WorldTimeService { - - /** - * Gets the time in the specified TimeZone - * - * @param timeZone A Time Zone - * - * @return The time in the specified TimeZone - */ - String getTime(String timeZone); - } - - /** - * Sample interface needed for the unit tests - */ - @Remotable - private interface GMTTimeService { - - /** - * Gets the time with the specified GMT offset - * - * @param gmtOffset A GMT offset in hours - * - * @return The time with the specified GMT offset - */ - String getTime(int gmtOffset); - } - - /** - * Sample implementation class that implements the three @Remotable interfaces - */ - private class TimeServiceImpl implements LocalTimeService, WorldTimeService, GMTTimeService { - /** - * Gets the local time - * - * @return The Local Time - */ - public String getTime() { - return "The current local time"; - } - - /** - * Gets the time in the specified TimeZone - * - * @param timeZone A Time Zone - * - * @return The time in the specified TimeZone - */ - public String getTime(String timeZone) { - return "The current time in TimeZone " + timeZone; - } - - /** - * Gets the time with the specified GMT offset - * - * @param gmtOffset A GMT offset in hours - * - * @return The time with the specified GMT offset - */ - public String getTime(int gmtOffset) { - return "The current time with GMT offset of " + gmtOffset; - } - } -} diff --git a/sca-java-2.x/branches/2.0-Beta2/modules/interface-java/src/test/java/org/apache/tuscany/sca/interfacedef/java/impl/JavaInterfaceUtilTestCase.java b/sca-java-2.x/branches/2.0-Beta2/modules/interface-java/src/test/java/org/apache/tuscany/sca/interfacedef/java/impl/JavaInterfaceUtilTestCase.java deleted file mode 100644 index 86a38fa0c4..0000000000 --- a/sca-java-2.x/branches/2.0-Beta2/modules/interface-java/src/test/java/org/apache/tuscany/sca/interfacedef/java/impl/JavaInterfaceUtilTestCase.java +++ /dev/null @@ -1,123 +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.interfacedef.java.impl; - -import static org.apache.tuscany.sca.interfacedef.java.impl.JavaInterfaceUtil.findOperation; -import static org.junit.Assert.assertEquals; - -import java.lang.reflect.Method; -import java.util.ArrayList; -import java.util.List; - -import org.apache.tuscany.sca.interfacedef.DataType; -import org.apache.tuscany.sca.interfacedef.Operation; -import org.apache.tuscany.sca.interfacedef.impl.DataTypeImpl; -import org.apache.tuscany.sca.interfacedef.impl.OperationImpl; -import org.junit.Before; -import org.junit.Test; - -/** - * @version $Rev$ $Date$ - */ -public class JavaInterfaceUtilTestCase { - private List<Operation> operations; - - @Test - public void testNoParamsFindOperation() throws Exception { - Method method = Foo.class.getMethod("foo"); - Operation ret = findOperation(method, operations); - assertEquals("foo", ret.getName()); - assertEquals(0, method.getParameterTypes().length); - } - - @Test - public void testParamsFindOperation() throws Exception { - Method method = Foo.class.getMethod("foo", String.class); - Operation ret = findOperation(method, operations); - assertEquals("foo", ret.getName()); - assertEquals(String.class, method.getParameterTypes()[0]); - } - - @Test - public void testPrimitiveParamFindOperation() throws NoSuchMethodException { - Method method = Foo.class.getMethod("foo", Integer.TYPE); - Operation operation = findOperation(method, operations); - assertEquals(Integer.TYPE, operation.getInputType().getLogical().get(0).getPhysical()); - } - - @Before - public void setUp() throws Exception { - Operation operation = newOperation("foo"); - List<DataType> types = new ArrayList<DataType>(); - DataType<List<DataType>> inputType = new DataTypeImpl<List<DataType>>(Object[].class, types); - operation.setInputType(inputType); - - operations = new ArrayList<Operation>(); - operations.add(operation); - - types = new ArrayList<DataType>(); - inputType = new DataTypeImpl<List<DataType>>(Object[].class, types); - DataType type = new DataTypeImpl<Class>(String.class, Object.class); - types.add(type); - operation = newOperation("foo"); - operation.setInputType(inputType); - operations.add(operation); - - types = new ArrayList<DataType>(); - type = new DataTypeImpl<Class>(String.class, Object.class); - DataType type2 = new DataTypeImpl<Class>(String.class, Object.class); - types.add(type); - types.add(type2); - inputType = new DataTypeImpl<List<DataType>>(Object[].class, types); - operation = newOperation("foo"); - operation.setInputType(inputType); - operations.add(operation); - - types = new ArrayList<DataType>(); - type = new DataTypeImpl<Class>(Integer.class, Object.class); - types.add(type); - inputType = new DataTypeImpl<List<DataType>>(Object[].class, types); - operation = newOperation("foo"); - operation.setInputType(inputType); - operations.add(operation); - - types = new ArrayList<DataType>(); - type = new DataTypeImpl<Class>(Integer.TYPE, Object.class); - types.add(type); - inputType = new DataTypeImpl<List<DataType>>(Object[].class, types); - operation = newOperation("foo"); - operation.setInputType(inputType); - operations.add(operation); - - } - - private interface Foo { - void foo(); - - void foo(String foo); - - void foo(int b); - } - - private static Operation newOperation(String name) { - Operation operation = new OperationImpl(); - operation.setName(name); - return operation; - } -} diff --git a/sca-java-2.x/branches/2.0-Beta2/modules/interface-java/src/test/java/org/apache/tuscany/sca/interfacedef/java/introspection/impl/JavaInterfaceProcessorRegistryImplTestCase.java.fixme b/sca-java-2.x/branches/2.0-Beta2/modules/interface-java/src/test/java/org/apache/tuscany/sca/interfacedef/java/introspection/impl/JavaInterfaceProcessorRegistryImplTestCase.java.fixme deleted file mode 100644 index 14ac8b0134..0000000000 --- a/sca-java-2.x/branches/2.0-Beta2/modules/interface-java/src/test/java/org/apache/tuscany/sca/interfacedef/java/introspection/impl/JavaInterfaceProcessorRegistryImplTestCase.java.fixme +++ /dev/null @@ -1,107 +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.interfacedef.java.introspection.impl; - -import static org.easymock.EasyMock.createMock; -import static org.easymock.EasyMock.expectLastCall; -import static org.easymock.EasyMock.replay; -import static org.easymock.EasyMock.verify; - -import java.io.IOException; -import java.util.List; - -import javax.xml.namespace.QName; - -import junit.framework.TestCase; - -import org.apache.tuscany.sca.interfacedef.DataType; -import org.apache.tuscany.sca.interfacedef.InvalidInterfaceException; -import org.apache.tuscany.sca.interfacedef.Operation; -import org.apache.tuscany.sca.interfacedef.java.DefaultJavaInterfaceFactory; -import org.apache.tuscany.sca.interfacedef.java.JavaInterface; -import org.apache.tuscany.sca.interfacedef.java.JavaInterfaceFactory; -import org.apache.tuscany.sca.interfacedef.java.introspect.JavaInterfaceVisitor; -import org.apache.tuscany.sca.interfacedef.util.XMLType; -import org.easymock.EasyMock; - -/** - * @version $Rev$ $Date$ - */ -public class JavaInterfaceProcessorRegistryImplTestCase extends TestCase { - private JavaInterfaceFactory factory; - - @SuppressWarnings("unchecked") - public void testSimpleInterface() throws InvalidInterfaceException { - JavaInterface intf = factory.createJavaInterface(Simple.class); - - assertEquals(Simple.class, intf.getJavaClass()); - List<Operation> operations = intf.getOperations(); - assertEquals(1, operations.size()); - Operation baseInt = operations.get(0); - assertEquals("baseInt", baseInt.getName()); - - QName element = new QName("http://impl.introspection.java.interfacedef.sca.tuscany.apache.org/", "return"); - - DataType<XMLType> returnType = baseInt.getOutputType(); - assertEquals(Integer.TYPE, returnType.getPhysical()); - assertEquals(element, returnType.getLogical().getElementName()); - - List<DataType> parameterTypes = baseInt.getInputType().getLogical(); - assertEquals(1, parameterTypes.size()); - DataType<XMLType> arg0 = parameterTypes.get(0); - assertEquals(Integer.TYPE, arg0.getPhysical()); - - element = new QName("http://impl.introspection.java.interfacedef.sca.tuscany.apache.org/", "arg0"); - assertEquals(element, arg0.getLogical().getElementName()); - - List<DataType> faultTypes = baseInt.getFaultTypes(); - assertEquals(1, faultTypes.size()); - DataType<DataType<XMLType>> fault0 = faultTypes.get(0); - assertEquals(IOException.class, fault0.getPhysical()); - element = new QName("http://impl.introspection.java.interfacedef.sca.tuscany.apache.org/", "IOException"); - assertEquals(element, fault0.getLogical().getLogical().getElementName()); - } - - public void testUnregister() throws Exception { - JavaInterfaceVisitor extension = createMock(JavaInterfaceVisitor.class); - extension.visitInterface(EasyMock.isA(JavaInterface.class)); - expectLastCall().once(); - replay(extension); - factory.addInterfaceVisitor(extension); - factory.createJavaInterface(Base.class); - factory.removeInterfaceVisitor(extension); - factory.createJavaInterface(Base.class); - verify(extension); - } - - @Override - protected void setUp() throws Exception { - super.setUp(); - factory = new DefaultJavaInterfaceFactory(); - - } - - private static interface Base { - int baseInt(int param) throws IllegalArgumentException, IOException; - } - - private static interface Simple extends Base { - - } -} diff --git a/sca-java-2.x/branches/2.0-Beta2/modules/interface-java/src/test/java/org/apache/tuscany/sca/interfacedef/java/introspection/impl/PolicyProcessorTestCase.java b/sca-java-2.x/branches/2.0-Beta2/modules/interface-java/src/test/java/org/apache/tuscany/sca/interfacedef/java/introspection/impl/PolicyProcessorTestCase.java deleted file mode 100644 index 41facdb3e7..0000000000 --- a/sca-java-2.x/branches/2.0-Beta2/modules/interface-java/src/test/java/org/apache/tuscany/sca/interfacedef/java/introspection/impl/PolicyProcessorTestCase.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.interfacedef.java.introspection.impl; - -import static org.junit.Assert.assertEquals; - -import org.apache.tuscany.sca.core.DefaultExtensionPointRegistry; -import org.apache.tuscany.sca.core.ExtensionPointRegistry; -import org.apache.tuscany.sca.interfacedef.java.DefaultJavaInterfaceFactory; -import org.apache.tuscany.sca.interfacedef.java.JavaInterface; -import org.apache.tuscany.sca.interfacedef.java.JavaInterfaceFactory; -import org.junit.Before; -import org.junit.Test; -import org.oasisopen.sca.annotation.Authentication; -import org.oasisopen.sca.annotation.Confidentiality; -import org.oasisopen.sca.annotation.PolicySets; -import org.oasisopen.sca.annotation.Requires; - -/** - * @version $Rev$ $Date$ - */ -public class PolicyProcessorTestCase { - private JavaInterfaceFactory factory; - // private PolicyJavaInterfaceVisitor policyProcessor; - - @Test - public void testInterfaceLevel() throws Exception { - JavaInterface type = factory.createJavaInterface(Interface1.class); - // policyProcessor.visitInterface(type); - assertEquals(2, type.getRequiredIntents().size()); - assertEquals(1, type.getPolicySets().size()); - } - - @Test - public void testMethodLevel() throws Exception { - JavaInterface type = factory.createJavaInterface(Interface2.class); - // policyProcessor.visitInterface(type); - assertEquals(0, type.getRequiredIntents().size()); - assertEquals(3, type.getOperations().get(0).getRequiredIntents().size()); - assertEquals(1, type.getOperations().get(1).getRequiredIntents().size()); - assertEquals(0, type.getPolicySets().size()); - assertEquals(1, type.getOperations().get(0).getPolicySets().size()); - assertEquals(1, type.getOperations().get(1).getPolicySets().size()); - } - - @Test - public void testInterfaceAndMethodLevel() throws Exception { - JavaInterface type = factory.createJavaInterface(Interface3.class); - // policyProcessor.visitInterface(type); - assertEquals(2, type.getRequiredIntents().size()); - assertEquals(3, type.getOperations().get(0).getRequiredIntents().size()); - assertEquals(3, type.getOperations().get(1).getRequiredIntents().size()); - assertEquals(1, type.getPolicySets().size()); - assertEquals(2, type.getOperations().get(0).getPolicySets().size()); - assertEquals(2, type.getOperations().get(1).getPolicySets().size()); - } - - @Before - public void setUp() throws Exception { - ExtensionPointRegistry registry = new DefaultExtensionPointRegistry(); - factory = new DefaultJavaInterfaceFactory(registry); - // policyProcessor = new PolicyJavaInterfaceVisitor(registry); - } - - // @Remotable - @Requires( {"transaction.global"}) - @PolicySets( {"{http://ns1}PS1"}) - @Authentication - private interface Interface1 { - int method1(); - - int method2(); - - int method3(); - - int method4(); - } - - private interface Interface2 { - @Requires( {"transaction.global"}) - @Confidentiality({"message", "transport"}) - @PolicySets( {"{http://ns1}PS1"}) - int method1(); - - @Requires( {"transaction.local"}) - @PolicySets( {"{http://ns1}PS2"}) - int method2(); - } - - @Requires( {"transaction.global.Interface6"}) - @PolicySets( {"{http://ns1}PS1"}) - @Authentication - private interface Interface3 { - @Requires( {"transaction.global.Interface6.method1"}) - @PolicySets( {"{http://ns1}PS2"}) - int method1(); - - @Requires( {"transaction.local.Interface6.method2"}) - @PolicySets( {"{http://ns1}PS3"}) - int method2(); - } - -} diff --git a/sca-java-2.x/branches/2.0-Beta2/modules/interface-java/src/test/java/org/apache/tuscany/sca/interfacedef/java/xml/ReadTestCase.java b/sca-java-2.x/branches/2.0-Beta2/modules/interface-java/src/test/java/org/apache/tuscany/sca/interfacedef/java/xml/ReadTestCase.java deleted file mode 100644 index 7cacf06abd..0000000000 --- a/sca-java-2.x/branches/2.0-Beta2/modules/interface-java/src/test/java/org/apache/tuscany/sca/interfacedef/java/xml/ReadTestCase.java +++ /dev/null @@ -1,81 +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.interfacedef.java.xml; - -import static org.junit.Assert.assertNotNull; - -import java.io.InputStream; - -import javax.xml.stream.XMLInputFactory; -import javax.xml.stream.XMLOutputFactory; -import javax.xml.stream.XMLStreamReader; - -import org.apache.tuscany.sca.assembly.ComponentType; -import org.apache.tuscany.sca.assembly.Composite; -import org.apache.tuscany.sca.contribution.processor.DefaultStAXArtifactProcessorExtensionPoint; -import org.apache.tuscany.sca.contribution.processor.ExtensibleStAXArtifactProcessor; -import org.apache.tuscany.sca.contribution.processor.ProcessorContext; -import org.apache.tuscany.sca.contribution.processor.StAXArtifactProcessor; -import org.apache.tuscany.sca.contribution.processor.StAXArtifactProcessorExtensionPoint; -import org.apache.tuscany.sca.core.DefaultExtensionPointRegistry; -import org.junit.BeforeClass; -import org.junit.Ignore; -import org.junit.Test; - -/** - * Test reading Java interfaces. - * - * @version $Rev$ $Date$ - */ -public class ReadTestCase { - - private static XMLInputFactory inputFactory; - private static XMLOutputFactory outputFactory; - private static StAXArtifactProcessor<Object> staxProcessor; - private static ProcessorContext context; - - @BeforeClass - public static void setUp() throws Exception { - DefaultExtensionPointRegistry extensionPoints = new DefaultExtensionPointRegistry(); - context = new ProcessorContext(extensionPoints); - inputFactory = XMLInputFactory.newInstance(); - outputFactory = XMLOutputFactory.newInstance(); - StAXArtifactProcessorExtensionPoint staxProcessors = new DefaultStAXArtifactProcessorExtensionPoint(extensionPoints); - staxProcessor = new ExtensibleStAXArtifactProcessor(staxProcessors, inputFactory, outputFactory); - } - - @Test - public void testReadComponentType() throws Exception { - InputStream is = getClass().getResourceAsStream("CalculatorImpl.componentType"); - XMLStreamReader reader = inputFactory.createXMLStreamReader(is); - ComponentType componentType = (ComponentType)staxProcessor.read(reader, context); - assertNotNull(componentType); - } - - @Test - @Ignore - public void testReadComposite() throws Exception { - InputStream is = getClass().getResourceAsStream("Calculator.composite"); - XMLStreamReader reader = inputFactory.createXMLStreamReader(is); - Composite composite = (Composite)staxProcessor.read(reader, context); - assertNotNull(composite); - } - -} diff --git a/sca-java-2.x/branches/2.0-Beta2/modules/interface-java/src/test/java/org/apache/tuscany/sca/interfacedef/java/xml/WriteTestCase.java b/sca-java-2.x/branches/2.0-Beta2/modules/interface-java/src/test/java/org/apache/tuscany/sca/interfacedef/java/xml/WriteTestCase.java deleted file mode 100644 index 615fb15fc6..0000000000 --- a/sca-java-2.x/branches/2.0-Beta2/modules/interface-java/src/test/java/org/apache/tuscany/sca/interfacedef/java/xml/WriteTestCase.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.interfacedef.java.xml; - -import static org.junit.Assert.assertNotNull; - -import java.io.ByteArrayOutputStream; -import java.io.InputStream; - -import javax.xml.stream.XMLInputFactory; -import javax.xml.stream.XMLOutputFactory; - -import org.apache.tuscany.sca.assembly.ComponentType; -import org.apache.tuscany.sca.assembly.Composite; -import org.apache.tuscany.sca.contribution.processor.DefaultStAXArtifactProcessorExtensionPoint; -import org.apache.tuscany.sca.contribution.processor.ExtensibleStAXArtifactProcessor; -import org.apache.tuscany.sca.contribution.processor.ProcessorContext; -import org.apache.tuscany.sca.contribution.processor.StAXArtifactProcessor; -import org.apache.tuscany.sca.contribution.processor.StAXArtifactProcessorExtensionPoint; -import org.apache.tuscany.sca.core.DefaultExtensionPointRegistry; -import org.junit.BeforeClass; -import org.junit.Test; - -/** - * Test writing Java interfaces. - * - * @version $Rev$ $Date$ - */ -public class WriteTestCase { - private static XMLInputFactory inputFactory; - private static XMLOutputFactory outputFactory; - private static StAXArtifactProcessor<Object> staxProcessor; - private static ProcessorContext context; - - @BeforeClass - public static void setUp() throws Exception { - DefaultExtensionPointRegistry extensionPoints = new DefaultExtensionPointRegistry(); - context = new ProcessorContext(extensionPoints); - inputFactory = XMLInputFactory.newInstance(); - outputFactory = XMLOutputFactory.newInstance(); - StAXArtifactProcessorExtensionPoint staxProcessors = new DefaultStAXArtifactProcessorExtensionPoint(extensionPoints); - staxProcessor = new ExtensibleStAXArtifactProcessor(staxProcessors, inputFactory, outputFactory); - } - - @Test - public void testReadWriteComponentType() throws Exception { - InputStream is = getClass().getResourceAsStream("CalculatorImpl.componentType"); - ComponentType componentType = (ComponentType)staxProcessor.read(inputFactory.createXMLStreamReader(is), context); - assertNotNull(componentType); - ByteArrayOutputStream bos = new ByteArrayOutputStream(); - staxProcessor.write(componentType, outputFactory.createXMLStreamWriter(bos), context); - } - - @Test - public void testReadWriteComposite() throws Exception { - InputStream is = getClass().getResourceAsStream("Calculator.composite"); - Composite composite = (Composite)staxProcessor.read(inputFactory.createXMLStreamReader(is), context); - assertNotNull(composite); - ByteArrayOutputStream bos = new ByteArrayOutputStream(); - staxProcessor.write(composite, outputFactory.createXMLStreamWriter(bos), context); - } - -} diff --git a/sca-java-2.x/branches/2.0-Beta2/modules/interface-java/src/test/resources/org/apache/tuscany/sca/interfacedef/java/xml/Calculator.composite b/sca-java-2.x/branches/2.0-Beta2/modules/interface-java/src/test/resources/org/apache/tuscany/sca/interfacedef/java/xml/Calculator.composite deleted file mode 100644 index e5455dc970..0000000000 --- a/sca-java-2.x/branches/2.0-Beta2/modules/interface-java/src/test/resources/org/apache/tuscany/sca/interfacedef/java/xml/Calculator.composite +++ /dev/null @@ -1,53 +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:calc="http://sample.calculator" - targetNamespace="http://calc" - name="Calculator"> - - <service name="CalculatorService" promote="CalculatorServiceComponent"> - <interface.java interface="calculator.CalculatorService" requires="calc:intent1" policySets="calc:policySet1" /> - </service> - - <component name="CalculatorServiceComponent"> - <implementation.java class="calculator.CalculatorServiceImpl"/> - <reference name="addService" target="AddServiceComponent"/> - <reference name="subtractService" target="SubtractServiceComponent"/> - <reference name="multiplyService" target="MultiplyServiceComponent"/> - <reference name="divideService" target="DivideServiceComponent"/> - </component> - - <component name="AddServiceComponent"> - <implementation.java class="calculator.AddServiceImpl"/> - </component> - - <component name="SubtractServiceComponent"> - <implementation.java class="calculator.SubtractServiceImpl"/> - </component> - - <component name="MultiplyServiceComponent"> - <implementation.java class="calculator.MultiplyServiceImpl"/> - </component> - - <component name="DivideServiceComponent"> - <implementation.java class="calculator.DivideServiceImpl"/> - </component> - -</composite> diff --git a/sca-java-2.x/branches/2.0-Beta2/modules/interface-java/src/test/resources/org/apache/tuscany/sca/interfacedef/java/xml/CalculatorImpl.componentType b/sca-java-2.x/branches/2.0-Beta2/modules/interface-java/src/test/resources/org/apache/tuscany/sca/interfacedef/java/xml/CalculatorImpl.componentType deleted file mode 100644 index 68793041e1..0000000000 --- a/sca-java-2.x/branches/2.0-Beta2/modules/interface-java/src/test/resources/org/apache/tuscany/sca/interfacedef/java/xml/CalculatorImpl.componentType +++ /dev/null @@ -1,31 +0,0 @@ -<?xml version="1.0" encoding="ASCII"?> -<!-- - * 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. ---> -<componentType xmlns="http://docs.oasis-open.org/ns/opencsa/sca/200912"> - - <service name="CalculatorService"> - <interface.java interface="calculator.CalculatorService" /> - </service> - - <reference name="divideService"> - <interface.java interface="calculator.DivideService" /> - </reference> - -</componentType> -
\ No newline at end of file |