diff options
author | nash <nash@13f79535-47bb-0310-9956-ffa450edef68> | 2011-03-30 19:50:51 +0000 |
---|---|---|
committer | nash <nash@13f79535-47bb-0310-9956-ffa450edef68> | 2011-03-30 19:50:51 +0000 |
commit | 3a569a2f00bf172cddfd567149774ee808a2a242 (patch) | |
tree | 5b18450a44f7f33a4d3c56780393f15331150347 /sca-java-1.x/branches/sca-java-1.6.2/tools | |
parent | c1fc4bd1ac2a2133b870e4314424cfd050bef607 (diff) |
Create branch for 1.6.2
git-svn-id: http://svn.us.apache.org/repos/asf/tuscany@1087059 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'sca-java-1.x/branches/sca-java-1.6.2/tools')
176 files changed, 18790 insertions, 0 deletions
diff --git a/sca-java-1.x/branches/sca-java-1.6.2/tools/contrib2wsdl/LICENSE b/sca-java-1.x/branches/sca-java-1.6.2/tools/contrib2wsdl/LICENSE new file mode 100644 index 0000000000..8aa906c321 --- /dev/null +++ b/sca-java-1.x/branches/sca-java-1.6.2/tools/contrib2wsdl/LICENSE @@ -0,0 +1,205 @@ + + 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-1.x/branches/sca-java-1.6.2/tools/contrib2wsdl/NOTICE b/sca-java-1.x/branches/sca-java-1.6.2/tools/contrib2wsdl/NOTICE new file mode 100644 index 0000000000..ad2ba40961 --- /dev/null +++ b/sca-java-1.x/branches/sca-java-1.6.2/tools/contrib2wsdl/NOTICE @@ -0,0 +1,6 @@ +${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-1.x/branches/sca-java-1.6.2/tools/contrib2wsdl/build.xml b/sca-java-1.x/branches/sca-java-1.6.2/tools/contrib2wsdl/build.xml new file mode 100644 index 0000000000..f01f1dfb2a --- /dev/null +++ b/sca-java-1.x/branches/sca-java-1.6.2/tools/contrib2wsdl/build.xml @@ -0,0 +1,30 @@ +<!-- + * 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 name="calculator" default="run"> + + <target name="run"> + <java classname="org.apache.tuscany.tools.contrib2wsdl" + fork="true"> + <classpath> + <pathelement location="../../lib/tuscany-sca-manifest.jar"/> + </classpath> + </java> + </target> + +</project> diff --git a/sca-java-1.x/branches/sca-java-1.6.2/tools/contrib2wsdl/pom.xml b/sca-java-1.x/branches/sca-java-1.6.2/tools/contrib2wsdl/pom.xml new file mode 100644 index 0000000000..d5e2df8fcf --- /dev/null +++ b/sca-java-1.x/branches/sca-java-1.6.2/tools/contrib2wsdl/pom.xml @@ -0,0 +1,81 @@ +<?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-sca-tools</artifactId> + <version>1.6.1-SNAPSHOT</version> + <relativePath>../pom.xml</relativePath> + </parent> + <artifactId>tuscany-contrib2wsdl</artifactId> + <name>Apache Tuscany SCA Contrib2WSDL Tool</name> + <dependencies> + <dependency> + <groupId>org.apache.tuscany.sca</groupId> + <artifactId>tuscany-sca-api</artifactId> + <version>1.6.1-SNAPSHOT</version> + </dependency> + + <dependency> + <groupId>org.apache.tuscany.sca</groupId> + <artifactId>tuscany-node-impl</artifactId> + <version>1.6.1-SNAPSHOT</version> + </dependency> + + <dependency> + <groupId>org.apache.tuscany.sca</groupId> + <artifactId>tuscany-implementation-java-runtime</artifactId> + <version>1.6.1-SNAPSHOT</version> + <scope>runtime</scope> + </dependency> + + <dependency> + <groupId>org.apache.tuscany.sca</groupId> + <artifactId>tuscany-binding-jms-runtime</artifactId> + <version>1.6.1-SNAPSHOT</version> + </dependency> + <dependency> + <groupId>org.apache.tuscany.sca</groupId> + <artifactId>tuscany-host-jms-asf</artifactId> + <version>1.6.1-SNAPSHOT</version> + </dependency> + + <dependency> + <groupId>org.apache.tuscany.sca</groupId> + <artifactId>tuscany-binding-ws-axis2</artifactId> + <version>1.6.1-SNAPSHOT</version> + </dependency> + + <dependency> + <groupId>commons-cli</groupId> + <artifactId>commons-cli</artifactId> + <version>1.2</version> + </dependency> + + <dependency> + <groupId>junit</groupId> + <artifactId>junit</artifactId> + <version>4.5</version> + <scope>test</scope> + </dependency> + </dependencies> + +</project> diff --git a/sca-java-1.x/branches/sca-java-1.6.2/tools/contrib2wsdl/src/main/java/org/apache/tuscany/tools/contrib2wsdl/Contrib2WSDL.java b/sca-java-1.x/branches/sca-java-1.6.2/tools/contrib2wsdl/src/main/java/org/apache/tuscany/tools/contrib2wsdl/Contrib2WSDL.java new file mode 100644 index 0000000000..1594772663 --- /dev/null +++ b/sca-java-1.x/branches/sca-java-1.6.2/tools/contrib2wsdl/src/main/java/org/apache/tuscany/tools/contrib2wsdl/Contrib2WSDL.java @@ -0,0 +1,154 @@ +/* + * 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.tools.contrib2wsdl; + +import java.io.File; +import java.io.FileNotFoundException; +import java.io.FileOutputStream; + +import javax.wsdl.WSDLException; +import javax.wsdl.xml.WSDLWriter; + +import org.apache.commons.cli.CommandLine; +import org.apache.commons.cli.CommandLineParser; +import org.apache.commons.cli.Option; +import org.apache.commons.cli.Options; +import org.apache.commons.cli.PosixParser; +import org.apache.tuscany.sca.assembly.Binding; +import org.apache.tuscany.sca.assembly.Component; +import org.apache.tuscany.sca.assembly.Composite; +import org.apache.tuscany.sca.assembly.Service; +import org.apache.tuscany.sca.binding.ws.WebServiceBinding; +import org.apache.tuscany.sca.binding.ws.wsdlgen.WSDLGenerationException; +import org.apache.tuscany.sca.node.SCAContribution; +import org.apache.tuscany.sca.node.SCANode; +import org.apache.tuscany.sca.node.SCANodeFactory; +import org.apache.tuscany.sca.node.impl.NodeImpl; + +/** + * This class provides the tooling abstraction to Tuscany Contrib2WSDL and can be + * invoked from command line with the following options + * + * java org.apache.tuscany.tools.contrib2wsdl.Contrib2WSDL -c ./MyContribution -o ./myOutputDir + * + */ +public class Contrib2WSDL { + + private static String contributionPath = "."; + private static String outputPath = "."; + /** + * @param args + */ + public static void main(String[] args) { + + try { + CommandLineParser parser = new PosixParser(); + Options options = getCommandLineOptions(); + CommandLine cli = parser.parse(options, args); + + if (cli.hasOption("c")) { + contributionPath = cli.getOptionValue("c"); + } + + if (cli.hasOption("o")) { + outputPath = cli.getOptionValue("o"); + try { + new File(outputPath).mkdir(); + } catch (Exception ex) { + ex.printStackTrace(); + + } + } + + SCANodeFactory factory = SCANodeFactory.newInstance(); + SCANode node = factory.createSCANode(null, + new SCAContribution("contrib2wsdl", contributionPath)); + + // Print out all generated WSDL + // today this means finding all services in the deployment composites + // that have a binding.ws configured + printWSDL(((NodeImpl)node).getComposite()); + + + + } catch(Exception ex){ + ex.printStackTrace(); + } + + } + + static void printWSDL(Composite composite){ + for (Component component : composite.getComponents()){ + if (component.getImplementation() instanceof Composite){ + printWSDL((Composite)component.getImplementation()); + } else { + for (Service service : component.getServices()){ + for (Binding binding : service.getBindings()){ + System.out.println("Processing: " + + component.getName() + + "/" + + service.getName()); + if (binding instanceof WebServiceBinding){ + WebServiceBinding bindingWS = (WebServiceBinding) binding; + String filename = outputPath + + "/" + + component.getName() + + "_" + + service.getName() + + "_" + + binding.getName() + + ".wsdl"; + try { + System.out.println(" Writing file: " + filename); + System.out.flush(); + File file = new File(filename); + file.createNewFile(); + FileOutputStream stream = new FileOutputStream(file); + System.out.println("Generated WSDL for " + component.getName() + "/" + service.getName()); + WSDLWriter writer = javax.wsdl.factory.WSDLFactory.newInstance().newWSDLWriter(); + writer.writeWSDL(bindingWS.getWSDLDefinition().getDefinition(),stream); + } catch (Exception e) { + throw new WSDLGenerationException(e); + } + } else { + System.out.println(" No binding.ws" ); + } + } + } + } + } + } + + static Options getCommandLineOptions() { + Options options = new Options(); + Option opt1 = new Option("c", "contribution", true, "path to the contribution"); + opt1.setArgName("contributionPath"); + options.addOption(opt1); + Option opt2 = new Option("o", "output", true, "path to the output directory"); + opt2.setArgName("outputPath"); + options.addOption(opt2); + return options; + } + + public static void printUsage() { + System.out.println("Usage contrib2wsdl -c <contribution path> : path to contribution"); + System.out.println("-o <output Location> : output files location"); + System.exit(0); + } +} diff --git a/sca-java-1.x/branches/sca-java-1.6.2/tools/contrib2wsdl/src/test/java/calculator/AddService.java b/sca-java-1.x/branches/sca-java-1.6.2/tools/contrib2wsdl/src/test/java/calculator/AddService.java new file mode 100644 index 0000000000..d7dc4473ad --- /dev/null +++ b/sca-java-1.x/branches/sca-java-1.6.2/tools/contrib2wsdl/src/test/java/calculator/AddService.java @@ -0,0 +1,31 @@ +/* + * 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 calculator; + +import org.osoa.sca.annotations.Remotable; + +/** + * The Add service interface + */ +@Remotable +public interface AddService { + + double add(double n1, double n2); + +} diff --git a/sca-java-1.x/branches/sca-java-1.6.2/tools/contrib2wsdl/src/test/java/calculator/AddServiceImpl.java b/sca-java-1.x/branches/sca-java-1.6.2/tools/contrib2wsdl/src/test/java/calculator/AddServiceImpl.java new file mode 100644 index 0000000000..7ca8fb04b5 --- /dev/null +++ b/sca-java-1.x/branches/sca-java-1.6.2/tools/contrib2wsdl/src/test/java/calculator/AddServiceImpl.java @@ -0,0 +1,35 @@ +/* + * 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 calculator; + +import java.util.logging.Level; +import java.util.logging.Logger; + +/** + * An implementation of the Add service + */ +public class AddServiceImpl implements AddService { + + public double add(double n1, double n2) { + Logger logger = Logger.getLogger("calculator"); + logger.log(Level.FINEST, "Adding " + n1 + " and " + n2); + return n1 + n2; + } + +} diff --git a/sca-java-1.x/branches/sca-java-1.6.2/tools/contrib2wsdl/src/test/java/calculator/CalculatorClient.java b/sca-java-1.x/branches/sca-java-1.6.2/tools/contrib2wsdl/src/test/java/calculator/CalculatorClient.java new file mode 100644 index 0000000000..3b2966e96d --- /dev/null +++ b/sca-java-1.x/branches/sca-java-1.6.2/tools/contrib2wsdl/src/test/java/calculator/CalculatorClient.java @@ -0,0 +1,48 @@ +/* + * 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 calculator; + +import org.apache.tuscany.sca.node.SCAClient; +import org.apache.tuscany.sca.node.SCANode; +import org.apache.tuscany.sca.node.SCANodeFactory; + +/** + * This client program shows how to create an SCA runtime, start it, + * and locate and invoke a SCA component + */ +public class CalculatorClient { + public static void main(String[] args) throws Exception { + + SCANodeFactory factory = SCANodeFactory.newInstance(); + SCANode node = factory.createSCANodeFromClassLoader("Calculator.composite", CalculatorClient.class.getClassLoader()); + node.start(); + + CalculatorService calculatorService = ((SCAClient)node).getService(CalculatorService.class, "CalculatorServiceComponent"); + + // Calculate + System.out.println("3 + 2=" + calculatorService.add(3, 2)); + System.out.println("3 - 2=" + calculatorService.subtract(3, 2)); + System.out.println("3 * 2=" + calculatorService.multiply(3, 2)); + System.out.println("3 / 2=" + calculatorService.divide(3, 2)); + + node.stop(); + } + +} diff --git a/sca-java-1.x/branches/sca-java-1.6.2/tools/contrib2wsdl/src/test/java/calculator/CalculatorService.java b/sca-java-1.x/branches/sca-java-1.6.2/tools/contrib2wsdl/src/test/java/calculator/CalculatorService.java new file mode 100644 index 0000000000..031fa8b912 --- /dev/null +++ b/sca-java-1.x/branches/sca-java-1.6.2/tools/contrib2wsdl/src/test/java/calculator/CalculatorService.java @@ -0,0 +1,35 @@ +/* + * 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 calculator; + + +/** + * The Calculator service interface. + */ +public interface CalculatorService { + + double add(double n1, double n2); + + double subtract(double n1, double n2); + + double multiply(double n1, double n2); + + double divide(double n1, double n2); + +} diff --git a/sca-java-1.x/branches/sca-java-1.6.2/tools/contrib2wsdl/src/test/java/calculator/CalculatorServiceImpl.java b/sca-java-1.x/branches/sca-java-1.6.2/tools/contrib2wsdl/src/test/java/calculator/CalculatorServiceImpl.java new file mode 100644 index 0000000000..3d861f2018 --- /dev/null +++ b/sca-java-1.x/branches/sca-java-1.6.2/tools/contrib2wsdl/src/test/java/calculator/CalculatorServiceImpl.java @@ -0,0 +1,70 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +package calculator; + +import org.osoa.sca.annotations.Reference; + + +/** + * An implementation of the Calculator service. + */ +public class CalculatorServiceImpl implements CalculatorService { + + private AddService addService; + private SubtractService subtractService; + private MultiplyService multiplyService; + private DivideService divideService; + + @Reference + public void setAddService(AddService addService) { + this.addService = addService; + } + + @Reference + public void setSubtractService(SubtractService subtractService) { + this.subtractService = subtractService; + } + + @Reference + public void setDivideService(DivideService divideService) { + this.divideService = divideService; + } + + @Reference + public void setMultiplyService(MultiplyService multiplyService) { + this.multiplyService = multiplyService; + } + + public double add(double n1, double n2) { + return addService.add(n1, n2); + } + + public double subtract(double n1, double n2) { + return subtractService.subtract(n1, n2); + } + + public double multiply(double n1, double n2) { + return multiplyService.multiply(n1, n2); + } + + public double divide(double n1, double n2) { + return divideService.divide(n1, n2); + } + +} diff --git a/sca-java-1.x/branches/sca-java-1.6.2/tools/contrib2wsdl/src/test/java/calculator/DivideService.java b/sca-java-1.x/branches/sca-java-1.6.2/tools/contrib2wsdl/src/test/java/calculator/DivideService.java new file mode 100644 index 0000000000..30d248208b --- /dev/null +++ b/sca-java-1.x/branches/sca-java-1.6.2/tools/contrib2wsdl/src/test/java/calculator/DivideService.java @@ -0,0 +1,28 @@ +/* + * 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 calculator; + +/** + * The divide service interface + */ +public interface DivideService { + + double divide(double n1, double n2); + +} diff --git a/sca-java-1.x/branches/sca-java-1.6.2/tools/contrib2wsdl/src/test/java/calculator/DivideServiceImpl.java b/sca-java-1.x/branches/sca-java-1.6.2/tools/contrib2wsdl/src/test/java/calculator/DivideServiceImpl.java new file mode 100644 index 0000000000..1323edf55a --- /dev/null +++ b/sca-java-1.x/branches/sca-java-1.6.2/tools/contrib2wsdl/src/test/java/calculator/DivideServiceImpl.java @@ -0,0 +1,35 @@ +/* + * 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 calculator; + +import java.util.logging.Level; +import java.util.logging.Logger; + +/** + * An implementation of the Divide service. + */ +public class DivideServiceImpl implements DivideService { + + public double divide(double n1, double n2) { + Logger logger = Logger.getLogger("calculator"); + logger.log(Level.FINEST, "Dividing " + n1 + " with " + n2); + return n1 / n2; + } + +} diff --git a/sca-java-1.x/branches/sca-java-1.6.2/tools/contrib2wsdl/src/test/java/calculator/MultiplyService.java b/sca-java-1.x/branches/sca-java-1.6.2/tools/contrib2wsdl/src/test/java/calculator/MultiplyService.java new file mode 100644 index 0000000000..5290605938 --- /dev/null +++ b/sca-java-1.x/branches/sca-java-1.6.2/tools/contrib2wsdl/src/test/java/calculator/MultiplyService.java @@ -0,0 +1,28 @@ +/* + * 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 calculator; + +/** + * The interface for the multiply service + */ +public interface MultiplyService { + + double multiply(double n1, double n2); + +} diff --git a/sca-java-1.x/branches/sca-java-1.6.2/tools/contrib2wsdl/src/test/java/calculator/MultiplyServiceImpl.java b/sca-java-1.x/branches/sca-java-1.6.2/tools/contrib2wsdl/src/test/java/calculator/MultiplyServiceImpl.java new file mode 100644 index 0000000000..91b803bc9e --- /dev/null +++ b/sca-java-1.x/branches/sca-java-1.6.2/tools/contrib2wsdl/src/test/java/calculator/MultiplyServiceImpl.java @@ -0,0 +1,35 @@ +/* + * 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 calculator; + +import java.util.logging.Level; +import java.util.logging.Logger; + +/** + * An implementation of the Multiply service. + */ +public class MultiplyServiceImpl implements MultiplyService { + + public double multiply(double n1, double n2) { + Logger logger = Logger.getLogger("calculator"); + logger.log(Level.FINEST, "Multiplying " + n1 + " with " + n2); + return n1 * n2; + } + +} diff --git a/sca-java-1.x/branches/sca-java-1.6.2/tools/contrib2wsdl/src/test/java/calculator/SubtractService.java b/sca-java-1.x/branches/sca-java-1.6.2/tools/contrib2wsdl/src/test/java/calculator/SubtractService.java new file mode 100644 index 0000000000..bf0d1882b6 --- /dev/null +++ b/sca-java-1.x/branches/sca-java-1.6.2/tools/contrib2wsdl/src/test/java/calculator/SubtractService.java @@ -0,0 +1,28 @@ +/* + * 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 calculator; + +/** + * The interface for the multiply service + */ +public interface SubtractService { + + double subtract(double n1, double n2); + +} diff --git a/sca-java-1.x/branches/sca-java-1.6.2/tools/contrib2wsdl/src/test/java/calculator/SubtractServiceImpl.java b/sca-java-1.x/branches/sca-java-1.6.2/tools/contrib2wsdl/src/test/java/calculator/SubtractServiceImpl.java new file mode 100644 index 0000000000..58cc4a3547 --- /dev/null +++ b/sca-java-1.x/branches/sca-java-1.6.2/tools/contrib2wsdl/src/test/java/calculator/SubtractServiceImpl.java @@ -0,0 +1,35 @@ +/* + * 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 calculator; + +import java.util.logging.Level; +import java.util.logging.Logger; + +/** + * An implementation of the subtract service. + */ +public class SubtractServiceImpl implements SubtractService { + + public double subtract(double n1, double n2) { + Logger logger = Logger.getLogger("calculator"); + logger.log(Level.FINEST, "Subtracting " + n1 + " from " + n2); + return n1 - n2; + } + +} diff --git a/sca-java-1.x/branches/sca-java-1.6.2/tools/contrib2wsdl/src/test/java/org/apache/tuscany/tools/contrib2wsdl/Contrib2WSDLTestCase.java b/sca-java-1.x/branches/sca-java-1.6.2/tools/contrib2wsdl/src/test/java/org/apache/tuscany/tools/contrib2wsdl/Contrib2WSDLTestCase.java new file mode 100644 index 0000000000..fc03fb5318 --- /dev/null +++ b/sca-java-1.x/branches/sca-java-1.6.2/tools/contrib2wsdl/src/test/java/org/apache/tuscany/tools/contrib2wsdl/Contrib2WSDLTestCase.java @@ -0,0 +1,34 @@ +/* + * 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.tools.contrib2wsdl; + +import junit.framework.TestCase; + +/** + * This shows how to run Contrib2WSDL. + */ +public class Contrib2WSDLTestCase extends TestCase { + + + public void testContrib2WSDL() throws Exception { + //String[] args = {"-c", "target/test-classes", "-o", "target/wsdl"}; + String[] args = {"-c", "../../itest/wsdlgen/target/classes", "-o", "target/wsdl"}; + Contrib2WSDL.main(args); + } +} diff --git a/sca-java-1.x/branches/sca-java-1.6.2/tools/contrib2wsdl/src/test/resources/Calculator.composite b/sca-java-1.x/branches/sca-java-1.6.2/tools/contrib2wsdl/src/test/resources/Calculator.composite new file mode 100644 index 0000000000..24beea308b --- /dev/null +++ b/sca-java-1.x/branches/sca-java-1.6.2/tools/contrib2wsdl/src/test/resources/Calculator.composite @@ -0,0 +1,54 @@ +<?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://www.osoa.org/xmlns/sca/1.0" + targetNamespace="http://sample" + xmlns:sample="http://sample" + name="Calculator"> + + <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"/> + <service name="AddService"> + <binding.sca /> + <binding.ws name="http" uri="http://localhost:8080/AddService"/> + <binding.ws name="jms" uri="jms:/queue.sample?transport.jms.ConnectionFactoryJNDIName=QueueConnectionFactory&java.naming.factory.initial=org.apache.activemq.jndi.ActiveMQInitialContextFactory&java.naming.provider.url=tcp://localhost:51293"/> + </service> + </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-1.x/branches/sca-java-1.6.2/tools/contrib2wsdl/src/test/resources/META-INF/sca-contribution.xml b/sca-java-1.x/branches/sca-java-1.6.2/tools/contrib2wsdl/src/test/resources/META-INF/sca-contribution.xml new file mode 100644 index 0000000000..b037fb94d9 --- /dev/null +++ b/sca-java-1.x/branches/sca-java-1.6.2/tools/contrib2wsdl/src/test/resources/META-INF/sca-contribution.xml @@ -0,0 +1,23 @@ +<?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. +--> +<contribution xmlns="http://www.osoa.org/xmlns/sca/1.0" + xmlns:sample="http://sample"> + <deployable composite="sample:Calculator" /> +</contribution> diff --git a/sca-java-1.x/branches/sca-java-1.6.2/tools/eclipse/features/core/LICENSE b/sca-java-1.x/branches/sca-java-1.6.2/tools/eclipse/features/core/LICENSE new file mode 100644 index 0000000000..8aa906c321 --- /dev/null +++ b/sca-java-1.x/branches/sca-java-1.6.2/tools/eclipse/features/core/LICENSE @@ -0,0 +1,205 @@ + + 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-1.x/branches/sca-java-1.6.2/tools/eclipse/features/core/build.properties b/sca-java-1.x/branches/sca-java-1.6.2/tools/eclipse/features/core/build.properties new file mode 100644 index 0000000000..f36e15c5d3 --- /dev/null +++ b/sca-java-1.x/branches/sca-java-1.6.2/tools/eclipse/features/core/build.properties @@ -0,0 +1,10 @@ +bin.includes = feature.xml,\ + NOTICE,\ + LICENSE,\ + META-INF/ +src.includes = .project,\ + LICENSE,\ + NOTICE,\ + build.properties,\ + feature.xml,\ + META-INF/ diff --git a/sca-java-1.x/branches/sca-java-1.6.2/tools/eclipse/features/core/filtered-resources/META-INF/MANIFEST.MF b/sca-java-1.x/branches/sca-java-1.6.2/tools/eclipse/features/core/filtered-resources/META-INF/MANIFEST.MF new file mode 100644 index 0000000000..c259c8c6d8 --- /dev/null +++ b/sca-java-1.x/branches/sca-java-1.6.2/tools/eclipse/features/core/filtered-resources/META-INF/MANIFEST.MF @@ -0,0 +1,6 @@ +Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: Apache Tuscany SCA Eclipse Tools Core
+Bundle-SymbolicName: org.apache.tuscany.sca.feature.core
+Bundle-Version: ${tuscany.eclipse.version}
+Bundle-Vendor: Apache Software Foundation
diff --git a/sca-java-1.x/branches/sca-java-1.6.2/tools/eclipse/features/core/filtered-resources/NOTICE b/sca-java-1.x/branches/sca-java-1.6.2/tools/eclipse/features/core/filtered-resources/NOTICE new file mode 100644 index 0000000000..ad2ba40961 --- /dev/null +++ b/sca-java-1.x/branches/sca-java-1.6.2/tools/eclipse/features/core/filtered-resources/NOTICE @@ -0,0 +1,6 @@ +${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-1.x/branches/sca-java-1.6.2/tools/eclipse/features/core/filtered-resources/feature.xml b/sca-java-1.x/branches/sca-java-1.6.2/tools/eclipse/features/core/filtered-resources/feature.xml new file mode 100644 index 0000000000..649bffe695 --- /dev/null +++ b/sca-java-1.x/branches/sca-java-1.6.2/tools/eclipse/features/core/filtered-resources/feature.xml @@ -0,0 +1,87 @@ +<?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. +--> +<feature + id="org.apache.tuscany.sca.feature.core" + label="Apache Tuscany SCA Eclipse Tools Core" + version="${tuscany.eclipse.version}" + provider-name="Apache Software Foundation" + plugin="org.apache.tuscany.sca.core"> + + <description url="http://tuscany.apache.org"> + Apache Tuscany SCA Eclipse Tools Core + </description> + + <copyright> +Copyright (c) 2005 - 2010 The Apache Software Foundation + +This product includes software developed at +The Apache Software Foundation (http://www.apache.org/). + </copyright> + + <license url="LICENSE"> +Licensed to the Apache Software Foundation (ASF) under one or more contributor license +agreements. See the LICENSE and NOTICE files 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. + +APACHE TUSCANY SCA SUBCOMPONENTS: + +Apache Tuscany SCA for Java includes a number of subcomponents with separate copyright +notices and license terms. Your use of these subcomponents is subject to the terms and +conditions of the licenses shown in the LICENSE file contained in this distribution +and also available at + +http://www.apache.org/dist/tuscany/java/sca/${pom.version}/tuscany-sca-${pom.version}-updatesite/LICENSE + </license> + + <requires> + <import plugin="org.eclipse.ui.ide"/> + <import plugin="org.eclipse.core.resources"/> + <import plugin="org.eclipse.core.runtime"/> + <import plugin="org.eclipse.core.jobs"/> + <import plugin="org.eclipse.debug.core"/> + <import plugin="org.eclipse.debug.ui"/> + <import plugin="org.eclipse.jdt.core"/> + <import plugin="org.eclipse.jdt.debug.ui"/> + <import plugin="org.eclipse.jdt.launching"/> + <import plugin="org.eclipse.jdt.ui"/> + <import plugin="org.eclipse.jface"/> + <import plugin="org.eclipse.swt"/> + <import plugin="org.eclipse.osgi"/> + </requires> + + <plugin + id="org.apache.tuscany.sca.core" + download-size="0" + install-size="0" + version="${tuscany.eclipse.version}" + unpack="false"/> + +</feature> diff --git a/sca-java-1.x/branches/sca-java-1.6.2/tools/eclipse/features/core/pom.xml b/sca-java-1.x/branches/sca-java-1.6.2/tools/eclipse/features/core/pom.xml new file mode 100644 index 0000000000..f1ec9ec817 --- /dev/null +++ b/sca-java-1.x/branches/sca-java-1.6.2/tools/eclipse/features/core/pom.xml @@ -0,0 +1,111 @@ +<?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-sca-tools</artifactId> + <version>1.6.1-SNAPSHOT</version> + <relativePath>../../../pom.xml</relativePath> + </parent> + <artifactId>org.apache.tuscany.sca.feature.core</artifactId> + <name>Apache Tuscany SCA Eclipse Tools Core Feature</name> + + <dependencies> + <dependency> + <groupId>org.apache.tuscany.sca</groupId> + <artifactId>tuscany-sca-eclipse-tools</artifactId> + <version>1.6.1-SNAPSHOT</version> + <type>pom</type> + </dependency> + </dependencies> + + <build> + <resources> + <resource> + <directory>${basedir}</directory> + <excludes> + <exclude>**/.*/**</exclude> + <exclude>pom.xml</exclude> + <exclude>build.*</exclude> + <exclude>filtered-resources/**</exclude> + <exclude>target/**</exclude> + </excludes> + </resource> + </resources> + + <plugins> + <plugin> + <groupId>org.apache.maven.plugins</groupId> + <artifactId>maven-resources-plugin</artifactId> + <version>2.4.3</version> + <executions> + <!-- TUSCANY-3762: Copy resource files that need to be filtered --> + <execution> + <id>copy-filtered-resources</id> + <phase>generate-resources</phase> + <goals> + <goal>copy-resources</goal> + </goals> + <configuration> + <outputDirectory>${basedir}</outputDirectory> + <filters> + <filter>${basedir}/../../target/filter.properties</filter> + </filters> + <resources> + <resource> + <directory>${basedir}/filtered-resources</directory> + <filtering>true</filtering> + </resource> + </resources> + </configuration> + </execution> + </executions> + </plugin> + <plugin> + <groupId>org.apache.maven.plugins</groupId> + <artifactId>maven-jar-plugin</artifactId> + <configuration> + <archive> + <manifestFile>target/classes/META-INF/MANIFEST.MF</manifestFile> + </archive> + </configuration> + </plugin> + <plugin> + <groupId>org.apache.maven.plugins</groupId> + <artifactId>maven-clean-plugin</artifactId> + <configuration> + <filesets> + <!-- TUSCANY-3762: Delete copied filtered resource files --> + <fileset> + <directory>${basedir}</directory> + <includes> + <include>NOTICE</include> + <include>META-INF/**</include> + <include>feature.xml</include> + </includes> + </fileset> + </filesets> + </configuration> + </plugin> + </plugins> + </build> + +</project> diff --git a/sca-java-1.x/branches/sca-java-1.6.2/tools/eclipse/plugins/core/about.html b/sca-java-1.x/branches/sca-java-1.6.2/tools/eclipse/plugins/core/about.html new file mode 100644 index 0000000000..635798576f --- /dev/null +++ b/sca-java-1.x/branches/sca-java-1.6.2/tools/eclipse/plugins/core/about.html @@ -0,0 +1,56 @@ +<!-- + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. +--> +<html> +<head> +<title>About</title> +<meta http-equiv=Content-Type content="text/html; charset=ISO-8859-1"> +</head> +<body> +<h2>About Apache Tuscany SCA Eclipse Tools Core Plug-in</h2> + +<h3>Copyright</h3> + +<p>Copyright (c) 2005 - 2010 The Apache Software Foundation</p> + +<p>This product includes software developed by +The Apache Software Foundation (http://www.apache.org/).</p> + +<h3>License</h3> + +<p>Apache Tuscany SCA Eclipse Tools Core Plug-in is provided to you under the terms and conditions of the +Apache License Version 2.0. A copy of the Apache Licence is provided in the +<a href="about_files/LICENSE">LICENSE</a> file in this distribution and is also available at +<a href="http://www.apache.org/licenses/LICENSE-2.0">http://www.apache.org/licenses/LICENSE-2.0</a>. +See also the <a href="about_files/NOTICE">NOTICE</a> file in this distribution.</p> + +<h3>Third Party Content</h3> + +<p>The Content includes items that have been sourced from third parties as follows:</p> + +<h4>SCA Collaboration</h4> + +<p> +This product also includes software under the SCA Collaboration license +(see the <a href="about_files/LICENSE">LICENSE</a> file in this distribution), +with the following copyright:</p> + +<p>(c) Copyright SCA Collaboration 2006, 2007</p> + +</body> +</html> diff --git a/sca-java-1.x/branches/sca-java-1.6.2/tools/eclipse/plugins/core/about_files/LICENSE b/sca-java-1.x/branches/sca-java-1.6.2/tools/eclipse/plugins/core/about_files/LICENSE new file mode 100644 index 0000000000..ee8a5d7a42 --- /dev/null +++ b/sca-java-1.x/branches/sca-java-1.6.2/tools/eclipse/plugins/core/about_files/LICENSE @@ -0,0 +1,260 @@ + + 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. + + +================================================================================ + +APACHE TUSCANY SCA SUBCOMPONENTS: + +Apache Tuscany SCA for Java includes a number of subcomponents with +separate copyright notices and license terms. Your use of these subcomponents +is subject to the terms and conditions of the following licenses. + +================================================================================ + +This module includes XSD files under the following SCA Collaboration license: + +(c) Copyright SCA Collaboration 2006, 2007 + +License for the Service Component Architecture JavaDoc, Interface +Definition files and XSD files. + +The Service Component Architecture JavaDoc, Interface Definition files, +and XSD files are being provided by the copyright holders under the +following license. By using and/or copying this work, you agree that +you have read, understood and will comply with the following terms and +conditions: + +Permission to copy, display, make derivative works of, and distribute +the Service Component Architecture JavaDoc, Interface Definition Files +and XSD files (the "Artifacts") in any medium without fee or royalty is +hereby granted, provided that you include the following on ALL copies +of the Artifacts, or portions thereof, that you make: + +1. A link or URL to the Artifacts at this location: +http://www.osoa.org/display/Main/Service+Component+Architecture+Specifications + +2. The full text of this copyright notice as shown in the Artifacts. + +THE ARTIFACTS ARE PROVIDED "AS IS," AND THE AUTHORS MAKE NO +REPRESENTATIONS OR WARRANTIES, EXPRESS OR IMPLIED, REGARDING THE +ARTIFACTS AND THE IMPLEMENTATION OF THEIR CONTENTS, INCLUDING, BUT NOT +LIMITED TO, WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR +PURPOSE, NON-INFRINGEMENT OR TITLE. + +THE AUTHORS WILL NOT BE LIABLE FOR ANY DIRECT, INDIRECT, SPECIAL, +INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF OR RELATING TO ANY +USE OR DISTRIBUTION OF THE ARTIFACTS. + +The name and trademarks of the Authors may NOT be used in any manner, +including advertising or publicity pertaining to the Service Component +Architecture Specification or its contents without specific, written +prior permission. Title to copyright in the Service Component +Architecture Specification and the JavaDoc, Interface Definition Files +and XSD Files will at all times remain with the Authors. + +No other rights are granted by implication, estoppel or otherwise. + +Revision level 1.1, last updated on 2007/11/19 + +================================================================================ diff --git a/sca-java-1.x/branches/sca-java-1.6.2/tools/eclipse/plugins/core/build.properties b/sca-java-1.x/branches/sca-java-1.6.2/tools/eclipse/plugins/core/build.properties new file mode 100644 index 0000000000..5d09471dab --- /dev/null +++ b/sca-java-1.x/branches/sca-java-1.6.2/tools/eclipse/plugins/core/build.properties @@ -0,0 +1,27 @@ +output.. = bin/ +bin.includes = META-INF/,\ + plugin.xml,\ + xsd/,\ + exsd/,\ + icons/,\ + .,\ + about.html,\ + about_files/,\ + about.ini,\ + org/ +src.includes = xsd/,\ + exsd/,\ + plugin.xml,\ + .classpath,\ + .project,\ + META-INF/,\ + about.html,\ + about_files/,\ + about.ini,\ + build.properties,\ + icons/,\ + .settings/,\ + org/,\ + pom.xml +jars.compile.order = . +source.. = src/main/java diff --git a/sca-java-1.x/branches/sca-java-1.6.2/tools/eclipse/plugins/core/exsd/runtimeLibraries.exsd b/sca-java-1.x/branches/sca-java-1.6.2/tools/eclipse/plugins/core/exsd/runtimeLibraries.exsd new file mode 100644 index 0000000000..700d056838 --- /dev/null +++ b/sca-java-1.x/branches/sca-java-1.6.2/tools/eclipse/plugins/core/exsd/runtimeLibraries.exsd @@ -0,0 +1,109 @@ +<?xml version='1.0' encoding='UTF-8'?> +<!-- Schema file written by PDE --> +<schema targetNamespace="org.apache.tuscany.sca.core"> +<annotation> + <appInfo> + <meta.schema plugin="org.apache.tuscany.sca.core" id="runtimeLibraries" name="Tuscany Runtime Libraries"/> + </appInfo> + <documentation> + [Enter description of this extension point.] + </documentation> + </annotation> + + <element name="extension"> + <complexType> + <attribute name="point" type="string" use="required"> + <annotation> + <documentation> + + </documentation> + </annotation> + </attribute> + <attribute name="id" type="string"> + <annotation> + <documentation> + + </documentation> + </annotation> + </attribute> + <attribute name="name" type="string"> + <annotation> + <documentation> + + </documentation> + <appInfo> + <meta.attribute translatable="true"/> + </appInfo> + </annotation> + </attribute> + </complexType> + </element> + + <element name="classpathContainer"> + <complexType> + <attribute name="id" type="string" use="required"> + <annotation> + <documentation> + + </documentation> + </annotation> + </attribute> + <attribute name="class" type="string"> + <annotation> + <documentation> + + </documentation> + <appInfo> + <meta.attribute kind="java" basedOn=":org.eclipse.jdt.core.IClasspathContainer"/> + </appInfo> + </annotation> + </attribute> + </complexType> + </element> + + <annotation> + <appInfo> + <meta.section type="since"/> + </appInfo> + <documentation> + [Enter the first release in which this extension point appears.] + </documentation> + </annotation> + + <annotation> + <appInfo> + <meta.section type="examples"/> + </appInfo> + <documentation> + [Enter extension point usage example here.] + </documentation> + </annotation> + + <annotation> + <appInfo> + <meta.section type="apiInfo"/> + </appInfo> + <documentation> + [Enter API information here.] + </documentation> + </annotation> + + <annotation> + <appInfo> + <meta.section type="implementation"/> + </appInfo> + <documentation> + [Enter information about supplied implementation of this extension point.] + </documentation> + </annotation> + + <annotation> + <appInfo> + <meta.section type="copyright"/> + </appInfo> + <documentation> + + </documentation> + </annotation> + +</schema> diff --git a/sca-java-1.x/branches/sca-java-1.6.2/tools/eclipse/plugins/core/filtered-resources/META-INF/MANIFEST.MF b/sca-java-1.x/branches/sca-java-1.6.2/tools/eclipse/plugins/core/filtered-resources/META-INF/MANIFEST.MF new file mode 100644 index 0000000000..df88abf138 --- /dev/null +++ b/sca-java-1.x/branches/sca-java-1.6.2/tools/eclipse/plugins/core/filtered-resources/META-INF/MANIFEST.MF @@ -0,0 +1,31 @@ +Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: Apache Tuscany SCA Eclipse Tools Core
+Bundle-SymbolicName: org.apache.tuscany.sca.core;singleton:=true
+Bundle-Version: ${tuscany.eclipse.version}
+Import-Package: org.eclipse.core.resources,
+ org.eclipse.core.runtime,
+ org.eclipse.core.runtime.jobs,
+ org.eclipse.debug.core,
+ org.eclipse.debug.core.model,
+ org.eclipse.debug.ui,
+ org.eclipse.debug.ui.sourcelookup,
+ org.eclipse.jdt.core,
+ org.eclipse.jdt.debug.ui.launchConfigurations,
+ org.eclipse.jdt.launching,
+ org.eclipse.jdt.ui.wizards,
+ org.eclipse.jface.dialogs,
+ org.eclipse.jface.operation,
+ org.eclipse.jface.resource,
+ org.eclipse.jface.viewers,
+ org.eclipse.jface.wizard,
+ org.eclipse.osgi.service.datalocation;version="1.0.0",
+ org.eclipse.swt,
+ org.eclipse.swt.graphics,
+ org.eclipse.swt.widgets,
+ org.eclipse.ui,
+ org.eclipse.ui.progress,
+ org.osgi.framework;version="1.3.0"
+Bundle-Vendor: Apache Software Foundation
+Bundle-RequiredExecutionEnvironment: J2SE-1.5
+Require-Bundle: org.eclipse.ui.ide
diff --git a/sca-java-1.x/branches/sca-java-1.6.2/tools/eclipse/plugins/core/filtered-resources/about.ini b/sca-java-1.x/branches/sca-java-1.6.2/tools/eclipse/plugins/core/filtered-resources/about.ini new file mode 100644 index 0000000000..40f7cb3437 --- /dev/null +++ b/sca-java-1.x/branches/sca-java-1.6.2/tools/eclipse/plugins/core/filtered-resources/about.ini @@ -0,0 +1,32 @@ +# +# 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. +# +aboutText=Apache Tuscany SCA Eclipse Tools Core\n\ +\n\ +Copyright (c) 2005 - 2010 The Apache Software Foundation\n\ +Visit http://tuscany.apache.org/\n\ +\n\ +This product includes software developed by The Apache Software Foundation http://www.apache.org/\n\ +\n\ +Apache Tuscany SCA for Java includes a number of subcomponents with separate copyright notices and license\n\ +terms. Your use of these subcomponents is subject to the terms and conditions of the licenses shown at\n\ +http://www.apache.org/dist/tuscany/java/sca/${pom.version}/tuscany-sca-${pom.version}-updatesite/LICENSE + +aboutImage=icons/tuscany.gif +windowImage=icons/t.gif +featureImage=icons/t.gif diff --git a/sca-java-1.x/branches/sca-java-1.6.2/tools/eclipse/plugins/core/filtered-resources/about_files/NOTICE b/sca-java-1.x/branches/sca-java-1.6.2/tools/eclipse/plugins/core/filtered-resources/about_files/NOTICE new file mode 100644 index 0000000000..ad2ba40961 --- /dev/null +++ b/sca-java-1.x/branches/sca-java-1.6.2/tools/eclipse/plugins/core/filtered-resources/about_files/NOTICE @@ -0,0 +1,6 @@ +${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-1.x/branches/sca-java-1.6.2/tools/eclipse/plugins/core/filtered-resources/org/apache/tuscany/sca/core/feature.version b/sca-java-1.x/branches/sca-java-1.6.2/tools/eclipse/plugins/core/filtered-resources/org/apache/tuscany/sca/core/feature.version new file mode 100644 index 0000000000..6bcf8a724b --- /dev/null +++ b/sca-java-1.x/branches/sca-java-1.6.2/tools/eclipse/plugins/core/filtered-resources/org/apache/tuscany/sca/core/feature.version @@ -0,0 +1 @@ +${tuscany.eclipse.version}
diff --git a/sca-java-1.x/branches/sca-java-1.6.2/tools/eclipse/plugins/core/icons/t.gif b/sca-java-1.x/branches/sca-java-1.6.2/tools/eclipse/plugins/core/icons/t.gif Binary files differnew file mode 100644 index 0000000000..ba896ced08 --- /dev/null +++ b/sca-java-1.x/branches/sca-java-1.6.2/tools/eclipse/plugins/core/icons/t.gif diff --git a/sca-java-1.x/branches/sca-java-1.6.2/tools/eclipse/plugins/core/icons/tuscany.gif b/sca-java-1.x/branches/sca-java-1.6.2/tools/eclipse/plugins/core/icons/tuscany.gif Binary files differnew file mode 100644 index 0000000000..849dd76d4a --- /dev/null +++ b/sca-java-1.x/branches/sca-java-1.6.2/tools/eclipse/plugins/core/icons/tuscany.gif diff --git a/sca-java-1.x/branches/sca-java-1.6.2/tools/eclipse/plugins/core/plugin.xml b/sca-java-1.x/branches/sca-java-1.6.2/tools/eclipse/plugins/core/plugin.xml new file mode 100644 index 0000000000..97c1d86623 --- /dev/null +++ b/sca-java-1.x/branches/sca-java-1.6.2/tools/eclipse/plugins/core/plugin.xml @@ -0,0 +1,149 @@ +<?xml version="1.0" encoding="UTF-8"?> +<?eclipse version="3.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. +--> +<plugin> + + <extension-point id="runtimeLibraries" + name="Tuscany Runtime Libraries" + schema="exsd/runtimeLibraries.exsd"/> + + <extension point = "org.eclipse.wst.xml.core.catalogContributions"> + <catalogContribution id="default"> + <uri name="http://www.osoa.org/xmlns/sca/1.0" uri="xsd/sca-all.xsd"/> + </catalogContribution> + </extension> + + <extension point = "org.eclipse.wst.xml.core.catalogContributions"> + <catalogContribution id="default"> + <uri name="http://tuscany.apache.org/xmlns/sca/1.0" uri="xsd/tuscany-sca.xsd"/> + </catalogContribution> + </extension> + + <extension point="org.eclipse.core.runtime.contentTypes"> + <file-association content-type="org.eclipse.core.runtime.xml" file-extensions="composite"/> + <file-association content-type="org.eclipse.core.runtime.xml" file-extensions="componentType"/> + </extension> + + <extension + point="org.apache.tuscany.sca.core.runtimeLibraries"> + <classpathContainer + id="org.apache.tuscany.sca.runtime.library" + class="org.apache.tuscany.sca.core.classpath.TuscanyRuntimeClasspathContainer"/> + </extension> + + <extension point="org.eclipse.jdt.core.classpathContainerInitializer"> + <classpathContainerInitializer + id="org.apache.tuscany.sca.runtime.library" + class="org.apache.tuscany.sca.core.classpath.TuscanyClasspathContainerInitializer"/> + </extension> + + <extension point="org.eclipse.jdt.ui.classpathContainerPage"> + <classpathContainerPage + id="org.apache.tuscany.sca.runtime.library" + name="Tuscany Library" + class="org.apache.tuscany.sca.core.classpath.TuscanyLibraryEntryPage"> + </classpathContainerPage> + </extension> + + <extension + point="org.eclipse.ui.actionSets"> + <actionSet + label="Tuscany" + visible="true" + id="org.apache.tuscany.sca.core.launch.actionSet"> + <action + label="&Start SCA Domain Manager" + icon="icons/t.gif" + class="org.apache.tuscany.sca.core.launch.TuscanyLaunchDomainManagerAction" + tooltip="Start SCA Domain Manager" + toolbarPath="tuscanyGroup" + id="org.apache.tuscany.sca.core.launch.TuscanyLaunchDomainManagerAction"> + </action> + </actionSet> + </extension> + + <extension point="org.eclipse.debug.core.launchConfigurationTypes"> + <launchConfigurationType + name="Tuscany" + delegate="org.apache.tuscany.sca.core.launch.TuscanyLaunchConfigurationDelegate" + modes="run, debug" + sourceLocatorId="org.eclipse.jdt.launching.sourceLocator.JavaSourceLookupDirector" + sourcePathComputerId="org.eclipse.jdt.launching.sourceLookup.javaSourcePathComputer" + id="org.apache.tuscany.sca.core.launch.configurationtype"> + </launchConfigurationType> + </extension> + + <extension point="org.eclipse.debug.ui.launchConfigurationTypeImages"> + <launchConfigurationTypeImage + icon="icons/t.gif" + configTypeID="org.apache.tuscany.sca.core.launch.configurationtype" + id="org.apache.tuscany.sca.core.launch.configurationtypeimage"> + </launchConfigurationTypeImage> + </extension> + + <extension point="org.eclipse.debug.ui.launchConfigurationTabGroups"> + <launchConfigurationTabGroup + type="org.apache.tuscany.sca.core.launch.configurationtype" + class="org.apache.tuscany.sca.core.launch.TuscanyLaunchConfigurationTabGroup" + id="org.apache.tuscany.sca.core.launch.configurationtypetabgroup"> + </launchConfigurationTabGroup> + </extension> + + <extension point="org.eclipse.debug.ui.launchShortcuts"> + <shortcut + id="org.apache.tuscany.sca.core.launchshortcut" + class="org.apache.tuscany.sca.core.launch.TuscanyLaunchNodeShortcut" + label="Tuscany" + icon="icons/t.gif" + modes="run, debug"> + <contextualLaunch> + <enablement> + <with variable="selection"> + <count value="1"/> + <iterate> + <or> + <test property="org.eclipse.debug.ui.matchesPattern" value="*.composite"/> + </or> + </iterate> + </with> + </enablement> + </contextualLaunch> + </shortcut> + </extension> + + <extension point="org.eclipse.ui.newWizards"> + <category name="Tuscany" id="org.apache.tuscany.sca.core.newwizards" /> + <wizard name="Composite" icon="icons/t.gif" + category="org.apache.tuscany.sca.core.newwizards" + class="org.apache.tuscany.sca.core.newwizards.NewCompositeWizard" + preferredPerspectives="org.eclipse.jdt.ui.JavaPerspective" + id="org.apache.tuscany.sca.core.newwizards.newcompositewizard"> + <description>Create a new SCA Composite</description> + </wizard> + <wizard name="ComponentType" icon="icons/t.gif" + category="org.apache.tuscany.sca.core.newwizards" + class="org.apache.tuscany.sca.core.newwizards.NewComponentTypeWizard" + preferredPerspectives="org.eclipse.jdt.ui.JavaPerspective" + id="org.apache.tuscany.sca.core.newwizards.newcompositewizard"> + <description>Create a new SCA ComponentType</description> + </wizard> + </extension> + +</plugin> diff --git a/sca-java-1.x/branches/sca-java-1.6.2/tools/eclipse/plugins/core/pom.xml b/sca-java-1.x/branches/sca-java-1.6.2/tools/eclipse/plugins/core/pom.xml new file mode 100644 index 0000000000..6bb0a138d9 --- /dev/null +++ b/sca-java-1.x/branches/sca-java-1.6.2/tools/eclipse/plugins/core/pom.xml @@ -0,0 +1,153 @@ +<?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-sca-tools</artifactId> + <version>1.6.1-SNAPSHOT</version> + <relativePath>../../../pom.xml</relativePath> + </parent> + <artifactId>org.apache.tuscany.sca.core</artifactId> + <name>Apache Tuscany SCA Eclipse Tools Core Plug-in</name> + + <dependencies> + <dependency> + <groupId>org.apache.tuscany.sca</groupId> + <artifactId>tuscany-sca-eclipse-tools</artifactId> + <version>1.6.1-SNAPSHOT</version> + <type>pom</type> + </dependency> + <dependency> + <groupId>org.eclipse.jdt.debug</groupId> + <artifactId>ui</artifactId> + <version>3.2.100-v20070531-1800</version> + <!-- + Exclude org.eclipse.equinox:app to avoid maven bug/bad equinox version scheme. i.e.: + + Couldn't find a version in [1.0.0-v20070606] to match range [1.0.0,2.0.0) + org.eclipse.equinox:app:jar:null + --> + <exclusions> + <exclusion> + <groupId>org.eclipse.equinox</groupId> + <artifactId>app</artifactId> + </exclusion> + </exclusions> + </dependency> + <dependency> + <groupId>org.eclipse.swt.win32.win32</groupId> + <artifactId>x86</artifactId> + <version>3.3.0-v3346</version> + </dependency> + <!-- + Now include org.eclipse.equinox:app explicitly + --> + <dependency> + <groupId>org.eclipse.equinox</groupId> + <artifactId>app</artifactId> + <version>1.0.0-v20070606</version> + </dependency> + </dependencies> + + <build> + <resources> + <resource> + <directory>${basedir}</directory> + <excludes> + <exclude>src/**</exclude> + <exclude>**/.*/**</exclude> + <exclude>pom.xml</exclude> + <exclude>build.*</exclude> + <exclude>filtered-resources/**</exclude> + <exclude>target/**</exclude> + </excludes> + </resource> + </resources> + + <plugins> + <plugin> + <groupId>org.apache.maven.plugins</groupId> + <artifactId>maven-resources-plugin</artifactId> + <version>2.4.3</version> + <executions> + <!-- TUSCANY-3762: Copy resource files that need to be filtered --> + <execution> + <id>copy-filtered-resources</id> + <phase>generate-resources</phase> + <goals> + <goal>copy-resources</goal> + </goals> + <configuration> + <outputDirectory>${basedir}</outputDirectory> + <filters> + <filter>${basedir}/../../target/filter.properties</filter> + </filters> + <resources> + <resource> + <directory>${basedir}/filtered-resources</directory> + <filtering>true</filtering> + </resource> + </resources> + </configuration> + </execution> + </executions> + </plugin> + <plugin> + <groupId>org.apache.maven.plugins</groupId> + <artifactId>maven-jar-plugin</artifactId> + <configuration> + <archive> + <manifestFile>target/classes/META-INF/MANIFEST.MF</manifestFile> + </archive> + </configuration> + </plugin> + <plugin> + <groupId>org.apache.maven.plugins</groupId> + <artifactId>maven-clean-plugin</artifactId> + <configuration> + <filesets> + <!-- TUSCANY-3762: Delete copied filtered resource files --> + <fileset> + <directory>${basedir}</directory> + <includes> + <include>about.ini</include> + <include>about_files/NOTICE</include> + <include>META-INF/**</include> + <include>org/**</include> + </includes> + </fileset> + </filesets> + </configuration> + </plugin> + </plugins> + </build> + + <repositories> + <repository> + <id>repo1.eclipse</id> + <url>http://repo1.maven.org/eclipse/</url> + <snapshots> + <enabled>true</enabled> + </snapshots> + </repository> + </repositories> + +</project> diff --git a/sca-java-1.x/branches/sca-java-1.6.2/tools/eclipse/plugins/core/src/main/java/org/apache/tuscany/sca/core/classpath/ClasspathUtil.java b/sca-java-1.x/branches/sca-java-1.6.2/tools/eclipse/plugins/core/src/main/java/org/apache/tuscany/sca/core/classpath/ClasspathUtil.java new file mode 100644 index 0000000000..8dbe0c2804 --- /dev/null +++ b/sca-java-1.x/branches/sca-java-1.6.2/tools/eclipse/plugins/core/src/main/java/org/apache/tuscany/sca/core/classpath/ClasspathUtil.java @@ -0,0 +1,187 @@ +/*
+ * 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.core.classpath;
+
+import static org.apache.tuscany.sca.core.log.LogUtil.error;
+
+import java.io.BufferedReader;
+import java.io.File;
+import java.io.FileNotFoundException;
+import java.io.InputStream;
+import java.io.InputStreamReader;
+import java.net.URL;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IConfigurationElement;
+import org.eclipse.core.runtime.IExtension;
+import org.eclipse.core.runtime.IPath;
+import org.eclipse.core.runtime.Path;
+import org.eclipse.core.runtime.Platform;
+import org.eclipse.jdt.core.IClasspathContainer;
+import org.eclipse.jdt.core.IClasspathEntry;
+
+/**
+ * Utility functions to help determine the runtime classpath.
+ *
+ * @version $Rev: $ $Date: $
+ */
+public class ClasspathUtil {
+
+ private static final String TUSCANY_RUNTIME_LIBRARIES = "org.apache.tuscany.sca.core.runtimeLibraries";
+
+ private static final String VERSION_RESOURCE = "/org/apache/tuscany/sca/core/feature.version";
+ private static final String TUSCANY_FEATURE = "org.apache.tuscany.sca.feature.core";
+
+ /**
+ * Return the installed runtime classpath entries.
+ *
+ * @return
+ * @throws CoreException
+ */
+ public static String installedRuntimeClasspath() throws CoreException {
+
+ List<IClasspathEntry> classpathEntries = new ArrayList<IClasspathEntry>();
+ for (IExtension extension: Platform.getExtensionRegistry().getExtensionPoint(TUSCANY_RUNTIME_LIBRARIES).getExtensions()) {
+ for (IConfigurationElement configuration: extension.getConfigurationElements()) {
+ IClasspathContainer container = (IClasspathContainer)configuration.createExecutableExtension("class");
+ classpathEntries.addAll(Arrays.asList(container.getClasspathEntries()));
+ }
+ }
+
+ String separator = System.getProperty("path.separator");
+ StringBuffer classpath = new StringBuffer();
+ for (int i = 0, n = classpathEntries.size(); i < n; i++) {
+ IClasspathEntry entry = classpathEntries.get(i);
+ if (i >0) {
+ classpath.append(separator);
+ }
+ classpath.append(entry.getPath().toFile().toURI().getPath());
+ }
+
+ return classpath.toString();
+ }
+
+ /**
+ * Returns the Tuscany feature location.
+ *
+ * @return
+ */
+ static IPath feature() {
+ Path featurePath = null;
+ Exception ex = null;
+ try {
+ InputStream resourceStream = ClasspathUtil.class.getResourceAsStream(VERSION_RESOURCE);
+ if (resourceStream != null) {
+ BufferedReader reader = new BufferedReader(new InputStreamReader(resourceStream, "UTF-8"));
+ String featureVersion = reader.readLine().trim();
+ reader.close();
+ URL location = Platform.getInstallLocation().getURL();
+ File feature = new File(location.getPath() + "/features/" + TUSCANY_FEATURE + "_" + featureVersion);
+ featurePath = new Path(feature.getPath());
+ }
+ } catch (Exception e) {
+ ex = e;
+ }
+
+ if (featurePath != null) {
+ return featurePath;
+ } else {
+ error("Tuscany runtime feature not found", ex);
+ return null;
+ }
+ }
+
+ /**
+ * Returns the location of the runtime distribution under the Tuscany feature.
+ *
+ * @param feature
+ * @return
+ */
+ static IPath runtime(IPath feature) {
+ IPath runtimePath = null;
+ try {
+
+ // Find the Tuscany distribution under the feature's runtime directory
+ // Typically runtime/distro-archive-name/un-archived-distro-dir
+ File file = new File(feature.toFile(), "runtime");
+ if (file.exists()) {
+ File distro = null;
+ for (File f: file.listFiles()) {
+ if (f.getName().contains("tuscany-sca")) {
+ distro = f;
+ break;
+ }
+ }
+ if (distro != null) {
+ for (File f: distro.listFiles()) {
+ if (f.getName().contains("tuscany-sca")) {
+ runtimePath = new Path(f.getPath());
+ break;
+ }
+ }
+ if (runtimePath == null) {
+ error("Tuscany runtime distribution directory not found", new FileNotFoundException(distro.getAbsolutePath()));
+ }
+ } else {
+ error("Tuscany runtime distribution archive not found", new FileNotFoundException(file.getAbsolutePath()));
+ }
+ } else {
+ error("Tuscany runtime feature not found", new FileNotFoundException(file.getAbsolutePath()));
+ }
+ } catch (Exception e) {
+ error("Tuscany runtime feature not found", e);
+ }
+ return runtimePath;
+ }
+
+ /**
+ * Returns the location of the src distribution under the Tuscany feature.
+ *
+ * @param feature
+ * @return
+ */
+ static IPath src(IPath feature) {
+ IPath sourcePath = null;
+ try {
+
+ // Find the Tuscany source distribution under the feature's src directory
+ // Typically src/distro-archive-src.zip
+ File file = new File(feature.toFile(), "src");
+ if (file.exists()) {
+ File distro = null;
+ for (File f: file.listFiles()) {
+ if (f.getName().contains("tuscany-sca") && f.getName().endsWith("-src.zip")) {
+ distro = f;
+ break;
+ }
+ }
+ if (distro != null) {
+ sourcePath = new Path(distro.getPath());
+ }
+ }
+ } catch (Exception e) {
+ }
+ return sourcePath;
+ }
+
+}
diff --git a/sca-java-1.x/branches/sca-java-1.6.2/tools/eclipse/plugins/core/src/main/java/org/apache/tuscany/sca/core/classpath/TuscanyClasspathContainer.java b/sca-java-1.x/branches/sca-java-1.6.2/tools/eclipse/plugins/core/src/main/java/org/apache/tuscany/sca/core/classpath/TuscanyClasspathContainer.java new file mode 100644 index 0000000000..c1a674a46a --- /dev/null +++ b/sca-java-1.x/branches/sca-java-1.6.2/tools/eclipse/plugins/core/src/main/java/org/apache/tuscany/sca/core/classpath/TuscanyClasspathContainer.java @@ -0,0 +1,154 @@ +/* + * 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.core.classpath; + +import static org.apache.tuscany.sca.core.classpath.ClasspathUtil.feature; +import static org.apache.tuscany.sca.core.classpath.ClasspathUtil.runtime; +import static org.apache.tuscany.sca.core.classpath.ClasspathUtil.src; + +import java.io.File; +import java.util.ArrayList; +import java.util.List; + +import org.eclipse.core.runtime.IPath; +import org.eclipse.core.runtime.Path; +import org.eclipse.jdt.core.IClasspathContainer; +import org.eclipse.jdt.core.IClasspathEntry; +import org.eclipse.jdt.core.JavaCore; + +/** + * A classpath container for the Tuscany runtime. + * + * @version $Rev$ $Date$ + */ +public class TuscanyClasspathContainer implements IClasspathContainer { + + public static final IPath TUSCANY_LIBRARY_CONTAINER = new Path("org.apache.tuscany.sca.runtime.library"); + + private static final String TUSCANY_HOME = "TUSCANY_HOME"; + private static final String TUSCANY_SRC = "TUSCANY_SRC"; + + public TuscanyClasspathContainer() { + } + + public IClasspathEntry[] getClasspathEntries() { + List<IClasspathEntry> list = new ArrayList<IClasspathEntry>(); + + // Find the Tuscany feature + IPath feature = feature(); + + // Get the runtime location from the installed Tuscany feature + IPath runtimePath = runtime(feature); + + if (runtimePath == null) { + + // Try to get the location of the Tuscany binary distribution from + // the TUSCANY_HOME property or environment variable + String home = System.getProperty(TUSCANY_HOME); + if (home == null || home.length() == 0) { + home = System.getenv(TUSCANY_HOME); + } + if (home != null && home.length() != 0) { + if (new File(home).exists()) { + runtimePath = new Path(home); + } + } + } + + // Get the source location from the installed Tuscany feature + IPath sourcePath = src(feature); + + if (sourcePath == null) { + + // Try to get the location of the Tuscany source distribution from + // the TUSCANY_SRC property or environment variable + String source = System.getProperty(TUSCANY_SRC); + if (source == null || source.length() == 0) { + source = System.getenv(TUSCANY_SRC); + } + if (source != null && source.length() != 0) { + if (new File(source).exists()) { + sourcePath = new Path(source); + } + } + } + + // Add the JARs from runtime/lib and runtime/modules as classpath entries + if (runtimePath != null) { + + // Add a selection of the jars from runtime/modules + File modulesDirectory = runtimePath.append("modules").toFile(); + if (modulesDirectory != null && modulesDirectory.exists()) { + for (File file : modulesDirectory.listFiles()) { + IPath path = new Path(file.getPath()); + String name = path.lastSegment(); + String extension = path.getFileExtension(); + + // Only include API and launcher JARs + if (!"jar".equals(extension)) { + continue; + } + if (name.indexOf("-api-") == -1 && name.indexOf("-launcher-") == -1) { + continue; + } + if (name.startsWith("tuscany-node-api-") || name.startsWith("tuscany-domain-api-")) { + continue; + } + + list.add(JavaCore.newLibraryEntry(path, sourcePath, null)); + } + } + + File libDirectory = runtimePath.append("lib").toFile(); + if (libDirectory != null && libDirectory.exists()) { + for (File file : libDirectory.listFiles()) { + IPath path = new Path(file.getPath()); + String name = path.lastSegment(); + String extension = path.getFileExtension(); + + // Only include jaxb, jaxws and jsr API JARs + if (!"jar".equals(extension)) { + continue; + } + if (name.indexOf("-api-") != -1) { + if (name.startsWith("jaxb") || name.startsWith("jaxws") || name.startsWith("jsr")) { + list.add(JavaCore.newLibraryEntry(path, sourcePath, null)); + } + } + } + } + } + + return (IClasspathEntry[])list.toArray(new IClasspathEntry[list.size()]); + } + + public String getDescription() { + return "Tuscany Library"; + } + + public int getKind() { + return IClasspathContainer.K_APPLICATION; + } + + public IPath getPath() { + return TUSCANY_LIBRARY_CONTAINER; + } + +} diff --git a/sca-java-1.x/branches/sca-java-1.6.2/tools/eclipse/plugins/core/src/main/java/org/apache/tuscany/sca/core/classpath/TuscanyClasspathContainerInitializer.java b/sca-java-1.x/branches/sca-java-1.6.2/tools/eclipse/plugins/core/src/main/java/org/apache/tuscany/sca/core/classpath/TuscanyClasspathContainerInitializer.java new file mode 100644 index 0000000000..c82281b243 --- /dev/null +++ b/sca-java-1.x/branches/sca-java-1.6.2/tools/eclipse/plugins/core/src/main/java/org/apache/tuscany/sca/core/classpath/TuscanyClasspathContainerInitializer.java @@ -0,0 +1,50 @@ +/* + * 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.core.classpath; + +import org.eclipse.core.runtime.CoreException; +import org.eclipse.core.runtime.IPath; +import org.eclipse.jdt.core.ClasspathContainerInitializer; +import org.eclipse.jdt.core.IClasspathContainer; +import org.eclipse.jdt.core.IJavaProject; +import org.eclipse.jdt.core.JavaCore; + +/** + * A classpath container initializer for the Tuscany runtime. + * + * @version $Rev$ $Date$ + */ +public class TuscanyClasspathContainerInitializer extends ClasspathContainerInitializer { + + @Override + public void initialize(IPath containerPath, IJavaProject project) throws CoreException { + + TuscanyClasspathContainer classpathContainer = new TuscanyClasspathContainer(); + JavaCore.setClasspathContainer(containerPath, + new IJavaProject[] {project}, + new IClasspathContainer[] {classpathContainer}, + null); + } + + @Override + public boolean canUpdateClasspathContainer(IPath containerPath, IJavaProject project) { + return true; + } +} diff --git a/sca-java-1.x/branches/sca-java-1.6.2/tools/eclipse/plugins/core/src/main/java/org/apache/tuscany/sca/core/classpath/TuscanyLibraryEntryPage.java b/sca-java-1.x/branches/sca-java-1.6.2/tools/eclipse/plugins/core/src/main/java/org/apache/tuscany/sca/core/classpath/TuscanyLibraryEntryPage.java new file mode 100644 index 0000000000..21f6f27a6f --- /dev/null +++ b/sca-java-1.x/branches/sca-java-1.6.2/tools/eclipse/plugins/core/src/main/java/org/apache/tuscany/sca/core/classpath/TuscanyLibraryEntryPage.java @@ -0,0 +1,69 @@ +/* + * 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.core.classpath; + +import org.eclipse.jdt.core.IClasspathEntry; +import org.eclipse.jdt.core.JavaCore; +import org.eclipse.jdt.ui.wizards.IClasspathContainerPage; +import org.eclipse.jface.wizard.WizardPage; +import org.eclipse.swt.SWT; +import org.eclipse.swt.widgets.Composite; +import org.eclipse.swt.widgets.Label; + +/** + * A classpath container page for the Tuscany runtime library. + * + * @version $Rev$ $Date$ + */ +public class TuscanyLibraryEntryPage extends WizardPage implements IClasspathContainerPage { + + private IClasspathEntry classpathEntry; + + public TuscanyLibraryEntryPage() { + super("Tuscany"); + } + + public void createControl(Composite parent) { + setTitle("Tuscany Library"); + + Label label = new Label(parent, SWT.NONE); + label.setText("Press Finish to add the Tuscany Library"); + label.setFont(parent.getFont()); + + setControl(label); + } + + public boolean finish() { + classpathEntry = JavaCore.newContainerEntry(TuscanyClasspathContainer.TUSCANY_LIBRARY_CONTAINER); + return true; + } + + public boolean isPageComplete() { + return true; + } + + public IClasspathEntry getSelection() { + return classpathEntry; + } + + public void setSelection(IClasspathEntry containerEntry) { + this.classpathEntry = containerEntry; + } +} diff --git a/sca-java-1.x/branches/sca-java-1.6.2/tools/eclipse/plugins/core/src/main/java/org/apache/tuscany/sca/core/classpath/TuscanyRuntimeClasspathContainer.java b/sca-java-1.x/branches/sca-java-1.6.2/tools/eclipse/plugins/core/src/main/java/org/apache/tuscany/sca/core/classpath/TuscanyRuntimeClasspathContainer.java new file mode 100644 index 0000000000..df73402b67 --- /dev/null +++ b/sca-java-1.x/branches/sca-java-1.6.2/tools/eclipse/plugins/core/src/main/java/org/apache/tuscany/sca/core/classpath/TuscanyRuntimeClasspathContainer.java @@ -0,0 +1,89 @@ +/* + * 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.core.classpath; + +import static org.apache.tuscany.sca.core.classpath.ClasspathUtil.feature; +import static org.apache.tuscany.sca.core.classpath.ClasspathUtil.runtime; + +import java.io.File; + +import org.eclipse.core.runtime.IPath; +import org.eclipse.core.runtime.Path; +import org.eclipse.jdt.core.IClasspathContainer; +import org.eclipse.jdt.core.IClasspathEntry; +import org.eclipse.jdt.core.JavaCore; + +/** + * A classpath container for the Tuscany runtime. + * + * @version $Rev$ $Date$ + */ +public class TuscanyRuntimeClasspathContainer implements IClasspathContainer { + + public static final IPath TUSCANY_LIBRARY_CONTAINER = new Path("org.apache.tuscany.sca.runtime.library"); + + private static final String TUSCANY_HOME = "TUSCANY_HOME"; + + public TuscanyRuntimeClasspathContainer() { + } + + public IClasspathEntry[] getClasspathEntries() { + + // Find the Tuscany feature + IPath feature = feature(); + + // Get the runtime location from the installed Tuscany feature + IPath runtimePath = runtime(feature); + + if (runtimePath == null) { + + // Try to get the location of the Tuscany binary distribution from + // the TUSCANY_HOME property or environment variable + String home = System.getProperty(TUSCANY_HOME); + if (home == null || home.length() == 0) { + home = System.getenv(TUSCANY_HOME); + } + if (home != null && home.length() != 0) { + if (new File(home).exists()) { + runtimePath = new Path(home); + } + } + } + + if (runtimePath != null) { + return new IClasspathEntry[] {JavaCore.newLibraryEntry(runtimePath, null, null)}; + } else { + return new IClasspathEntry[0]; + } + } + + public String getDescription() { + return "Tuscany Library"; + } + + public int getKind() { + return IClasspathContainer.K_APPLICATION; + } + + public IPath getPath() { + return TUSCANY_LIBRARY_CONTAINER; + } + +} diff --git a/sca-java-1.x/branches/sca-java-1.6.2/tools/eclipse/plugins/core/src/main/java/org/apache/tuscany/sca/core/launch/DomainManagerLauncherUtil.java b/sca-java-1.x/branches/sca-java-1.6.2/tools/eclipse/plugins/core/src/main/java/org/apache/tuscany/sca/core/launch/DomainManagerLauncherUtil.java new file mode 100644 index 0000000000..bd255f4a15 --- /dev/null +++ b/sca-java-1.x/branches/sca-java-1.6.2/tools/eclipse/plugins/core/src/main/java/org/apache/tuscany/sca/core/launch/DomainManagerLauncherUtil.java @@ -0,0 +1,255 @@ +/* + * 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.core.launch; + +import static org.apache.tuscany.sca.core.launch.TuscanyLaunchConfigurationDelegate.TUSCANY_LAUNCH_CONFIGURATIONTYPE; + +import java.io.BufferedReader; +import java.io.ByteArrayInputStream; +import java.io.IOException; +import java.io.InputStreamReader; +import java.io.OutputStream; +import java.net.Socket; + +import org.apache.tuscany.sca.core.classpath.ClasspathUtil; +import org.apache.tuscany.sca.core.classpath.TuscanyClasspathContainer; +import org.eclipse.core.resources.IFile; +import org.eclipse.core.resources.IProject; +import org.eclipse.core.resources.IProjectDescription; +import org.eclipse.core.resources.ResourcesPlugin; +import org.eclipse.core.runtime.CoreException; +import org.eclipse.core.runtime.IProgressMonitor; +import org.eclipse.core.runtime.Path; +import org.eclipse.core.runtime.SubProgressMonitor; +import org.eclipse.debug.core.DebugPlugin; +import org.eclipse.debug.core.ILaunchConfiguration; +import org.eclipse.debug.core.ILaunchConfigurationType; +import org.eclipse.debug.core.ILaunchConfigurationWorkingCopy; +import org.eclipse.debug.core.ILaunchManager; +import org.eclipse.jdt.core.IClasspathEntry; +import org.eclipse.jdt.core.IJavaProject; +import org.eclipse.jdt.core.JavaCore; +import org.eclipse.jdt.core.JavaModelException; +import org.eclipse.jdt.launching.IJavaLaunchConfigurationConstants; +import org.eclipse.jdt.launching.JavaRuntime; + +/** + * Provides utility methods to launch the SCA Domain Manager. + * + * @version $Rev: $ $Date: $ + */ +public class DomainManagerLauncherUtil { + + private static final String TUSCANY_DOMAIN_LAUNCH_CONFIGURATION = "SCA Domain Manager"; + private static final String TUSCANY_SCA_DOMAIN_PROJECT = "tuscany-sca-domain"; + + private static final String PING_HEADER = + "GET /ping HTTP/1.0\n" + "Host: localhost\n" + + "Content-Type: text/xml\n" + + "Connection: close\n" + + "Content-Length: "; + private static final String PING_CONTENT = ""; + private static final String PING = + PING_HEADER + PING_CONTENT.getBytes().length + "\n\n" + PING_CONTENT; + + /** + * Returns the SCA domain project. + * + * @return + * @throws CoreException + */ + static IProject domainProject(IProgressMonitor progressMonitor) throws CoreException { + + IProject domainProject = ResourcesPlugin.getWorkspace().getRoot().getProject(TUSCANY_SCA_DOMAIN_PROJECT); + if (progressMonitor.isCanceled()) { + return domainProject; + } + if (!domainProject.exists()) { + progressMonitor.subTask("Creating SCA domain resources"); + + // Create SCA domain project if necessary + domainProject.create(new SubProgressMonitor(progressMonitor, 5)); + domainProject.open(new SubProgressMonitor(progressMonitor, 5)); + + String html = "<html>\n" + + "<head>\n" + + "<meta http-equiv=\"refresh\" content=\"0;url=http://localhost:9990/ui/home\">\n" + + "</head>\n" + + "<body>\n" + + "<a href=\"http://localhost:9990/ui/home\">SCA Domain</a>\n" + + "</body>\n" + + "</html>"; + + IFile file = domainProject.getFile(new Path("domain.html")); + file.create(new ByteArrayInputStream(html.getBytes()), true, new SubProgressMonitor(progressMonitor, 5)); + + IProjectDescription description = domainProject.getDescription(); + String[] prevNatures= description.getNatureIds(); + String[] newNatures= new String[prevNatures.length + 1]; + System.arraycopy(prevNatures, 0, newNatures, 0, prevNatures.length); + newNatures[prevNatures.length]= JavaCore.NATURE_ID; + description.setNatureIds(newNatures); + domainProject.setDescription(description, new SubProgressMonitor(progressMonitor, 5)); + + IJavaProject javaProject = JavaCore.create(domainProject); + javaProject.setOutputLocation(domainProject.getFullPath(), new SubProgressMonitor(progressMonitor, 5)); + + IClasspathEntry classPath = JavaCore.newContainerEntry(TuscanyClasspathContainer.TUSCANY_LIBRARY_CONTAINER); + IClasspathEntry jrePath = JavaRuntime.getDefaultJREContainerEntry(); + javaProject.setRawClasspath(new IClasspathEntry[] {jrePath, classPath}, new SubProgressMonitor(progressMonitor, 5)); + + } else { + domainProject.open(new SubProgressMonitor(progressMonitor, 5)); + } + + return domainProject; + } + + /** + * Returns true if the SCA domain controller is running. + * + * @return + */ + private static boolean isDomainManagerRunning() { + try { + Socket client = new Socket("localhost", 9990); + OutputStream os = client.getOutputStream(); + os.write(DomainManagerLauncherUtil.PING.getBytes()); + os.flush(); + String response = DomainManagerLauncherUtil.read(client); + if (response.indexOf("<span id=\"ping\">") != -1) { + return true; + } else { + return false; + } + } catch (IOException e) { + return false; + } + } + + /** + * Wait for domain to be running. + * + * @return + */ + private static boolean waitForDomainManager(IProgressMonitor progressMonitor) throws InterruptedException { + progressMonitor.subTask("Contacting SCA domain manager"); + for (int i = 0; i < 40; i++) { + if (progressMonitor.isCanceled()) { + return false; + } + if (isDomainManagerRunning()) { + return true; + } + Thread.sleep(500); + } + return false; + } + + static void launchDomainManager(IProgressMonitor progressMonitor) throws JavaModelException, CoreException, InterruptedException { + + progressMonitor.beginTask("Starting SCA Domain Manager", 100); + + // If the SCA domain controller is not running yet, launch it + if (!isDomainManagerRunning()) { + + progressMonitor.subTask("Starting SCA domain manager"); + if (progressMonitor.isCanceled()) { + return; + } + + // Get the SCA domain project + IProject domainProject = domainProject(progressMonitor); + + // Get the domain manager launch configuration + ILaunchManager launchManager = DebugPlugin.getDefault().getLaunchManager(); + ILaunchConfigurationType launchConfigurationType =launchManager.getLaunchConfigurationType(TUSCANY_LAUNCH_CONFIGURATIONTYPE); + ILaunchConfiguration configuration = null; + for (ILaunchConfiguration c : launchManager.getLaunchConfigurations(launchConfigurationType)) { + if (TUSCANY_DOMAIN_LAUNCH_CONFIGURATION.equals(c.getName())) { + configuration = c; + break; + } + } + + if (configuration == null) { + progressMonitor.worked(10); + if (progressMonitor.isCanceled()) { + return; + } + + // Create a new launch configuration + ILaunchConfigurationWorkingCopy newConfiguration = launchConfigurationType.newInstance(null, TUSCANY_DOMAIN_LAUNCH_CONFIGURATION); + + // Set the project and type to launch + newConfiguration.setAttribute(IJavaLaunchConfigurationConstants.ATTR_PROJECT_NAME, domainProject.getProject().getName()); + newConfiguration.setAttribute(IJavaLaunchConfigurationConstants.ATTR_MAIN_TYPE_NAME, "org.apache.tuscany.sca.node.launcher.DomainManagerLauncher"); + newConfiguration.setAttribute(IJavaLaunchConfigurationConstants.ATTR_WORKING_DIRECTORY, domainProject.getLocation().toString()); + + // Pass the runtime classpath as a system property + newConfiguration.setAttribute(IJavaLaunchConfigurationConstants.ATTR_VM_ARGUMENTS, "\"-DTUSCANY_PATH=" + ClasspathUtil.installedRuntimeClasspath() + "\""); + + // Save the configuration + newConfiguration.doSave(); + + configuration = newConfiguration; + } + + // Launch + configuration.launch(ILaunchManager.RUN_MODE, new SubProgressMonitor(progressMonitor, 20)); + + if (progressMonitor.isCanceled()) { + return; + } + if (!waitForDomainManager(progressMonitor)) { + throw new RuntimeException("SCA Domain Manager could not be started."); + } + } + if (progressMonitor.isCanceled()) { + return; + } + progressMonitor.done(); + + } + + /** + * Read a String from a socket. + * + * @param socket + * @return + * @throws IOException + */ + static String read(Socket socket) throws IOException { + BufferedReader reader = null; + try { + reader = new BufferedReader(new InputStreamReader(socket.getInputStream())); + StringBuffer sb = new StringBuffer(); + String str; + while ((str = reader.readLine()) != null) { + sb.append(str); + } + return sb.toString(); + } finally { + if (reader != null) { + reader.close(); + } + } + } +} diff --git a/sca-java-1.x/branches/sca-java-1.6.2/tools/eclipse/plugins/core/src/main/java/org/apache/tuscany/sca/core/launch/NodeLauncherUtil.java b/sca-java-1.x/branches/sca-java-1.6.2/tools/eclipse/plugins/core/src/main/java/org/apache/tuscany/sca/core/launch/NodeLauncherUtil.java new file mode 100644 index 0000000000..c9b96c7031 --- /dev/null +++ b/sca-java-1.x/branches/sca-java-1.6.2/tools/eclipse/plugins/core/src/main/java/org/apache/tuscany/sca/core/launch/NodeLauncherUtil.java @@ -0,0 +1,244 @@ +/* + * 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.core.launch; + +import static org.apache.tuscany.sca.core.launch.DomainManagerLauncherUtil.domainProject; +import static org.apache.tuscany.sca.core.launch.DomainManagerLauncherUtil.launchDomainManager; +import static org.apache.tuscany.sca.core.launch.TuscanyLaunchConfigurationDelegate.TUSCANY_LAUNCH_CONFIGURATIONTYPE; + +import java.io.IOException; +import java.io.OutputStream; +import java.net.MalformedURLException; +import java.net.Socket; + +import org.apache.tuscany.sca.core.classpath.ClasspathUtil; +import org.eclipse.core.resources.IFile; +import org.eclipse.core.resources.IResource; +import org.eclipse.core.runtime.CoreException; +import org.eclipse.core.runtime.IPath; +import org.eclipse.core.runtime.IProgressMonitor; +import org.eclipse.core.runtime.NullProgressMonitor; +import org.eclipse.core.runtime.SubProgressMonitor; +import org.eclipse.debug.core.DebugPlugin; +import org.eclipse.debug.core.ILaunchConfiguration; +import org.eclipse.debug.core.ILaunchConfigurationType; +import org.eclipse.debug.core.ILaunchConfigurationWorkingCopy; +import org.eclipse.debug.core.ILaunchManager; +import org.eclipse.jdt.core.IClasspathEntry; +import org.eclipse.jdt.core.IJavaProject; +import org.eclipse.jdt.core.JavaCore; +import org.eclipse.jdt.core.JavaModelException; +import org.eclipse.jdt.launching.IJavaLaunchConfigurationConstants; + +/** + * Provides utility methods to launch SCA nodes. + * + * @version $Rev: $ $Date: $ + */ +public class NodeLauncherUtil { + + private static final String START_HEADER1 = + "GET /quickstart?"; + private static final String START_HEADER2 = + " HTTP/1.0\n" + "Host: localhost\n" + + "Content-Type: text/xml\n" + + "Connection: close\n" + + "Content-Length: "; + private static final String START_CONTENT = ""; + + /** + * Launch an SCA node. + * + * @param mode + * @param file + * @param launchManager + * @param launchConfigurationType + * @throws CoreException + * @throws JavaModelException + */ + static void launchNode(String mode, + IFile file, + IProgressMonitor progressMonitor) throws CoreException, JavaModelException, IOException, InterruptedException { + progressMonitor.subTask("Starting SCA node"); + if (progressMonitor.isCanceled()) { + return; + } + + // First start the SCA domain manager + launchDomainManager(new SubProgressMonitor(progressMonitor, 20)); + + // Get the Java project + IJavaProject javaProject = JavaCore.create(file.getProject()); + + // Get the contribution location and URI + String contributionLocation = contributionLocation(javaProject); + String contributionURI = contributionURI(javaProject); + + // Determine the composite file URI + String compositeURI = compositeURI(javaProject, file); + + // Configure the node + String nodeName = configureNode(contributionURI, contributionLocation, compositeURI, progressMonitor); + + // Get the node launch configuration + ILaunchManager launchManager = DebugPlugin.getDefault().getLaunchManager(); + ILaunchConfigurationType launchConfigurationType =launchManager.getLaunchConfigurationType(TUSCANY_LAUNCH_CONFIGURATIONTYPE); + ILaunchConfiguration configuration = null; + for (ILaunchConfiguration c : launchManager.getLaunchConfigurations(launchConfigurationType)) { + if (file.getFullPath().toString().equals(c.getAttribute("COMPOSITE_PATH", ""))) { + configuration = c; + break; + } + } + + if (configuration == null) { + progressMonitor.worked(10); + if (progressMonitor.isCanceled()) { + return; + } + + // Create a new launch configuration + ILaunchConfigurationWorkingCopy newConfiguration = launchConfigurationType.newInstance(null, + launchManager.generateUniqueLaunchConfigurationNameFrom(file.getName())); + + // Set the project and type to launch + newConfiguration.setAttribute(IJavaLaunchConfigurationConstants.ATTR_PROJECT_NAME, file.getProject().getName()); + newConfiguration.setAttribute(IJavaLaunchConfigurationConstants.ATTR_MAIN_TYPE_NAME, "org.apache.tuscany.sca.node.launcher.NodeLauncher"); + + // Pass the URL of the node install image to the launcher + newConfiguration.setAttribute(IJavaLaunchConfigurationConstants.ATTR_PROGRAM_ARGUMENTS, + "http://localhost:9990/node-config/" + nodeName); + + // Save the composite path in the launch configuration + newConfiguration.setAttribute("COMPOSITE_PATH", file.getFullPath().toString()); + + // Pass the runtime classpath as a system property + newConfiguration.setAttribute(IJavaLaunchConfigurationConstants.ATTR_VM_ARGUMENTS, "\"-DTUSCANY_PATH=" + ClasspathUtil.installedRuntimeClasspath() + "\""); + + // Save the configuration + newConfiguration.doSave(); + + configuration = newConfiguration; + } + + // Launch + configuration.launch(mode, null); + } + + /** + * Returns the location of the SCA contribution representing a Java project. + * @param javaProject + * @return + * @throws MalformedURLException + * @throws JavaModelException + */ + private static String contributionLocation(IJavaProject javaProject) throws MalformedURLException, JavaModelException { + IPath location = javaProject.getOutputLocation(); + IResource resource; + if (location.segmentCount() == 1) { + resource = javaProject.getProject(); + } else { + resource = javaProject.getProject().getWorkspace().getRoot().getFolder(location); + } + location = resource.getLocation(); + String url = location.toFile().toURI().toURL().toString(); + if (url.endsWith("/")) { + url = url.substring(0, url.length() - 1); + } + return url; + } + + /** + * Returns the URI of the SCA contribution representing a Java project. + * @param javaProject + * @return + */ + private static String contributionURI(IJavaProject javaProject) { + return javaProject.getProject().getName(); + } + + /** + * Returns the SCA artifact URI of a composite file inside a Java project. + * + * @param javaProject + * @param file + * @return + * @throws JavaModelException + */ + private static String compositeURI(IJavaProject javaProject, IFile file) throws JavaModelException { + + // Find the Java source container containing the specified file + IClasspathEntry[] classpathEntries = javaProject.getRawClasspath(); + int sourceFolderSegments = 0; + for (IClasspathEntry entry : classpathEntries) { + if (entry.getEntryKind() == IClasspathEntry.CPE_SOURCE) { + sourceFolderSegments = entry.getPath().matchingFirstSegments(file.getFullPath()); + if (sourceFolderSegments > 0) + break; + } + } + + // Determine the composite URI + String compositeURI = file.getFullPath().removeFirstSegments(sourceFolderSegments).toString(); + return compositeURI; + } + + /** + * Send a request to the SCA domain manager to configure an SCA node for + * the specified composite. + * + * @param contributionURI + * @param contributionLocation + * @param compositeURI + * @return + * @throws IOException + */ + private static String configureNode(String contributionURI, String contributionLocation, String compositeURI, + IProgressMonitor progressMonitor) throws IOException, CoreException { + progressMonitor.subTask("Configuring node"); + + // Send the request to configure the node + Socket client = new Socket("localhost", 9990); + OutputStream os = client.getOutputStream(); + String request = START_HEADER1 + + "contribution=" + contributionURI + "&location=" + contributionLocation + "&composite=" + compositeURI + + START_HEADER2 + START_CONTENT.getBytes().length + "\n\n" + START_CONTENT; + os.write(request.getBytes()); + os.flush(); + String response = DomainManagerLauncherUtil.read(client); + + // Refresh the domain project + domainProject(progressMonitor).refreshLocal(IResource.DEPTH_INFINITE, new NullProgressMonitor()); + + int i = response.indexOf("<span id=\"node\">"); + if (i != -1) { + + // Extract the node name + response = response.substring(i + 16); + i = response.indexOf("</span>"); + String nodeName = response.substring(0, i); + return nodeName; + + } else { + throw new RuntimeException("Node could not be configured: " + response); + } + } + +} diff --git a/sca-java-1.x/branches/sca-java-1.6.2/tools/eclipse/plugins/core/src/main/java/org/apache/tuscany/sca/core/launch/TuscanyLaunchConfigurationDelegate.java b/sca-java-1.x/branches/sca-java-1.6.2/tools/eclipse/plugins/core/src/main/java/org/apache/tuscany/sca/core/launch/TuscanyLaunchConfigurationDelegate.java new file mode 100644 index 0000000000..ddcfb66b63 --- /dev/null +++ b/sca-java-1.x/branches/sca-java-1.6.2/tools/eclipse/plugins/core/src/main/java/org/apache/tuscany/sca/core/launch/TuscanyLaunchConfigurationDelegate.java @@ -0,0 +1,75 @@ +/* + * 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.core.launch; + +import java.io.File; +import java.util.Map; + +import org.eclipse.core.runtime.CoreException; +import org.eclipse.core.runtime.IProgressMonitor; +import org.eclipse.debug.core.ILaunch; +import org.eclipse.debug.core.ILaunchConfiguration; +import org.eclipse.debug.core.model.ILaunchConfigurationDelegate; +import org.eclipse.jdt.launching.AbstractJavaLaunchConfigurationDelegate; +import org.eclipse.jdt.launching.ExecutionArguments; +import org.eclipse.jdt.launching.IVMInstall; +import org.eclipse.jdt.launching.IVMRunner; +import org.eclipse.jdt.launching.VMRunnerConfiguration; + +/** + * Launch configuration delegate for the Tuscany launch configuration. + * + * @version $Rev$ $Date$ + */ +public class TuscanyLaunchConfigurationDelegate extends AbstractJavaLaunchConfigurationDelegate implements + ILaunchConfigurationDelegate { + + public static final String TUSCANY_LAUNCH_CONFIGURATIONTYPE = "org.apache.tuscany.sca.core.launch.configurationtype"; + + public void launch(ILaunchConfiguration configuration, String mode, ILaunch launch, IProgressMonitor monitor) + throws CoreException { + + // Verify the configuration + String mainTypeName = verifyMainTypeName(configuration); + IVMInstall vm = verifyVMInstall(configuration); + IVMRunner runner = vm.getVMRunner(mode); + + ExecutionArguments execArgs = + new ExecutionArguments(getVMArguments(configuration), getProgramArguments(configuration)); + Map vmAttributesMap = getVMSpecificAttributesMap(configuration); + String[] classpath = getClasspath(configuration); + + File workingDir = verifyWorkingDirectory(configuration); + String workingDirName = null; + if (workingDir != null) + workingDirName = workingDir.getAbsolutePath(); + + // Create a VM runner configuration + VMRunnerConfiguration runConfig = new VMRunnerConfiguration(mainTypeName, classpath); + runConfig.setProgramArguments(execArgs.getProgramArgumentsArray()); + runConfig.setVMArguments(execArgs.getVMArgumentsArray()); + runConfig.setVMSpecificAttributesMap(vmAttributesMap); + runConfig.setWorkingDirectory(workingDirName); + runConfig.setBootClassPath(getBootpath(configuration)); + + // Run!! + runner.run(runConfig, launch, monitor); + } +} diff --git a/sca-java-1.x/branches/sca-java-1.6.2/tools/eclipse/plugins/core/src/main/java/org/apache/tuscany/sca/core/launch/TuscanyLaunchConfigurationTabGroup.java b/sca-java-1.x/branches/sca-java-1.6.2/tools/eclipse/plugins/core/src/main/java/org/apache/tuscany/sca/core/launch/TuscanyLaunchConfigurationTabGroup.java new file mode 100644 index 0000000000..738fe2638e --- /dev/null +++ b/sca-java-1.x/branches/sca-java-1.6.2/tools/eclipse/plugins/core/src/main/java/org/apache/tuscany/sca/core/launch/TuscanyLaunchConfigurationTabGroup.java @@ -0,0 +1,48 @@ +/* + * 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.core.launch; + +import org.eclipse.debug.ui.AbstractLaunchConfigurationTabGroup; +import org.eclipse.debug.ui.CommonTab; +import org.eclipse.debug.ui.EnvironmentTab; +import org.eclipse.debug.ui.ILaunchConfigurationDialog; +import org.eclipse.debug.ui.ILaunchConfigurationTab; +import org.eclipse.debug.ui.ILaunchConfigurationTabGroup; +import org.eclipse.debug.ui.sourcelookup.SourceLookupTab; +import org.eclipse.jdt.debug.ui.launchConfigurations.JavaArgumentsTab; +import org.eclipse.jdt.debug.ui.launchConfigurations.JavaClasspathTab; +import org.eclipse.jdt.debug.ui.launchConfigurations.JavaJRETab; + +/** + * Tab groups from the Tuscany launch configuration. + * + * @version $Rev$ $Date$ + */ +public class TuscanyLaunchConfigurationTabGroup extends AbstractLaunchConfigurationTabGroup implements + ILaunchConfigurationTabGroup { + + public void createTabs(ILaunchConfigurationDialog dialog, String mode) { + ILaunchConfigurationTab[] tabs = + new ILaunchConfigurationTab[] {new JavaArgumentsTab(), new JavaJRETab(), new JavaClasspathTab(), + new SourceLookupTab(), new EnvironmentTab(), new CommonTab()}; + + setTabs(tabs); + } +} diff --git a/sca-java-1.x/branches/sca-java-1.6.2/tools/eclipse/plugins/core/src/main/java/org/apache/tuscany/sca/core/launch/TuscanyLaunchDomainManagerAction.java b/sca-java-1.x/branches/sca-java-1.6.2/tools/eclipse/plugins/core/src/main/java/org/apache/tuscany/sca/core/launch/TuscanyLaunchDomainManagerAction.java new file mode 100644 index 0000000000..895cde6922 --- /dev/null +++ b/sca-java-1.x/branches/sca-java-1.6.2/tools/eclipse/plugins/core/src/main/java/org/apache/tuscany/sca/core/launch/TuscanyLaunchDomainManagerAction.java @@ -0,0 +1,79 @@ +/* + * 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.core.launch; + +import static org.apache.tuscany.sca.core.launch.DomainManagerLauncherUtil.launchDomainManager; +import static org.apache.tuscany.sca.core.log.LogUtil.error; + +import java.lang.reflect.InvocationTargetException; + +import org.eclipse.core.runtime.IProgressMonitor; +import org.eclipse.jface.action.IAction; +import org.eclipse.jface.operation.IRunnableWithProgress; +import org.eclipse.jface.viewers.ISelection; +import org.eclipse.ui.IWorkbenchWindow; +import org.eclipse.ui.IWorkbenchWindowActionDelegate; + +/** + * Launch the SCA DomainManager. + * + * @version $Rev: $ $Date: $ + */ +public class TuscanyLaunchDomainManagerAction implements IWorkbenchWindowActionDelegate { + + private IWorkbenchWindow window; + + public TuscanyLaunchDomainManagerAction() { + } + + public void run(IAction action) { + + try { + + // Run with a progress monitor + window.run(true, true, new IRunnableWithProgress() { + + public void run(IProgressMonitor progressMonitor) throws InvocationTargetException, InterruptedException { + try { + + launchDomainManager(progressMonitor); + + } catch (Exception e) { + throw new InvocationTargetException(e); + } finally { + progressMonitor.done(); + } + } + }); + + } catch (Exception e) { + error("Could not launch SCA Domain Manager", e); + } + } + + public void selectionChanged(IAction action, ISelection selection) { + } + + public void dispose() { + } + + public void init(IWorkbenchWindow window) { + this.window = window; + } +} diff --git a/sca-java-1.x/branches/sca-java-1.6.2/tools/eclipse/plugins/core/src/main/java/org/apache/tuscany/sca/core/launch/TuscanyLaunchNodeFilter.java b/sca-java-1.x/branches/sca-java-1.6.2/tools/eclipse/plugins/core/src/main/java/org/apache/tuscany/sca/core/launch/TuscanyLaunchNodeFilter.java new file mode 100644 index 0000000000..c5aeefb891 --- /dev/null +++ b/sca-java-1.x/branches/sca-java-1.6.2/tools/eclipse/plugins/core/src/main/java/org/apache/tuscany/sca/core/launch/TuscanyLaunchNodeFilter.java @@ -0,0 +1,29 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +package org.apache.tuscany.sca.core.launch; + +/** + * TuscanyLaunchNodeFilter + * + * @version $Rev: $ $Date: $ + */ +public class TuscanyLaunchNodeFilter { + +} diff --git a/sca-java-1.x/branches/sca-java-1.6.2/tools/eclipse/plugins/core/src/main/java/org/apache/tuscany/sca/core/launch/TuscanyLaunchNodeShortcut.java b/sca-java-1.x/branches/sca-java-1.6.2/tools/eclipse/plugins/core/src/main/java/org/apache/tuscany/sca/core/launch/TuscanyLaunchNodeShortcut.java new file mode 100644 index 0000000000..94ab29ce9a --- /dev/null +++ b/sca-java-1.x/branches/sca-java-1.6.2/tools/eclipse/plugins/core/src/main/java/org/apache/tuscany/sca/core/launch/TuscanyLaunchNodeShortcut.java @@ -0,0 +1,88 @@ +/* + * 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.core.launch; + +import static org.apache.tuscany.sca.core.launch.NodeLauncherUtil.launchNode; +import static org.apache.tuscany.sca.core.log.LogUtil.error; + +import java.lang.reflect.InvocationTargetException; + +import org.eclipse.core.resources.IFile; +import org.eclipse.core.runtime.IProgressMonitor; +import org.eclipse.debug.ui.ILaunchShortcut; +import org.eclipse.jface.operation.IRunnableWithProgress; +import org.eclipse.jface.viewers.ISelection; +import org.eclipse.jface.viewers.IStructuredSelection; +import org.eclipse.ui.IEditorPart; +import org.eclipse.ui.PlatformUI; + +/** + * A launch shortcut for SCA .composite files. + * + * @version $Rev$ $Date$ + */ +public class TuscanyLaunchNodeShortcut implements ILaunchShortcut { + + public void launch(final ISelection selection, final String mode) { + + try { + + // Make sure we have a .composite file selected + if (!(selection instanceof IStructuredSelection)) { + return; + } + Object[] selections = ((IStructuredSelection)selection).toArray(); + if (selections.length == 0) { + return; + } + final IFile file = (IFile)selections[0]; + if (!file.getFileExtension().equals("composite")) { + return; + } + + // Run with a progress monitor + PlatformUI.getWorkbench().getActiveWorkbenchWindow().run(true, true, new IRunnableWithProgress() { + + public void run(IProgressMonitor progressMonitor) throws InvocationTargetException, InterruptedException { + try { + progressMonitor.beginTask("Starting SCA Composite", 100); + + launchNode(mode, file, progressMonitor); + + progressMonitor.done(); + + } catch (Exception e) { + throw new InvocationTargetException(e); + } finally { + progressMonitor.done(); + } + } + }); + + } catch (Exception e) { + error("Could not launch SCA composite", e); + } + } + + public void launch(IEditorPart editor, String mode) { + //TODO later... + } + +} diff --git a/sca-java-1.x/branches/sca-java-1.6.2/tools/eclipse/plugins/core/src/main/java/org/apache/tuscany/sca/core/log/LogUtil.java b/sca-java-1.x/branches/sca-java-1.6.2/tools/eclipse/plugins/core/src/main/java/org/apache/tuscany/sca/core/log/LogUtil.java new file mode 100644 index 0000000000..3bbdc81dde --- /dev/null +++ b/sca-java-1.x/branches/sca-java-1.6.2/tools/eclipse/plugins/core/src/main/java/org/apache/tuscany/sca/core/log/LogUtil.java @@ -0,0 +1,39 @@ +/* + * 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.core.log; + +import org.eclipse.core.runtime.IStatus; +import org.eclipse.core.runtime.Platform; +import org.eclipse.core.runtime.Status; + +/** + * A log utility + * + * @version $Rev: $ $Date: $ + */ +public class LogUtil { + + public static void error(String msg, Exception e) { + Platform.getLog( + Platform.getBundle("org.apache.tuscany.sca.core")).log( + new Status(IStatus.ERROR, "org.apache.tuscany.sca.core", IStatus.OK, msg, e)); + } + +} diff --git a/sca-java-1.x/branches/sca-java-1.6.2/tools/eclipse/plugins/core/src/main/java/org/apache/tuscany/sca/core/newwizards/NewComponentTypeWizard.java b/sca-java-1.x/branches/sca-java-1.6.2/tools/eclipse/plugins/core/src/main/java/org/apache/tuscany/sca/core/newwizards/NewComponentTypeWizard.java new file mode 100644 index 0000000000..09b800fe1b --- /dev/null +++ b/sca-java-1.x/branches/sca-java-1.6.2/tools/eclipse/plugins/core/src/main/java/org/apache/tuscany/sca/core/newwizards/NewComponentTypeWizard.java @@ -0,0 +1,53 @@ +/* + * 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.core.newwizards; + +import org.eclipse.jface.viewers.IStructuredSelection; +import org.eclipse.jface.wizard.Wizard; +import org.eclipse.ui.IWorkbench; +import org.eclipse.ui.IWorkbenchWizard; + +/** + * A wizard to create new .componentType files. + * + * @version $Rev$ $Date$ + */ +public class NewComponentTypeWizard extends Wizard implements IWorkbenchWizard { + + private IWorkbench workbench; + private IStructuredSelection selection; + private NewComponentTypeWizardPage mainPage; + + public void init(IWorkbench workbench, IStructuredSelection selection) { + this.workbench = workbench; + this.selection = selection; + setWindowTitle("New SCA ComponentType"); + } + + public void addPages() { + mainPage = new NewComponentTypeWizardPage(workbench, selection); + addPage(mainPage); + } + + @Override + public boolean performFinish() { + return mainPage.finish(); + } +} diff --git a/sca-java-1.x/branches/sca-java-1.6.2/tools/eclipse/plugins/core/src/main/java/org/apache/tuscany/sca/core/newwizards/NewComponentTypeWizardPage.java b/sca-java-1.x/branches/sca-java-1.6.2/tools/eclipse/plugins/core/src/main/java/org/apache/tuscany/sca/core/newwizards/NewComponentTypeWizardPage.java new file mode 100644 index 0000000000..53b9607159 --- /dev/null +++ b/sca-java-1.x/branches/sca-java-1.6.2/tools/eclipse/plugins/core/src/main/java/org/apache/tuscany/sca/core/newwizards/NewComponentTypeWizardPage.java @@ -0,0 +1,98 @@ +/* + * 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.core.newwizards; + +import static org.apache.tuscany.sca.core.log.LogUtil.error; + +import java.io.ByteArrayInputStream; +import java.io.ByteArrayOutputStream; +import java.io.InputStream; +import java.io.PrintWriter; + +import org.eclipse.core.resources.IFile; +import org.eclipse.core.runtime.FileLocator; +import org.eclipse.core.runtime.Platform; +import org.eclipse.jface.resource.ImageDescriptor; +import org.eclipse.jface.viewers.IStructuredSelection; +import org.eclipse.swt.graphics.ImageLoader; +import org.eclipse.ui.IWorkbench; +import org.eclipse.ui.IWorkbenchPage; +import org.eclipse.ui.IWorkbenchWindow; +import org.eclipse.ui.dialogs.WizardNewFileCreationPage; +import org.eclipse.ui.ide.IDE; + +/** + * Wizard page for the new .componentType file wizard. + * + * @version $Rev$ $Date$ + */ +public class NewComponentTypeWizardPage extends WizardNewFileCreationPage { + + private IWorkbench workbench; + + public NewComponentTypeWizardPage(IWorkbench workbench, IStructuredSelection selection) { + super("New SCA ComponentType Page", selection); + + this.workbench = workbench; + + setTitle("SCA ComponentType"); + setDescription("Create a new SCA ComponentType."); + + try { + String location = FileLocator.toFileURL(Platform.getBundle("org.apache.tuscany.sca.core").getEntry("/")).getFile().toString(); + setImageDescriptor(ImageDescriptor.createFromImageData((new ImageLoader()).load(location + "/icons/tuscany.gif")[0])); + } catch (Exception e) { + error("Could not create wizard", e); + } + + setFileName("sample.componentType"); + + } + + public boolean finish() { + try { + IFile file = createNewFile(); + + IWorkbenchWindow workbenchWindow = workbench.getActiveWorkbenchWindow(); + IWorkbenchPage workbenchPage = workbenchWindow.getActivePage(); + IDE.openEditor(workbenchPage, file, true); + } catch (Exception e) { + error("Could not open editor", e); + return false; + } + return true; + } + + @Override + protected InputStream getInitialContents() { + + ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); + PrintWriter printWriter = new PrintWriter(outputStream); + printWriter.println("<?xml version=\"1.0\" encoding=\"UTF-8\"?>"); + printWriter.println("<componentType xmlns=\"http://www.osoa.org/xmlns/sca/1.0\""); + printWriter.println(" xmlns:t=\"http://tuscany.apache.org/xmlns/sca/1.0\">"); + printWriter.println(); + printWriter.println(); + printWriter.println("</componentType>"); + printWriter.close(); + + return new ByteArrayInputStream(outputStream.toByteArray()); + } +} diff --git a/sca-java-1.x/branches/sca-java-1.6.2/tools/eclipse/plugins/core/src/main/java/org/apache/tuscany/sca/core/newwizards/NewCompositeWizard.java b/sca-java-1.x/branches/sca-java-1.6.2/tools/eclipse/plugins/core/src/main/java/org/apache/tuscany/sca/core/newwizards/NewCompositeWizard.java new file mode 100644 index 0000000000..f07f0b643c --- /dev/null +++ b/sca-java-1.x/branches/sca-java-1.6.2/tools/eclipse/plugins/core/src/main/java/org/apache/tuscany/sca/core/newwizards/NewCompositeWizard.java @@ -0,0 +1,53 @@ +/* + * 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.core.newwizards; + +import org.eclipse.jface.viewers.IStructuredSelection; +import org.eclipse.jface.wizard.Wizard; +import org.eclipse.ui.IWorkbench; +import org.eclipse.ui.IWorkbenchWizard; + +/** + * A wizard to create new .composite files. + * + * @version $Rev$ $Date$ + */ +public class NewCompositeWizard extends Wizard implements IWorkbenchWizard { + + private IWorkbench workbench; + private IStructuredSelection selection; + private NewCompositeWizardPage mainPage; + + public void init(IWorkbench workbench, IStructuredSelection selection) { + this.workbench = workbench; + this.selection = selection; + setWindowTitle("New SCA Composite"); + } + + public void addPages() { + mainPage = new NewCompositeWizardPage(workbench, selection); + addPage(mainPage); + } + + @Override + public boolean performFinish() { + return mainPage.finish(); + } +} diff --git a/sca-java-1.x/branches/sca-java-1.6.2/tools/eclipse/plugins/core/src/main/java/org/apache/tuscany/sca/core/newwizards/NewCompositeWizardPage.java b/sca-java-1.x/branches/sca-java-1.6.2/tools/eclipse/plugins/core/src/main/java/org/apache/tuscany/sca/core/newwizards/NewCompositeWizardPage.java new file mode 100644 index 0000000000..bbca96196d --- /dev/null +++ b/sca-java-1.x/branches/sca-java-1.6.2/tools/eclipse/plugins/core/src/main/java/org/apache/tuscany/sca/core/newwizards/NewCompositeWizardPage.java @@ -0,0 +1,105 @@ +/* + * 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.core.newwizards; + +import static org.apache.tuscany.sca.core.log.LogUtil.error; + +import java.io.ByteArrayInputStream; +import java.io.ByteArrayOutputStream; +import java.io.InputStream; +import java.io.PrintWriter; + +import org.eclipse.core.resources.IFile; +import org.eclipse.core.runtime.FileLocator; +import org.eclipse.core.runtime.IPath; +import org.eclipse.core.runtime.Path; +import org.eclipse.core.runtime.Platform; +import org.eclipse.jface.resource.ImageDescriptor; +import org.eclipse.jface.viewers.IStructuredSelection; +import org.eclipse.swt.graphics.ImageLoader; +import org.eclipse.ui.IWorkbench; +import org.eclipse.ui.IWorkbenchPage; +import org.eclipse.ui.IWorkbenchWindow; +import org.eclipse.ui.dialogs.WizardNewFileCreationPage; +import org.eclipse.ui.ide.IDE; + +/** + * Wizard page for the new .composite file wizard. + * + * @version $Rev$ $Date$ + */ +public class NewCompositeWizardPage extends WizardNewFileCreationPage { + + private IWorkbench workbench; + + public NewCompositeWizardPage(IWorkbench workbench, IStructuredSelection selection) { + super("New SCA Composite Page", selection); + + this.workbench = workbench; + + setTitle("SCA Composite"); + setDescription("Create a new SCA Composite."); + + try { + String location = FileLocator.toFileURL(Platform.getBundle("org.apache.tuscany.sca.core").getEntry("/")).getFile().toString(); + setImageDescriptor(ImageDescriptor.createFromImageData((new ImageLoader()).load(location + "/icons/tuscany.gif")[0])); + } catch (Exception e) { + error("Could not create wizard", e); + } + + setFileName("sample.composite"); + + } + + public boolean finish() { + try { + IFile file = createNewFile(); + + IWorkbenchWindow workbenchWindow = workbench.getActiveWorkbenchWindow(); + IWorkbenchPage workbenchPage = workbenchWindow.getActivePage(); + IDE.openEditor(workbenchPage, file, true); + } catch (Exception e) { + error("Could not open editor", e); + return false; + } + return true; + } + + @Override + protected InputStream getInitialContents() { + + IPath path = new Path(getFileName()); + String name = path.removeFileExtension().toString(); + ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); + PrintWriter printWriter = new PrintWriter(outputStream); + printWriter.println("<?xml version=\"1.0\" encoding=\"UTF-8\"?>"); + printWriter.println("<composite xmlns=\"http://www.osoa.org/xmlns/sca/1.0\""); + printWriter.println(" xmlns:t=\"http://tuscany.apache.org/xmlns/sca/1.0\""); + printWriter.println(" xmlns:c=\"http://" + name + "\""); + printWriter.println(" targetNamespace=\"http://" + name + "\""); + printWriter.println(" name=\"" + name + "\">"); + printWriter.println(); + printWriter.println(); + printWriter.println("</composite>"); + printWriter.close(); + + return new ByteArrayInputStream(outputStream.toByteArray()); + } +} diff --git a/sca-java-1.x/branches/sca-java-1.6.2/tools/eclipse/plugins/core/xsd/sca-all.xsd b/sca-java-1.x/branches/sca-java-1.6.2/tools/eclipse/plugins/core/xsd/sca-all.xsd new file mode 100644 index 0000000000..1b19ede427 --- /dev/null +++ b/sca-java-1.x/branches/sca-java-1.6.2/tools/eclipse/plugins/core/xsd/sca-all.xsd @@ -0,0 +1,34 @@ +<?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. +--> +<schema xmlns="http://www.w3.org/2001/XMLSchema" + targetNamespace="http://www.osoa.org/xmlns/sca/1.0" + xmlns:sca="http://www.osoa.org/xmlns/sca/1.0"> + + <include schemaLocation="sca.xsd"/> + + <include schemaLocation="sca-contribution.xsd"/> + + <include schemaLocation="sca-binding-ejb.xsd"/> + + <include schemaLocation="sca-implementation-bpel.xsd"/> + <include schemaLocation="sca-implementation-spring.xsd"/> + <include schemaLocation="sca-implementation-ejb.xsd"/> + +</schema>
\ No newline at end of file diff --git a/sca-java-1.x/branches/sca-java-1.6.2/tools/eclipse/plugins/core/xsd/sca-binding-ejb.xsd b/sca-java-1.x/branches/sca-java-1.6.2/tools/eclipse/plugins/core/xsd/sca-binding-ejb.xsd new file mode 100644 index 0000000000..26bedfcce5 --- /dev/null +++ b/sca-java-1.x/branches/sca-java-1.6.2/tools/eclipse/plugins/core/xsd/sca-binding-ejb.xsd @@ -0,0 +1,43 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- (c) Copyright SCA Collaboration 2006, 2007 --> +<schema xmlns="http://www.w3.org/2001/XMLSchema" + xmlns:sca="http://www.osoa.org/xmlns/sca/1.0" + targetNamespace="http://www.osoa.org/xmlns/sca/1.0" + elementFormDefault="qualified"> + <include schemaLocation="sca-core.xsd"/> + + <element name="binding.ejb" type="sca:EJBSessionBeanBinding" + substitutionGroup="sca:binding" /> + + <simpleType name="BeanType"> + <restriction base="string"> + <enumeration value="stateless"/> + <enumeration value="stateful"/> + </restriction> + </simpleType> + + <simpleType name="VersionValue"> + <restriction base="string"> + <enumeration value="EJB2"/> + <enumeration value="EJB3"/> + </restriction> + </simpleType> + + + <complexType name="EJBSessionBeanBinding"> + <complexContent> + <extension base="sca:Binding"> + <sequence> + <any namespace="##other" processContents="lax" + minOccurs="0" maxOccurs="unbounded"/> + </sequence> + <attribute name="homeInterface" type="NCName" use="optional"/> + <attribute name="ejb-link-name" type="NCName" use="optional"/> + <attribute name="session-type" type="sca:BeanType" use="optional" default="stateless"/> + <attribute name="ejb-version" type="sca:VersionValue" use="optional" default="EJB2"/> + <anyAttribute namespace="##any" processContents="lax"/> + </extension> + </complexContent> + </complexType> + +</schema> diff --git a/sca-java-1.x/branches/sca-java-1.6.2/tools/eclipse/plugins/core/xsd/sca-binding-jms.xsd b/sca-java-1.x/branches/sca-java-1.6.2/tools/eclipse/plugins/core/xsd/sca-binding-jms.xsd new file mode 100644 index 0000000000..850f32b56a --- /dev/null +++ b/sca-java-1.x/branches/sca-java-1.6.2/tools/eclipse/plugins/core/xsd/sca-binding-jms.xsd @@ -0,0 +1,135 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- (c) Copyright SCA Collaboration 2006, 2007 --> +<schema xmlns="http://www.w3.org/2001/XMLSchema" + targetNamespace="http://www.osoa.org/xmlns/sca/1.0" + xmlns:sca="http://www.osoa.org/xmlns/sca/1.0" + elementFormDefault="qualified"> + + <include schemaLocation="sca-core.xsd"/> + + <complexType name="JMSBinding"> + <complexContent> + <extension base="sca:Binding"> + <sequence> + <element name="destination" type="sca:Destination" minOccurs="0"/> + <element name="connectionFactory" type="sca:ConnectionFactory" + minOccurs="0"/> + <element name="activationSpec" type="sca:ActivationSpec" + minOccurs="0"/> + <element name="response" type="sca:Response" minOccurs="0"/> + <element name="headers" type="sca:Headers" minOccurs="0"/> + <element name="resourceAdapter" type="sca:ResourceAdapter" + minOccurs="0"/> + <element name="operationProperties" type="sca:OperationProperties" + minOccurs="0" maxOccurs="unbounded"/> + <any namespace="##other" processContents="lax" + minOccurs="0" maxOccurs="unbounded"/> + </sequence> + <attribute name="correlationScheme" + default="RequestMsgIDToCorrelID"> + <simpleType> + <restriction base="string"> + <enumeration value="RequestMsgIDToCorrelID"/> + <enumeration value="RequestCorrelIDToCorrelID"/> + <enumeration value="None"/> + </restriction> + </simpleType> + </attribute> + + <attribute name="initialContextFactory" type="anyURI"/> + <attribute name="jndiURL" type="anyURI"/> + <attribute name="requestConnection" type="QName"/> + <attribute name="responseConnection" type="QName"/> + <attribute name="operationProperties" type="QName"/> + <anyAttribute/> + </extension> + </complexContent> + </complexType> + + <simpleType name="CreateResource"> + <restriction base="string"> + <enumeration value="always"/> + <enumeration value="never"/> + <enumeration value="ifnotexist"/> + </restriction> + </simpleType> + + <complexType name="Destination"> + <sequence> + <element name="property" type="string" + minOccurs="0" maxOccurs="unbounded"/> + </sequence> + <attribute name="name" type="anyURI" use="required"/> + <attribute name="type" use="optional" default="queue"> + <simpleType> + <restriction base="string"> + <enumeration value="queue"/> + <enumeration value="topic"/> + </restriction> + </simpleType> + </attribute> + <attribute name="create" type="sca:CreateResource" + use="optional" default="ifnotexist"/> + </complexType> + + <complexType name="ConnectionFactory"> + <sequence> <element name="property" type="string" + minOccurs="0" maxOccurs="unbounded"/> + </sequence> + <attribute name="name" type="anyURI" use="required"/> + <attribute name="create" type="sca:CreateResource" + use="optional" default="ifnotexist"/> + </complexType> + + <complexType name="ActivationSpec"> + <sequence> + <element name="property" type="string" + minOccurs="0" maxOccurs="unbounded"/> + </sequence> + <attribute name="name" type="anyURI" use="required"/> + <attribute name="create" type="sca:CreateResource" + use="optional" default="ifnotexist"/> + </complexType> + + <complexType name="Response"> + <sequence> + <element name="destination" type="sca:Destination" minOccurs="0"/> + <element name="connectionFactory" type="sca:ConnectionFactory" + minOccurs="0"/> + <element name="activationSpec" type="sca:ActivationSpec" minOccurs="0"/> + </sequence> + </complexType> + + <complexType name="Headers"> + <sequence> + <element name="property" type="string" + minOccurs="0" maxOccurs="unbounded"/> + </sequence> + <attribute name="JMSType" type="string"/> + <attribute name="JMSCorrelationID" type="string"/> + <attribute name="JMSDeliveryMode" type="string"/> + <attribute name="JMSTimeToLive" type="int"/> + <attribute name="JMSPriority" type="string"/> + </complexType> + + <complexType name="ResourceAdapter"> + <sequence> + <element name="property" type="string" + minOccurs="0" maxOccurs="unbounded"/> + </sequence> + <attribute name="name" type="string" use="required"/> + </complexType> + + <complexType name="OperationProperties"> + <sequence> + <element name="property" type="string" + minOccurs="0" maxOccurs="unbounded"/> + <element name="headers" type="sca:Headers"/> + </sequence> + <attribute name="name" type="string" use="required"/> + <attribute name="nativeOperation" type="string"/> + </complexType> + + <element name="binding.jms" type="sca:JMSBinding" + substitutionGroup="sca:binding"/> +</schema> diff --git a/sca-java-1.x/branches/sca-java-1.6.2/tools/eclipse/plugins/core/xsd/sca-binding-sca.xsd b/sca-java-1.x/branches/sca-java-1.6.2/tools/eclipse/plugins/core/xsd/sca-binding-sca.xsd new file mode 100644 index 0000000000..02703402ef --- /dev/null +++ b/sca-java-1.x/branches/sca-java-1.6.2/tools/eclipse/plugins/core/xsd/sca-binding-sca.xsd @@ -0,0 +1,23 @@ +<?xml version="1.0" encoding="UTF-8"?>
+<!-- (c) Copyright SCA Collaboration 2006, 2007 --> +<schema xmlns="http://www.w3.org/2001/XMLSchema"
+ targetNamespace="http://www.osoa.org/xmlns/sca/1.0"
+ xmlns:sca="http://www.osoa.org/xmlns/sca/1.0"
+ elementFormDefault="qualified">
+
+ <include schemaLocation="sca-core.xsd"/>
+
+ <element name="binding.sca" type="sca:SCABinding"
+ substitutionGroup="sca:binding"/>
+ <complexType name="SCABinding">
+ <complexContent>
+ <extension base="sca:Binding">
+ <sequence> + <any namespace="##other" processContents="lax" minOccurs="0" + maxOccurs="unbounded"/> + </sequence>
+ <anyAttribute namespace="##any" processContents="lax"/>
+ </extension>
+ </complexContent>
+ </complexType> +</schema>
\ No newline at end of file diff --git a/sca-java-1.x/branches/sca-java-1.6.2/tools/eclipse/plugins/core/xsd/sca-binding-webservice.xsd b/sca-java-1.x/branches/sca-java-1.6.2/tools/eclipse/plugins/core/xsd/sca-binding-webservice.xsd new file mode 100644 index 0000000000..3e92de193b --- /dev/null +++ b/sca-java-1.x/branches/sca-java-1.6.2/tools/eclipse/plugins/core/xsd/sca-binding-webservice.xsd @@ -0,0 +1,26 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- (c) Copyright SCA Collaboration 2006, 2007 --> +<schema xmlns="http://www.w3.org/2001/XMLSchema" + targetNamespace="http://www.osoa.org/xmlns/sca/1.0" + xmlns:sca="http://www.osoa.org/xmlns/sca/1.0" + xmlns:wsdli="http://www.w3.org/2004/08/wsdl-instance" + xmlns:wsa="http://www.w3.org/2004/12/addressing" + elementFormDefault="qualified"> + + <include schemaLocation="sca-core.xsd"/> + + <element name="binding.ws" type="sca:WebServiceBinding" + substitutionGroup="sca:binding"/> + <complexType name="WebServiceBinding"> + <complexContent> + <extension base="sca:Binding"> + <sequence> + <any namespace="##other" processContents="lax" minOccurs="0" + maxOccurs="unbounded"/> + </sequence> + <attribute name="wsdlElement" type="anyURI" use="optional"/> + <anyAttribute namespace="##any" processContents="lax"/> + </extension> + </complexContent> + </complexType> +</schema> diff --git a/sca-java-1.x/branches/sca-java-1.6.2/tools/eclipse/plugins/core/xsd/sca-contribution.xsd b/sca-java-1.x/branches/sca-java-1.6.2/tools/eclipse/plugins/core/xsd/sca-contribution.xsd new file mode 100644 index 0000000000..c7f92f6c3b --- /dev/null +++ b/sca-java-1.x/branches/sca-java-1.6.2/tools/eclipse/plugins/core/xsd/sca-contribution.xsd @@ -0,0 +1,38 @@ +<?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. +--> +<schema xmlns="http://www.w3.org/2001/XMLSchema" + targetNamespace="http://www.osoa.org/xmlns/sca/1.0" + xmlns:sca="http://www.osoa.org/xmlns/sca/1.0" + elementFormDefault="qualified"> + + <include schemaLocation="sca-core.xsd"/> + + <element name="contribution" type="sca:Contribution"/> + + <complexType name="Contribution"> + <sequence> + <choice minOccurs="0" maxOccurs="unbounded"> + <any namespace="##any" processContents="lax"/> + </choice> + </sequence> + <anyAttribute namespace="##any" processContents="lax"/> + </complexType> + +</schema>
\ No newline at end of file diff --git a/sca-java-1.x/branches/sca-java-1.6.2/tools/eclipse/plugins/core/xsd/sca-core.xsd b/sca-java-1.x/branches/sca-java-1.6.2/tools/eclipse/plugins/core/xsd/sca-core.xsd new file mode 100644 index 0000000000..1c6291792b --- /dev/null +++ b/sca-java-1.x/branches/sca-java-1.6.2/tools/eclipse/plugins/core/xsd/sca-core.xsd @@ -0,0 +1,350 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- (c) Copyright SCA Collaboration 2006, 2007 --> +<schema xmlns="http://www.w3.org/2001/XMLSchema" + targetNamespace="http://www.osoa.org/xmlns/sca/1.0" + xmlns:sca="http://www.osoa.org/xmlns/sca/1.0" + elementFormDefault="qualified"> + + <element name="componentType" type="sca:ComponentType"/> + <complexType name="ComponentType"> + <sequence> + <choice minOccurs="0" maxOccurs="1"> + <element ref="sca:implementation"/> + <any namespace="##other" processContents="lax"/> + </choice> + <choice minOccurs="0" maxOccurs="unbounded"> + <element name="service" type="sca:ComponentService" /> + <element name="reference" type="sca:ComponentReference"/> + <element name="property" type="sca:Property"/> + </choice> + <!-- + <any namespace="##other" processContents="lax" minOccurs="0" + maxOccurs="unbounded"/> + --> + </sequence> + <attribute name="constrainingType" type="QName" use="optional"/> + <anyAttribute namespace="##any" processContents="lax"/> + </complexType> + + <element name="composite" type="sca:Composite"/> + <complexType name="Composite"> + <sequence> + <choice minOccurs="0" maxOccurs="unbounded"> + <element name="include" type="sca:Include"/> + <element name="service" type="sca:Service"/> + <element name="property" type="sca:Property"/> + <element name="component" type="sca:Component"/> + <element name="reference" type="sca:Reference"/> + <element name="wire" type="sca:Wire"/> + <any namespace="##other" processContents="lax"/> + </choice> + <!-- + <any namespace="##other" processContents="lax" minOccurs="0" + maxOccurs="unbounded"/> + --> + </sequence> + <attribute name="name" type="NCName" use="required"/> + <attribute name="targetNamespace" type="anyURI" use="optional"/> + <attribute name="local" type="boolean" use="optional" default="false"/> + <attribute name="autowire" type="boolean" use="optional" default="false"/> + <attribute name="constrainingType" type="QName" use="optional"/> + <attribute name="requires" type="sca:listOfQNames" use="optional"/> + <attribute name="policySets" type="sca:listOfQNames" use="optional"/> + <anyAttribute namespace="##any" processContents="lax"/> + </complexType> + + <complexType name="Service"> + <sequence> + <element ref="sca:interface" minOccurs="0" maxOccurs="1" /> + <element name="operation" type="sca:Operation" minOccurs="0" + maxOccurs="unbounded" /> + <choice minOccurs="0" maxOccurs="unbounded"> + <element ref="sca:binding" /> + <any namespace="##other" processContents="lax"/> + </choice> + <element ref="sca:callback" minOccurs="0" maxOccurs="1" /> + <!-- + <any namespace="##other" processContents="lax" minOccurs="0" + maxOccurs="unbounded" /> + --> + </sequence> + <attribute name="name" type="NCName" use="required" /> + <attribute name="promote" type="anyURI" use="required" /> + <attribute name="requires" type="sca:listOfQNames" use="optional" /> + <attribute name="policySets" type="sca:listOfQNames" use="optional"/> + <anyAttribute namespace="##any" processContents="lax" /> + </complexType> + + <element name="interface" type="sca:Interface" abstract="true" /> + <complexType name="Interface" abstract="true"/> + + <complexType name="Reference"> + <sequence> + <element ref="sca:interface" minOccurs="0" maxOccurs="1" /> + <element name="operation" type="sca:Operation" minOccurs="0" + maxOccurs="unbounded" /> + <choice minOccurs="0" maxOccurs="unbounded"> + <element ref="sca:binding" /> + <any namespace="##other" processContents="lax" /> + </choice> + <element ref="sca:callback" minOccurs="0" maxOccurs="1" /> + <!-- + <any namespace="##other" processContents="lax" minOccurs="0" + maxOccurs="unbounded" /> + --> + </sequence> + <attribute name="name" type="NCName" use="required" /> + <attribute name="target" type="sca:listOfAnyURIs" use="optional"/> + <attribute name="wiredByImpl" type="boolean" use="optional" default="false"/> + <attribute name="multiplicity" type="sca:Multiplicity" + use="optional" default="1..1" /> + <attribute name="promote" type="sca:listOfAnyURIs" use="required" /> + <attribute name="requires" type="sca:listOfQNames" use="optional" /> + <attribute name="policySets" type="sca:listOfQNames" use="optional"/> + <anyAttribute namespace="##any" processContents="lax" /> + </complexType> + + <complexType name="SCAPropertyBase" mixed="true"> + <!-- mixed="true" to handle simple type --> + <sequence> + <any namespace="##any" processContents="lax" minOccurs="0" + maxOccurs="1" /> + <!-- NOT an extension point; This xsd:any exists to accept + the element-based or complex type property + i.e. no element-based extension point under "sca:property" --> + </sequence> + </complexType> + + <!-- complex type for sca:property declaration --> + <complexType name="Property" mixed="true"> + <complexContent> + <extension base="sca:SCAPropertyBase"> + <!-- extension defines the place to hold default value --> + <attribute name="name" type="NCName" use="required"/> + <attribute name="type" type="QName" use="optional"/> + <attribute name="element" type="QName" use="optional"/> + <attribute name="many" type="boolean" default="false" + use="optional"/> + <attribute name="noDefault" type="boolean" default="false" + use="optional"/> + <anyAttribute namespace="##any" processContents="lax"/> + <!-- an extension point ; attribute-based only --> + </extension> + </complexContent> + </complexType> + + <complexType name="PropertyValue" mixed="true"> + <complexContent> + <extension base="sca:SCAPropertyBase"> + <attribute name="name" type="NCName" use="required"/> + <attribute name="type" type="QName" use="optional"/> + <attribute name="element" type="QName" use="optional"/> + <attribute name="many" type="boolean" default="false" + use="optional"/> + <attribute name="source" type="string" use="optional"/> + <attribute name="file" type="anyURI" use="optional"/> + <anyAttribute namespace="##any" processContents="lax"/> + <!-- an extension point ; attribute-based only --> + </extension> + </complexContent> + </complexType> + + <element name="binding" type="sca:Binding" abstract="true"/> + <complexType name="Binding" abstract="true"> + <sequence> + <element name="operation" type="sca:Operation" minOccurs="0" + maxOccurs="unbounded" /> + </sequence> + <attribute name="uri" type="anyURI" use="optional"/> + <attribute name="name" type="QName" use="optional"/> + <attribute name="requires" type="sca:listOfQNames" use="optional"/> + <attribute name="policySets" type="sca:listOfQNames" use="optional"/> + </complexType> + + <element name="bindingType" type="sca:BindingType"/> + <complexType name="BindingType"> + <sequence minOccurs="0" maxOccurs="unbounded"> + <any namespace="##other" processContents="lax" /> + </sequence> + <attribute name="type" type="QName" use="required"/> + <attribute name="alwaysProvides" type="sca:listOfQNames" use="optional"/> + <attribute name="mayProvide" type="sca:listOfQNames" use="optional"/> + <anyAttribute namespace="##any" processContents="lax"/> + </complexType> + + <element name="callback" type="sca:Callback"/> + <complexType name="Callback"> + <choice minOccurs="0" maxOccurs="unbounded"> + <element ref="sca:binding"/> + <any namespace="##other" processContents="lax"/> + </choice> + <attribute name="requires" type="sca:listOfQNames" use="optional"/> + <attribute name="policySets" type="sca:listOfQNames" use="optional"/> + <anyAttribute namespace="##any" processContents="lax"/> + </complexType> + + <complexType name="Component"> + <sequence> + <choice minOccurs="0" maxOccurs="1"> + <element ref="sca:implementation"/> + <any namespace="##other" processContents="lax"/> + </choice> + <choice minOccurs="0" maxOccurs="unbounded"> + <element name="service" type="sca:ComponentService"/> + <element name="reference" type="sca:ComponentReference"/> + <element name="property" type="sca:PropertyValue" /> + </choice> + <!-- + <any namespace="##other" processContents="lax" minOccurs="0" + maxOccurs="unbounded"/> + --> + </sequence> + <attribute name="name" type="NCName" use="required"/> + <attribute name="autowire" type="boolean" use="optional" default="false"/> + <attribute name="constrainingType" type="QName" use="optional"/> + <attribute name="requires" type="sca:listOfQNames" use="optional"/> + <attribute name="policySets" type="sca:listOfQNames" use="optional"/> + <anyAttribute namespace="##any" processContents="lax"/> + </complexType> + + <complexType name="ComponentService"> + <sequence> + <element ref="sca:interface" minOccurs="0" maxOccurs="1"/> + <element name="operation" type="sca:Operation" minOccurs="0" + maxOccurs="unbounded" /> + <choice minOccurs="0" maxOccurs="unbounded"> + <element ref="sca:binding" /> + <any namespace="##other" processContents="lax"/> + </choice> + <element ref="sca:callback" minOccurs="0" maxOccurs="1"/> + <!-- + <any namespace="##other" processContents="lax" minOccurs="0" + maxOccurs="unbounded"/> + --> + </sequence> + <attribute name="name" type="NCName" use="required"/> + <attribute name="requires" type="sca:listOfQNames" + use="optional"/> + <attribute name="policySets" type="sca:listOfQNames" + use="optional"/> + <anyAttribute namespace="##any" processContents="lax"/> + </complexType> + + <complexType name="ComponentReference"> + <sequence> + <element ref="sca:interface" minOccurs="0" maxOccurs="1" /> + <element name="operation" type="sca:Operation" minOccurs="0" + maxOccurs="unbounded" /> + <choice minOccurs="0" maxOccurs="unbounded"> + <element ref="sca:binding" /> + <any namespace="##other" processContents="lax" /> + </choice> + <element ref="sca:callback" minOccurs="0" maxOccurs="1" /> + <!-- + <any namespace="##other" processContents="lax" minOccurs="0" + maxOccurs="unbounded" /> + --> + </sequence> + <attribute name="name" type="NCName" use="required" /> + <attribute name="target" type="sca:listOfAnyURIs" use="optional"/> + <attribute name="multiplicity" type="sca:Multiplicity" + use="optional" default="1..1" /> + <attribute name="requires" type="sca:listOfQNames" use="optional"/> + <attribute name="policySets" type="sca:listOfQNames" + use="optional"/> + <anyAttribute namespace="##any" processContents="lax" /> + </complexType> + + <element name="implementation" type="sca:Implementation" + abstract="true" /> + <complexType name="Implementation" abstract="true"> + <attribute name="requires" type="sca:listOfQNames" use="optional"/> + <attribute name="policySets" type="sca:listOfQNames" use="optional"/> + </complexType> + + <element name="implementationType" type="sca:ImplementationType"/> + <complexType name="ImplementationType"> + <sequence minOccurs="0" maxOccurs="unbounded"> + <any namespace="##other" processContents="lax" /> + </sequence> + <attribute name="type" type="QName" use="required"/> + <attribute name="alwaysProvides" type="sca:listOfQNames" use="optional"/> + <attribute name="mayProvide" type="sca:listOfQNames" use="optional"/> + <anyAttribute namespace="##any" processContents="lax"/> + </complexType> + + <complexType name="Wire"> + <sequence> + <any namespace="##other" processContents="lax" minOccurs="0" + maxOccurs="unbounded"/> + </sequence> + <attribute name="source" type="anyURI" use="required"/> + <attribute name="target" type="anyURI" use="required"/> + <anyAttribute namespace="##any" processContents="lax"/> + </complexType> + + <element name="include" type="sca:Include"/> + <complexType name="Include"> + <attribute name="name" type="QName"/> + <anyAttribute namespace="##any" processContents="lax"/> + </complexType> + + <complexType name="Operation"> + <attribute name="name" type="NCName" use="required"/> + <attribute name="requires" type="sca:listOfQNames" use="optional"/> + <attribute name="policySets" type="sca:listOfQNames" use="optional"/> + <anyAttribute namespace="##any" processContents="lax"/> + </complexType> + + <element name="constrainingType" type="sca:ConstrainingType"/> + <complexType name="ConstrainingType"> + <sequence> + <choice minOccurs="0" maxOccurs="unbounded"> + <element name="service" type="sca:ComponentService"/> + <element name="reference" type="sca:ComponentReference"/> + <element name="property" type="sca:Property" /> + </choice> + <any namespace="##other" processContents="lax" minOccurs="0" + maxOccurs="unbounded"/> + </sequence> + <attribute name="name" type="NCName" use="required"/> + <attribute name="targetNamespace" type="anyURI"/> + <attribute name="requires" type="sca:listOfQNames" use="optional"/> + <anyAttribute namespace="##any" processContents="lax"/> + </complexType> + + + <simpleType name="Multiplicity"> + <restriction base="string"> + <enumeration value="0..1"/> + <enumeration value="1..1"/> + <enumeration value="0..n"/> + <enumeration value="1..n"/> + </restriction> + </simpleType> + + <simpleType name="OverrideOptions"> + <restriction base="string"> + <enumeration value="no"/> + <enumeration value="may"/> + <enumeration value="must"/> + </restriction> + </simpleType> + + <!-- Global attribute definition for @requires to permit use of intents + within WSDL documents --> + <attribute name="requires" type="sca:listOfQNames"/> + + <!-- Global attribute defintion for @endsConversation to mark operations + as ending a conversation --> + <attribute name="endsConversation" type="boolean" default="false"/> + + <simpleType name="listOfQNames"> + <list itemType="QName"/> + </simpleType> + + <simpleType name="listOfAnyURIs"> + <list itemType="anyURI"/> + </simpleType> + +</schema>
\ No newline at end of file diff --git a/sca-java-1.x/branches/sca-java-1.6.2/tools/eclipse/plugins/core/xsd/sca-definitions.xsd b/sca-java-1.x/branches/sca-java-1.6.2/tools/eclipse/plugins/core/xsd/sca-definitions.xsd new file mode 100644 index 0000000000..0249882a92 --- /dev/null +++ b/sca-java-1.x/branches/sca-java-1.6.2/tools/eclipse/plugins/core/xsd/sca-definitions.xsd @@ -0,0 +1,25 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- (c) Copyright SCA Collaboration 2007 --> +<schema xmlns="http://www.w3.org/2001/XMLSchema" + targetNamespace="http://www.osoa.org/xmlns/sca/1.0" + xmlns:sca="http://www.osoa.org/xmlns/sca/1.0" + elementFormDefault="qualified"> + + <include schemaLocation="sca-core.xsd"/> + <include schemaLocation="sca-policy.xsd"/> + + <element name="definitions"> + <complexType> + <choice minOccurs="0" maxOccurs="unbounded"> + <element ref="sca:intent"/> + <element ref="sca:policySet"/> + <element ref="sca:binding"/> + <element ref="sca:bindingType"/> + <element ref="sca:implementationType"/> + <any namespace="##other" processContents="lax" minOccurs="0" maxOccurs="unbounded"/> + </choice> + <attribute name="targetNamespace" type="anyURI" use="optional"/> + </complexType> + </element> + +</schema>
\ No newline at end of file diff --git a/sca-java-1.x/branches/sca-java-1.6.2/tools/eclipse/plugins/core/xsd/sca-implementation-bpel.xsd b/sca-java-1.x/branches/sca-java-1.6.2/tools/eclipse/plugins/core/xsd/sca-implementation-bpel.xsd new file mode 100644 index 0000000000..87b443fb36 --- /dev/null +++ b/sca-java-1.x/branches/sca-java-1.6.2/tools/eclipse/plugins/core/xsd/sca-implementation-bpel.xsd @@ -0,0 +1,43 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- (c) Copyright SCA Collaboration 2006 --> +<xsd:schema xmlns="http://www.osoa.org/xmlns/sca/1.0" + targetNamespace="http://www.osoa.org/xmlns/sca/1.0" + xmlns:xsd="http://www.w3.org/2001/XMLSchema" + elementFormDefault="qualified"> + + <xsd:include schemaLocation="sca-core.xsd" /> + + <xsd:element name="implementation.bpel" type="BpelImplementation" + substitutionGroup="implementation" /> + + <xsd:complexType name="BpelImplementation"> + <xsd:complexContent> + <xsd:extension base="Implementation"> + <xsd:sequence> + <xsd:any namespace="##other" processContents="lax" + minOccurs="0" maxOccurs="unbounded" /> + </xsd:sequence> + <xsd:attribute name="process" type="xsd:QName" use="required" /> + <xsd:anyAttribute namespace="##any" processContents="lax" /> + </xsd:extension> + </xsd:complexContent> + </xsd:complexType> + + <xsd:element name="interface.partnerLinkType" type="BpelPartnerLinkType" + substitutionGroup="interface" /> + + <xsd:complexType name="BpelPartnerLinkType"> + <xsd:complexContent> + <xsd:extension base="Interface"> + <xsd:sequence> + <xsd:any namespace="##other" processContents="lax" + minOccurs="0" maxOccurs="unbounded" /> + </xsd:sequence> + <xsd:attribute name="type" type="xsd:QName" use="required" /> + <xsd:attribute name="serviceRole" type="xsd:NCName" use="optional" /> + <xsd:anyAttribute namespace="##any" processContents="lax" /> + </xsd:extension> + </xsd:complexContent> + </xsd:complexType> + +</xsd:schema>
\ No newline at end of file diff --git a/sca-java-1.x/branches/sca-java-1.6.2/tools/eclipse/plugins/core/xsd/sca-implementation-composite.xsd b/sca-java-1.x/branches/sca-java-1.6.2/tools/eclipse/plugins/core/xsd/sca-implementation-composite.xsd new file mode 100644 index 0000000000..99669bc672 --- /dev/null +++ b/sca-java-1.x/branches/sca-java-1.6.2/tools/eclipse/plugins/core/xsd/sca-implementation-composite.xsd @@ -0,0 +1,23 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- (c) Copyright SCA Collaboration 2006 --> +<schema xmlns="http://www.w3.org/2001/XMLSchema" + targetNamespace="http://www.osoa.org/xmlns/sca/1.0" + xmlns:sca="http://www.osoa.org/xmlns/sca/1.0" + elementFormDefault="qualified"> + + <include schemaLocation="sca-core.xsd"/> + <element name="implementation.composite" type="sca:SCAImplementation" + substitutionGroup="sca:implementation"/> + <complexType name="SCAImplementation"> + <complexContent> + <extension base="sca:Implementation"> + <sequence> + <any namespace="##other" processContents="lax" minOccurs="0" + maxOccurs="unbounded"/> + </sequence> + <attribute name="name" type="QName" use="required"/> + <anyAttribute namespace="##any" processContents="lax"/> + </extension> + </complexContent> + </complexType> +</schema> diff --git a/sca-java-1.x/branches/sca-java-1.6.2/tools/eclipse/plugins/core/xsd/sca-implementation-cpp.xsd b/sca-java-1.x/branches/sca-java-1.6.2/tools/eclipse/plugins/core/xsd/sca-implementation-cpp.xsd new file mode 100644 index 0000000000..6f1cf14a4b --- /dev/null +++ b/sca-java-1.x/branches/sca-java-1.6.2/tools/eclipse/plugins/core/xsd/sca-implementation-cpp.xsd @@ -0,0 +1,53 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- (c) Copyright SCA Collaboration 2006 --> +<schema xmlns="http://www.w3.org/2001/XMLSchema" + targetNamespace="http://www.osoa.org/xmlns/sca/1.0" + xmlns:sca="http://www.osoa.org/xmlns/sca/1.0" + xmlns:sdo="commonj.sdo/XML" + elementFormDefault="qualified"> + + <include schemaLocation="sca-core.xsd"/> + + <element name="implementation.cpp" type="sca:CPPImplementation" substitutionGroup="sca:implementation" /> + <complexType name="CPPImplementation"> + <complexContent> + <extension base="sca:Implementation"> + <sequence> + <element name="method" type="sca:CPPImplementationMethod" minOccurs="0" maxOccurs="unbounded" /> + <any namespace="##other" processContents="lax" minOccurs="0" maxOccurs="unbounded"/> + </sequence> + <attribute name="library" type="NCName" use="required"/> + <attribute name="header" type="NCName" use="required"/> + <attribute name="path" type="NCName" use="optional"/> + <attribute name="class" type="Name" use="optional"/> + <attribute name="scope" type="sca:CPPImplementationScope" use="optional"/> + <attribute name="eagerInit" type="boolean" use="optional"/> + <attribute name="allowsPassByReference" type="boolean" use="optional"/> + <attribute name="conversationMaxAge" type="string" use="optional"/> + <attribute name="conversationMaxIdle" type="string" use="optional"/> + <attribute name="conversationSinglePrincipal" type="boolean" use="optional"/> + <anyAttribute namespace="##any" processContents="lax"/> + </extension> + </complexContent> + </complexType> + + <simpleType name="CPPImplementationScope"> + <restriction base="string"> + <enumeration value="stateless"/> + <enumeration value="composite"/> + <enumeration value="request"/> + <enumeration value="converstion"/> + </restriction> + </simpleType> + + <complexType name="CPPImplementationMethod"> + <complexContent> + <attribute name="name" type="NCName" use="required"/> + <attribute name="allowsPassByReference" type="boolean" use="optional"/> + <anyAttribute namespace="##any" processContents="lax"/> + </complexContent> + </complexType> + +</schema> + + diff --git a/sca-java-1.x/branches/sca-java-1.6.2/tools/eclipse/plugins/core/xsd/sca-implementation-ejb.xsd b/sca-java-1.x/branches/sca-java-1.6.2/tools/eclipse/plugins/core/xsd/sca-implementation-ejb.xsd new file mode 100644 index 0000000000..1bca6199cb --- /dev/null +++ b/sca-java-1.x/branches/sca-java-1.6.2/tools/eclipse/plugins/core/xsd/sca-implementation-ejb.xsd @@ -0,0 +1,25 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- (c) Copyright SCA Collaboration 2006 --> +<schema xmlns="http://www.w3.org/2001/XMLSchema" + targetNamespace="http://www.osoa.org/xmlns/sca/1.0" + xmlns:sca="http://www.osoa.org/xmlns/sca/1.0" + elementFormDefault="qualified"> + + <include schemaLocation="sca-core.xsd"/> + + <element name="implementation.ejb" type="sca:EJBImplementation" + substitutionGroup="sca:implementation"/> + <complexType name="EJBImplementation"> + <complexContent> + <extension base="sca:Implementation"> + <sequence> + <any namespace="##other" processContents="lax" + minOccurs="0" maxOccurs="unbounded"/> + </sequence> + <!-- we might want to make this refer to the JEE ejb-link type --> + <attribute name="ejb-link" type="token" use="required"/> + <anyAttribute namespace="##any" processContents="lax"/> + </extension> + </complexContent> + </complexType> +</schema>
\ No newline at end of file diff --git a/sca-java-1.x/branches/sca-java-1.6.2/tools/eclipse/plugins/core/xsd/sca-implementation-java.xsd b/sca-java-1.x/branches/sca-java-1.6.2/tools/eclipse/plugins/core/xsd/sca-implementation-java.xsd new file mode 100644 index 0000000000..f9d8171b8e --- /dev/null +++ b/sca-java-1.x/branches/sca-java-1.6.2/tools/eclipse/plugins/core/xsd/sca-implementation-java.xsd @@ -0,0 +1,24 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- (c) Copyright SCA Collaboration 2006 --> +<schema xmlns="http://www.w3.org/2001/XMLSchema" + targetNamespace="http://www.osoa.org/xmlns/sca/1.0" + xmlns:sca="http://www.osoa.org/xmlns/sca/1.0" + elementFormDefault="qualified"> + + <include schemaLocation="sca-core.xsd"/> + + <element name="implementation.java" type="sca:JavaImplementation" + substitutionGroup="sca:implementation"/> + <complexType name="JavaImplementation"> + <complexContent> + <extension base="sca:Implementation"> + <sequence> + <any namespace="##other" processContents="lax" + minOccurs="0" maxOccurs="unbounded"/> + </sequence> + <attribute name="class" type="NCName" use="required"/> + <anyAttribute namespace="##any" processContents="lax"/> + </extension> + </complexContent> + </complexType> +</schema>
\ No newline at end of file diff --git a/sca-java-1.x/branches/sca-java-1.6.2/tools/eclipse/plugins/core/xsd/sca-implementation-spring.xsd b/sca-java-1.x/branches/sca-java-1.6.2/tools/eclipse/plugins/core/xsd/sca-implementation-spring.xsd new file mode 100644 index 0000000000..1cf9fb3ea9 --- /dev/null +++ b/sca-java-1.x/branches/sca-java-1.6.2/tools/eclipse/plugins/core/xsd/sca-implementation-spring.xsd @@ -0,0 +1,24 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- (c) Copyright SCA Collaboration 2006 --> +<schema xmlns="http://www.w3.org/2001/XMLSchema" + targetNamespace="http://www.osoa.org/xmlns/sca/1.0" + xmlns:sca="http://www.osoa.org/xmlns/sca/1.0" + elementFormDefault="qualified"> + + <include schemaLocation="sca-core.xsd"/> + + <element name="implementation.spring" type="sca:SpringImplementation" + substitutionGroup="sca:implementation"/> + <complexType name="SpringImplementation"> + <complexContent> + <extension base="sca:Implementation"> + <sequence> + <any namespace="##other" processContents="lax" + minOccurs="0" maxOccurs="unbounded"/> + </sequence> + <attribute name="location" type="anyURI" use="required"/> + <anyAttribute namespace="##any" processContents="lax"/> + </extension> + </complexContent> + </complexType> +</schema>
\ No newline at end of file diff --git a/sca-java-1.x/branches/sca-java-1.6.2/tools/eclipse/plugins/core/xsd/sca-interface-cpp.xsd b/sca-java-1.x/branches/sca-java-1.6.2/tools/eclipse/plugins/core/xsd/sca-interface-cpp.xsd new file mode 100644 index 0000000000..44f14e5ed5 --- /dev/null +++ b/sca-java-1.x/branches/sca-java-1.6.2/tools/eclipse/plugins/core/xsd/sca-interface-cpp.xsd @@ -0,0 +1,40 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- (c) Copyright SCA Collaboration 2006 --> +<schema xmlns="http://www.w3.org/2001/XMLSchema" + targetNamespace="http://www.commonj.org/xmlns/sca/1.0/" + xmlns:sca="http://www.commonj.org/xmlns/sca/1.0/" + xmlns:sdo="commonj.sdo/XML" + elementFormDefault="qualified"> + + <include schemaLocation="sca-core.xsd"/> + + <element name="interface.cpp" type="sca:CPPInterface" substitutionGroup="sca:interface"/> + + <complexType name="CPPInterface"> + <complexContent> + <extension base="sca:Interface"> + <sequence> + <element name="method" type="sca:CPPMethod" minOccurs="0" maxOccurs="unbounded" /> + <any namespace="##other" processContents="lax" minOccurs="0" maxOccurs="unbounded"/> + </sequence> + <attribute name="header" type="NCName" use="required"/> + <attribute name="class" type="Name" use="required"/> + <attribute name="callbackHeader" type="NCName" use="optional"/> + <attribute name="callbackClass" type="Name" use="optional"/> + <attribute name="remotable" type="boolean" use="optional"/> + <anyAttribute namespace="##any" processContents="lax"/> + </extension> + </complexContent> + </complexType> + + <complexType name="CPPMethod"> + <complexContent> + <attribute name="name" type="NCName" use="required"/> + <attribute name="oneWay" type="boolean" use="optional"/> + <attribute name="endConversation" type="boolean" use="optional"/> + <anyAttribute namespace="##any" processContents="lax"/> + </complexContent> + </complexType> + +</schema> + diff --git a/sca-java-1.x/branches/sca-java-1.6.2/tools/eclipse/plugins/core/xsd/sca-interface-java.xsd b/sca-java-1.x/branches/sca-java-1.6.2/tools/eclipse/plugins/core/xsd/sca-interface-java.xsd new file mode 100644 index 0000000000..81f939bdb4 --- /dev/null +++ b/sca-java-1.x/branches/sca-java-1.6.2/tools/eclipse/plugins/core/xsd/sca-interface-java.xsd @@ -0,0 +1,23 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- (c) Copyright SCA Collaboration 2006, 2007 --> +<schema xmlns="http://www.w3.org/2001/XMLSchema" + targetNamespace="http://www.osoa.org/xmlns/sca/1.0" + xmlns:sca="http://www.osoa.org/xmlns/sca/1.0" + elementFormDefault="qualified"> + + <include schemaLocation="sca-core.xsd"/> + + <element name="interface.java" type="sca:JavaInterface" substitutionGroup="sca:interface"/> + <complexType name="JavaInterface"> + <complexContent> + <extension base="sca:Interface"> + <sequence> + <any namespace="##other" processContents="lax" minOccurs="0" maxOccurs="unbounded"/> + </sequence> + <attribute name="interface" type="NCName" use="required"/> + <attribute name="callbackInterface" type="NCName" use="optional"/> + <anyAttribute namespace="##any" processContents="lax"/> + </extension> + </complexContent> + </complexType> +</schema>
\ No newline at end of file diff --git a/sca-java-1.x/branches/sca-java-1.6.2/tools/eclipse/plugins/core/xsd/sca-interface-wsdl.xsd b/sca-java-1.x/branches/sca-java-1.6.2/tools/eclipse/plugins/core/xsd/sca-interface-wsdl.xsd new file mode 100644 index 0000000000..c1fdfd8f3c --- /dev/null +++ b/sca-java-1.x/branches/sca-java-1.6.2/tools/eclipse/plugins/core/xsd/sca-interface-wsdl.xsd @@ -0,0 +1,23 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- (c) Copyright SCA Collaboration 2006, 2007 --> +<schema xmlns="http://www.w3.org/2001/XMLSchema" + targetNamespace="http://www.osoa.org/xmlns/sca/1.0" + xmlns:sca="http://www.osoa.org/xmlns/sca/1.0" + elementFormDefault="qualified"> + + <include schemaLocation="sca-core.xsd"/> + + <element name="interface.wsdl" type="sca:WSDLPortType" substitutionGroup="sca:interface"/> + <complexType name="WSDLPortType"> + <complexContent> + <extension base="sca:Interface"> + <sequence> + <any namespace="##other" processContents="lax" minOccurs="0" maxOccurs="unbounded"/> + </sequence> + <attribute name="interface" type="anyURI" use="required"/> + <attribute name="callbackInterface" type="anyURI" use="optional"/> + <anyAttribute namespace="##any" processContents="lax"/> + </extension> + </complexContent> + </complexType> +</schema>
\ No newline at end of file diff --git a/sca-java-1.x/branches/sca-java-1.6.2/tools/eclipse/plugins/core/xsd/sca-policy.xsd b/sca-java-1.x/branches/sca-java-1.6.2/tools/eclipse/plugins/core/xsd/sca-policy.xsd new file mode 100644 index 0000000000..c22ffd6618 --- /dev/null +++ b/sca-java-1.x/branches/sca-java-1.6.2/tools/eclipse/plugins/core/xsd/sca-policy.xsd @@ -0,0 +1,76 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- (c) Copyright SCA Collaboration 2006, 2007 --> +<schema xmlns="http://www.w3.org/2001/XMLSchema" + targetNamespace="http://www.osoa.org/xmlns/sca/1.0" + xmlns:sca="http://www.osoa.org/xmlns/sca/1.0" + xmlns:wsp="http://schemas.xmlsoap.org/ws/2004/09/policy" + elementFormDefault="qualified"> + + <include schemaLocation="sca-core.xsd"/> + + <element name="intent" type="sca:Intent"/> + <complexType name="Intent"> + <sequence> + <element name="description" type="string" minOccurs="0" maxOccurs="1" /> + <any namespace="##other" processContents="lax" + minOccurs="0" maxOccurs="unbounded"/> + </sequence> + <attribute name="name" type="QName" use="required"/> + <attribute name="constrains" type="sca:listOfQNames" use="optional"/> + <attribute name="requires" type="sca:listOfQNames" use="optional"/> + <anyAttribute namespace="##any" processContents="lax"/> + </complexType> + + <element name="policySet" type="sca:PolicySet"/> + <complexType name="PolicySet"> + <choice minOccurs="0" maxOccurs="unbounded"> + <element name="policySetReference" type="sca:PolicySetReference"/> + <element name="intentMap" type="sca:IntentMap"/> + <any namespace="##other" processContents="lax"/> + </choice> + <attribute name="name" type="QName" use="required"/> + <attribute name="provides" type="sca:listOfQNames" use="optional"/> + <attribute name="appliesTo" type="string" use="required"/> + <anyAttribute namespace="##any" processContents="lax"/> + </complexType> + + <complexType name="PolicySetReference"> + <attribute name="name" type="QName" use="required"/> + <anyAttribute namespace="##any" processContents="lax"/> + </complexType> + + <complexType name="IntentMap"> + <choice minOccurs="1" maxOccurs="unbounded"> + <element name="qualifier" type="sca:Qualifier"/> + <any namespace="##other" processContents="lax"/> + </choice> + <attribute name="provides" type="QName" use="required"/> + <attribute name="default" type="string" use="optional"/> + <anyAttribute namespace="##any" processContents="lax"/> + </complexType> + + <complexType name="Qualifier"> + <choice minOccurs="1" maxOccurs="unbounded"> + <element name="intentMap" type="sca:IntentMap"/> + <any namespace="##other" processContents="lax"/> + </choice> + <attribute name="name" type="string" use="required"/> + <anyAttribute namespace="##any" processContents="lax"/> + </complexType> + + <element name="allow" type="sca:Allow"/> + <complexType name="Allow"> + <attribute name="roles" type="string" use="required"/> + </complexType> + + <element name="permitAll" type="sca:PermitAll"/> + <complexType name="PermitAll"/> + + <element name="denyAll" type="sca:DenyAll"/> + <complexType name="DenyAll"/> + + <element name="runAs" type="sca:RunAs"/> + <complexType name="RunAs"> + <attribute name="role" type="string" use="required"/> + </complexType> +</schema> diff --git a/sca-java-1.x/branches/sca-java-1.6.2/tools/eclipse/plugins/core/xsd/sca.xsd b/sca-java-1.x/branches/sca-java-1.6.2/tools/eclipse/plugins/core/xsd/sca.xsd new file mode 100644 index 0000000000..10f54275d0 --- /dev/null +++ b/sca-java-1.x/branches/sca-java-1.6.2/tools/eclipse/plugins/core/xsd/sca.xsd @@ -0,0 +1,22 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- (c) Copyright SCA Collaboration 2006, 2007 --> +<schema xmlns="http://www.w3.org/2001/XMLSchema" + targetNamespace="http://www.osoa.org/xmlns/sca/1.0" + xmlns:sca="http://www.osoa.org/xmlns/sca/1.0"> + + <include schemaLocation="sca-core.xsd"/> + + <include schemaLocation="sca-interface-java.xsd"/> + <include schemaLocation="sca-interface-wsdl.xsd"/> + + <include schemaLocation="sca-implementation-java.xsd"/> + <include schemaLocation="sca-implementation-composite.xsd"/> + + <include schemaLocation="sca-binding-webservice.xsd"/> + <include schemaLocation="sca-binding-jms.xsd"/> + <include schemaLocation="sca-binding-sca.xsd"/> + + <include schemaLocation="sca-definitions.xsd"/> + <include schemaLocation="sca-policy.xsd"/> + +</schema>
\ No newline at end of file diff --git a/sca-java-1.x/branches/sca-java-1.6.2/tools/eclipse/plugins/core/xsd/tuscany-sca-binding-atom.xsd b/sca-java-1.x/branches/sca-java-1.6.2/tools/eclipse/plugins/core/xsd/tuscany-sca-binding-atom.xsd new file mode 100644 index 0000000000..c93a1d72de --- /dev/null +++ b/sca-java-1.x/branches/sca-java-1.6.2/tools/eclipse/plugins/core/xsd/tuscany-sca-binding-atom.xsd @@ -0,0 +1,41 @@ +<?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. +--> +<schema xmlns="http://www.w3.org/2001/XMLSchema" + targetNamespace="http://tuscany.apache.org/xmlns/sca/1.0" + xmlns:sca="http://www.osoa.org/xmlns/sca/1.0" + xmlns:t="http://tuscany.apache.org/xmlns/sca/1.0" + elementFormDefault="qualified"> + + <import namespace="http://www.osoa.org/xmlns/sca/1.0" schemaLocation="sca-core.xsd"/> + + <element name="binding.atom" type="t:AtomBinding"/> + + <complexType name="AtomBinding"> + <complexContent> + <extension base="sca:Binding"> + <sequence> + <any namespace="##targetNamespace" processContents="lax" minOccurs="0" + maxOccurs="unbounded"/> + </sequence> + <attribute name="title" type="string" use="optional"/> + </extension> + </complexContent> + </complexType> +</schema> diff --git a/sca-java-1.x/branches/sca-java-1.6.2/tools/eclipse/plugins/core/xsd/tuscany-sca-binding-dwr.xsd b/sca-java-1.x/branches/sca-java-1.6.2/tools/eclipse/plugins/core/xsd/tuscany-sca-binding-dwr.xsd new file mode 100644 index 0000000000..d0da5421ec --- /dev/null +++ b/sca-java-1.x/branches/sca-java-1.6.2/tools/eclipse/plugins/core/xsd/tuscany-sca-binding-dwr.xsd @@ -0,0 +1,40 @@ +<?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. +--> +<schema xmlns="http://www.w3.org/2001/XMLSchema" + targetNamespace="http://tuscany.apache.org/xmlns/sca/1.0" + xmlns:sca="http://www.osoa.org/xmlns/sca/1.0" + xmlns:t="http://tuscany.apache.org/xmlns/sca/1.0" + elementFormDefault="qualified"> + + <import namespace="http://www.osoa.org/xmlns/sca/1.0" schemaLocation="sca-core.xsd"/> + + <element name="binding.dwr" type="t:DWRBinding"/> + + <complexType name="DWRBinding"> + <complexContent> + <extension base="sca:Binding"> + <sequence> + <any namespace="##targetNamespace" processContents="lax" minOccurs="0" + maxOccurs="unbounded"/> + </sequence> + </extension> + </complexContent> + </complexType> +</schema> diff --git a/sca-java-1.x/branches/sca-java-1.6.2/tools/eclipse/plugins/core/xsd/tuscany-sca-binding-http.xsd b/sca-java-1.x/branches/sca-java-1.6.2/tools/eclipse/plugins/core/xsd/tuscany-sca-binding-http.xsd new file mode 100644 index 0000000000..ff48b97d7a --- /dev/null +++ b/sca-java-1.x/branches/sca-java-1.6.2/tools/eclipse/plugins/core/xsd/tuscany-sca-binding-http.xsd @@ -0,0 +1,40 @@ +<?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. +--> +<schema xmlns="http://www.w3.org/2001/XMLSchema" + targetNamespace="http://tuscany.apache.org/xmlns/sca/1.0" + xmlns:sca="http://www.osoa.org/xmlns/sca/1.0" + xmlns:t="http://tuscany.apache.org/xmlns/sca/1.0" + elementFormDefault="qualified"> + + <import namespace="http://www.osoa.org/xmlns/sca/1.0" schemaLocation="sca-core.xsd"/> + + <element name="binding.http" type="t:HTTPBinding"/> + + <complexType name="HTTPBinding"> + <complexContent> + <extension base="sca:Binding"> + <sequence> + <any namespace="##targetNamespace" processContents="lax" minOccurs="0" + maxOccurs="unbounded"/> + </sequence> + </extension> + </complexContent> + </complexType> +</schema> diff --git a/sca-java-1.x/branches/sca-java-1.6.2/tools/eclipse/plugins/core/xsd/tuscany-sca-binding-jsonrpc.xsd b/sca-java-1.x/branches/sca-java-1.6.2/tools/eclipse/plugins/core/xsd/tuscany-sca-binding-jsonrpc.xsd new file mode 100644 index 0000000000..7c79738898 --- /dev/null +++ b/sca-java-1.x/branches/sca-java-1.6.2/tools/eclipse/plugins/core/xsd/tuscany-sca-binding-jsonrpc.xsd @@ -0,0 +1,40 @@ +<?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. +--> +<schema xmlns="http://www.w3.org/2001/XMLSchema" + targetNamespace="http://tuscany.apache.org/xmlns/sca/1.0" + xmlns:sca="http://www.osoa.org/xmlns/sca/1.0" + xmlns:t="http://tuscany.apache.org/xmlns/sca/1.0" + elementFormDefault="qualified"> + + <import namespace="http://www.osoa.org/xmlns/sca/1.0" schemaLocation="sca-core.xsd"/> + + <element name="binding.jsonrpc" type="t:JSONRPCBinding"/> + + <complexType name="JSONRPCBinding"> + <complexContent> + <extension base="sca:Binding"> + <sequence> + <any namespace="##targetNamespace" processContents="lax" minOccurs="0" + maxOccurs="unbounded"/> + </sequence> + </extension> + </complexContent> + </complexType> +</schema> diff --git a/sca-java-1.x/branches/sca-java-1.6.2/tools/eclipse/plugins/core/xsd/tuscany-sca-binding-notification.xsd b/sca-java-1.x/branches/sca-java-1.6.2/tools/eclipse/plugins/core/xsd/tuscany-sca-binding-notification.xsd new file mode 100644 index 0000000000..6d5468b2f9 --- /dev/null +++ b/sca-java-1.x/branches/sca-java-1.6.2/tools/eclipse/plugins/core/xsd/tuscany-sca-binding-notification.xsd @@ -0,0 +1,42 @@ +<?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. +--> +<schema xmlns="http://www.w3.org/2001/XMLSchema" + targetNamespace="http://tuscany.apache.org/xmlns/sca/1.0" + xmlns:sca="http://www.osoa.org/xmlns/sca/1.0" + xmlns:t="http://tuscany.apache.org/xmlns/sca/1.0" + elementFormDefault="qualified"> + + <import namespace="http://www.osoa.org/xmlns/sca/1.0" schemaLocation="sca-core.xsd"/> + + <element name="binding.notification" type="t:NotificationBinding"/> + + <complexType name="NotificationBinding"> + <complexContent> + <extension base="sca:Binding"> + <sequence> + <any namespace="##targetNamespace" processContents="lax" minOccurs="0" + maxOccurs="unbounded"/> + </sequence> + <attribute name="ntm" type="anyURI" use="optional"/> + <attribute name="notificationType" type="anyURI" use="optional"/> + </extension> + </complexContent> + </complexType> +</schema> diff --git a/sca-java-1.x/branches/sca-java-1.6.2/tools/eclipse/plugins/core/xsd/tuscany-sca-binding-rmi.xsd b/sca-java-1.x/branches/sca-java-1.6.2/tools/eclipse/plugins/core/xsd/tuscany-sca-binding-rmi.xsd new file mode 100644 index 0000000000..2697a1ea98 --- /dev/null +++ b/sca-java-1.x/branches/sca-java-1.6.2/tools/eclipse/plugins/core/xsd/tuscany-sca-binding-rmi.xsd @@ -0,0 +1,43 @@ +<?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. +--> +<schema xmlns="http://www.w3.org/2001/XMLSchema" + targetNamespace="http://tuscany.apache.org/xmlns/sca/1.0" + xmlns:sca="http://www.osoa.org/xmlns/sca/1.0" + xmlns:t="http://tuscany.apache.org/xmlns/sca/1.0" + elementFormDefault="qualified"> + + <import namespace="http://www.osoa.org/xmlns/sca/1.0" schemaLocation="sca-core.xsd"/> + + <element name="binding.rmi" type="t:RMIBinding"/> + + <complexType name="RMIBinding"> + <complexContent> + <extension base="sca:Binding"> + <sequence> + <any namespace="##targetNamespace" processContents="lax" minOccurs="0" + maxOccurs="unbounded"/> + </sequence> + <attribute name="host" type="anyURI" use="optional"/> + <attribute name="port" type="int" use="optional"/> + <attribute name="serviceName" type="anyURI" use="required"/> + </extension> + </complexContent> + </complexType> +</schema> diff --git a/sca-java-1.x/branches/sca-java-1.6.2/tools/eclipse/plugins/core/xsd/tuscany-sca-binding-rss.xsd b/sca-java-1.x/branches/sca-java-1.6.2/tools/eclipse/plugins/core/xsd/tuscany-sca-binding-rss.xsd new file mode 100644 index 0000000000..821f323d73 --- /dev/null +++ b/sca-java-1.x/branches/sca-java-1.6.2/tools/eclipse/plugins/core/xsd/tuscany-sca-binding-rss.xsd @@ -0,0 +1,41 @@ +<?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. +--> +<schema xmlns="http://www.w3.org/2001/XMLSchema" + targetNamespace="http://tuscany.apache.org/xmlns/sca/1.0" + xmlns:sca="http://www.osoa.org/xmlns/sca/1.0" + xmlns:t="http://tuscany.apache.org/xmlns/sca/1.0" + elementFormDefault="qualified"> + + <import namespace="http://www.osoa.org/xmlns/sca/1.0" schemaLocation="sca-core.xsd"/> + + <element name="binding.rss" type="t:RSSBinding"/> + + <complexType name="RSSBinding"> + <complexContent> + <extension base="sca:Binding"> + <sequence> + <any namespace="##targetNamespace" processContents="lax" minOccurs="0" + maxOccurs="unbounded"/> + </sequence> + <attribute name="title" type="string" use="optional"/> + </extension> + </complexContent> + </complexType> +</schema> diff --git a/sca-java-1.x/branches/sca-java-1.6.2/tools/eclipse/plugins/core/xsd/tuscany-sca-implementation-node.xsd b/sca-java-1.x/branches/sca-java-1.6.2/tools/eclipse/plugins/core/xsd/tuscany-sca-implementation-node.xsd new file mode 100644 index 0000000000..1b5c8aece2 --- /dev/null +++ b/sca-java-1.x/branches/sca-java-1.6.2/tools/eclipse/plugins/core/xsd/tuscany-sca-implementation-node.xsd @@ -0,0 +1,43 @@ +<?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. +--> +<schema xmlns="http://www.w3.org/2001/XMLSchema" + targetNamespace="http://tuscany.apache.org/xmlns/sca/1.0" + xmlns:sca="http://www.osoa.org/xmlns/sca/1.0" + xmlns:t="http://tuscany.apache.org/xmlns/sca/1.0" + elementFormDefault="qualified"> + + <import namespace="http://www.osoa.org/xmlns/sca/1.0" schemaLocation="sca-core.xsd"/> + + <element name="implementation.node" type="t:NodeImplementation"/> + + <complexType name="NodeImplementation"> + <complexContent> + <extension base="sca:Implementation"> + <sequence> + <any namespace="##targetNamespace" processContents="lax" + minOccurs="0" maxOccurs="unbounded"/> + </sequence> + <attribute name="uri" type="string" use="required"/> + <attribute name="composite" type="QName" use="required"/> + </extension> + </complexContent> + </complexType> + +</schema> diff --git a/sca-java-1.x/branches/sca-java-1.6.2/tools/eclipse/plugins/core/xsd/tuscany-sca-implementation-notification.xsd b/sca-java-1.x/branches/sca-java-1.6.2/tools/eclipse/plugins/core/xsd/tuscany-sca-implementation-notification.xsd new file mode 100644 index 0000000000..f8d437310e --- /dev/null +++ b/sca-java-1.x/branches/sca-java-1.6.2/tools/eclipse/plugins/core/xsd/tuscany-sca-implementation-notification.xsd @@ -0,0 +1,42 @@ +<?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. +--> +<schema xmlns="http://www.w3.org/2001/XMLSchema" + targetNamespace="http://tuscany.apache.org/xmlns/sca/1.0" + xmlns:sca="http://www.osoa.org/xmlns/sca/1.0" + xmlns:t="http://tuscany.apache.org/xmlns/sca/1.0" + elementFormDefault="qualified"> + + <import namespace="http://www.osoa.org/xmlns/sca/1.0" schemaLocation="sca-core.xsd"/> + + <element name="implementation.notification" type="t:NotificationImplementation"/> + + <complexType name="NotificationImplementation"> + <complexContent> + <extension base="sca:Implementation"> + <sequence> + <any namespace="##targetNamespace" processContents="lax" + minOccurs="0" maxOccurs="unbounded"/> + </sequence> + <attribute name="name" type="NCName" use="required"/> + </extension> + </complexContent> + </complexType> + +</schema> diff --git a/sca-java-1.x/branches/sca-java-1.6.2/tools/eclipse/plugins/core/xsd/tuscany-sca-implementation-osgi.xsd b/sca-java-1.x/branches/sca-java-1.6.2/tools/eclipse/plugins/core/xsd/tuscany-sca-implementation-osgi.xsd new file mode 100644 index 0000000000..f8ece54a07 --- /dev/null +++ b/sca-java-1.x/branches/sca-java-1.6.2/tools/eclipse/plugins/core/xsd/tuscany-sca-implementation-osgi.xsd @@ -0,0 +1,43 @@ +<?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. +--> +<schema xmlns="http://www.w3.org/2001/XMLSchema" + targetNamespace="http://tuscany.apache.org/xmlns/sca/1.0" + xmlns:sca="http://www.osoa.org/xmlns/sca/1.0" + xmlns:t="http://tuscany.apache.org/xmlns/sca/1.0" + elementFormDefault="qualified"> + + <import namespace="http://www.osoa.org/xmlns/sca/1.0" schemaLocation="sca-core.xsd"/> + + <element name="implementation.osgi" type="t:OSGiImplementation"/> + + <!-- TODO Declare the proper attributes and elements --> + <complexType name="OSGiImplementation"> + <complexContent> + <extension base="sca:Implementation"> + <sequence> + <any namespace="##any" processContents="lax" + minOccurs="0" maxOccurs="unbounded"/> + </sequence> + <anyAttribute namespace="##any" processContents="lax"/> + </extension> + </complexContent> + </complexType> + +</schema> diff --git a/sca-java-1.x/branches/sca-java-1.6.2/tools/eclipse/plugins/core/xsd/tuscany-sca-implementation-resource.xsd b/sca-java-1.x/branches/sca-java-1.6.2/tools/eclipse/plugins/core/xsd/tuscany-sca-implementation-resource.xsd new file mode 100644 index 0000000000..dd596821ea --- /dev/null +++ b/sca-java-1.x/branches/sca-java-1.6.2/tools/eclipse/plugins/core/xsd/tuscany-sca-implementation-resource.xsd @@ -0,0 +1,42 @@ +<?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. +--> +<schema xmlns="http://www.w3.org/2001/XMLSchema" + targetNamespace="http://tuscany.apache.org/xmlns/sca/1.0" + xmlns:sca="http://www.osoa.org/xmlns/sca/1.0" + xmlns:t="http://tuscany.apache.org/xmlns/sca/1.0" + elementFormDefault="qualified"> + + <import namespace="http://www.osoa.org/xmlns/sca/1.0" schemaLocation="sca-core.xsd"/> + + <element name="implementation.resource" type="t:ResourceImplementation"/> + + <complexType name="ResourceImplementation"> + <complexContent> + <extension base="sca:Implementation"> + <sequence> + <any namespace="##targetNamespace" processContents="lax" + minOccurs="0" maxOccurs="unbounded"/> + </sequence> + <attribute name="location" type="anyURI" use="required"/> + </extension> + </complexContent> + </complexType> + +</schema> diff --git a/sca-java-1.x/branches/sca-java-1.6.2/tools/eclipse/plugins/core/xsd/tuscany-sca-implementation-script.xsd b/sca-java-1.x/branches/sca-java-1.6.2/tools/eclipse/plugins/core/xsd/tuscany-sca-implementation-script.xsd new file mode 100644 index 0000000000..e1723d65f0 --- /dev/null +++ b/sca-java-1.x/branches/sca-java-1.6.2/tools/eclipse/plugins/core/xsd/tuscany-sca-implementation-script.xsd @@ -0,0 +1,43 @@ +<?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. +--> +<schema xmlns="http://www.w3.org/2001/XMLSchema" + targetNamespace="http://tuscany.apache.org/xmlns/sca/1.0" + xmlns:sca="http://www.osoa.org/xmlns/sca/1.0" + xmlns:t="http://tuscany.apache.org/xmlns/sca/1.0" + elementFormDefault="qualified"> + + <import namespace="http://www.osoa.org/xmlns/sca/1.0" schemaLocation="sca-core.xsd"/> + + <element name="implementation.script" type="t:ScriptImplementation"/> + + <complexType name="ScriptImplementation"> + <complexContent mixed="true"> + <extension base="sca:Implementation"> + <sequence> + <any namespace="##targetNamespace" processContents="lax" + minOccurs="0" maxOccurs="unbounded"/> + </sequence> + <attribute name="script" type="anyURI" use="optional"/> + <attribute name="language" type="NCName" use="optional"/> + </extension> + </complexContent> + </complexType> + +</schema> diff --git a/sca-java-1.x/branches/sca-java-1.6.2/tools/eclipse/plugins/core/xsd/tuscany-sca-implementation-widget.xsd b/sca-java-1.x/branches/sca-java-1.6.2/tools/eclipse/plugins/core/xsd/tuscany-sca-implementation-widget.xsd new file mode 100644 index 0000000000..0c0998595f --- /dev/null +++ b/sca-java-1.x/branches/sca-java-1.6.2/tools/eclipse/plugins/core/xsd/tuscany-sca-implementation-widget.xsd @@ -0,0 +1,42 @@ +<?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. +--> +<schema xmlns="http://www.w3.org/2001/XMLSchema" + targetNamespace="http://tuscany.apache.org/xmlns/sca/1.0" + xmlns:sca="http://www.osoa.org/xmlns/sca/1.0" + xmlns:t="http://tuscany.apache.org/xmlns/sca/1.0" + elementFormDefault="qualified"> + + <import namespace="http://www.osoa.org/xmlns/sca/1.0" schemaLocation="sca-core.xsd"/> + + <element name="implementation.widget" type="t:WidgetImplementation"/> + + <complexType name="WidgetImplementation"> + <complexContent> + <extension base="sca:Implementation"> + <sequence> + <any namespace="##targetNamespace" processContents="lax" + minOccurs="0" maxOccurs="unbounded"/> + </sequence> + <attribute name="location" type="anyURI" use="required"/> + </extension> + </complexContent> + </complexType> + +</schema> diff --git a/sca-java-1.x/branches/sca-java-1.6.2/tools/eclipse/plugins/core/xsd/tuscany-sca-implementation-xquery.xsd b/sca-java-1.x/branches/sca-java-1.6.2/tools/eclipse/plugins/core/xsd/tuscany-sca-implementation-xquery.xsd new file mode 100644 index 0000000000..cdabb697aa --- /dev/null +++ b/sca-java-1.x/branches/sca-java-1.6.2/tools/eclipse/plugins/core/xsd/tuscany-sca-implementation-xquery.xsd @@ -0,0 +1,42 @@ +<?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. +--> +<schema xmlns="http://www.w3.org/2001/XMLSchema" + targetNamespace="http://tuscany.apache.org/xmlns/sca/1.0" + xmlns:sca="http://www.osoa.org/xmlns/sca/1.0" + xmlns:t="http://tuscany.apache.org/xmlns/sca/1.0" + elementFormDefault="qualified"> + + <import namespace="http://www.osoa.org/xmlns/sca/1.0" schemaLocation="sca-core.xsd"/> + + <element name="implementation.xquery" type="t:XQueryImplementation"/> + + <complexType name="XQueryImplementation"> + <complexContent> + <extension base="sca:Implementation"> + <sequence> + <any namespace="##targetNamespace" processContents="lax" + minOccurs="0" maxOccurs="unbounded"/> + </sequence> + <attribute name="location" type="anyURI" use="required"/> + </extension> + </complexContent> + </complexType> + +</schema> diff --git a/sca-java-1.x/branches/sca-java-1.6.2/tools/eclipse/plugins/core/xsd/tuscany-sca.xsd b/sca-java-1.x/branches/sca-java-1.6.2/tools/eclipse/plugins/core/xsd/tuscany-sca.xsd new file mode 100644 index 0000000000..da5e696e01 --- /dev/null +++ b/sca-java-1.x/branches/sca-java-1.6.2/tools/eclipse/plugins/core/xsd/tuscany-sca.xsd @@ -0,0 +1,45 @@ +<?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. +--> +<schema xmlns="http://www.w3.org/2001/XMLSchema" + targetNamespace="http://tuscany.apache.org/xmlns/sca/1.0"> + + <import namespace="http://www.osoa.org/xmlns/sca/1.0" schemaLocation="sca-all.xsd"/> + + <include schemaLocation="tuscany-sca-binding-atom.xsd"/> + <include schemaLocation="tuscany-sca-binding-dwr.xsd"/> + <include schemaLocation="tuscany-sca-binding-http.xsd"/> + <include schemaLocation="tuscany-sca-binding-jsonrpc.xsd"/> + <include schemaLocation="tuscany-sca-binding-notification.xsd"/> + <include schemaLocation="tuscany-sca-binding-rmi.xsd"/> + <include schemaLocation="tuscany-sca-binding-rss.xsd"/> + + <!-- + <include schemaLocation="tuscany-sca-implementation-das.xsd"/> + <include schemaLocation="tuscany-sca-implementation-data.xsd"/> + --> + <include schemaLocation="tuscany-sca-implementation-node.xsd"/> + <include schemaLocation="tuscany-sca-implementation-notification.xsd"/> + <include schemaLocation="tuscany-sca-implementation-osgi.xsd"/> + <include schemaLocation="tuscany-sca-implementation-resource.xsd"/> + <include schemaLocation="tuscany-sca-implementation-script.xsd"/> + <include schemaLocation="tuscany-sca-implementation-widget.xsd"/> + <include schemaLocation="tuscany-sca-implementation-xquery.xsd"/> + +</schema>
\ No newline at end of file diff --git a/sca-java-1.x/branches/sca-java-1.6.2/tools/eclipse/pom.xml b/sca-java-1.x/branches/sca-java-1.6.2/tools/eclipse/pom.xml new file mode 100644 index 0000000000..43713ef4b4 --- /dev/null +++ b/sca-java-1.x/branches/sca-java-1.6.2/tools/eclipse/pom.xml @@ -0,0 +1,72 @@ +<?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-sca-tools</artifactId> + <version>1.6.1-SNAPSHOT</version> + <relativePath>../pom.xml</relativePath> + </parent> + + <packaging>pom</packaging> + <artifactId>tuscany-sca-eclipse-tools</artifactId> + <name>Apache Tuscany SCA Eclipse Tools</name> + + <profiles> + <profile> + <id>default</id> + <activation> + <activeByDefault>true</activeByDefault> + </activation> + <modules> + <module>features/core</module> + <module>plugins/core</module> + <module>site/updatesite</module> + </modules> + </profile> + </profiles> + + <build> + <plugins> + <plugin> + <artifactId>maven-antrun-plugin</artifactId> + <executions> + <execution> + <!-- TUSCANY-3762: attaching this to generate-resources would cause mvn eclipse:eclipse to run it --> + <phase>install</phase> + <goals> + <goal>run</goal> + </goals> + <configuration> + <tasks> + <tstamp/> + <mkdir dir="target"/> + <echo file="target/filter.properties" message="tuscany.eclipse.version=${pom.version}.v${DSTAMP}-${TSTAMP}"/> + <replace file="target/filter.properties" token="-SNAPSHOT"/> + </tasks> + </configuration> + </execution> + </executions> + </plugin> + </plugins> + </build> + +</project> diff --git a/sca-java-1.x/branches/sca-java-1.6.2/tools/eclipse/site/updatesite/LICENSE b/sca-java-1.x/branches/sca-java-1.6.2/tools/eclipse/site/updatesite/LICENSE new file mode 100644 index 0000000000..8aa906c321 --- /dev/null +++ b/sca-java-1.x/branches/sca-java-1.6.2/tools/eclipse/site/updatesite/LICENSE @@ -0,0 +1,205 @@ + + 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-1.x/branches/sca-java-1.6.2/tools/eclipse/site/updatesite/filtered-resources/NOTICE b/sca-java-1.x/branches/sca-java-1.6.2/tools/eclipse/site/updatesite/filtered-resources/NOTICE new file mode 100644 index 0000000000..ad2ba40961 --- /dev/null +++ b/sca-java-1.x/branches/sca-java-1.6.2/tools/eclipse/site/updatesite/filtered-resources/NOTICE @@ -0,0 +1,6 @@ +${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-1.x/branches/sca-java-1.6.2/tools/eclipse/site/updatesite/filtered-resources/site.xml b/sca-java-1.x/branches/sca-java-1.6.2/tools/eclipse/site/updatesite/filtered-resources/site.xml new file mode 100644 index 0000000000..0a433ee065 --- /dev/null +++ b/sca-java-1.x/branches/sca-java-1.6.2/tools/eclipse/site/updatesite/filtered-resources/site.xml @@ -0,0 +1,38 @@ +<?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. +--> +<site> + <description url="http://tuscany.apache.org"> + Apache Tuscany SCA Eclipse Tools + </description> + + <feature id="org.apache.tuscany.sca.feature.core" version="${tuscany.eclipse.version}" + url="features/org.apache.tuscany.sca.feature.core-${pom.version}.jar"> + <category name="Apache Tuscany SCA Eclipse Tools"/> + </feature> + + <archive path="plugins/org.apache.tuscany.sca.core_${tuscany.eclipse.version}" + url="plugins/org.apache.tuscany.sca.core_${tuscany.eclipse.version}.jar"/> + + <category-def name="Apache Tuscany SCA Eclipse Tools" label="Apache Tuscany SCA Eclipse Tools"> + <description> + The Apache Tuscany SCA Eclipse Tools category contains all features related to Apache Tuscany SCA. + </description> + </category-def> +</site> diff --git a/sca-java-1.x/branches/sca-java-1.6.2/tools/eclipse/site/updatesite/filtered-resources/src/main/assembly/updatesite.xml b/sca-java-1.x/branches/sca-java-1.6.2/tools/eclipse/site/updatesite/filtered-resources/src/main/assembly/updatesite.xml new file mode 100644 index 0000000000..6d11e978af --- /dev/null +++ b/sca-java-1.x/branches/sca-java-1.6.2/tools/eclipse/site/updatesite/filtered-resources/src/main/assembly/updatesite.xml @@ -0,0 +1,52 @@ +<?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. +--> +<assembly> + <id>updatesite</id> + <includeBaseDirectory>false</includeBaseDirectory> + <formats> + <format>dir</format> + </formats> + + <fileSets> + <fileSet> + <directory>target/classes</directory> + <outputDirectory>tuscany-sca-${tuscany.version}-updatesite</outputDirectory> + <includes> + <include>LICENSE</include> + <include>NOTICE</include> + <include>site.xml</include> + </includes> + </fileSet> + </fileSets> + + <files> + <file> + <source>../../plugins/core/target/org.apache.tuscany.sca.core-${tuscany.version}.jar</source> + <outputDirectory>tuscany-sca-${tuscany.version}-updatesite/plugins</outputDirectory> + <destName>org.apache.tuscany.sca.core_${tuscany.eclipse.version}.jar</destName> + </file> + + <file> + <source>../../features/core/target/org.apache.tuscany.sca.feature.core-${tuscany.version}.jar</source> + <outputDirectory>tuscany-sca-${tuscany.version}-updatesite/features</outputDirectory> + </file> + </files> + +</assembly> diff --git a/sca-java-1.x/branches/sca-java-1.6.2/tools/eclipse/site/updatesite/pom.xml b/sca-java-1.x/branches/sca-java-1.6.2/tools/eclipse/site/updatesite/pom.xml new file mode 100644 index 0000000000..105a80f520 --- /dev/null +++ b/sca-java-1.x/branches/sca-java-1.6.2/tools/eclipse/site/updatesite/pom.xml @@ -0,0 +1,130 @@ +<?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-sca-tools</artifactId> + <version>1.6.1-SNAPSHOT</version> + <relativePath>../../../pom.xml</relativePath> + </parent> + <artifactId>org.apache.tuscany.sca.updatesite</artifactId> + <name>Apache Tuscany SCA Eclipse Tools Update Site</name> + + <properties> + <tuscany.version>${pom.version}</tuscany.version> + </properties> + + <dependencies> + <dependency> + <groupId>org.apache.tuscany.sca</groupId> + <artifactId>org.apache.tuscany.sca.core</artifactId> + <version>1.6.1-SNAPSHOT</version> + </dependency> + <dependency> + <groupId>org.apache.tuscany.sca</groupId> + <artifactId>org.apache.tuscany.sca.feature.core</artifactId> + <version>1.6.1-SNAPSHOT</version> + </dependency> + </dependencies> + + <build> + <resources> + <resource> + <directory>${basedir}</directory> + <excludes> + <exclude>src/**</exclude> + <exclude>**/.*/**</exclude> + <exclude>pom.xml</exclude> + <exclude>build.*</exclude> + <exclude>target/**</exclude> + </excludes> + </resource> + </resources> + + <plugins> + <plugin> + <groupId>org.apache.maven.plugins</groupId> + <artifactId>maven-resources-plugin</artifactId> + <version>2.4.3</version> + <executions> + <!-- TUSCANY-3762: Copy resource files that need to be filtered --> + <execution> + <id>copy-filtered-resources</id> + <phase>generate-resources</phase> + <goals> + <goal>copy-resources</goal> + </goals> + <configuration> + <outputDirectory>${basedir}</outputDirectory> + <filters> + <filter>${basedir}/../../target/filter.properties</filter> + </filters> + <resources> + <resource> + <directory>${basedir}/filtered-resources</directory> + <filtering>true</filtering> + </resource> + </resources> + </configuration> + </execution> + </executions> + </plugin> + <plugin> + <groupId>org.apache.maven.plugins</groupId> + <artifactId>maven-assembly-plugin</artifactId> + <executions> + <execution> + <id>updatesite-package</id> + <phase>package</phase> + <goals> + <goal>single</goal> + </goals> + <configuration> + <descriptors> + <descriptor>src/main/assembly/updatesite.xml</descriptor> + </descriptors> + <tarLongFileMode>gnu</tarLongFileMode> + <finalName>apache-tuscany-sca-${pom.version}</finalName> + </configuration> + </execution> + </executions> + </plugin> + <plugin> + <groupId>org.apache.maven.plugins</groupId> + <artifactId>maven-clean-plugin</artifactId> + <configuration> + <filesets> + <!-- TUSCANY-3762: Delete copied filtered resource files --> + <fileset> + <directory>${basedir}</directory> + <includes> + <include>site.xml</include> + <include>NOTICE</include> + <include>src/**</include> + </includes> + </fileset> + </filesets> + </configuration> + </plugin> + </plugins> + </build> + +</project> diff --git a/sca-java-1.x/branches/sca-java-1.6.2/tools/java2wsdl/LICENSE b/sca-java-1.x/branches/sca-java-1.6.2/tools/java2wsdl/LICENSE new file mode 100644 index 0000000000..8aa906c321 --- /dev/null +++ b/sca-java-1.x/branches/sca-java-1.6.2/tools/java2wsdl/LICENSE @@ -0,0 +1,205 @@ + + 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-1.x/branches/sca-java-1.6.2/tools/java2wsdl/NOTICE b/sca-java-1.x/branches/sca-java-1.6.2/tools/java2wsdl/NOTICE new file mode 100644 index 0000000000..ad2ba40961 --- /dev/null +++ b/sca-java-1.x/branches/sca-java-1.6.2/tools/java2wsdl/NOTICE @@ -0,0 +1,6 @@ +${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-1.x/branches/sca-java-1.6.2/tools/java2wsdl/pom.xml b/sca-java-1.x/branches/sca-java-1.6.2/tools/java2wsdl/pom.xml new file mode 100644 index 0000000000..0d32efad42 --- /dev/null +++ b/sca-java-1.x/branches/sca-java-1.6.2/tools/java2wsdl/pom.xml @@ -0,0 +1,174 @@ +<?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-sca-tools</artifactId> + <version>1.6.1-SNAPSHOT</version> + <relativePath>../pom.xml</relativePath> + </parent> + <artifactId>tuscany-java2wsdl</artifactId> + <name>Apache Tuscany SCA Java2WSDL Tool</name> + <dependencies> + <dependency> + <groupId>org.apache.tuscany.sdo</groupId> + <artifactId>tuscany-sdo-impl</artifactId> + <version>1.1.1</version> + <exclusions> + <exclusion> + <groupId>stax</groupId> + <artifactId>stax-api</artifactId> + </exclusion> + </exclusions> + </dependency> + <dependency> + <groupId>org.apache.tuscany.sca</groupId> + <artifactId>tuscany-sca-api</artifactId> + <version>1.6.1-SNAPSHOT</version> + </dependency> + <dependency> + <groupId>org.apache.tuscany.sca</groupId> + <artifactId>tuscany-databinding</artifactId> + <version>1.6.1-SNAPSHOT</version> + </dependency> + <dependency> + <groupId>javax.xml.stream</groupId> + <artifactId>stax-api</artifactId> + <version>1.0-2</version> + </dependency> + <dependency> + <groupId>wsdl4j</groupId> + <artifactId>wsdl4j</artifactId> + <version>1.6.2</version> + </dependency> + <dependency> + <groupId>org.apache.neethi</groupId> + <artifactId>neethi</artifactId> + <version>2.0.4</version> + <exclusions> + <exclusion> + <groupId>wsdl4j</groupId> + <artifactId>wsdl4j</artifactId> + </exclusion> + <exclusion> + <groupId>org.codehaus.woodstox</groupId> + <artifactId>wstx-asl</artifactId> + </exclusion> + </exclusions> + </dependency> + + <dependency> + <groupId>org.apache.axis2</groupId> + <artifactId>axis2-java2wsdl</artifactId> + <version>1.4.1</version> + <exclusions> + <exclusion> + <groupId>org.apache.ant</groupId> + <artifactId>ant</artifactId> + </exclusion> + </exclusions> + </dependency> + <dependency> + <groupId>org.apache.axis2</groupId> + <artifactId>axis2-codegen</artifactId> + <version>1.4.1</version> + <exclusions> + <exclusion> + <groupId>org.apache.geronimo.specs</groupId> + <artifactId>geronimo-activation_1.1_spec</artifactId> + </exclusion> + </exclusions> + </dependency> + <dependency> + <groupId>org.eclipse.emf</groupId> + <artifactId>codegen</artifactId> + <version>2.2.3</version> + </dependency> + <dependency> + <groupId>org.eclipse.emf</groupId> + <artifactId>codegen-ecore</artifactId> + <version>2.2.3</version> + </dependency> + + <dependency> + <groupId>junit</groupId> + <artifactId>junit</artifactId> + <version>4.5</version> + <scope>test</scope> + </dependency> + </dependencies> + <build> + <plugins> + <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/sdo-source</source> + </sources> + </configuration> + </execution> + </executions> + </plugin> + <plugin> + <groupId>org.apache.tuscany.sdo</groupId> + <artifactId>tuscany-sdo-plugin</artifactId> + <version>1.1.1</version> + <executions> + <execution> + <id>generate-sdo</id> + <phase>generate-sources</phase> + <configuration> + <schemaFile>${basedir}/src/test/resources/CreditScoreDocLit.wsdl + </schemaFile> + <javaPackage>org.example.creditscore.doclit</javaPackage> + <noNotification>true</noNotification> + <noContainer>true</noContainer> + <noUnsettable>true</noUnsettable> + </configuration> + <goals> + <goal>generate</goal> + </goals> + </execution> + </executions> + </plugin> + </plugins> + </build> + <repositories> + <repository> + <!-- temporarily using indiana state univ as eclipse site diesnt have 2.2.2 at the moment --> + <id>indiana</id> + <url>http://ftp.ussg.iu.edu/eclipse/modeling/emf/emf/maven2/ + </url> + <snapshots> + <enabled>false</enabled> + </snapshots> + </repository> + </repositories> +</project> diff --git a/sca-java-1.x/branches/sca-java-1.6.2/tools/java2wsdl/src/main/java/org/apache/tuscany/tools/java2wsdl/generate/GenerationParameters.java b/sca-java-1.x/branches/sca-java-1.6.2/tools/java2wsdl/src/main/java/org/apache/tuscany/tools/java2wsdl/generate/GenerationParameters.java new file mode 100644 index 0000000000..60afe70534 --- /dev/null +++ b/sca-java-1.x/branches/sca-java-1.6.2/tools/java2wsdl/src/main/java/org/apache/tuscany/tools/java2wsdl/generate/GenerationParameters.java @@ -0,0 +1,423 @@ +/* + * 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.tools.java2wsdl.generate; + +import java.io.File; +import java.io.FileOutputStream; +import java.io.IOException; +import java.net.MalformedURLException; +import java.net.URL; +import java.net.URLClassLoader; +import java.util.ArrayList; +import java.util.Hashtable; +import java.util.Map; + +import org.apache.axis2.description.java2wsdl.Java2WSDLUtils; +import org.apache.ws.java2wsdl.utils.Java2WSDLCommandLineOption; + +/** + * This class encapsulates the parameters that effect the generation of the WSDL. For example they contain all user settings such as source class, + * target location etc. + * + */ +public class GenerationParameters implements TuscanyJava2WSDLConstants { + public static final String WSDL_FILENAME_SUFFIX = ".wsdl"; + + public static final String XSD_IMPORT_DELIMITER = "[,]"; + + private Map cmdLineOptions = null; + + private File outputFile = null; + + private FileOutputStream outputFileStream = null; + + private String sourceClassName = null; + + private ArrayList extraClasses; + + private ArrayList factoryClassNames; + + private String attrFormDefault = null; + + private String elementFormDefault = null; + + private String targetNamespace = null; + + private String targetNamespacePrefix = null; + + private String schemaTargetNamespace = null; + + private String schemaTargetNamespacePrefix = null; + + private String outputFileName = null; + + private ClassLoader classLoader = null; + + private String serviceName = null; + + private String style = DOCUMENT; + + private String use = LITERAL; + + private String locationUri = DEFAULT_LOCATION_URL; + + private Map schemaLocationMap = null; + + public GenerationParameters(Map cmdLineOptions) throws Exception { + this.cmdLineOptions = cmdLineOptions; + loadParameters(); + } + + protected void loadParameters() throws Exception { + initializeSourceClassName(); + resolveFileOutputStream(); + resolveClassLoader4InputClasspath(); + loadSchemaLocationMap(); + initializeOtherParams(); + } + + private Java2WSDLCommandLineOption loadOption(String shortOption, String longOption) { + // short option gets precedence + Java2WSDLCommandLineOption option = null; + if (longOption != null) { + option = (Java2WSDLCommandLineOption) cmdLineOptions.get(longOption); + if (option != null) { + return option; + } + } + if (shortOption != null) { + option = (Java2WSDLCommandLineOption) cmdLineOptions.get(shortOption); + } + + return option; + } + + protected void initializeSourceClassName() throws Exception { + Java2WSDLCommandLineOption option = loadOption(CLASSNAME_OPTION, CLASSNAME_OPTION_LONG); + sourceClassName = option == null ? null : option.getOptionValue(); + + if (sourceClassName == null || sourceClassName.equals("")) { + throw new Exception("class name must be present!"); + } + } + + /** + * @throws Exception + */ + protected void resolveFileOutputStream() throws Exception { + File outputFolder; + Java2WSDLCommandLineOption option = loadOption(OUTPUT_LOCATION_OPTION, OUTPUT_LOCATION_OPTION_LONG); + String outputFolderName = option == null ? System.getProperty("user.dir") : option.getOptionValue(); + + outputFolder = new File(outputFolderName); + if (!outputFolder.exists()) { + outputFolder.mkdirs(); + } else if (!outputFolder.isDirectory()) { + throw new Exception("The specified location " + outputFolderName + "is not a folder"); + } + + option = loadOption(OUTPUT_FILENAME_OPTION, OUTPUT_FILENAME_OPTION_LONG); + String outputFileName = option == null ? null : option.getOptionValue(); + // derive a file name from the class name if the filename is not specified + if (outputFileName == null) { + outputFileName = Java2WSDLUtils.getSimpleClassName(sourceClassName) + WSDL_FILENAME_SUFFIX; + } + + // first create a file in the given location + File outputFile = new File(outputFolder, outputFileName); + try { + if (!outputFile.exists()) { + outputFile.createNewFile(); + } + outputFileStream = new FileOutputStream(outputFile); + } catch (IOException e) { + throw new Exception(e); + } + } + + protected void addToSchemaLocationMap(String optionValue) throws Exception { + // option value will be of the form [namespace, schemalocation] + // hence we take the two substrings starting after '[' and upto ',' and + // starting after ',' and upto ']' + getSchemaLocationMap().put(optionValue.substring(1, optionValue.indexOf(COMMA)), + optionValue.substring(optionValue.indexOf(COMMA) + 1, optionValue.length() - 1)); + } + + protected void loadSchemaLocationMap() throws Exception { + Java2WSDLCommandLineOption option = loadOption(IMPORT_XSD_OPTION, IMPORT_XSD_OPTION_LONG); + + if (option != null) { + ArrayList optionValues = option.getOptionValues(); + + for (int count = 0; count < optionValues.size(); ++count) { + addToSchemaLocationMap(((String) optionValues.get(count)).trim()); + } + } + } + + protected void resolveClassLoader4InputClasspath() throws Exception { + URL[] urls = null; + Java2WSDLCommandLineOption option = loadOption(CLASSPATH_OPTION, CLASSPATH_OPTION_LONG); + + if (option != null) { + ArrayList optionValues = option.getOptionValues(); + urls = new URL[optionValues.size()]; + String[] classPathEntries = (String[]) optionValues.toArray(new String[optionValues.size()]); + + try { + for (int i = 0; i < classPathEntries.length; i++) { + String classPathEntry = classPathEntries[i]; + // this should be a file(or a URL) + if (Java2WSDLUtils.isURL(classPathEntry)) { + urls[i] = new URL(classPathEntry); + } else { + urls[i] = new File(classPathEntry).toURL(); + } + } + } catch (MalformedURLException e) { + throw new Exception(e); + } + + } else { + //Default to pwd + urls = new URL[1]; + File pwd = new File("."); + urls[0] = pwd.toURL(); + } + + classLoader = new URLClassLoader(urls, Thread.currentThread().getContextClassLoader()); + } + + protected void initializeOtherParams() { + // set the other parameters to the builder + Java2WSDLCommandLineOption option = + loadOption(SCHEMA_TARGET_NAMESPACE_OPTION, SCHEMA_TARGET_NAMESPACE_OPTION_LONG); + schemaTargetNamespace = (option == null) ? null : option.getOptionValue(); + + option = loadOption(SCHEMA_TARGET_NAMESPACE_PREFIX_OPTION, SCHEMA_TARGET_NAMESPACE_PREFIX_OPTION_LONG); + schemaTargetNamespacePrefix = (option == null) ? null : option.getOptionValue(); + + option = loadOption(TARGET_NAMESPACE_OPTION, TARGET_NAMESPACE_OPTION_LONG); + targetNamespace = (option == null) ? null : option.getOptionValue(); + + option = loadOption(TARGET_NAMESPACE_PREFIX_OPTION, TARGET_NAMESPACE_PREFIX_OPTION_LONG); + targetNamespacePrefix = (option == null) ? null : option.getOptionValue(); + + option = loadOption(SERVICE_NAME_OPTION, SERVICE_NAME_OPTION_LONG); + serviceName = (option == null) ? Java2WSDLUtils.getSimpleClassName(sourceClassName) : option.getOptionValue(); + + option = loadOption(STYLE_OPTION, STYLE_OPTION); + style = (option == null) ? null : option.getOptionValue(); + + option = loadOption(LOCATION_OPTION, LOCATION_OPTION); + locationUri = (option == null) ? null : option.getOptionValue(); + + option = loadOption(USE_OPTION, USE_OPTION); + use = (option == null) ? null : option.getOptionValue(); + + option = loadOption(ATTR_FORM_DEFAULT_OPTION, ATTR_FORM_DEFAULT_OPTION_LONG); + attrFormDefault = (option == null) ? null : option.getOptionValue(); + + option = loadOption(ELEMENT_FORM_DEFAULT_OPTION, ELEMENT_FORM_DEFAULT_OPTION_LONG); + elementFormDefault = option == null ? null : option.getOptionValue(); + + option = loadOption(TuscanyJava2WSDLConstants.EXTRA_CLASSES_DEFAULT_OPTION, TuscanyJava2WSDLConstants.EXTRA_CLASSES_DEFAULT_OPTION_LONG); + extraClasses = option == null ? new ArrayList() : option.getOptionValues(); + + option = loadOption(TuscanyJava2WSDLConstants.FACTORY_CLASSNAMES_OPTION, TuscanyJava2WSDLConstants.FACTORY_CLASSNAMES_OPTION_LONG); + factoryClassNames = option == null ? new ArrayList() : option.getOptionValues(); + } + + public ClassLoader getClassLoader() { + return classLoader; + } + + public void setClassLoader(ClassLoader classLoader) { + this.classLoader = classLoader; + } + + public String getLocationUri() { + if (locationUri == null) { + locationUri = DEFAULT_LOCATION_URL; + } + return locationUri; + } + + public void setLocationUri(String locationUri) { + this.locationUri = locationUri; + } + + public FileOutputStream getOutputFileStream() { + return outputFileStream; + } + + public void setOutputFileStream(FileOutputStream outputFileStream) { + this.outputFileStream = outputFileStream; + } + + public String getSchemaTargetNamespace() throws Exception { + if (schemaTargetNamespace == null || schemaTargetNamespace.trim().equals("")) { + // This amounts to assuming we want the wrapper elements in the same TNS + // as the WSDL definitions. + // + // If the user neither specifies a TNS nor a SchemaTNS then both of these two + // will continue to default to the same NS calculated from the input class' package name. + // + // The wrapper elements aren't really interesting outside the context of the WSDL types + // section, so it seems reasonable to think that a user who cares to select a non-default + // TNS for the WSDL definitions might want the wrapper elements defined in that same + // NS. + // + // The user can always override this default. + + this.schemaTargetNamespace = this.getTargetNamespace(); + } + return schemaTargetNamespace; + } + + public void setSchemaTargetNamespace(String schemaTargetNamespace) { + this.schemaTargetNamespace = schemaTargetNamespace; + } + + public String getSchemaTargetNamespacePrefix() { + if (schemaTargetNamespacePrefix == null || schemaTargetNamespacePrefix.trim().equals("")) { + this.schemaTargetNamespacePrefix = SCHEMA_NAMESPACE_PRFIX; + } + + return schemaTargetNamespacePrefix; + } + + public void setSchemaTargetNamespacePrefix(String schemaTargetNamespacePrefix) { + this.schemaTargetNamespacePrefix = schemaTargetNamespacePrefix; + } + + public String getServiceName() { + if (serviceName == null) { + serviceName = Java2WSDLUtils.getSimpleClassName(getSourceClassName()); + } + return serviceName; + } + + public void setServiceName(String serviceName) { + this.serviceName = serviceName; + } + + public String getSourceClassName() { + return sourceClassName; + } + + public void setSourceClassName(String sourceClassName) { + this.sourceClassName = sourceClassName; + } + + public String getStyle() { + if (style == null) { + style = DOCUMENT; + } + return style; + } + + public void setStyle(String style) { + this.style = style; + } + + public String getTargetNamespace() throws Exception { + if (targetNamespace == null) { + targetNamespace = Java2WSDLUtils.namespaceFromClassName(this.sourceClassName, this.classLoader).toString(); + } + return targetNamespace; + } + + public void setTargetNamespace(String targetNamespace) { + this.targetNamespace = targetNamespace; + } + + public String getTargetNamespacePrefix() { + return targetNamespacePrefix; + } + + public void setTargetNamespacePrefix(String targetNamespacePrefix) { + this.targetNamespacePrefix = targetNamespacePrefix; + } + + public String getUse() { + if (use == null) { + use = LITERAL; + } + return use; + } + + public void setUse(String use) { + this.use = use; + } + + public Map getSchemaLocationMap() { + if (schemaLocationMap == null) { + schemaLocationMap = new Hashtable(); + } + return schemaLocationMap; + } + + public void setSchemaLocationMap(Map schemaLocationMap) { + this.schemaLocationMap = schemaLocationMap; + } + + public String getAttrFormDefault() { + if (attrFormDefault == null) { + attrFormDefault = FORM_DEFAULT_UNQUALIFIED; + } + return attrFormDefault; + } + + public void setAttrFormDefault(String attrFormDefault) { + this.attrFormDefault = attrFormDefault; + } + + public String getElementFormDefault() { + if (elementFormDefault == null) { + elementFormDefault = FORM_DEFAULT_QUALIFIED; + } + return elementFormDefault; + } + + public void setElementFormDefault(String elementFormDefault) { + this.elementFormDefault = elementFormDefault; + } + + public ArrayList getExtraClasses() { + return extraClasses; + } + + public void setExtraClasses(ArrayList extraClasses) { + this.extraClasses = extraClasses; + } + + public ArrayList getFactoryClassNames() { + return factoryClassNames; + } + + public void setFactoryClassNames(ArrayList factoryClassNames) { + this.factoryClassNames = factoryClassNames; + } + + // Not a command-line parameter, but will be useful for printing status message + protected File getOutputFile() { + return outputFile; + } +} diff --git a/sca-java-1.x/branches/sca-java-1.6.2/tools/java2wsdl/src/main/java/org/apache/tuscany/tools/java2wsdl/generate/Java2WSDL.java b/sca-java-1.x/branches/sca-java-1.6.2/tools/java2wsdl/src/main/java/org/apache/tuscany/tools/java2wsdl/generate/Java2WSDL.java new file mode 100644 index 0000000000..a890dd624d --- /dev/null +++ b/sca-java-1.x/branches/sca-java-1.6.2/tools/java2wsdl/src/main/java/org/apache/tuscany/tools/java2wsdl/generate/Java2WSDL.java @@ -0,0 +1,82 @@ +/* + * 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.tools.java2wsdl.generate; + +import org.apache.ws.java2wsdl.utils.Java2WSDLCommandLineOptionParser; + +/** + * This class provides the tooling abstraction to Tuscany Java2WSDL and can be + * invoked from command line with the following options as with Axis2 Java2WSDL + */ +public class Java2WSDL { + /** + * @param args + */ + public static void main(String[] args) { + // parse the cmd line args + Java2WSDLCommandLineOptionParser commandLineOptionParser = new Java2WSDLCommandLineOptionParser(args); + + // validate the arguments + validateCommandLineOptions(commandLineOptionParser); + + Java2WSDLGeneratorFactory.getInstance().createGenerator().generateWSDL(commandLineOptionParser.getAllOptions()); + + // Uncomment the following statement to directly run the Axis2 tool + // without + // runAxis2Tool(args); + } + + private static void runAxis2Tool(String[] args) { + org.apache.ws.java2wsdl.Java2WSDL.main(args); + } + + private static void validateCommandLineOptions(Java2WSDLCommandLineOptionParser parser) { + if (parser.getAllOptions().size() == 0) { + printUsage(); + } else if (parser.getInvalidOptions(new TuscanyJava2WSDLOptionsValidator()).size() > 0) { + printUsage(); + } + + } + + public static void printUsage() { + System.out.println("Usage java2wsdl -cn <fully qualified class name> : class file name"); + System.out.println("-o <output Location> : output file location"); + System.out.println("-cp <class path uri> : list of classpath entries - (urls)"); + System.out.println("-tn <target namespace> : target namespace"); + System.out.println("-tp <target namespace prefix> : target namespace prefix"); + System.out.println("-stn <schema target namespace> : target namespace for schema"); + System.out.println("-stp <schema target namespace prefix> : target namespace prefix for schema"); + System.out.println("-sn <service name> : service name"); + System.out.println("-of <output file name> : output file name for the WSDL"); + System.out.println("-st <binding style> : style for the WSDL"); + System.out.println("-u <binding use> : use for the WSDL"); + System.out.println("-l <soap address> : address of the port for the WSDL"); + System.out + .println("-ixsd [<schema namespace 1>,<schema loc 1>] [<schema namespace 2>,<schema loc 2>] ... [<schema namespace N>,<schema loc N>] : schemas to be imported (without a comma in between brackets)"); + System.out.println("-efd <unqualified> : Setting for elementFormDefault (defaults to qualified)"); + System.out.println("-afd <unqualified> : Setting for attributeFormDefault (defaults to qualified)"); + System.out + .println("-fcn <Generated SDO Factory classname 1> <Generated SDO Factory classname 2> ... <Generated SDO Factory classname N> (without a comma in between) "); + + System.out + .println("-xc <extra class> : Extra class for which schematype must be generated. " + "\t\tUse as : -xc class1 -xc class2 ..."); + System.exit(0); + } +} diff --git a/sca-java-1.x/branches/sca-java-1.6.2/tools/java2wsdl/src/main/java/org/apache/tuscany/tools/java2wsdl/generate/Java2WSDLGenerator.java b/sca-java-1.x/branches/sca-java-1.6.2/tools/java2wsdl/src/main/java/org/apache/tuscany/tools/java2wsdl/generate/Java2WSDLGenerator.java new file mode 100644 index 0000000000..9c8ff9df9e --- /dev/null +++ b/sca-java-1.x/branches/sca-java-1.6.2/tools/java2wsdl/src/main/java/org/apache/tuscany/tools/java2wsdl/generate/Java2WSDLGenerator.java @@ -0,0 +1,46 @@ +/* + * 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.tools.java2wsdl.generate; + +import java.io.OutputStream; +import java.util.Map; + +/** + * This is the Java2WSDL Generator facade that will be used by Tuscany + * components for Java to WSDL conversion. + * + */ +public interface Java2WSDLGenerator { + public void generateWSDL(String[] args); + + public void generateWSDL(Map commandLineOptions); + + public void addWSDLGenListener(WSDLGenListener l); + + public void removeWSDLGenListener(WSDLGenListener l); + + public Map getCommandLineOptions(); + + public void setCommandLineOptoins(Map cmdLineOpts); + + public OutputStream getOutputStream(); + + public void setOutputStream(OutputStream outStream); + +} diff --git a/sca-java-1.x/branches/sca-java-1.6.2/tools/java2wsdl/src/main/java/org/apache/tuscany/tools/java2wsdl/generate/Java2WSDLGeneratorFactory.java b/sca-java-1.x/branches/sca-java-1.6.2/tools/java2wsdl/src/main/java/org/apache/tuscany/tools/java2wsdl/generate/Java2WSDLGeneratorFactory.java new file mode 100644 index 0000000000..e8f3db95b0 --- /dev/null +++ b/sca-java-1.x/branches/sca-java-1.6.2/tools/java2wsdl/src/main/java/org/apache/tuscany/tools/java2wsdl/generate/Java2WSDLGeneratorFactory.java @@ -0,0 +1,89 @@ +/* + * 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.tools.java2wsdl.generate; + +import java.util.Vector; + +/** + * Factory that creates Java2WSDL Generators. Presently the there is a Default + * Generator that wraps around the AXIS2 Java2WSDL implementation. The factory + * can be extended to create generators that wrap around other implementations + * if required. + */ + +public class Java2WSDLGeneratorFactory { + /* + * singleton instance of this factory class + */ + private static Java2WSDLGeneratorFactory factory = null; + + /** + * code for the default generator + */ + public static final int DEFAULT_GENERATOR = 0; + + /** + * Default Generator class name + */ + public static final String DEFAULT_GENERATOR_CLASSNAME = "org.apache.tuscany.tools.java2wsdl.generate.Java2WSDLGeneratorImpl"; + + /** + * list of generator classnames in a position that corresponds to their + * code. For example the default generator's code is 0 and hence this + * generator's classname is stored at index '0' of the list + */ + protected Vector<String> generatorClassNames = new Vector<String>(); + + /** + * @return the singleton instance of this generator factory + */ + public static Java2WSDLGeneratorFactory getInstance() { + if (factory == null) { + factory = new Java2WSDLGeneratorFactory(); + } + return factory; + } + + private Java2WSDLGeneratorFactory() { + generatorClassNames.addElement(DEFAULT_GENERATOR_CLASSNAME); + } + + public Java2WSDLGenerator createGenerator() { + return createGenerator(DEFAULT_GENERATOR); + } + + /** + * creates an instance of a Java2WSDL Generator based on the input type + * + * @param genType + * type of the generator to be created + * @return an instance of a Java2WSDL Generator + */ + public Java2WSDLGenerator createGenerator(int genType) { + try { + return (Java2WSDLGenerator) (Class.forName(generatorClassNames + .elementAt(genType)).newInstance()); + } catch (Exception e) { + System.out + .println(" Unable to create Java2WSDL generator due to ....."); + System.out.println(e); + return null; + } + } +} diff --git a/sca-java-1.x/branches/sca-java-1.6.2/tools/java2wsdl/src/main/java/org/apache/tuscany/tools/java2wsdl/generate/Java2WSDLGeneratorImpl.java b/sca-java-1.x/branches/sca-java-1.6.2/tools/java2wsdl/src/main/java/org/apache/tuscany/tools/java2wsdl/generate/Java2WSDLGeneratorImpl.java new file mode 100644 index 0000000000..bce30a48d3 --- /dev/null +++ b/sca-java-1.x/branches/sca-java-1.6.2/tools/java2wsdl/src/main/java/org/apache/tuscany/tools/java2wsdl/generate/Java2WSDLGeneratorImpl.java @@ -0,0 +1,238 @@ +/* + * 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.tools.java2wsdl.generate; + +import java.io.OutputStream; +import java.util.Iterator; +import java.util.List; +import java.util.Map; +import java.util.Vector; + +import org.apache.axiom.om.OMElement; +import org.apache.ws.java2wsdl.Java2WSDL; +import org.apache.ws.java2wsdl.utils.Java2WSDLCommandLineOption; +import org.apache.ws.java2wsdl.utils.Java2WSDLCommandLineOptionParser; +import org.apache.ws.java2wsdl.utils.Java2WSDLOptionsValidator; +import org.apache.xml.serialize.OutputFormat; +import org.apache.xml.serialize.XMLSerializer; +import org.w3c.dom.Document; +import org.w3c.dom.Node; +import org.w3c.dom.NodeList; + +/** + * This is an implementation of the Java2WSDLGenerator facade. This + * implementation is a decorator around the Axis2 implementation of the + * Java2WSDL conversion. The WSDL generation is divided into phases that are + * stringed up as a template method. The phases are - User Input Validation - + * WSDL Java Model Generation - Serialization of WSDL Java Model The function of + * each phase is accomplished by delegation to the appropriate classes in Axis2. + * At the start and end of each phase an event is published to subscribers + * denoting the start and end of the phase. Such a splitting up of the Java2WSDL + * conversion into phases has been designed to enable interceptors to modify the + * model or apply transformations to the output. Typically the interceptors can + * subscribe to the start and end events of these phases and hence be able to + * intercept. Note: This class contains substantial AXIS2 Java2WSDL code + * refactored into it. These will be removed as and when the Axis2 code is + * fixed. + */ +public class Java2WSDLGeneratorImpl implements Java2WSDLGenerator, TuscanyJava2WSDLConstants { + private List<WSDLGenListener> genPhaseListeners = new Vector<WSDLGenListener>(); + private GenerationParameters genParams = null; + private Map<String, Java2WSDLCommandLineOption> commandLineOptions = null; + private TuscanyJava2WSDLBuilder java2WsdlBuilder; + private OutputStream outputStream = null; + + public Java2WSDLGeneratorImpl() { + + } + + private void multicastGenPhaseCompletionEvent(int genPhase) { + WSDLGenEvent event = new WSDLGenEvent(this, genPhase); + Iterator iterator = genPhaseListeners.iterator(); + while (iterator.hasNext()) { + ((WSDLGenListener)iterator.next()).WSDLGenPhaseCompleted(event); + } + } + + private void initJava2WSDLBuilder() throws Exception { + // Now we are done with loading the basic values - time to create the + // builder + java2WsdlBuilder = new TuscanyJava2WSDLBuilder(genParams); + } + + protected boolean validateInputArgs(String[] args) { + boolean isValid = true; + Java2WSDLCommandLineOptionParser parser = new Java2WSDLCommandLineOptionParser(args); + if (parser.getAllOptions().size() == 0) { + Java2WSDL.printUsage(); + isValid = false; + } else if (parser.getInvalidOptions(new Java2WSDLOptionsValidator()).size() > 0) { + Java2WSDL.printUsage(); + isValid = false; + } + + if (isValid) { + commandLineOptions = parser.getAllOptions(); + } + + return isValid; + } + + public boolean buildWSDLDocument() throws Exception { + boolean isComplete = true; + initJava2WSDLBuilder(); + java2WsdlBuilder.buildWSDL(); + + return isComplete; + } + + public boolean serializeWSDLDocument() throws Exception { + boolean isComplete = true; + + if (getOutputStream() == null) { + setOutputStream(genParams.getOutputFileStream()); + } + + // transform the OMElement + OMElement om = java2WsdlBuilder.getWsdlDocument(); + javax.xml.stream.XMLStreamReader stream = om.getXMLStreamReader(); + + org.apache.tuscany.sca.databinding.xml.XMLStreamReader2Node xform = + new org.apache.tuscany.sca.databinding.xml.XMLStreamReader2Node(); + + Node node = xform.transform(stream, null); + + Document doc = node.getOwnerDocument(); + + // pretty-print WSDL document + OutputFormat format = new OutputFormat(doc); + format.setLineWidth(65); + format.setIndenting(true); + format.setIndent(2); + XMLSerializer serializer = new XMLSerializer(getOutputStream(), format); + serializer.serialize(doc); + + return isComplete; + + } + + /* + * This is the template method that splits the Java2WSDL generation cycle + * into phase / steps. + * + * @see tuscany.tools.Java2WSDLGeneratorIfc#generateWSDL(java.lang.String[]) + */ + public void generateWSDL(Map commandLineOptions) { + try { + // load the user options into an easy to access abstraction + genParams = new GenerationParameters(commandLineOptions); + + // if the WSDL Model generation was successful + if (buildWSDLDocument()) { + // multicast event for generation of WSDL model + multicastGenPhaseCompletionEvent(WSDLGenListener.WSDL_MODEL_CREATION); + // if the Serialization of the generated (and fixed) model + // is successful + if (serializeWSDLDocument()) { + // multicast event for writing of the WSDL Model to + // supplied output stream + multicastGenPhaseCompletionEvent(WSDLGenListener.WSDL_MODEL_WRITING); + } + } + } catch (Exception e) { + e.printStackTrace(); + } + } + + public void generateWSDL(String[] args) { + // if the argument input are found to be valid + if (validateInputArgs(args)) { + // multicast event for input args validation complete + multicastGenPhaseCompletionEvent(WSDLGenListener.INPUT_ARGS_VALIDATION); + generateWSDL(commandLineOptions); + } + } + + public void addWSDLGenListener(WSDLGenListener l) { + genPhaseListeners.add(l); + + } + + public void removeWSDLGenListener(WSDLGenListener l) { + genPhaseListeners.remove(l); + } + + public Map getCommandLineOptions() { + return commandLineOptions; + } + + public void setCommandLineOptoins(Map cmdLineOpts) { + commandLineOptions = cmdLineOpts; + } + + public OutputStream getOutputStream() { + return outputStream; + } + + public void setOutputStream(OutputStream outStream) { + outputStream = outStream; + } + + public TuscanyJava2WSDLBuilder getJava2WsdlBuilder() { + return java2WsdlBuilder; + } + + public void setJava2WsdlBuilder(TuscanyJava2WSDLBuilder java2WsdlBuilder) { + this.java2WsdlBuilder = java2WsdlBuilder; + } + + // + // Works recursively with node's entire subtree + // There's no tie to fields in this object so I made this public. + // + public static void removeTextNodes(Node node) { + + if (node == null) + return; + + if (node.getNodeType() == Node.TEXT_NODE) { + node.getParentNode().removeChild(node); + } else { + int origNumNodes; + NodeList children = null; + do { + children = node.getChildNodes(); + origNumNodes = children.getLength(); + + for (int i = 0; i < origNumNodes; i++) { + removeTextNodes(children.item(i)); + } + } while (node.getChildNodes().getLength() != origNumNodes); + } + } + + protected void printGenerationMessage() { + System.out.println(""); + System.out.println("Generating " + genParams.getOutputFile() + + " from Java class " + + genParams.getSourceClassName() + + "."); + System.out.println(""); + } +} diff --git a/sca-java-1.x/branches/sca-java-1.6.2/tools/java2wsdl/src/main/java/org/apache/tuscany/tools/java2wsdl/generate/SchemaBuilder.java b/sca-java-1.x/branches/sca-java-1.6.2/tools/java2wsdl/src/main/java/org/apache/tuscany/tools/java2wsdl/generate/SchemaBuilder.java new file mode 100644 index 0000000000..897700ffd9 --- /dev/null +++ b/sca-java-1.x/branches/sca-java-1.6.2/tools/java2wsdl/src/main/java/org/apache/tuscany/tools/java2wsdl/generate/SchemaBuilder.java @@ -0,0 +1,613 @@ +/* + * 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.tools.java2wsdl.generate; + +import java.io.StringReader; +import java.lang.reflect.Constructor; +import java.lang.reflect.Field; +import java.lang.reflect.Method; +import java.util.ArrayList; +import java.util.HashSet; +import java.util.Hashtable; +import java.util.Iterator; +import java.util.List; +import java.util.Locale; +import java.util.Map; +import java.util.Set; +import java.util.Vector; + +import javax.xml.namespace.QName; + +import org.apache.axis2.description.java2wsdl.Java2WSDLUtils; +import org.apache.ws.commons.schema.XmlSchema; +import org.apache.ws.commons.schema.XmlSchemaCollection; +import org.apache.ws.commons.schema.XmlSchemaComplexType; +import org.apache.ws.commons.schema.XmlSchemaElement; +import org.apache.ws.commons.schema.XmlSchemaForm; +import org.apache.ws.commons.schema.XmlSchemaGroupBase; +import org.apache.ws.commons.schema.XmlSchemaImport; +import org.apache.ws.commons.schema.XmlSchemaInclude; +import org.apache.ws.commons.schema.XmlSchemaSequence; +import org.apache.ws.commons.schema.XmlSchemaType; +import org.apache.ws.commons.schema.utils.NamespaceMap; +import org.codehaus.jam.JClass; +import org.codehaus.jam.JProperty; + +import commonj.sdo.DataObject; +import commonj.sdo.Type; +import commonj.sdo.helper.HelperContext; +import commonj.sdo.helper.XSDHelper; + +public class SchemaBuilder implements TuscanyJava2WSDLConstants { + public static final String NAME_SPACE_PREFIX = "stn_"; + + private static int prefixCount = 1; + + public static final String MIXED = "mixed"; + + public static final String GROUP = "group"; + + protected String attrFormDefault = null; + + protected String elementFormDefault = null; + + protected XmlSchemaCollection xmlSchemaCollection = new XmlSchemaCollection(); + + private Hashtable schemaMap = new Hashtable(); + + protected Hashtable targetNamespacePrefixMap = new Hashtable(); + + protected TuscanyTypeTable typeTable = new TuscanyTypeTable(); + + protected Map schemaLocationMap = null; + + private ClassLoader classLoader = null; + + private ArrayList factoryClassNames = null; + + private HelperContext helperContext = null; + + private XSDHelper xsdHelper = null; + + private Set<String> registeredSDOFactories = new HashSet<String>(); + + boolean alreadyPrintedDefaultSDOFactoryFound = false; + + boolean alreadyPrintedDefaultSDOFactoryNotFound = false; + + protected SchemaBuilder(XmlSchemaCollection schemaCollection, + Hashtable schemaMap, + Hashtable nsPrefixMap, + TuscanyTypeTable typeTable, + String attrFormDef, + String eleFormDef, + Map schemaLocMap, + ClassLoader classLoader, + ArrayList factoryClassNames) { + this.schemaMap = schemaMap; + this.xmlSchemaCollection = schemaCollection; + this.targetNamespacePrefixMap = nsPrefixMap; + this.typeTable = typeTable; + this.schemaLocationMap = schemaLocMap; + this.classLoader = classLoader; + this.attrFormDefault = attrFormDef; + this.elementFormDefault = eleFormDef; + this.factoryClassNames = factoryClassNames; + + // Register the types in the generated SDO factories + this.helperContext = org.apache.tuscany.sdo.api.SDOUtil.createHelperContext(); + this.xsdHelper = helperContext.getXSDHelper(); + + Class factoryClass = null; + for (Object factoryClassName : this.factoryClassNames) { + try { + factoryClass = Class.forName((String)factoryClassName, true, classLoader); + } catch (ClassNotFoundException e) { + e.printStackTrace(); + System.out.println(""); + System.out.println("Generated SDO Factory class with name: " + factoryClassName + " could not be loaded. Exiting."); + throw new IllegalArgumentException(e); + } + registerSDOFactory(factoryClass); + } + } + + private boolean isSDO(JClass javaType) throws Exception { + + Class sdoClass = Class.forName(javaType.getQualifiedName(), true, classLoader); + + return DataObject.class.isAssignableFrom(sdoClass); + } + + private void buildComplexTypeContents_JavaType(JClass javaType, + XmlSchemaComplexType complexType, + XmlSchema xmlSchema) throws Exception { + JProperty[] properties = javaType.getDeclaredProperties(); + + for (int i = 0; i < properties.length; i++) { + JProperty property = properties[i]; + String propertyName = property.getType().getQualifiedName(); + boolean isArryType = property.getType().isArrayType(); + if (isArryType) { + propertyName = property.getType().getArrayComponentType().getQualifiedName(); + } + + if (typeTable.isSimpleType(propertyName)) { + XmlSchemaElement elt1 = new XmlSchemaElement(); + elt1.setName(getCorrectName(property.getSimpleName())); + elt1.setSchemaTypeName(typeTable.getSimpleSchemaTypeName(propertyName)); + ((XmlSchemaGroupBase) complexType.getParticle()).getItems().add(elt1); + if (isArryType) { + elt1.setMaxOccurs(Long.MAX_VALUE); + elt1.setMinOccurs(0); + } + } else { + QName schemaTypeName = null; + if (isArryType) { + schemaTypeName = generateSchema(property.getType().getArrayComponentType()); + } else { + schemaTypeName = generateSchema(property.getType()); + } + + XmlSchemaElement elt1 = new XmlSchemaElement(); + elt1.setName(getCorrectName(property.getSimpleName())); + elt1.setSchemaTypeName(schemaTypeName); + ((XmlSchemaGroupBase) complexType.getParticle()).getItems().add(elt1); + + if (isArryType) { + elt1.setMaxOccurs(Long.MAX_VALUE); + elt1.setMinOccurs(0); + } + + addImports(xmlSchema, + schemaTypeName); + } + } + } + + protected QName buildSchema_JavaType(JClass javaType) throws Exception { + QName schemaTypeName = typeTable.getComplexSchemaTypeName(javaType, this.classLoader); + if (schemaTypeName == null) { + String simpleName = javaType.getSimpleName(); + + String packageName = javaType.getContainingPackage().getQualifiedName(); + + String targetNameSpace = + Java2WSDLUtils.schemaNamespaceFromClassName(javaType.getQualifiedName(), this.classLoader) + .toString(); + + XmlSchema xmlSchema = getXmlSchema(targetNameSpace); + String targetNamespacePrefix = (String) targetNamespacePrefixMap.get(targetNameSpace); + + schemaTypeName = new QName(targetNameSpace, simpleName, targetNamespacePrefix); + XmlSchemaComplexType complexType = new XmlSchemaComplexType(xmlSchema); + complexType.setName(simpleName); + + XmlSchemaSequence sequence = new XmlSchemaSequence(); + complexType.setParticle(sequence); + + createGlobalElement(xmlSchema, + complexType, + schemaTypeName); + xmlSchema.getItems().add(complexType); + xmlSchema.getSchemaTypes().add(schemaTypeName, + complexType); + + // adding this type to the table + // typeTable.addComplexScheam(name, complexType.getQName()); + typeTable.addComplexSchemaType(targetNameSpace, + simpleName, + schemaTypeName); + buildComplexTypeContents_JavaType(javaType, + complexType, + xmlSchema); + } + return schemaTypeName; + } + + protected QName buildSchema_SDO(Type dataType) // throws Exception + { + QName schemaTypeName = typeTable.getComplexSchemaTypeName(dataType.getURI(), + dataType.getName()); + + if (schemaTypeName == null) { + // We can't load the XSDs into an XSDHelper and match them against the static SDOs; they will + // never match. Instead let's take an all-or-nothing approach and say, if we've got this NS + // in our map then we assume we have this Type as well in the corresponding XSD file. + // + boolean inXSDForm = schemaLocationMap.get(dataType.getURI()) != null; + + if (inXSDForm) { + // if schemalocations for XSD has been specified, include them + + // External XSDs will be handled in processing the schema TNS of the wrapper elements. + // This is partly because SDO codegen needs some modification in this area + // So we won't bother including the external XSDs here at all. + // + // includeExtXSD(dataType); + } else { + List<Type> typeList = new Vector<Type>(); + typeList.add(dataType); + + // the xsdhelper returns a string that contains the schemas for this type + String schemaDefns = xsdHelper.generate(typeList, schemaLocationMap); + + // extract the schema elements and store them in the schema map + extractSchemas(schemaDefns); + } + // since the XSDHelper will not return the type name, create it and store it in typetable + schemaTypeName = new QName(dataType.getURI(), dataType.getName(), generatePrefix()); + typeTable.addComplexSchemaType(dataType.getURI(), + dataType.getName(), + schemaTypeName); + + } + return schemaTypeName; + } + + /** + * Identify the java type (pojo versus sdo) and build the schema accordingly + * + * @param javaType reference to the class + * @return + * @throws Exception + */ + public QName generateSchema(JClass javaType) throws Exception { + if (isSDO(javaType)) { + Type dataType = createDataObject(javaType).getType(); + return buildSchema_SDO(dataType); + } else { + return buildSchema_JavaType(javaType); + } + } + + private XmlSchema getXmlSchema(String targetNamespace) { + XmlSchema xmlSchema; + + if ((xmlSchema = (XmlSchema) schemaMap.get(targetNamespace)) == null) { + String targetNamespacePrefix = generatePrefix(); + + xmlSchema = new XmlSchema(targetNamespace, xmlSchemaCollection); + xmlSchema.setAttributeFormDefault(getAttrFormDefaultSetting()); + xmlSchema.setElementFormDefault(getElementFormDefaultSetting()); + + targetNamespacePrefixMap.put(targetNamespace, targetNamespacePrefix); + schemaMap.put(targetNamespace, xmlSchema); + + NamespaceMap prefixmap = new NamespaceMap(); + prefixmap.put(TuscanyTypeTable.XS_URI_PREFIX, TuscanyTypeTable.XML_SCHEMA_URI); + prefixmap.put(targetNamespacePrefix, targetNamespace); + xmlSchema.setNamespaceContext(prefixmap); + } + return xmlSchema; + } + + /** + * JAM convert first name of an attribute into UpperCase as an example if there is a instance variable called foo in a bean , then Jam give that + * as Foo so this method is to correct that error + * + * @param wrongName + * @return the right name, using English as the locale for case conversion + */ + public static String getCorrectName(String wrongName) { + if (wrongName.length() > 1) { + return wrongName.substring(0, 1).toLowerCase(Locale.ENGLISH) + wrongName.substring(1, wrongName.length()); + } else { + return wrongName.substring(0, 1).toLowerCase(Locale.ENGLISH); + } + } + + private String addImports(XmlSchema xmlSchema, QName schemaTypeName) { + String prefix = null; + String[] prefixes = xmlSchema.getNamespaceContext().getDeclaredPrefixes(); + for (int count = 0; count < prefixes.length; ++count) { + if (schemaTypeName.getNamespaceURI(). + equals(xmlSchema.getNamespaceContext().getNamespaceURI(prefixes[count])) ) { + return prefixes[count]; + } + } + + XmlSchemaImport importElement = new XmlSchemaImport(); + importElement.setNamespace(schemaTypeName.getNamespaceURI()); + xmlSchema.getItems().add(importElement); + prefix = generatePrefix(); + //it is safe to cast like this since it was this class that instantiated the + //NamespaceContext and assigned it to an instance of a NamespaceMap (see method getXmlSchema) + ((NamespaceMap)xmlSchema.getNamespaceContext()).put(prefix, + schemaTypeName.getNamespaceURI()); + + return prefix; + } + + private String formGlobalElementName(String typeName) { + String firstChar = typeName.substring(0, 1); + return typeName.replaceFirst(firstChar, firstChar.toLowerCase()); + } + + private void createGlobalElement(XmlSchema xmlSchema, XmlSchemaComplexType complexType, QName elementName) { + XmlSchemaElement globalElement = new XmlSchemaElement(); + globalElement.setSchemaTypeName(complexType.getQName()); + globalElement.setName(formGlobalElementName(complexType.getName())); + globalElement.setQName(elementName); + + xmlSchema.getItems().add(globalElement); + xmlSchema.getElements().add(elementName, globalElement); + } + + private DataObject createDataObject(JClass sdoClass) throws Exception { + Class sdoType = Class.forName(sdoClass.getQualifiedName(), true, classLoader); + + //register the factory + detectAndRegisterFactory(sdoType); + + //create data object + Constructor constructor = sdoType.getDeclaredConstructor(new Class[0]); + constructor.setAccessible(true); + Object instance = constructor.newInstance(new Object[0]); + return (DataObject) instance; + } + + private String generatePrefix() { + return NAME_SPACE_PREFIX + prefixCount++; + } + + private void includeExtXSD(Type dataType) { + // now we know there is a type for which the XSD must come from outside + // create a schema for the namespace of this type and add an include in it for + // the xsd that is defined externally + XmlSchema xmlSchema = getXmlSchema(dataType.getURI()); + + // ideally there could be more than one external schema definitions for a namespace + // and hence schemalocations will be a list of locations + // List schemaLocations = (List)schemaLocationMap.get(dataType.getURI()); + + // since as per the specs the input to XSDHelper is a map of <String, String> allowing + // only one schemalocation for a namespace. So for now this single location will be + // picked up and put into a list + List schemaLocations = new Vector(); + + if (schemaLocationMap.get(dataType.getURI()) != null) { + schemaLocations.add(schemaLocationMap.get(dataType.getURI())); + } + + if (schemaLocations.size() <= 0) { + schemaLocations.add(DEFAULT_SCHEMA_LOCATION); + } + + Iterator includesIterator = xmlSchema.getIncludes().getIterator(); + Iterator schemaLocIterator = schemaLocations.iterator(); + String aSchemaLocation = null; + boolean includeExists = false; + // include all external schema locations + while (schemaLocIterator.hasNext()) { + aSchemaLocation = (String) schemaLocIterator.next(); + while (includesIterator.hasNext()) { + if (!includeExists + && aSchemaLocation.equals(((XmlSchemaInclude) includesIterator.next()).getSchemaLocation())) { + includeExists = true; + } + } + + if (!includeExists) { + XmlSchemaInclude includeElement = new XmlSchemaInclude(); + includeElement.setSchemaLocation(aSchemaLocation); + xmlSchema.getIncludes().add(includeElement); + xmlSchema.getItems().add(includeElement); + } + } + + } + + private void extractSchemas(String schemaDefns) { + // load each schema element and add it to the schema map + + String token = getToken(schemaDefns); + int curIndex = schemaDefns.indexOf(token); + int nextIndex = schemaDefns.indexOf(token, + curIndex + token.length()); + + while (curIndex != -1) { + StringReader sr = null; + if (nextIndex != -1) + sr = new StringReader(schemaDefns.substring(curIndex, + nextIndex)); + else + sr = new StringReader(schemaDefns.substring(curIndex)); + + XmlSchemaCollection collection = new XmlSchemaCollection(); + XmlSchema aSchema = collection.read(sr, + null); + addSchemaToMap(aSchema); + + curIndex = nextIndex; + nextIndex = schemaDefns.indexOf(token, + curIndex + token.length()); + } + } + + private void addSchemaToMap(XmlSchema extractedSchema) { + // check if a Schema object already exists in schema map for targetNamespace of this schema element + // if it does then copy the contents of this schema element to the existing one, ensuring that + // duplicate elements are not created. i.e. before adding some child element like 'include' or 'import' + // check if it already exists, if it does don't add this + XmlSchema existingSchema = (XmlSchema) schemaMap.get(extractedSchema.getTargetNamespace()); + + if (existingSchema == null) { + extractedSchema.setAttributeFormDefault(getAttrFormDefaultSetting()); + extractedSchema.setElementFormDefault(getElementFormDefaultSetting()); + schemaMap.put(extractedSchema.getTargetNamespace(), extractedSchema); + + } else { + copySchemaItems(existingSchema, + extractedSchema); + } + } + + private void copySchemaItems(XmlSchema existingSchema, XmlSchema aSchema) { + // items to copy are imports, includes, elements, types ... + // each item is checked if it is a duplicate entry and copied only if it isn't + Iterator itemsIterator = aSchema.getItems().getIterator(); + Object schemaObject = null; + XmlSchemaElement schemaElement = null; + XmlSchemaType schemaType = null; + XmlSchemaInclude schemaInclude = null; + QName qName = null; + List existingIncludes = getExistingIncludes(existingSchema); + + while (itemsIterator.hasNext()) { + schemaObject = itemsIterator.next(); + if (schemaObject instanceof XmlSchemaElement) { + schemaElement = (XmlSchemaElement) schemaObject; + qName = schemaElement.getQName(); + // if the element does not exist in the existing schema + if (existingSchema.getElementByName(qName) == null) { + // add it to the existing schema + existingSchema.getElements().add(qName, schemaElement); + existingSchema.getItems().add(schemaElement); + } + } else if (schemaObject instanceof XmlSchemaType) { + schemaType = (XmlSchemaType) itemsIterator.next(); + qName = schemaType.getQName(); + // if the element does not exist in the existing schema + if (existingSchema.getElementByName(qName) == null) { + // add it to the existing schema + existingSchema.getSchemaTypes().add(qName, schemaType); + existingSchema.getItems().add(schemaType); + // add imports + addImports(existingSchema, qName); + } + } else if (schemaObject instanceof XmlSchemaInclude) { + schemaInclude = (XmlSchemaInclude) itemsIterator.next(); + if (!existingIncludes.contains(schemaInclude.getSchemaLocation())) { + existingSchema.getIncludes().add(schemaInclude); + existingSchema.getItems().add(schemaInclude); + } + } + } + } + + private List getExistingIncludes(XmlSchema xmlSchema) { + List includeSchemaLocations = new Vector(); + Iterator iterator = xmlSchema.getIncludes().getIterator(); + + while (iterator.hasNext()) { + includeSchemaLocations.add(((XmlSchemaInclude) iterator.next()).getSchemaLocation()); + } + return includeSchemaLocations; + } + + private XmlSchemaForm getAttrFormDefaultSetting() { + if (FORM_DEFAULT_UNQUALIFIED.equals(getAttrFormDefault())) { + return new XmlSchemaForm(XmlSchemaForm.UNQUALIFIED); + } else { + return new XmlSchemaForm(XmlSchemaForm.QUALIFIED); + } + } + + private XmlSchemaForm getElementFormDefaultSetting() { + if (FORM_DEFAULT_UNQUALIFIED.equals(getElementFormDefault())) { + return new XmlSchemaForm(XmlSchemaForm.UNQUALIFIED); + } else { + return new XmlSchemaForm(XmlSchemaForm.QUALIFIED); + } + } + + private String getToken(String s) { + // get the schema element name e.g. <xs:schema or <xsd:schema. We only know that 'schema' will be used + // but not sure what suffix is used. Hence this method to get the actual element name used + int i = s.indexOf(SCHEMA_ELEMENT_NAME); + int j = s.substring(0, + i).lastIndexOf("<"); + return s.substring(j, + i + SCHEMA_ELEMENT_NAME.length()); + } + + public String getAttrFormDefault() { + return attrFormDefault; + } + + public void setAttrFormDefault(String attrFormDefault) { + this.attrFormDefault = attrFormDefault; + } + + public String getElementFormDefault() { + return elementFormDefault; + } + + public void setElementFormDefault(String elementFormDefault) { + this.elementFormDefault = elementFormDefault; + } + + private static String getPackageName(Class<?> cls) { + String name = cls.getName(); + int index = name.lastIndexOf('.'); + return index == -1 ? "" : name.substring(0, index); + } + + /** + * Recognize the pattern of generated SDO type names vs. SDO factory names. + * E.g. SDO class: test.sca.w2j.gen.Company will be associated with + * SDO factory: test.sca.w2j.gen.GenFactory + */ + private void detectAndRegisterFactory(Class sdoClass) { + String pkgName = getPackageName(sdoClass); + + // Find last segment, e.g. from 'test.sca.w2j.gen' produce 'gen'. + int lastDot = pkgName.lastIndexOf('.'); + String lastSegment = pkgName.substring(lastDot+1); + + String rest = lastSegment.substring(1); + String firstChar = lastSegment.substring(0,1).toUpperCase(); + + String factoryBaseName = pkgName + "." + firstChar + rest + "Factory"; + + Class factoryClass = null; + try { + factoryClass = Class.forName(factoryBaseName, true, classLoader); + if (!alreadyPrintedDefaultSDOFactoryFound) { + System.out.println("Found default generated SDO Factory with name: " + factoryBaseName + "; Registering."); + alreadyPrintedDefaultSDOFactoryFound = true; + } + registerSDOFactory(factoryClass); + } catch (ClassNotFoundException e) { + if (!alreadyPrintedDefaultSDOFactoryNotFound) { + System.out.println("Did not find default generated SDO Factory with name: " + factoryBaseName + "; Continue." ); + alreadyPrintedDefaultSDOFactoryNotFound = true; + } + } + } + + private void registerSDOFactory(Class factoryClass) { + String factoryClassName = factoryClass.getName(); + if (!registeredSDOFactories.contains(factoryClassName)) { + try { + Field field = factoryClass.getField("INSTANCE"); + Object factoryImpl = field.get(null); + Method method = factoryImpl.getClass().getMethod("register", new Class[] {HelperContext.class}); + method.invoke(factoryImpl, new Object[] {this.helperContext}); + } catch (Exception e) { + e.printStackTrace(); + System.out.println(""); + System.out.println("Fatal error registering factoryClassName = " + factoryClassName); + throw new IllegalArgumentException(e); + } + registeredSDOFactories.add(factoryClassName); + } + } +} diff --git a/sca-java-1.x/branches/sca-java-1.6.2/tools/java2wsdl/src/main/java/org/apache/tuscany/tools/java2wsdl/generate/TuscanyJava2OMBuilder.java b/sca-java-1.x/branches/sca-java-1.6.2/tools/java2wsdl/src/main/java/org/apache/tuscany/tools/java2wsdl/generate/TuscanyJava2OMBuilder.java new file mode 100644 index 0000000000..fd10c77f8b --- /dev/null +++ b/sca-java-1.x/branches/sca-java-1.6.2/tools/java2wsdl/src/main/java/org/apache/tuscany/tools/java2wsdl/generate/TuscanyJava2OMBuilder.java @@ -0,0 +1,429 @@ +/* + * 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.tools.java2wsdl.generate; + +import java.io.ByteArrayInputStream; +import java.io.StringWriter; +import java.util.Collection; +import java.util.Enumeration; +import java.util.Hashtable; +import java.util.Iterator; + +import javax.xml.namespace.QName; +import javax.xml.stream.XMLInputFactory; +import javax.xml.stream.XMLStreamReader; + +import org.apache.axiom.om.OMAbstractFactory; +import org.apache.axiom.om.OMElement; +import org.apache.axiom.om.OMFactory; +import org.apache.axiom.om.OMNamespace; +import org.apache.axiom.om.OMNode; +import org.apache.axiom.om.impl.builder.StAXOMBuilder; +import org.apache.ws.commons.schema.XmlSchema; +import org.codehaus.jam.JMethod; + +public class TuscanyJava2OMBuilder implements TuscanyJava2WSDLConstants { + + private TuscanyTypeTable typeTable = null; + + private static int prefixCount = 1; + + private static final String NAMESPACE_PREFIX = "ns"; + + private JMethod method[]; + + private Collection schemaCollection; + + private GenerationParameters generationParams; + + private OMNamespace ns1; + + private OMNamespace soap; + + private OMNamespace soap12; + + private OMNamespace tns; + + private OMNamespace wsdl; + + private OMNamespace mime; + + private OMNamespace http; + + public TuscanyJava2OMBuilder(JMethod[] method, + Collection schemaCollection, + TuscanyTypeTable typeTab, + GenerationParameters genParams) { + this.method = method; + this.schemaCollection = schemaCollection; + this.typeTable = typeTab; + this.generationParams = genParams; + } + + public OMElement generateOM() throws Exception { + OMFactory fac = OMAbstractFactory.getOMFactory(); + wsdl = fac.createOMNamespace(WSDL_NAMESPACE, DEFAULT_WSDL_NAMESPACE_PREFIX); + OMElement ele = fac.createOMElement("definitions", wsdl); + + ele.addAttribute("targetNamespace", generationParams.getTargetNamespace(), null); + generateNamespaces(fac, ele); + generateTypes(fac, ele); + generateMessages(fac, ele); + generatePortType(fac, ele); + generateBinding(fac, ele); + generateService(fac, ele); + return ele; + } + + private void generateNamespaces(OMFactory fac, OMElement defintions) throws Exception { + soap = defintions.declareNamespace(URI_WSDL11_SOAP, SOAP11_PREFIX); + tns = + defintions.declareNamespace(generationParams.getTargetNamespace(), generationParams + .getTargetNamespacePrefix()); + soap12 = defintions.declareNamespace(URI_WSDL12_SOAP, SOAP12_PREFIX); + http = defintions.declareNamespace(HTTP_NAMESPACE, HTTP_PREFIX); + mime = defintions.declareNamespace(MIME_NAMESPACE, MIME_PREFIX); + } + + private void generateTypes(OMFactory fac, OMElement defintions) throws Exception { + OMElement wsdlTypes = fac.createOMElement("types", wsdl); + StringWriter writer = new StringWriter(); + + // wrap the Schema elements with this start and end tags to create a + // document root + // under which the schemas can fall into + writer.write("<xmlSchemas>"); + writeSchemas(writer); + writer.write("</xmlSchemas>"); + + XMLStreamReader xmlReader = + XMLInputFactory.newInstance().createXMLStreamReader(new ByteArrayInputStream(writer.toString().getBytes())); + + StAXOMBuilder staxOMBuilders = new StAXOMBuilder(fac, xmlReader); + OMElement documentElement = staxOMBuilders.getDocumentElement(); + + Iterator iterator = documentElement.getChildElements(); + while (iterator.hasNext()) { + wsdlTypes.addChild((OMNode)iterator.next()); + } + defintions.addChild(wsdlTypes); + } + + private void writeSchemas(StringWriter writer) { + Iterator iterator = schemaCollection.iterator(); + XmlSchema xmlSchema = null; + + while (iterator.hasNext()) { + xmlSchema = (XmlSchema)iterator.next(); + // typeIterator = xmlSchema.getSchemaTypes().getValues(); + /* + * while (typeIterator.hasNext()) { + * xmlSchema.getItems().add((XmlSchemaObject) typeIterator.next()); } + */ + xmlSchema.write(writer); + } + } + + private void generateMessages(OMFactory fac, OMElement definitions) throws Exception { + Hashtable namespaceMap = new Hashtable(); + String namespacePrefix = null; + String namespaceURI = null; + QName messagePartType = null; + for (int i = 0; i < method.length; i++) { + JMethod jmethod = method[i]; + + if (jmethod.isPublic()) { + // Request Message + OMElement requestMessge = fac.createOMElement(MESSAGE_LOCAL_NAME, wsdl); + requestMessge.addAttribute(ATTRIBUTE_NAME, jmethod.getSimpleName() + MESSAGE_SUFFIX, null); + definitions.addChild(requestMessge); + + // only if a type for the message part has already been defined + if ((messagePartType = + typeTable.getComplexSchemaTypeName(generationParams.getSchemaTargetNamespace(), jmethod + .getSimpleName())) != null) { + namespaceURI = messagePartType.getNamespaceURI(); + // avoid duplicate namespaces + if ((namespacePrefix = (String)namespaceMap.get(namespaceURI)) == null) { + namespacePrefix = generatePrefix(); + namespaceMap.put(namespaceURI, namespacePrefix); + } + + OMElement requestPart = fac.createOMElement(PART_ATTRIBUTE_NAME, wsdl); + requestMessge.addChild(requestPart); + requestPart.addAttribute(ATTRIBUTE_NAME, "part1", null); + + requestPart.addAttribute(ELEMENT_ATTRIBUTE_NAME, namespacePrefix + COLON_SEPARATOR + + jmethod.getSimpleName(), null); + } + + // only if a type for the message part has already been defined + if ((messagePartType = + typeTable.getComplexSchemaTypeName(generationParams.getSchemaTargetNamespace(), jmethod + .getSimpleName() + RESPONSE)) != null) { + namespaceURI = messagePartType.getNamespaceURI(); + if ((namespacePrefix = (String)namespaceMap.get(namespaceURI)) == null) { + namespacePrefix = generatePrefix(); + namespaceMap.put(namespaceURI, namespacePrefix); + } + // Response Message + OMElement responseMessge = fac.createOMElement(MESSAGE_LOCAL_NAME, wsdl); + responseMessge.addAttribute(ATTRIBUTE_NAME, jmethod.getSimpleName() + RESPONSE_MESSAGE, null); + definitions.addChild(responseMessge); + OMElement responsePart = fac.createOMElement(PART_ATTRIBUTE_NAME, wsdl); + responseMessge.addChild(responsePart); + responsePart.addAttribute(ATTRIBUTE_NAME, "part1", null); + + responsePart.addAttribute(ELEMENT_ATTRIBUTE_NAME, namespacePrefix + COLON_SEPARATOR + + jmethod.getSimpleName() + + RESPONSE, null); + } + } + } + + // now add these unique namespaces to the the definitions element + Enumeration enumeration = namespaceMap.keys(); + while (enumeration.hasMoreElements()) { + namespaceURI = (String)enumeration.nextElement(); + definitions.declareNamespace(namespaceURI, (String)namespaceMap.get(namespaceURI)); + } + } + + /** + * Generate the porttypes + */ + private void generatePortType(OMFactory fac, OMElement defintions) { + JMethod jmethod = null; + OMElement operation = null; + OMElement message = null; + OMElement portType = fac.createOMElement(PORT_TYPE_LOCAL_NAME, wsdl); + defintions.addChild(portType); + // changed default PortType name to match Java interface name + // instead of appending "PortType". + portType.addAttribute(ATTRIBUTE_NAME, generationParams.getServiceName(), null); + // adding message refs + for (int i = 0; i < method.length; i++) { + jmethod = method[i]; + + if (jmethod.isPublic()) { + operation = fac.createOMElement(OPERATION_LOCAL_NAME, wsdl); + portType.addChild(operation); + operation.addAttribute(ATTRIBUTE_NAME, jmethod.getSimpleName(), null); + + message = fac.createOMElement(IN_PUT_LOCAL_NAME, wsdl); + message.addAttribute(MESSAGE_LOCAL_NAME, tns.getPrefix() + COLON_SEPARATOR + + jmethod.getSimpleName() + + MESSAGE_SUFFIX, null); + operation.addChild(message); + + if (!jmethod.getReturnType().isVoidType() || + jmethod.getAnnotation("org.osoa.sca.annotations.OneWay") == null) { + message = fac.createOMElement(OUT_PUT_LOCAL_NAME, wsdl); + message.addAttribute(MESSAGE_LOCAL_NAME, tns.getPrefix() + COLON_SEPARATOR + + jmethod.getSimpleName() + + RESPONSE_MESSAGE, null); + operation.addChild(message); + } + } + } + + } + + /** + * Generate the service + */ + public void generateService(OMFactory fac, OMElement defintions) { + OMElement service = fac.createOMElement(SERVICE_LOCAL_NAME, wsdl); + defintions.addChild(service); + // Add "WebService" to the end of WSDL service name + service.addAttribute(ATTRIBUTE_NAME, generationParams.getServiceName() + WSDL_SERVICE_SUFFIX, null); + OMElement port = fac.createOMElement(PORT, wsdl); + service.addChild(port); + port.addAttribute(ATTRIBUTE_NAME, generationParams.getServiceName() + SOAP11PORT, null); + port.addAttribute(BINDING_LOCAL_NAME, tns.getPrefix() + COLON_SEPARATOR + + generationParams.getServiceName() + + BINDING_NAME_SUFFIX, null); + addExtensionElement(fac, + port, + soap, + SOAP_ADDRESS, + LOCATION, + generationParams.getLocationUri() + generationParams.getServiceName()); + + port = fac.createOMElement(PORT, wsdl); + service.addChild(port); + port.addAttribute(ATTRIBUTE_NAME, generationParams.getServiceName() + SOAP12PORT, null); + port.addAttribute(BINDING_LOCAL_NAME, tns.getPrefix() + COLON_SEPARATOR + + generationParams.getServiceName() + + SOAP12BINDING_NAME_SUFFIX, null); + addExtensionElement(fac, + port, + soap12, + SOAP_ADDRESS, + LOCATION, + generationParams.getLocationUri() + generationParams.getServiceName()); + } + + /** + * Generate the bindings + */ + private void generateBinding(OMFactory fac, OMElement defintions) throws Exception { + generateSoap11Binding(fac, defintions); + generateSoap12Binding(fac, defintions); + } + + private void generateSoap11Binding(OMFactory fac, OMElement defintions) throws Exception { + OMElement binding = fac.createOMElement(BINDING_LOCAL_NAME, wsdl); + defintions.addChild(binding); + binding.addAttribute(ATTRIBUTE_NAME, generationParams.getServiceName() + BINDING_NAME_SUFFIX, null); + // changed default PortType name to match Java interface name + // instead of appending "PortType". + binding.addAttribute("type", tns.getPrefix() + COLON_SEPARATOR + generationParams.getServiceName(), null); + + addExtensionElement(fac, binding, soap, BINDING_LOCAL_NAME, TRANSPORT, TRANSPORT_URI, STYLE, generationParams + .getStyle()); + + for (int i = 0; i < method.length; i++) { + JMethod jmethod = method[i]; + if (jmethod.isPublic()) { + OMElement operation = fac.createOMElement(OPERATION_LOCAL_NAME, wsdl); + binding.addChild(operation); + + addExtensionElement(fac, + operation, + soap, + OPERATION_LOCAL_NAME, + SOAP_ACTION, + URN_PREFIX + COLON_SEPARATOR + jmethod.getSimpleName(), + STYLE, + generationParams.getStyle()); + operation.addAttribute(ATTRIBUTE_NAME, jmethod.getSimpleName(), null); + + OMElement input = fac.createOMElement(IN_PUT_LOCAL_NAME, wsdl); + addExtensionElement(fac, + input, + soap, + SOAP_BODY, + SOAP_USE, + generationParams.getUse(), + "namespace", + generationParams.getTargetNamespace()); + operation.addChild(input); + + if (!jmethod.getReturnType().isVoidType()) { + OMElement output = fac.createOMElement(OUT_PUT_LOCAL_NAME, wsdl); + addExtensionElement(fac, + output, + soap, + SOAP_BODY, + SOAP_USE, + generationParams.getUse(), + "namespace", + generationParams.getTargetNamespace()); + operation.addChild(output); + } + } + } + } + + private void generateSoap12Binding(OMFactory fac, OMElement defintions) throws Exception { + OMElement binding = fac.createOMElement(BINDING_LOCAL_NAME, wsdl); + defintions.addChild(binding); + binding.addAttribute(ATTRIBUTE_NAME, generationParams.getServiceName() + SOAP12BINDING_NAME_SUFFIX, null); + // changed default PortType name to match Java interface name + // instead of appending "PortType". + binding.addAttribute("type", tns.getPrefix() + COLON_SEPARATOR + generationParams.getServiceName(), null); + + addExtensionElement(fac, binding, soap12, BINDING_LOCAL_NAME, TRANSPORT, TRANSPORT_URI, STYLE, generationParams + .getStyle()); + + for (int i = 0; i < method.length; i++) { + JMethod jmethod = method[i]; + + if (jmethod.isPublic()) { + OMElement operation = fac.createOMElement(OPERATION_LOCAL_NAME, wsdl); + binding.addChild(operation); + operation.declareNamespace(URI_WSDL12_SOAP, SOAP12_PREFIX); + + addExtensionElement(fac, + operation, + soap12, + OPERATION_LOCAL_NAME, + SOAP_ACTION, + URN_PREFIX + COLON_SEPARATOR + jmethod.getSimpleName(), + STYLE, + generationParams.getStyle()); + operation.addAttribute(ATTRIBUTE_NAME, jmethod.getSimpleName(), null); + + OMElement input = fac.createOMElement(IN_PUT_LOCAL_NAME, wsdl); + addExtensionElement(fac, + input, + soap12, + SOAP_BODY, + SOAP_USE, + generationParams.getUse(), + "namespace", + generationParams.getTargetNamespace()); + operation.addChild(input); + + if (!jmethod.getReturnType().isVoidType()) { + OMElement output = fac.createOMElement(OUT_PUT_LOCAL_NAME, wsdl); + addExtensionElement(fac, + output, + soap12, + SOAP_BODY, + SOAP_USE, + generationParams.getUse(), + "namespace", + generationParams.getTargetNamespace()); + operation.addChild(output); + } + } + } + } + + private void addExtensionElement(OMFactory fac, + OMElement element, + OMNamespace namespace, + String name, + String att1Name, + String att1Value, + String att2Name, + String att2Value) { + OMElement soapbinding = fac.createOMElement(name, namespace); + element.addChild(soapbinding); + soapbinding.addAttribute(att1Name, att1Value, null); + soapbinding.addAttribute(att2Name, att2Value, null); + } + + private void addExtensionElement(OMFactory fac, + OMElement element, + OMNamespace namespace, + String name, + String att1Name, + String att1Value) { + OMElement soapbinding = fac.createOMElement(name, namespace); + element.addChild(soapbinding); + soapbinding.addAttribute(att1Name, att1Value, null); + } + + private String generatePrefix() { + return NAMESPACE_PREFIX + prefixCount++; + } +} diff --git a/sca-java-1.x/branches/sca-java-1.6.2/tools/java2wsdl/src/main/java/org/apache/tuscany/tools/java2wsdl/generate/TuscanyJava2WSDLBuilder.java b/sca-java-1.x/branches/sca-java-1.6.2/tools/java2wsdl/src/main/java/org/apache/tuscany/tools/java2wsdl/generate/TuscanyJava2WSDLBuilder.java new file mode 100644 index 0000000000..18cfafa4e3 --- /dev/null +++ b/sca-java-1.x/branches/sca-java-1.6.2/tools/java2wsdl/src/main/java/org/apache/tuscany/tools/java2wsdl/generate/TuscanyJava2WSDLBuilder.java @@ -0,0 +1,81 @@ +/* + * 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.tools.java2wsdl.generate; + +import java.io.OutputStream; +import java.util.ArrayList; +import java.util.Collection; + +import org.apache.axiom.om.OMElement; +import org.apache.axis2.description.java2wsdl.Java2WSDLConstants; + +public class TuscanyJava2WSDLBuilder implements Java2WSDLConstants { + + private OutputStream out; + private String className; + private ClassLoader classLoader; + private String wsdlPrefix = "wsdl"; + + // these apply for the WSDL + private GenerationParameters generationParams; + + private OMElement wsdlDocument = null; + + public String getWsdlPrefix() { + return wsdlPrefix; + } + + public void setWsdlPrefix(String wsdlPrefix) { + this.wsdlPrefix = wsdlPrefix; + } + + public TuscanyJava2WSDLBuilder(GenerationParameters genParams) { + this.generationParams = genParams; + } + + /** + * Externally visible generator method + * + * @throws Exception + */ + public void buildWSDL() throws Exception { + ArrayList excludeOpeartion = new ArrayList(); + excludeOpeartion.add("init"); + excludeOpeartion.add("setOperationContext"); + excludeOpeartion.add("destroy"); + + TuscanyWSDLTypesGenerator typesGenerator = new TuscanyWSDLTypesGenerator(generationParams); + typesGenerator.setExcludeMethods(excludeOpeartion); + Collection schemaCollection = typesGenerator.buildWSDLTypes(); + + TuscanyJava2OMBuilder java2OMBuilder = + new TuscanyJava2OMBuilder(typesGenerator.getMethods(), schemaCollection, typesGenerator + .getTypeTable(), generationParams); + + wsdlDocument = java2OMBuilder.generateOM(); + } + + public OMElement getWsdlDocument() { + return wsdlDocument; + } + + public void setWsdlDocument(OMElement wsdlDocument) { + this.wsdlDocument = wsdlDocument; + } +} diff --git a/sca-java-1.x/branches/sca-java-1.6.2/tools/java2wsdl/src/main/java/org/apache/tuscany/tools/java2wsdl/generate/TuscanyJava2WSDLConstants.java b/sca-java-1.x/branches/sca-java-1.6.2/tools/java2wsdl/src/main/java/org/apache/tuscany/tools/java2wsdl/generate/TuscanyJava2WSDLConstants.java new file mode 100644 index 0000000000..3750dc27f5 --- /dev/null +++ b/sca-java-1.x/branches/sca-java-1.6.2/tools/java2wsdl/src/main/java/org/apache/tuscany/tools/java2wsdl/generate/TuscanyJava2WSDLConstants.java @@ -0,0 +1,56 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +package org.apache.tuscany.tools.java2wsdl.generate; + +import org.apache.axis2.description.java2wsdl.Java2WSDLConstants; + +/** + * This is a extension from the Axis2 Java2WSDLConstants to handle additions specific to Tuscany. + * This class can be done away with once Axis2 is also enhanced to support these + * additional options. + * + */ +public interface TuscanyJava2WSDLConstants extends Java2WSDLConstants +{ + public static final char OPEN_BRACKET = '['; + public static final char COMMA = ','; + public static final char CLOSE_BRACKET = ']'; + public static final String DEFAULT_SCHEMA_LOCATION = "*.xsd"; + public static final String SCHEMA_ELEMENT_NAME = "schema"; + + String FORM_DEFAULT_QUALIFIED = "qualified"; + String FORM_DEFAULT_UNQUALIFIED = "unqualified"; + + //short options + String IMPORT_XSD_OPTION = "ixsd"; //option for importing XSDs + String ATTR_FORM_DEFAULT_OPTION = "afd"; + String ELEMENT_FORM_DEFAULT_OPTION = "efd"; + String EXTRA_CLASSES_DEFAULT_OPTION = "xc"; + String FACTORY_CLASSNAMES_OPTION = "fcn"; + + //long options + String IMPORT_XSD_OPTION_LONG = "import_xsd"; //option for importing XSDs + String ATTR_FORM_DEFAULT_OPTION_LONG = "attributeFormDefault"; + String ELEMENT_FORM_DEFAULT_OPTION_LONG = "elementFormDefault"; + String EXTRA_CLASSES_DEFAULT_OPTION_LONG = "extraClasses"; + String FACTORY_CLASSNAMES_OPTION_LONG = "factoryClassNames"; + + // This is a new creation, not an override. + String WSDL_SERVICE_SUFFIX = "WebService"; +} diff --git a/sca-java-1.x/branches/sca-java-1.6.2/tools/java2wsdl/src/main/java/org/apache/tuscany/tools/java2wsdl/generate/TuscanyJava2WSDLOptionsValidator.java b/sca-java-1.x/branches/sca-java-1.6.2/tools/java2wsdl/src/main/java/org/apache/tuscany/tools/java2wsdl/generate/TuscanyJava2WSDLOptionsValidator.java new file mode 100644 index 0000000000..d6cd8a7f57 --- /dev/null +++ b/sca-java-1.x/branches/sca-java-1.6.2/tools/java2wsdl/src/main/java/org/apache/tuscany/tools/java2wsdl/generate/TuscanyJava2WSDLOptionsValidator.java @@ -0,0 +1,73 @@ +/* + * 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.tools.java2wsdl.generate; + +import java.util.ArrayList; + +import org.apache.ws.java2wsdl.utils.Java2WSDLCommandLineOption; +import org.apache.ws.java2wsdl.utils.Java2WSDLOptionsValidator; + +/** + * This class is an extension from the Axis2 implementation in order to handle + * additional options specific to Tuscany. This class can be done away with once + * Axis2 is also enhanced to support these additional options. + */ +public class TuscanyJava2WSDLOptionsValidator extends Java2WSDLOptionsValidator implements TuscanyJava2WSDLConstants { + @Override + public boolean isInvalid(Java2WSDLCommandLineOption option) { + boolean invalid; + String optionType = option.getOptionType(); + + invalid = + !((IMPORT_XSD_OPTION).equalsIgnoreCase(optionType) || (IMPORT_XSD_OPTION_LONG).equalsIgnoreCase(optionType) + || (TuscanyJava2WSDLConstants.EXTRA_CLASSES_DEFAULT_OPTION_LONG).equalsIgnoreCase(optionType) + || (TuscanyJava2WSDLConstants.EXTRA_CLASSES_DEFAULT_OPTION).equalsIgnoreCase(optionType) + || (TuscanyJava2WSDLConstants.FACTORY_CLASSNAMES_OPTION_LONG).equalsIgnoreCase(optionType) + || (TuscanyJava2WSDLConstants.FACTORY_CLASSNAMES_OPTION).equalsIgnoreCase(optionType) || !super + .isInvalid(option)); + + invalid = validateImportXSDOption(invalid, option); + + return invalid; + } + + private boolean validateImportXSDOption(boolean invalid, Java2WSDLCommandLineOption option) { + String optionType = option.getOptionType(); + String schemaNSLocationPair = null; + + if (!invalid && (IMPORT_XSD_OPTION).equalsIgnoreCase(optionType) + || (IMPORT_XSD_OPTION_LONG).equalsIgnoreCase(optionType)) { + ArrayList optionValues = option.getOptionValues(); + + for (int count = 0; count < optionValues.size(); ++count) { + schemaNSLocationPair = ((String)optionValues.get(count)).trim(); + if ((schemaNSLocationPair.charAt(0) != OPEN_BRACKET) || (schemaNSLocationPair + .charAt(schemaNSLocationPair.length() - 1) != CLOSE_BRACKET) + || (schemaNSLocationPair.indexOf(COMMA) == -1)) + + { + System.out.println("Schema Namespace-Location pair option not specified properly!!"); + invalid = true; + } + } + } + + return invalid; + } +} diff --git a/sca-java-1.x/branches/sca-java-1.6.2/tools/java2wsdl/src/main/java/org/apache/tuscany/tools/java2wsdl/generate/TuscanySchemaGenerator.java b/sca-java-1.x/branches/sca-java-1.6.2/tools/java2wsdl/src/main/java/org/apache/tuscany/tools/java2wsdl/generate/TuscanySchemaGenerator.java new file mode 100644 index 0000000000..03291428a2 --- /dev/null +++ b/sca-java-1.x/branches/sca-java-1.6.2/tools/java2wsdl/src/main/java/org/apache/tuscany/tools/java2wsdl/generate/TuscanySchemaGenerator.java @@ -0,0 +1,348 @@ +/* + * 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.tools.java2wsdl.generate; + +import java.util.ArrayList; +import java.util.Collection; +import java.util.HashMap; +import java.util.Hashtable; +import java.util.Map; + +import javax.xml.namespace.QName; + +import org.apache.axis2.description.java2wsdl.bytecode.MethodTable; +import org.apache.tuscany.sdo.util.DataObjectUtil; +import org.apache.ws.commons.schema.XmlSchema; +import org.apache.ws.commons.schema.XmlSchemaCollection; +import org.apache.ws.commons.schema.XmlSchemaComplexType; +import org.apache.ws.commons.schema.XmlSchemaElement; +import org.apache.ws.commons.schema.XmlSchemaForm; +import org.apache.ws.commons.schema.XmlSchemaImport; +import org.apache.ws.commons.schema.XmlSchemaInclude; +import org.apache.ws.commons.schema.XmlSchemaSequence; +import org.apache.ws.commons.schema.utils.NamespaceMap; +import org.codehaus.jam.JClass; +import org.codehaus.jam.JMethod; +import org.codehaus.jam.JParameter; +import org.codehaus.jam.JamClassIterator; +import org.codehaus.jam.JamService; +import org.codehaus.jam.JamServiceFactory; +import org.codehaus.jam.JamServiceParams; + +public class TuscanySchemaGenerator implements TuscanyJava2WSDLConstants { + public static final String NAME_SPACE_PREFIX = "stn_"; + public static final String PERIOD_SEPARATOR = "."; + private static int prefixCount = 1; + + protected String attrFormDefault = null; + protected String elementFormDefault = null; + protected Hashtable targetNamespacePrefixMap = new Hashtable(); + protected Hashtable schemaMap = new Hashtable(); + protected Hashtable sdoAnnoMap = new Hashtable(); + protected XmlSchemaCollection xmlSchemaCollection = new XmlSchemaCollection(); + private TuscanyTypeTable typeTable = new TuscanyTypeTable(); + protected SchemaBuilder schemaBuilder = null; + protected Map schemaLocationMap = null; + + private ClassLoader classLoader; + private String className; + + // to keep loaded method using JAM + private JMethod methods[]; + + // to store byte code method using Axis 1.x codes + private MethodTable methodTable; + private String schemaTargetNameSpace; + private String schema_namespace_prefix; + private Class clazz; + private ArrayList excludeMethods = new ArrayList(); + + public TuscanySchemaGenerator(ClassLoader loader, + String className, + String schematargetNamespace, + String schematargetNamespacePrefix, + Map schemaLocMap) throws Exception { + DataObjectUtil.initRuntime(); + this.classLoader = loader; + this.className = className; + clazz = Class.forName(className, true, loader); + methodTable = new MethodTable(clazz); + this.schemaTargetNameSpace = schematargetNamespace; + this.schema_namespace_prefix = schematargetNamespacePrefix; + this.schemaLocationMap = schemaLocMap; + + initializeSchemaMap(this.schemaTargetNameSpace, this.schema_namespace_prefix); + schemaBuilder = + new SchemaBuilder(xmlSchemaCollection, schemaMap, targetNamespacePrefixMap, typeTable, + getAttrFormDefault(), getElementFormDefault(), schemaLocMap, this.classLoader, null); + } + + /** + * Generates schema for all the parameters in method. First generates schema + * for all different parameter type and later refers to them. + * + * @return Returns XmlSchema. + * @throws Exception + */ + public Collection buildWSDLTypes() throws Exception { + JamServiceFactory factory = JamServiceFactory.getInstance(); + JamServiceParams jam_service_parms = factory.createServiceParams(); + // setting the classLoder + // jam_service_parms.setParentClassLoader(factory.createJamClassLoader(classLoader)); + // it can possible to add the classLoader as well + jam_service_parms.addClassLoader(classLoader); + jam_service_parms.includeClass(className); + JamService service = factory.createService(jam_service_parms); + + JamClassIterator jClassIter = service.getClasses(); + // all most all the time the ittr will have only one class in it + while (jClassIter.hasNext()) { + JClass jclass = (JClass)jClassIter.next(); + // serviceName = jclass.getSimpleName(); + // todo in the future , when we support annotation we can use this + // JAnnotation[] annotations = jclass.getAnnotations(); + + /** + * Schema generation done in two stage 1. Load all the methods and + * create type for methods parameters (if the parameters are Bean + * then it will create Complex types for those , and if the + * parameters are simple type which describe in SimpleTypeTable + * nothing will happen) 2. In the next stage for all the methods + * messages and port types will be created + */ + methods = jclass.getDeclaredMethods(); + + // since we do not support overload + HashMap uniqueMethods = new HashMap(); + XmlSchemaComplexType methodSchemaType = null; + XmlSchemaSequence sequence = null; + for (int i = 0; i < methods.length; i++) { + String methodName = methods[i].getSimpleName(); + JMethod jMethod = methods[i]; + // no need to think about this method , since that is system + // config method + if (excludeMethods.contains(jMethod.getSimpleName())) { + continue; + } + // if (jMethod.getSimpleName().equals("init") + // || "setOperationContext".equals(jMethod.getSimpleName()) + // || "destroy".equals(jMethod.getSimpleName())) + // continue; + if (uniqueMethods.get(jMethod.getSimpleName()) != null) { + throw new Exception(" Sorry we don't support methods overloading !!!! "); + } + + if (!jMethod.isPublic()) { + // no need to generate Schema for non public methods + continue; + } + + uniqueMethods.put(jMethod.getSimpleName(), jMethod); + JParameter[] paras = jMethod.getParameters(); + String parameterNames[] = null; + if (paras.length > 0) { + parameterNames = methodTable.getParameterNames(methodName); + sequence = new XmlSchemaSequence(); + + // create the schema type for the method wrapper + methodSchemaType = createSchemaTypeForMethodPart(jMethod.getSimpleName()); + methodSchemaType.setParticle(sequence); + } + + for (int j = 0; j < paras.length; j++) { + JParameter methodParameter = paras[j]; + JClass paraType = methodParameter.getType(); + generateSchemaForType(sequence, paraType, (parameterNames != null && parameterNames[j] != null) + ? parameterNames[j] : methodParameter.getSimpleName()); + } + // for its return type + JClass returnType = jMethod.getReturnType(); + if (!returnType.isVoidType()) { + methodSchemaType = createSchemaTypeForMethodPart(jMethod.getSimpleName() + RESPONSE); + sequence = new XmlSchemaSequence(); + methodSchemaType.setParticle(sequence); + generateSchemaForType(sequence, returnType, "return"); + } + } + // generateWrapperElements(methods); + } + return schemaMap.values(); + } + + private QName generateSchemaForType(XmlSchemaSequence sequence, JClass type, String partName) throws Exception { + boolean isArrayType = type.isArrayType(); + if (isArrayType) { + type = type.getArrayComponentType(); + } + + String classTypeName = type.getQualifiedName(); + + QName schemaTypeName = typeTable.getSimpleSchemaTypeName(classTypeName); + if (schemaTypeName == null) { + schemaTypeName = schemaBuilder.generateSchema(type); + addContentToMethodSchemaType(sequence, schemaTypeName, partName, type.isArrayType()); + addImportORInclude((XmlSchema)schemaMap.get(schemaTargetNameSpace), schemaTypeName); + + } else { + addContentToMethodSchemaType(sequence, schemaTypeName, partName, type.isArrayType()); + } + + return schemaTypeName; + } + + private void addContentToMethodSchemaType(XmlSchemaSequence sequence, + QName schemaTypeName, + String paraName, + boolean isArray) { + XmlSchemaElement elt1 = new XmlSchemaElement(); + elt1.setName(paraName); + elt1.setSchemaTypeName(schemaTypeName); + sequence.getItems().add(elt1); + + if (isArray) { + elt1.setMaxOccurs(Long.MAX_VALUE); + elt1.setMinOccurs(0); + } + } + + private XmlSchemaComplexType createSchemaTypeForMethodPart(String localPartName) { + XmlSchema xmlSchema = (XmlSchema)schemaMap.get(schemaTargetNameSpace); + QName elementName = new QName(this.schemaTargetNameSpace, localPartName, this.schema_namespace_prefix); + XmlSchemaComplexType complexType = new XmlSchemaComplexType(xmlSchema); + + XmlSchemaElement globalElement = new XmlSchemaElement(); + globalElement.setSchemaType(complexType); + globalElement.setName(formGlobalElementName(localPartName)); + globalElement.setQName(elementName); + + xmlSchema.getItems().add(globalElement); + xmlSchema.getElements().add(elementName, globalElement); + + typeTable.addComplexSchemaType(this.schemaTargetNameSpace, globalElement.getName(), elementName); + + return complexType; + } + + private String formGlobalElementName(String typeName) { + String firstChar = typeName.substring(0, 1); + return typeName.replaceFirst(firstChar, firstChar.toLowerCase()); + } + + public TuscanyTypeTable getTypeTable() { + return typeTable; + } + + public JMethod[] getMethods() { + return methods; + } + + private String generatePrefix() { + return NAME_SPACE_PREFIX + prefixCount++; + } + + public void setExcludeMethods(ArrayList excludeMethods) { + this.excludeMethods = excludeMethods; + } + + private void initializeSchemaMap(String targetNamespace, String targetNamespacePrefix) { + XmlSchema xmlSchema = new XmlSchema(targetNamespace, xmlSchemaCollection); + xmlSchema.setAttributeFormDefault(getAttrFormDefaultSetting()); + xmlSchema.setElementFormDefault(getElementFormDefaultSetting()); + + targetNamespacePrefixMap.put(targetNamespace, targetNamespacePrefix); + schemaMap.put(targetNamespace, xmlSchema); + + NamespaceMap prefixmap = new NamespaceMap(); + prefixmap.put(TuscanyTypeTable.XS_URI_PREFIX, TuscanyTypeTable.XML_SCHEMA_URI); + prefixmap.put(targetNamespacePrefix, targetNamespace); + xmlSchema.setNamespaceContext(prefixmap); + } + + private void setFormDefaults() { + + } + + public Hashtable getSdoAnnoMap() { + return sdoAnnoMap; + } + + public void setSdoAnnoMap(Hashtable sdoAnnoMap) { + this.sdoAnnoMap = sdoAnnoMap; + } + + private void addImportORInclude(XmlSchema xmlSchema, QName schemaTypeName) { + // decide whether there must be an import or an include + if (xmlSchema.getTargetNamespace().equals(schemaTypeName.getNamespaceURI())) { + XmlSchema containingSchema = (XmlSchema)schemaMap.get(schemaTypeName.getNamespaceURI()); + // if the type is not defined in the Schema then include + if (containingSchema.getTypeByName(schemaTypeName) == null) { + String schemaLocation = null; + if ((schemaLocation = (String)schemaLocationMap.get(schemaTypeName.getNamespaceURI())) != null) { + schemaLocation = DEFAULT_SCHEMA_LOCATION; + } + + XmlSchemaInclude includeElement = new XmlSchemaInclude(); + includeElement.setSchemaLocation(schemaLocation); + + if (!xmlSchema.getIncludes().contains(includeElement)) { + xmlSchema.getIncludes().add(includeElement); + } + } + } else { + if (!((NamespaceMap)xmlSchema.getNamespaceContext()).values().contains(schemaTypeName.getNamespaceURI())) { + XmlSchemaImport importElement = new XmlSchemaImport(); + importElement.setNamespace(schemaTypeName.getNamespaceURI()); + xmlSchema.getItems().add(importElement); + ((NamespaceMap)xmlSchema.getNamespaceContext()).put(generatePrefix(), schemaTypeName.getNamespaceURI()); + } + } + } + + private XmlSchemaForm getAttrFormDefaultSetting() { + if (FORM_DEFAULT_UNQUALIFIED.equals(getAttrFormDefault())) { + return new XmlSchemaForm(XmlSchemaForm.UNQUALIFIED); + } else { + return new XmlSchemaForm(XmlSchemaForm.QUALIFIED); + } + } + + private XmlSchemaForm getElementFormDefaultSetting() { + if (FORM_DEFAULT_UNQUALIFIED.equals(getElementFormDefault())) { + return new XmlSchemaForm(XmlSchemaForm.UNQUALIFIED); + } else { + return new XmlSchemaForm(XmlSchemaForm.QUALIFIED); + } + } + + public String getAttrFormDefault() { + return attrFormDefault; + } + + public void setAttrFormDefault(String attrFormDefault) { + this.attrFormDefault = attrFormDefault; + } + + public String getElementFormDefault() { + return elementFormDefault; + } + + public void setElementFormDefault(String elementFormDefault) { + this.elementFormDefault = elementFormDefault; + } +} diff --git a/sca-java-1.x/branches/sca-java-1.6.2/tools/java2wsdl/src/main/java/org/apache/tuscany/tools/java2wsdl/generate/TuscanyTypeTable.java b/sca-java-1.x/branches/sca-java-1.6.2/tools/java2wsdl/src/main/java/org/apache/tuscany/tools/java2wsdl/generate/TuscanyTypeTable.java new file mode 100644 index 0000000000..cb41c56b94 --- /dev/null +++ b/sca-java-1.x/branches/sca-java-1.6.2/tools/java2wsdl/src/main/java/org/apache/tuscany/tools/java2wsdl/generate/TuscanyTypeTable.java @@ -0,0 +1,220 @@ +/* + * 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.tools.java2wsdl.generate; + +import java.util.ArrayList; +import java.util.Hashtable; +import java.util.Iterator; +import java.util.List; +import java.util.Vector; + +import javax.xml.namespace.QName; + +import org.apache.axiom.om.OMElement; +import org.apache.axis2.description.java2wsdl.Java2WSDLUtils; +import org.codehaus.jam.JClass; + +import commonj.sdo.DataObject; + +public class TuscanyTypeTable +{ + public static final String XML_SCHEMA_URI = "http://www.w3.org/2001/XMLSchema"; + public static final String XS_URI_PREFIX = "xs"; + public static final QName XS_QNAME = new QName(XML_SCHEMA_URI, "schema", XS_URI_PREFIX); + public static final String DELIMITER = "#"; + + private Hashtable<String, QName> simpleXSDTypes; + private Hashtable<String, QName> complexXSDTypes; + + public static String asQualifiedName(String uri, String typeName) + { + return (uri + DELIMITER + typeName); + } + + + public TuscanyTypeTable() + { + simpleXSDTypes = new Hashtable<String, QName>(); + complexXSDTypes = new Hashtable<String, QName>(); + populateSimpleXSDTypes(); + populateStdSDOTypes(); + } + + private void populateStdSDOTypes() + { + simpleXSDTypes.put("Boolean", + new QName(XML_SCHEMA_URI, "boolean", XS_URI_PREFIX)); + simpleXSDTypes.put("Byte", + new QName(XML_SCHEMA_URI, "byte", XS_URI_PREFIX)); + simpleXSDTypes.put("Bytes", + new QName(XML_SCHEMA_URI, "hexBinary", XS_URI_PREFIX)); + simpleXSDTypes.put("Character", + new QName(XML_SCHEMA_URI, "string", XS_URI_PREFIX)); + simpleXSDTypes.put("DataObject", + new QName(XML_SCHEMA_URI, "anyType", XS_URI_PREFIX)); + simpleXSDTypes.put("Date", + new QName(XML_SCHEMA_URI, "dateTime", XS_URI_PREFIX)); + simpleXSDTypes.put("Day", + new QName(XML_SCHEMA_URI, "gDay", XS_URI_PREFIX)); + simpleXSDTypes.put("Decimal", + new QName(XML_SCHEMA_URI, "decimal", XS_URI_PREFIX)); + simpleXSDTypes.put("Double", + new QName(XML_SCHEMA_URI, "double", XS_URI_PREFIX)); + simpleXSDTypes.put("Duration", + new QName(XML_SCHEMA_URI, "duration", XS_URI_PREFIX)); + simpleXSDTypes.put("Float", + new QName(XML_SCHEMA_URI, "float", XS_URI_PREFIX)); + simpleXSDTypes.put("Int", + new QName(XML_SCHEMA_URI, "int", XS_URI_PREFIX)); + simpleXSDTypes.put("Integer", + new QName(XML_SCHEMA_URI, "integer", XS_URI_PREFIX)); + simpleXSDTypes.put("Long", + new QName(XML_SCHEMA_URI, "long", XS_URI_PREFIX)); + simpleXSDTypes.put("Month", + new QName(XML_SCHEMA_URI, "gMonth", XS_URI_PREFIX)); + simpleXSDTypes.put("monthDay", + new QName(XML_SCHEMA_URI, "gMonthDay", XS_URI_PREFIX)); + simpleXSDTypes.put("Object", + new QName(XML_SCHEMA_URI, "anySimpleType", XS_URI_PREFIX)); + simpleXSDTypes.put("Short", + new QName(XML_SCHEMA_URI, "short", XS_URI_PREFIX)); + simpleXSDTypes.put("String", + new QName(XML_SCHEMA_URI, "string", XS_URI_PREFIX)); + simpleXSDTypes.put("Strings", + new QName(XML_SCHEMA_URI, "string", XS_URI_PREFIX)); + simpleXSDTypes.put("Time", + new QName(XML_SCHEMA_URI, "time", XS_URI_PREFIX)); + simpleXSDTypes.put("Year", + new QName(XML_SCHEMA_URI, "gYear", XS_URI_PREFIX)); + simpleXSDTypes.put("YearMonth", + new QName(XML_SCHEMA_URI, "gYearMonth", XS_URI_PREFIX)); + simpleXSDTypes.put("YearMonthDay", + new QName(XML_SCHEMA_URI, "date", XS_URI_PREFIX)); + simpleXSDTypes.put("URI", + new QName(XML_SCHEMA_URI, "anyURI", XS_URI_PREFIX)); + } + + private void populateSimpleXSDTypes() { + //todo pls use the types from org.apache.ws.commons.schema.constants.Constants + simpleXSDTypes.put("int", + new QName(XML_SCHEMA_URI, "int", XS_URI_PREFIX)); + simpleXSDTypes.put("java.lang.String", + new QName(XML_SCHEMA_URI, "string", XS_URI_PREFIX)); + simpleXSDTypes.put("boolean", + new QName(XML_SCHEMA_URI, "boolean", XS_URI_PREFIX)); + simpleXSDTypes.put("float", + new QName(XML_SCHEMA_URI, "float", XS_URI_PREFIX)); + simpleXSDTypes.put("double", + new QName(XML_SCHEMA_URI, "double", XS_URI_PREFIX)); + simpleXSDTypes.put("short", + new QName(XML_SCHEMA_URI, "short", XS_URI_PREFIX)); + simpleXSDTypes.put("long", + new QName(XML_SCHEMA_URI, "long", XS_URI_PREFIX)); + simpleXSDTypes.put("byte", + new QName(XML_SCHEMA_URI, "byte", XS_URI_PREFIX)); + simpleXSDTypes.put("char", + new QName(XML_SCHEMA_URI, "anyType", XS_URI_PREFIX)); + simpleXSDTypes.put("java.lang.Integer", + new QName(XML_SCHEMA_URI, "int", XS_URI_PREFIX)); + simpleXSDTypes.put("java.lang.Double", + new QName(XML_SCHEMA_URI, "double", XS_URI_PREFIX)); + simpleXSDTypes.put("java.lang.Float", + new QName(XML_SCHEMA_URI, "float", XS_URI_PREFIX)); + simpleXSDTypes.put("java.lang.Long", + new QName(XML_SCHEMA_URI, "long", XS_URI_PREFIX)); + simpleXSDTypes.put("java.lang.Character", + new QName(XML_SCHEMA_URI, "anyType", XS_URI_PREFIX)); + simpleXSDTypes.put("java.lang.Boolean", + new QName(XML_SCHEMA_URI, "boolean", XS_URI_PREFIX)); + simpleXSDTypes.put("java.lang.Byte", + new QName(XML_SCHEMA_URI, "byte", XS_URI_PREFIX)); + simpleXSDTypes.put("java.lang.Short", + new QName(XML_SCHEMA_URI, "short", XS_URI_PREFIX)); + simpleXSDTypes.put("java.util.Date", + new QName(XML_SCHEMA_URI, "dateTime", XS_URI_PREFIX)); + simpleXSDTypes.put("java.util.Calendar", + new QName(XML_SCHEMA_URI, "dateTime", XS_URI_PREFIX)); + simpleXSDTypes.put("java.lang.Object", + new QName(XML_SCHEMA_URI, "anyType", XS_URI_PREFIX)); + simpleXSDTypes.put("java.math.BigDecimal", + new QName(XML_SCHEMA_URI, "decimal", XS_URI_PREFIX)); + + // Any types + simpleXSDTypes.put(OMElement.class.getName(), + new QName(XML_SCHEMA_URI, "anyType", XS_URI_PREFIX)); + simpleXSDTypes.put(ArrayList.class.getName(), + new QName(XML_SCHEMA_URI, "anyType", XS_URI_PREFIX)); + simpleXSDTypes.put(Vector.class.getName(), + new QName(XML_SCHEMA_URI, "anyType", XS_URI_PREFIX)); + simpleXSDTypes.put(List.class.getName(), + new QName(XML_SCHEMA_URI, "anyType", XS_URI_PREFIX)); + + // I'm unsure what populateStdSDOTypes is supposed to be setting up, + // given that I still have to do this to map "commonj.sdo.DataObject" + // to xsd:anyType, but I'll do it anyway. + // + simpleXSDTypes.put(DataObject.class.getName(), + new QName(XML_SCHEMA_URI, "anyType", XS_URI_PREFIX)); + } + + public QName getStdSdoType(String typename) { + return (QName) simpleXSDTypes.get(typename); + } + + public QName getComplexSchemaTypeName(String sdoURI, String sdoTypeName) { + return (QName) complexXSDTypes.get(asQualifiedName(sdoURI, sdoTypeName)); + } + + public QName getComplexSchemaTypeName(JClass javaClass, ClassLoader cl) throws Exception { + String namespace = Java2WSDLUtils.schemaNamespaceFromClassName(javaClass.getQualifiedName(), cl).toString(); + return (QName) complexXSDTypes.get(asQualifiedName(namespace, javaClass.getSimpleName())); + } + + public boolean isSimpleType(String typeName) { + Iterator keys = simpleXSDTypes.keySet().iterator(); + while (keys.hasNext()) { + String s = (String) keys.next(); + if (s.equals(typeName)) { + return true; + } + } + return false; + } + + public QName getSimpleSchemaTypeName(String typename) { + return (QName) simpleXSDTypes.get(typename); + } + + public void addSimpleSchemaType(String typeName, QName schemaType) { + simpleXSDTypes.put(typeName, schemaType); + } + + public void addComplexSchemaType(String namespaceURI, String name, QName schemaType) { + complexXSDTypes.put(asQualifiedName(namespaceURI, name), schemaType); + } + + public QName getQNamefortheType(String namespaceURI, String typeName) { + if (XML_SCHEMA_URI.equals(namespaceURI)) { + return getSimpleSchemaTypeName(typeName); + } else { + return getComplexSchemaTypeName(namespaceURI, typeName); + } + } +} + diff --git a/sca-java-1.x/branches/sca-java-1.6.2/tools/java2wsdl/src/main/java/org/apache/tuscany/tools/java2wsdl/generate/TuscanyWSDLTypesGenerator.java b/sca-java-1.x/branches/sca-java-1.6.2/tools/java2wsdl/src/main/java/org/apache/tuscany/tools/java2wsdl/generate/TuscanyWSDLTypesGenerator.java new file mode 100644 index 0000000000..66c9100ef9 --- /dev/null +++ b/sca-java-1.x/branches/sca-java-1.6.2/tools/java2wsdl/src/main/java/org/apache/tuscany/tools/java2wsdl/generate/TuscanyWSDLTypesGenerator.java @@ -0,0 +1,370 @@ +/* + * 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.tools.java2wsdl.generate; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collection; +import java.util.HashMap; +import java.util.Hashtable; +import java.util.Map; + +import javax.xml.namespace.QName; + +import org.apache.axis2.description.java2wsdl.bytecode.MethodTable; +import org.apache.ws.commons.schema.XmlSchema; +import org.apache.ws.commons.schema.XmlSchemaCollection; +import org.apache.ws.commons.schema.XmlSchemaComplexType; +import org.apache.ws.commons.schema.XmlSchemaElement; +import org.apache.ws.commons.schema.XmlSchemaForm; +import org.apache.ws.commons.schema.XmlSchemaImport; +import org.apache.ws.commons.schema.XmlSchemaInclude; +import org.apache.ws.commons.schema.XmlSchemaSequence; +import org.apache.ws.commons.schema.utils.NamespaceMap; +import org.codehaus.jam.JClass; +import org.codehaus.jam.JMethod; +import org.codehaus.jam.JParameter; +import org.codehaus.jam.JamClassIterator; +import org.codehaus.jam.JamService; +import org.codehaus.jam.JamServiceFactory; +import org.codehaus.jam.JamServiceParams; + +public class TuscanyWSDLTypesGenerator implements TuscanyJava2WSDLConstants { + public static final String NAME_SPACE_PREFIX = "stn_"; + + public static final String PERIOD_SEPARATOR = "."; + + private static int prefixCount = 1; + + protected GenerationParameters generationParams; + + protected Hashtable targetNamespacePrefixMap = new Hashtable(); + + protected Hashtable schemaMap = new Hashtable(); + + protected XmlSchemaCollection xmlSchemaCollection = new XmlSchemaCollection(); + + private TuscanyTypeTable typeTable = new TuscanyTypeTable(); + + protected SchemaBuilder schemaBuilder = null; + + protected Map schemaLocationMap = null; + + // to keep loaded method using JAM + private JMethod methods[]; + + // to store byte code method using Axis 1.x codes + private MethodTable methodTable; + + private Class clazz; + + private ArrayList excludeMethods = new ArrayList(); + + boolean alreadyPrintedArrayWarningMessage = false; + + public TuscanyWSDLTypesGenerator(GenerationParameters genParams) throws Exception { + this.generationParams = genParams; + + String inputClassName = generationParams.getSourceClassName(); + + try { + clazz = Class.forName(inputClassName, true, generationParams.getClassLoader()); + } catch (ClassNotFoundException cfne) { + printInputSourceClassNotFoundMessage(inputClassName); + throw new IllegalArgumentException("Input className not found:" + inputClassName, cfne); + } + + methodTable = new MethodTable(clazz); + + initializeSchemaMap(generationParams.getSchemaTargetNamespace(), generationParams + .getSchemaTargetNamespacePrefix()); + + this.schemaLocationMap = generationParams.getSchemaLocationMap(); + schemaBuilder = + new SchemaBuilder(xmlSchemaCollection, schemaMap, targetNamespacePrefixMap, typeTable, generationParams + .getAttrFormDefault(), generationParams.getElementFormDefault(), generationParams + .getSchemaLocationMap(), generationParams.getClassLoader(), generationParams.getFactoryClassNames()); + } + + /** + * Generates schema for all the parameters in method. First generates schema + * for all different parameter type and later refers to them. + * + * @return Returns XmlSchema. + * @throws Exception + */ + public Collection buildWSDLTypes() throws Exception { + JamServiceFactory factory = JamServiceFactory.getInstance(); + JamServiceParams jam_service_parms = factory.createServiceParams(); + // setting the classLoder + // jam_service_parms.setParentClassLoader(factory.createJamClassLoader(classLoader)); + // it can possible to add the classLoader as well + jam_service_parms.addClassLoader(generationParams.getClassLoader()); + jam_service_parms.includeClass(generationParams.getSourceClassName()); + + for (int count = 0; count < generationParams.getExtraClasses().size(); ++count) { + jam_service_parms.includeClass((String)generationParams.getExtraClasses().get(count)); + } + + JamService service = factory.createService(jam_service_parms); + QName extraSchemaTypeName = null; + JamClassIterator jClassIter = service.getClasses(); + // all most all the time the ittr will have only one class in it + while (jClassIter.hasNext()) { + JClass jclass = (JClass)jClassIter.next(); + // serviceName = jclass.getSimpleName(); + // todo in the future , when we support annotation we can use this + // JAnnotation[] annotations = jclass.getAnnotations(); + + if (jclass.getQualifiedName().equals(generationParams.getSourceClassName())) { + /** + * Schema generation done in two stage 1. Load all the methods + * and create type for methods parameters (if the parameters are + * Bean then it will create Complex types for those , and if the + * parameters are simple type which describe in SimpleTypeTable + * nothing will happen) 2. In the next stage for all the methods + * messages and port types will be created + */ + methods = jclass.getDeclaredMethods(); + // short the elements in the array + Arrays.sort(methods); + + // since we do not support overload + HashMap uniqueMethods = new HashMap(); + XmlSchemaComplexType methodSchemaType; + XmlSchemaSequence sequence = null; + + for (int i = 0; i < methods.length; i++) { + JMethod jMethod = methods[i]; + + String methodName = methods[i].getSimpleName(); + // no need to think about this method , since that is system + // config method + if (excludeMethods.contains(jMethod.getSimpleName())) { + continue; + } + + if (uniqueMethods.get(jMethod.getSimpleName()) != null) { + throw new Exception(" Sorry we don't support methods overloading !!!! "); + } + + if (!jMethod.isPublic()) { + // no need to generate Schema for non public methods + continue; + } + uniqueMethods.put(jMethod.getSimpleName(), jMethod); + // create the schema type for the method wrapper + + uniqueMethods.put(jMethod.getSimpleName(), jMethod); + JParameter[] paras = jMethod.getParameters(); + String parameterNames[] = null; + // better to handle void types too + parameterNames = methodTable.getParameterNames(methodName); + sequence = new XmlSchemaSequence(); + + methodSchemaType = createSchemaTypeForMethodPart(jMethod.getSimpleName()); + methodSchemaType.setParticle(sequence); + + for (int j = 0; j < paras.length; j++) { + JParameter methodParameter = paras[j]; + JClass paraType = methodParameter.getType(); + generateSchemaForType(sequence, paraType, (parameterNames != null && parameterNames[j] != null) + ? parameterNames[j] : methodParameter.getSimpleName()); + } + // for its return type + JClass returnType = jMethod.getReturnType(); + + // better to handle void types too + methodSchemaType = createSchemaTypeForMethodPart(jMethod.getSimpleName() + RESPONSE); + sequence = new XmlSchemaSequence(); + methodSchemaType.setParticle(sequence); + generateSchemaForType(sequence, returnType, "return"); + } + } else { + // generate the schema type for extra classes + extraSchemaTypeName = typeTable.getSimpleSchemaTypeName(jclass.getQualifiedName()); + if (extraSchemaTypeName == null) { + extraSchemaTypeName = schemaBuilder.generateSchema(jclass); + } + } + } + return schemaMap.values(); + } + + private QName generateSchemaForType(XmlSchemaSequence sequence, JClass type, String partName) throws Exception { + if (type.isVoidType()) { + return null; + } + boolean isArrayType = type.isArrayType(); + if (isArrayType) { + type = type.getArrayComponentType(); + } + + String classTypeName = type.getQualifiedName(); + + QName schemaTypeName = typeTable.getSimpleSchemaTypeName(classTypeName); + if (schemaTypeName == null) { + schemaTypeName = schemaBuilder.generateSchema(type); + addContentToMethodSchemaType(sequence, schemaTypeName, partName, type.isArrayType()); + addImportORInclude((XmlSchema)schemaMap.get(generationParams.getSchemaTargetNamespace()), schemaTypeName); + + } else { + addContentToMethodSchemaType(sequence, schemaTypeName, partName, type.isArrayType()); + } + + return schemaTypeName; + } + + private void addContentToMethodSchemaType(XmlSchemaSequence sequence, + QName schemaTypeName, + String paraName, + boolean isArray) { + XmlSchemaElement elt1 = new XmlSchemaElement(); + elt1.setName(paraName); + elt1.setSchemaTypeName(schemaTypeName); + sequence.getItems().add(elt1); + + if (isArray) { + // FIXME: lresende to check this + if (!alreadyPrintedArrayWarningMessage) { + alreadyPrintedArrayWarningMessage = true; + System.out.println("Warning!: Array type detected as Java method parameter. The WSDL"); + System.out.println("will be generated anyway in spite of the fact that round-trip (WSDL2Java)"); + System.out.println("may not be handled in the expected manner. There may be runtime issues as "); + System.out.println("well as array types are not necessarily supported yet."); + System.out.println(""); + } + elt1.setMaxOccurs(Long.MAX_VALUE); + elt1.setMinOccurs(0); + } + } + + private XmlSchemaComplexType createSchemaTypeForMethodPart(String localPartName) throws Exception { + XmlSchema xmlSchema = (XmlSchema)schemaMap.get(generationParams.getSchemaTargetNamespace()); + QName elementName = + new QName(generationParams.getSchemaTargetNamespace(), localPartName, generationParams + .getSchemaTargetNamespacePrefix()); + XmlSchemaComplexType complexType = new XmlSchemaComplexType(xmlSchema); + + XmlSchemaElement globalElement = new XmlSchemaElement(); + globalElement.setSchemaType(complexType); + globalElement.setName(localPartName); + globalElement.setQName(elementName); + + xmlSchema.getItems().add(globalElement); + xmlSchema.getElements().add(elementName, globalElement); + + typeTable.addComplexSchemaType(generationParams.getSchemaTargetNamespace(), + globalElement.getName(), + elementName); + + return complexType; + } + + public TuscanyTypeTable getTypeTable() { + return typeTable; + } + + public JMethod[] getMethods() { + return methods; + } + + private String generatePrefix() { + return NAME_SPACE_PREFIX + prefixCount++; + } + + public void setExcludeMethods(ArrayList excludeMethods) { + this.excludeMethods = excludeMethods; + } + + private void initializeSchemaMap(String targetNamespace, String targetNamespacePrefix) { + XmlSchema xmlSchema = new XmlSchema(targetNamespace, xmlSchemaCollection); + xmlSchema.setAttributeFormDefault(getAttrFormDefaultSetting()); + xmlSchema.setElementFormDefault(getElementFormDefaultSetting()); + + targetNamespacePrefixMap.put(targetNamespace, targetNamespacePrefix); + schemaMap.put(targetNamespace, xmlSchema); + + NamespaceMap prefixmap = new NamespaceMap(); + prefixmap.put(TuscanyTypeTable.XS_URI_PREFIX, TuscanyTypeTable.XML_SCHEMA_URI); + prefixmap.put(targetNamespacePrefix, targetNamespace); + xmlSchema.setNamespaceContext(prefixmap); + } + + /* + * Adds to 'xmlSchema' an import or include of the XMLSchema containing + * 'schemaTypeName' + */ + private void addImportORInclude(XmlSchema xmlSchema, QName schemaTypeName) { + // decide whether there must be an import or an include + if (xmlSchema.getTargetNamespace().equals(schemaTypeName.getNamespaceURI())) { + XmlSchema containingSchema = (XmlSchema)schemaMap.get(schemaTypeName.getNamespaceURI()); + // if the type is not defined in the Schema then include + if (containingSchema.getTypeByName(schemaTypeName) == null) { + String schemaLocation = null; + // This looked backwards so I flipped it + if ((schemaLocation = (String)schemaLocationMap.get(schemaTypeName.getNamespaceURI())) != null) { + schemaLocation = DEFAULT_SCHEMA_LOCATION; + } + + XmlSchemaInclude includeElement = new XmlSchemaInclude(); + includeElement.setSchemaLocation(schemaLocation); + + if (!xmlSchema.getIncludes().contains(includeElement)) { + xmlSchema.getIncludes().add(includeElement); + // Add this so it will be serialized + xmlSchema.getItems().add(includeElement); + } + } + } else { + if (!((NamespaceMap)xmlSchema.getNamespaceContext()).values().contains(schemaTypeName.getNamespaceURI())) { + XmlSchemaImport importElement = new XmlSchemaImport(); + importElement.setNamespace(schemaTypeName.getNamespaceURI()); + + // Add schemaLocation on imports + String schemaLocation = (String)schemaLocationMap.get(schemaTypeName.getNamespaceURI()); + importElement.setSchemaLocation(schemaLocation); + xmlSchema.getItems().add(importElement); + ((NamespaceMap)xmlSchema.getNamespaceContext()).put(generatePrefix(), schemaTypeName.getNamespaceURI()); + } + } + } + + private XmlSchemaForm getAttrFormDefaultSetting() { + if (FORM_DEFAULT_UNQUALIFIED.equals(generationParams.getAttrFormDefault())) { + return new XmlSchemaForm(XmlSchemaForm.UNQUALIFIED); + } else { + return new XmlSchemaForm(XmlSchemaForm.QUALIFIED); + } + } + + private XmlSchemaForm getElementFormDefaultSetting() { + if (FORM_DEFAULT_UNQUALIFIED.equals(generationParams.getElementFormDefault())) { + return new XmlSchemaForm(XmlSchemaForm.UNQUALIFIED); + } else { + return new XmlSchemaForm(XmlSchemaForm.QUALIFIED); + } + } + + private void printInputSourceClassNotFoundMessage(String inputClassName) { + System.out.println("ERROR!!: The input class: " + inputClassName + " could not be found."); + System.out.println("Please check the value you provided for the -cp <class path uri> option."); + System.out.println(""); + } +} diff --git a/sca-java-1.x/branches/sca-java-1.6.2/tools/java2wsdl/src/main/java/org/apache/tuscany/tools/java2wsdl/generate/WSDLGenEvent.java b/sca-java-1.x/branches/sca-java-1.6.2/tools/java2wsdl/src/main/java/org/apache/tuscany/tools/java2wsdl/generate/WSDLGenEvent.java new file mode 100644 index 0000000000..e30ada3af5 --- /dev/null +++ b/sca-java-1.x/branches/sca-java-1.6.2/tools/java2wsdl/src/main/java/org/apache/tuscany/tools/java2wsdl/generate/WSDLGenEvent.java @@ -0,0 +1,42 @@ +/* + * 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.tools.java2wsdl.generate; + +import java.util.EventObject; + +public class WSDLGenEvent extends EventObject { + /** + * + */ + private static final long serialVersionUID = -356100754190514245L; + private int generationPhase = WSDLGenListener.UNKNOWN; + + public WSDLGenEvent(Object source, int genPhase) { + super(source); + this.generationPhase = genPhase; + } + + public int getGenerationPhase() { + return generationPhase; + } + + public void setGenerationPhase(int generationPhase) { + this.generationPhase = generationPhase; + } +} diff --git a/sca-java-1.x/branches/sca-java-1.6.2/tools/java2wsdl/src/main/java/org/apache/tuscany/tools/java2wsdl/generate/WSDLGenListener.java b/sca-java-1.x/branches/sca-java-1.6.2/tools/java2wsdl/src/main/java/org/apache/tuscany/tools/java2wsdl/generate/WSDLGenListener.java new file mode 100644 index 0000000000..788d162f34 --- /dev/null +++ b/sca-java-1.x/branches/sca-java-1.6.2/tools/java2wsdl/src/main/java/org/apache/tuscany/tools/java2wsdl/generate/WSDLGenListener.java @@ -0,0 +1,39 @@ +/* + * 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.tools.java2wsdl.generate; + +public interface WSDLGenListener { + public static int UNKNOWN = 0; + + public static int INPUT_ARGS_PARSING = 1; + + public static int INPUT_ARGS_VALIDATION = 2; + + public static int WSDL_MODEL_CREATION = 3; + + public static int WSDL_MODEL_WRITING = 4; + + public static String[] phaseAsString = { "Unknown", + "Input Arguments Parsing", "Input Arguments Validation", + "WSDL Model Creation", "WSDL Model Writing" }; + + public void WSDLGenPhaseStarted(WSDLGenEvent event); + + public void WSDLGenPhaseCompleted(WSDLGenEvent event); +} diff --git a/sca-java-1.x/branches/sca-java-1.6.2/tools/java2wsdl/src/main/java/org/apache/tuscany/tools/java2wsdl/util/XMLNameUtil.java b/sca-java-1.x/branches/sca-java-1.6.2/tools/java2wsdl/src/main/java/org/apache/tuscany/tools/java2wsdl/util/XMLNameUtil.java new file mode 100644 index 0000000000..b30b8cd62b --- /dev/null +++ b/sca-java-1.x/branches/sca-java-1.6.2/tools/java2wsdl/src/main/java/org/apache/tuscany/tools/java2wsdl/util/XMLNameUtil.java @@ -0,0 +1,143 @@ +/* + * 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.tools.java2wsdl.util; + +import java.util.ArrayList; +import java.util.List; + +public class XMLNameUtil { + + /** + * Returns a valid Java name from an XML Name. + * + * @param name + * @param isUpperCase + * @return a valid Java name from an XML Name + */ + public static String getJavaNameFromXMLName(String name, boolean isUpperCase) { + List<String> parsedName = parseName(name, '_'); + StringBuilder result = new StringBuilder(64 * parsedName.size()); + for (String nameComponent: parsedName) { + if (nameComponent.length() > 0) { + if (result.length() > 0 || isUpperCase) { + result.append(Character.toUpperCase(nameComponent.charAt(0))); + result.append(nameComponent.substring(1)); + } else { + result.append(nameComponent); + } + } + } + + if (result.length() == 0) { + return "_"; + } + if (Character.isJavaIdentifierStart(result.charAt(0))) { + return isUpperCase ? result.toString() : decapitalizeName(result.toString()); + } + return "_" + result; + } + + /** + * Decapitalize a name. + * @param name + * @return a decapitalized name + */ + public static String decapitalizeName(String name) { + if (name.length() == 0) { + return name; + } else { + String lowerName = name.toLowerCase(); + int i; + for (i = 0; i < name.length(); i++) { + if (name.charAt(i) == lowerName.charAt(i)) { + break; + } + } + if (i > 1 && i < name.length()) { + --i; + } + return name.substring(0, i).toLowerCase() + name.substring(i); + } + } + + /** + * Parse the given name. + * + * @param sourceName + * @param separator + * @return some stuff parsed from the name + */ + private static List<String> parseName(String sourceName, char separator) { + List<String> result = new ArrayList<String>(); + if (sourceName != null) { + StringBuilder currentWord = new StringBuilder(64); + boolean lastIsLower = false; + int index; + int length; + for (index = 0, length = sourceName.length(); index < length; ++index) { + char curChar = sourceName.charAt(index); + if (!Character.isJavaIdentifierPart(curChar)) { + curChar = separator; + } + if (Character.isUpperCase(curChar) + || (!lastIsLower && Character.isDigit(curChar)) + || curChar == separator) { + + if (lastIsLower && currentWord.length() > 1 + || curChar == separator && currentWord.length() > 0) { + result.add(currentWord.toString()); + currentWord = new StringBuilder(64); + } + lastIsLower = false; + } else { + if (!lastIsLower) { + int currentWordLength = currentWord.length(); + if (currentWordLength > 1) { + char lastChar = currentWord.charAt(--currentWordLength); + currentWord.setLength(currentWordLength); + result.add(currentWord.toString()); + currentWord = new StringBuilder(64); + currentWord.append(lastChar); + } + } + lastIsLower = true; + } + + if (curChar != separator) { + currentWord.append(curChar); + } + } + + result.add(currentWord.toString()); + } + return result; + } + + /** + * Return an EPackage name for the given namespace. + * + * @param namespace + * @return an EPackage name for the given namespace + */ + public static String getPackageNameFromNamespace(String namespace) { + return org.apache.tuscany.sdo.helper.SDOXSDEcoreBuilder.getDefaultPackageName(namespace); + } + + +} diff --git a/sca-java-1.x/branches/sca-java-1.6.2/tools/java2wsdl/src/main/resources/META-INF/LICENSE.txt b/sca-java-1.x/branches/sca-java-1.6.2/tools/java2wsdl/src/main/resources/META-INF/LICENSE.txt new file mode 100644 index 0000000000..0084319535 --- /dev/null +++ b/sca-java-1.x/branches/sca-java-1.6.2/tools/java2wsdl/src/main/resources/META-INF/LICENSE.txt @@ -0,0 +1,202 @@ + + 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, serviceDefinition 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-1.x/branches/sca-java-1.6.2/tools/java2wsdl/src/test/java/org/apache/tuscany/tools/java2wsdl/generate/CustomerValue.java b/sca-java-1.x/branches/sca-java-1.6.2/tools/java2wsdl/src/test/java/org/apache/tuscany/tools/java2wsdl/generate/CustomerValue.java new file mode 100644 index 0000000000..135b374357 --- /dev/null +++ b/sca-java-1.x/branches/sca-java-1.6.2/tools/java2wsdl/src/test/java/org/apache/tuscany/tools/java2wsdl/generate/CustomerValue.java @@ -0,0 +1,41 @@ +/* + * 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.tools.java2wsdl.generate; + +import org.apache.tuscany.tools.java2wsdl.generate.customer.Customer; + +public class CustomerValue { + + public int getValue(String custId, String stockSymbol) { + return 0; + } + + public Customer getCustomerDetails(String custId) { + return new Customer(); + } + + public String noArgsServiceMethod() { + return new String(); + } + + private void privateServiceMethod() { + + } + +} diff --git a/sca-java-1.x/branches/sca-java-1.6.2/tools/java2wsdl/src/test/java/org/apache/tuscany/tools/java2wsdl/generate/CustomerWithAccount.java b/sca-java-1.x/branches/sca-java-1.6.2/tools/java2wsdl/src/test/java/org/apache/tuscany/tools/java2wsdl/generate/CustomerWithAccount.java new file mode 100644 index 0000000000..dfebd77215 --- /dev/null +++ b/sca-java-1.x/branches/sca-java-1.6.2/tools/java2wsdl/src/test/java/org/apache/tuscany/tools/java2wsdl/generate/CustomerWithAccount.java @@ -0,0 +1,49 @@ +/* + * 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.tools.java2wsdl.generate; + +import org.apache.tuscany.tools.java2wsdl.generate.account.Account; +import org.apache.tuscany.tools.java2wsdl.generate.customer.Customer; + +public class CustomerWithAccount { + + private Customer customer = new Customer(); + + private Account[] accounts; + + public int getValue(String custId, String stockSymbol) { + return 123; + } + + public Customer getCustomerDetails(String custId) { + return customer; + } + + public Account getCustomerAccount(String custId, String accountId) { + return accounts[0]; + } + + public Account[] getAccounts() { + return accounts; + } + + public void setAccounts(Account[] accounts) { + this.accounts = accounts; + } +} diff --git a/sca-java-1.x/branches/sca-java-1.6.2/tools/java2wsdl/src/test/java/org/apache/tuscany/tools/java2wsdl/generate/ExampleService.java b/sca-java-1.x/branches/sca-java-1.6.2/tools/java2wsdl/src/test/java/org/apache/tuscany/tools/java2wsdl/generate/ExampleService.java new file mode 100644 index 0000000000..5406025643 --- /dev/null +++ b/sca-java-1.x/branches/sca-java-1.6.2/tools/java2wsdl/src/test/java/org/apache/tuscany/tools/java2wsdl/generate/ExampleService.java @@ -0,0 +1,31 @@ +/*
+ * 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.tools.java2wsdl.generate;
+
+import org.osoa.sca.annotations.OneWay;
+
+public interface ExampleService {
+
+ void sayHelloTwoWay(String name);
+
+ @OneWay
+ void sayHelloOneWay(String name);
+
+ String getGreeting();
+}
diff --git a/sca-java-1.x/branches/sca-java-1.6.2/tools/java2wsdl/src/test/java/org/apache/tuscany/tools/java2wsdl/generate/TuscanyJava2WSDLTestCase.java b/sca-java-1.x/branches/sca-java-1.6.2/tools/java2wsdl/src/test/java/org/apache/tuscany/tools/java2wsdl/generate/TuscanyJava2WSDLTestCase.java new file mode 100644 index 0000000000..c587252d23 --- /dev/null +++ b/sca-java-1.x/branches/sca-java-1.6.2/tools/java2wsdl/src/test/java/org/apache/tuscany/tools/java2wsdl/generate/TuscanyJava2WSDLTestCase.java @@ -0,0 +1,114 @@ +/* + * 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.tools.java2wsdl.generate; + +import java.io.File; + +import junit.framework.TestCase; + +/** + * A JUnit test case to test the Tuscany Java 2 WSDL Generation + */ +public class TuscanyJava2WSDLTestCase extends TestCase { + + /** + * setup the pre-requisites for the test case to run + * + * @exception Exception + */ + @Override + protected void setUp() throws Exception { + super.setUp(); + } + + /** + * @exception Exception + */ + @Override + protected void tearDown() throws Exception { + super.tearDown(); + } + + /** + * Simple WSDL generation test. + */ + public void testSimpleWSDLGeneration() { + String[] arguments = + new String[] {"-cn", "org.apache.tuscany.tools.java2wsdl.generate.CustomerValue", + "-o", "target/java2wsdl-source", "-xc", + "org.apache.tuscany.tools.java2wsdl.generate.extra.GoldCustomer"}; + + Java2WSDL.main(arguments); + + File file = new File("target/java2wsdl-source/CustomerValue.wsdl"); + assertTrue(file.exists() && file.isFile()); + } + + /** + * Test WSDL generation where a parameter Object[] is involved. + */ + public void testWsdlGeneration2() { + + String[] arguments = + new String[] {"-cn", "org.apache.tuscany.tools.java2wsdl.generate.CustomerWithAccount", + "-o", "target/java2wsdl-source",}; + Java2WSDL.main(arguments); + + File file = new File("target/java2wsdl-source/CustomerWithAccount.wsdl"); + assertTrue(file.exists() && file.isFile()); + } + + public void testWsdlGeneration_SDO_Static() { + // tests for SDOs where XSD exist. Hence no XSDs must be generated + String[] arguments = + new String[] {"-cn", "org.soapinterop.CreditScoreDocLit", + "-o", "target/java2wsdl-source", + "-ixsd", "[http://www.example.org/creditscore/doclit/," + "http://www.example.org/creditscore/doclit/xsd]"}; + Java2WSDL.main(arguments); + + File file = new File("target/java2wsdl-source/CreditScoreDocLit.wsdl"); + assertTrue(file.exists() && file.isFile()); + } + + /** + * Test WSDL generation for a service interface. + */ + public void testServiceWSDLGeneration() { + String[] arguments = + new String[] {"-cn", "org.apache.tuscany.tools.java2wsdl.generate.ExampleService", + "-o", "target/java2wsdl-source"}; + + Java2WSDL.main(arguments); + + File file = new File("target/java2wsdl-source/ExampleService.wsdl"); + assertTrue(file.exists() && file.isFile()); + } + + /** + * Test WSDL generation from a java interface and then generate the java + * interface using the generated WSDL. + */ + public void _testRoundTrip() { + // TODO implement round trip + // this should re-generate java interfaces from the generated wsdl + // and compile (?) the generated java code. + // fail(); + + } +} diff --git a/sca-java-1.x/branches/sca-java-1.6.2/tools/java2wsdl/src/test/java/org/apache/tuscany/tools/java2wsdl/generate/account/Account.java b/sca-java-1.x/branches/sca-java-1.6.2/tools/java2wsdl/src/test/java/org/apache/tuscany/tools/java2wsdl/generate/account/Account.java new file mode 100644 index 0000000000..bf49d98888 --- /dev/null +++ b/sca-java-1.x/branches/sca-java-1.6.2/tools/java2wsdl/src/test/java/org/apache/tuscany/tools/java2wsdl/generate/account/Account.java @@ -0,0 +1,53 @@ +/* + * 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.tools.java2wsdl.generate.account; + +import java.math.BigDecimal; + +public class Account { + int accountType; + + String accountNo; + + BigDecimal balance; + + public String getAccountNo() { + return accountNo; + } + + public void setAccountNo(String accountNo) { + this.accountNo = accountNo; + } + + public int getAccountType() { + return accountType; + } + + public void setAccountType(int accountType) { + this.accountType = accountType; + } + + public BigDecimal getBalance() { + return balance; + } + + public void setBalance(BigDecimal balance) { + this.balance = balance; + } +} diff --git a/sca-java-1.x/branches/sca-java-1.6.2/tools/java2wsdl/src/test/java/org/apache/tuscany/tools/java2wsdl/generate/customer/Customer.java b/sca-java-1.x/branches/sca-java-1.6.2/tools/java2wsdl/src/test/java/org/apache/tuscany/tools/java2wsdl/generate/customer/Customer.java new file mode 100644 index 0000000000..cf83095852 --- /dev/null +++ b/sca-java-1.x/branches/sca-java-1.6.2/tools/java2wsdl/src/test/java/org/apache/tuscany/tools/java2wsdl/generate/customer/Customer.java @@ -0,0 +1,29 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +package org.apache.tuscany.tools.java2wsdl.generate.customer; + +public class Customer { + private String name = ""; + + public int custType = 0; + + public String getName() { + return name; + } +} diff --git a/sca-java-1.x/branches/sca-java-1.6.2/tools/java2wsdl/src/test/java/org/apache/tuscany/tools/java2wsdl/generate/extra/GoldCustomer.java b/sca-java-1.x/branches/sca-java-1.6.2/tools/java2wsdl/src/test/java/org/apache/tuscany/tools/java2wsdl/generate/extra/GoldCustomer.java new file mode 100644 index 0000000000..901da8e551 --- /dev/null +++ b/sca-java-1.x/branches/sca-java-1.6.2/tools/java2wsdl/src/test/java/org/apache/tuscany/tools/java2wsdl/generate/extra/GoldCustomer.java @@ -0,0 +1,33 @@ +/* + * 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.tools.java2wsdl.generate.extra; + +import org.apache.tuscany.tools.java2wsdl.generate.customer.Customer; + +public class GoldCustomer extends Customer { + public String goldCustNumber = ""; + + public String getGoldCustNumber() { + return goldCustNumber; + } + + public void setGoldCustNumber(String goldCustNumber) { + this.goldCustNumber = goldCustNumber; + } +} diff --git a/sca-java-1.x/branches/sca-java-1.6.2/tools/java2wsdl/src/test/java/org/soapinterop/CreditScoreDocLit.java b/sca-java-1.x/branches/sca-java-1.6.2/tools/java2wsdl/src/test/java/org/soapinterop/CreditScoreDocLit.java new file mode 100644 index 0000000000..78a64dcc64 --- /dev/null +++ b/sca-java-1.x/branches/sca-java-1.6.2/tools/java2wsdl/src/test/java/org/soapinterop/CreditScoreDocLit.java @@ -0,0 +1,24 @@ +/* + * 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.soapinterop; + +public interface CreditScoreDocLit { + public org.example.creditscore.doclit.CreditReport getCreditScore(org.example.creditscore.doclit.Customer param0) + throws java.rmi.RemoteException; +} diff --git a/sca-java-1.x/branches/sca-java-1.6.2/tools/java2wsdl/src/test/resources/AccountService.wsdl b/sca-java-1.x/branches/sca-java-1.6.2/tools/java2wsdl/src/test/resources/AccountService.wsdl new file mode 100644 index 0000000000..6f2fed1e2a --- /dev/null +++ b/sca-java-1.x/branches/sca-java-1.6.2/tools/java2wsdl/src/test/resources/AccountService.wsdl @@ -0,0 +1,242 @@ +<?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 xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
+ xmlns:tns="http://www.bigbank.com/Account/"
+ xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
+ xmlns:xsd="http://www.w3.org/2001/XMLSchema"
+ xmlns:account="http://www.bigbank.com/Account/"
+ targetNamespace="http://www.bigbank.com/Account/" + name="AccountService">
+
+ <wsdl:types>
+ <xsd:schema targetNamespace="http://www.bigbank.com/Account/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:account="http://www.bigbank.com/Account/" + xmlns:sdojava="commonj.sdo/java" + sdojava:package="org.apache.tuscany.samples.bigbank.account">
+
+ <xsd:element name="getAccountReportWrapped0">
+ <xsd:complexType>
+ <xsd:sequence>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+ <xsd:element name="getAccountReportWrapped0Response">
+ <xsd:complexType>
+ <xsd:sequence>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+
+ <xsd:element name="getAccountReportWrapped1"> + <xsd:complexType> + <xsd:sequence> + <xsd:element name="customerID" type="xsd:string"/> + </xsd:sequence> + </xsd:complexType> + </xsd:element>
+ <xsd:element name="getAccountReportWrapped1Response"> + <xsd:complexType> + <xsd:sequence> + <xsd:element name="accountReport" type="account:AccountReport"/> + </xsd:sequence> + </xsd:complexType> + </xsd:element> +
+ <xsd:element name="getAccountReportWrappedN">
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element name="customerID" type="xsd:string"/>
+ <xsd:element name="customerID2" type="xsd:int"/>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+ <xsd:element name="getAccountReportWrappedNResponse">
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element name="accountReport" type="account:AccountReport"/>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+
+ <xsd:element name="getAccountReportBare0" type="xsd:string"/>
+ <xsd:element name="getAccountReportBare0Response" type="xsd:int"/>
+
+ <xsd:element name="getAccountReportBare1Simple" type="xsd:string"/>
+ <xsd:element name="getAccountReportBare1SimpleResponse" type="xsd:int"/>
+
+ <xsd:element name="getAccountReportBare1Complex" type="account:AccountRequest"/>
+ <xsd:element name="getAccountReportBare1ComplexResponse" type="account:AccountReport"/>
+
+ <xsd:complexType name="AccountRequest">
+ <xsd:sequence>
+ <xsd:element name="customerID" type="xsd:string"/>
+ </xsd:sequence>
+ </xsd:complexType>
+
+ <xsd:complexType name="AccountReport">
+ <xsd:sequence>
+ <xsd:element name="accountSummaries" type="account:AccountSummary" maxOccurs="unbounded"/>
+ </xsd:sequence>
+ </xsd:complexType>
+ <xsd:complexType name="AccountSummary">
+ <xsd:attribute name="accountNumber" type="xsd:string"/>
+ <xsd:attribute name="accountType" type="xsd:string"/>
+ <xsd:attribute name="balance" type="xsd:float"/>
+ </xsd:complexType>
+
+ </xsd:schema>
+ </wsdl:types>
+
+ <wsdl:message name="getAccountReportWrapped0Request">
+ <wsdl:part element="account:getAccountReportWrapped0" name="getAccountReportWrapped0Request"/>
+ </wsdl:message>
+ <wsdl:message name="getAccountReportWrapped0Response">
+ <wsdl:part element="account:getAccountReportWrapped0Response" name="getAccountReportWrapped0Response"/>
+ </wsdl:message>
+
+ <wsdl:message name="getAccountReportWrapped1Request">
+ <wsdl:part element="account:getAccountReportWrapped1" name="getAccountReportWrapped1Request"/>
+ </wsdl:message>
+ <wsdl:message name="getAccountReportWrapped1Response">
+ <wsdl:part element="account:getAccountReportWrapped1Response" name="getAccountReportWrapped1Response"/>
+ </wsdl:message>
+
+ <wsdl:message name="getAccountReportWrappedNRequest">
+ <wsdl:part element="account:getAccountReportWrappedN" name="getAccountReportWrappedNRequest"/>
+ </wsdl:message>
+ <wsdl:message name="getAccountReportWrappedNResponse">
+ <wsdl:part element="account:getAccountReportWrappedNResponse" name="getAccountReportWrappedNResponse"/>
+ </wsdl:message>
+
+ <wsdl:message name="getAccountReportBare0Request">
+ </wsdl:message>
+ <wsdl:message name="getAccountReportBare0Response">
+ </wsdl:message>
+
+ <wsdl:message name="getAccountReportBare1SimpleRequest">
+ <wsdl:part element="account:getAccountReportBare1Simple" name="getAccountReportBare1SimpleRequest"/>
+ </wsdl:message>
+ <wsdl:message name="getAccountReportBare1SimpleResponse">
+ <wsdl:part element="account:getAccountReportBare1SimpleResponse" name="getAccountReportBare1SimpleResponse"/>
+ </wsdl:message>
+
+ <wsdl:message name="getAccountReportBare1ComplexRequest">
+ <wsdl:part element="account:getAccountReportBare1Complex" name="getAccountReportBare1ComplexRequest"/>
+ </wsdl:message>
+ <wsdl:message name="getAccountReportBare1ComplexResponse">
+ <wsdl:part element="account:getAccountReportBare1ComplexResponse" name="getAccountReportBare1ComplexResponse"/>
+ </wsdl:message>
+
+ <wsdl:portType name="Account_Service">
+ <wsdl:operation name="getAccountReportWrapped0">
+ <wsdl:input message="tns:getAccountReportWrapped0Request"/>
+ <wsdl:output message="tns:getAccountReportWrapped0Response"/>
+ </wsdl:operation>
+ <wsdl:operation name="getAccountReportWrapped1">
+ <wsdl:input message="tns:getAccountReportWrapped1Request"/>
+ <wsdl:output message="tns:getAccountReportWrapped1Response"/>
+ </wsdl:operation>
+ <wsdl:operation name="getAccountReportWrappedN">
+ <wsdl:input message="tns:getAccountReportWrappedNRequest"/>
+ <wsdl:output message="tns:getAccountReportWrappedNResponse"/>
+ </wsdl:operation>
+ <wsdl:operation name="getAccountReportBare0">
+ <wsdl:input message="tns:getAccountReportBare0Request"/>
+ <wsdl:output message="tns:getAccountReportBare0Response"/>
+ </wsdl:operation>
+ <wsdl:operation name="getAccountReportBare1Simple">
+ <wsdl:input message="tns:getAccountReportBare1SimpleRequest"/>
+ <wsdl:output message="tns:getAccountReportBare1SimpleResponse"/>
+ </wsdl:operation>
+ <wsdl:operation name="getAccountReportBare1Complex">
+ <wsdl:input message="tns:getAccountReportBare1ComplexRequest"/>
+ <wsdl:output message="tns:getAccountReportBare1ComplexResponse"/>
+ </wsdl:operation>
+ </wsdl:portType>
+ <wsdl:binding name="AccountServiceSOAP" type="tns:Account_Service">
+ <soap:binding style="document"
+ transport="http://schemas.xmlsoap.org/soap/http"/>
+ <wsdl:operation name="getAccountReportWrapped0">
+ <soap:operation
+ soapAction="http://www.bigbank.com/Account/getAccountReportWrapped0"/>
+ <wsdl:input>
+ <soap:body use="literal"/>
+ </wsdl:input>
+ <wsdl:output>
+ <soap:body use="literal"/>
+ </wsdl:output>
+ </wsdl:operation>
+ <wsdl:operation name="getAccountReportWrapped1">
+ <soap:operation
+ soapAction="http://www.bigbank.com/Account/getAccountReportWrapped1"/>
+ <wsdl:input>
+ <soap:body use="literal"/>
+ </wsdl:input>
+ <wsdl:output>
+ <soap:body use="literal"/>
+ </wsdl:output>
+ </wsdl:operation>
+ <wsdl:operation name="getAccountReportWrappedN">
+ <soap:operation
+ soapAction="http://www.bigbank.com/Account/getAccountReportWrappedN"/>
+ <wsdl:input>
+ <soap:body use="literal"/>
+ </wsdl:input>
+ <wsdl:output>
+ <soap:body use="literal"/>
+ </wsdl:output>
+ </wsdl:operation>
+ <wsdl:operation name="getAccountReportBare0">
+ <soap:operation
+ soapAction="http://www.bigbank.com/Account/getAccountReportBare0"/>
+ <wsdl:input>
+ <soap:body use="literal"/>
+ </wsdl:input>
+ <wsdl:output>
+ <soap:body use="literal"/>
+ </wsdl:output>
+ </wsdl:operation>
+ <wsdl:operation name="getAccountReportBare1Simple">
+ <soap:operation
+ soapAction="http://www.bigbank.com/Account/getAccountReportBare1Simple"/>
+ <wsdl:input>
+ <soap:body use="literal"/>
+ </wsdl:input>
+ <wsdl:output>
+ <soap:body use="literal"/>
+ </wsdl:output>
+ </wsdl:operation>
+ <wsdl:operation name="getAccountReportBare1Complex">
+ <soap:operation
+ soapAction="http://www.bigbank.com/Account/getAccountReportBare1Complex"/>
+ <wsdl:input>
+ <soap:body use="literal"/>
+ </wsdl:input>
+ <wsdl:output>
+ <soap:body use="literal"/>
+ </wsdl:output>
+ </wsdl:operation>
+ </wsdl:binding>
+ <wsdl:service name="AccountService">
+ <wsdl:port binding="tns:AccountServiceSOAP"
+ name="AccountServiceSOAP">
+ <soap:address location="http://localhost:8085/sample-account/services/AccountService"/>
+ </wsdl:port>
+ </wsdl:service>
+</wsdl:definitions>
diff --git a/sca-java-1.x/branches/sca-java-1.6.2/tools/java2wsdl/src/test/resources/CreditScoreDocLit.wsdl b/sca-java-1.x/branches/sca-java-1.6.2/tools/java2wsdl/src/test/resources/CreditScoreDocLit.wsdl new file mode 100644 index 0000000000..09d1a58589 --- /dev/null +++ b/sca-java-1.x/branches/sca-java-1.6.2/tools/java2wsdl/src/test/resources/CreditScoreDocLit.wsdl @@ -0,0 +1,76 @@ +<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ Copyright (c) 2005 The Apache Software Foundation or its licensors, as applicable.
+
+ 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.
+ -->
+<wsdl:definitions xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
+ xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
+ xmlns:tns="http://www.example.org/creditscore/doclit/"
+ xmlns:xsd="http://www.w3.org/2001/XMLSchema" name="CreditScore"
+ targetNamespace="http://www.example.org/creditscore/doclit/">
+ <wsdl:types>
+ <xsd:schema
+ targetNamespace="http://www.example.org/creditscore/doclit/"
+ xmlns:xsd="http://www.w3.org/2001/XMLSchema">
+ <xsd:element name="getCreditScoreRequest" type="tns:Customer" />
+ <xsd:complexType name="Customer">
+ <xsd:sequence>
+ <xsd:element name="ssn" type="xsd:string" />
+ <xsd:element name="firstName" type="xsd:string" />
+ <xsd:element name="lastName" type="xsd:string" />
+ </xsd:sequence>
+ </xsd:complexType>
+ <xsd:element name="getCreditScoreResponse" type="tns:CreditReport"/>
+ <xsd:complexType name="CreditReport">
+ <xsd:sequence>
+ <xsd:element name="score" type="xsd:int"/>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:schema>
+ </wsdl:types>
+ <wsdl:message name="getCreditScoreResponse">
+ <wsdl:part element="tns:getCreditScoreResponse"
+ name="getCreditScoreResponse" />
+ </wsdl:message>
+ <wsdl:message name="getCreditScoreRequest">
+ <wsdl:part element="tns:getCreditScoreRequest"
+ name="getCreditScoreRequest" />
+ </wsdl:message>
+ <wsdl:portType name="CreditScoreDocLit">
+ <wsdl:operation name="getCreditScore">
+ <wsdl:input message="tns:getCreditScoreRequest" />
+ <wsdl:output message="tns:getCreditScoreResponse" />
+ </wsdl:operation>
+ </wsdl:portType>
+ <wsdl:binding name="CreditScoreDocLitSOAP" type="tns:CreditScoreDocLit">
+ <soap:binding style="document"
+ transport="http://schemas.xmlsoap.org/soap/http" />
+ <wsdl:operation name="getCreditScore">
+ <soap:operation
+ soapAction="http://www.example.org/creditscore/doclit/getCreditScore" />
+ <wsdl:input>
+ <soap:body parts="getCreditScoreRequest" use="literal" />
+ </wsdl:input>
+ <wsdl:output>
+ <soap:body parts="getCreditScoreResponse" use="literal" />
+ </wsdl:output>
+ </wsdl:operation>
+ </wsdl:binding>
+ <wsdl:service name="CreditScore">
+ <wsdl:port binding="tns:CreditScoreDocLitSOAP"
+ name="CreditScoreDocLitSOAP">
+ <soap:address location="http://www.example.org/" />
+ </wsdl:port>
+ </wsdl:service>
+</wsdl:definitions>
diff --git a/sca-java-1.x/branches/sca-java-1.6.2/tools/java2wsdl/src/test/resources/helloworld.wsdl b/sca-java-1.x/branches/sca-java-1.6.2/tools/java2wsdl/src/test/resources/helloworld.wsdl new file mode 100644 index 0000000000..051f604bb2 --- /dev/null +++ b/sca-java-1.x/branches/sca-java-1.6.2/tools/java2wsdl/src/test/resources/helloworld.wsdl @@ -0,0 +1,121 @@ +<?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://helloworldaxis.samples.tuscany.apache.org" xmlns:apachesoap="http://xml.apache.org/xml-soap" xmlns:impl="http://helloworldaxis.samples.tuscany.apache.org" xmlns:intf="http://helloworldaxis.samples.tuscany.apache.org" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:wsdlsoap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" name="stockquote"> + <!--WSDL created by Apache Axis version: 1.2.1 +Built on Jun 14, 2005 (09:15:57 EDT)--> + <wsdl:types> + <schema elementFormDefault="qualified" + xmlns:hello="http://helloworldaxis.samples.tuscany.apache.org" + xmlns:xsd="http://www.w3.org/2001/XMLSchema" + targetNamespace="http://helloworldaxis.samples.tuscany.apache.org" xmlns="http://www.w3.org/2001/XMLSchema"> + <complexType name="ComplexGreetings"> + <sequence> + <element name="greet1" type="xsd:string"/> + <element name="greet2" type="xsd:double"/> + </sequence> + </complexType> + <element name="getGreetings"> + <complexType> + <sequence> + <element name="in0" type="xsd:string"/> + <element name="in1" type="xsd:double"/> + <element name="in2" type="hello:ComplexGreetings"/> + </sequence> + <xsd:attribute name="language" type="xsd:string"/> + </complexType> + </element> + <element name="getGreetingsResponse"> + <complexType> + <sequence> + <element name="getGreetingsReturn" type="xsd:string"/> + </sequence> + </complexType> + </element> + </schema> + </wsdl:types> + + <wsdl:message name="getGreetingsRequest"> + + <wsdl:part element="impl:getGreetings" name="parameters"/> + + </wsdl:message> + + <wsdl:message name="getGreetingsResponse"> + + <wsdl:part element="impl:getGreetingsResponse" name="parameters"/> + + </wsdl:message> + + <wsdl:portType name="HelloWorldServiceImpl"> + + <wsdl:operation name="getGreetings"> + + <wsdl:input message="impl:getGreetingsRequest" name="getGreetingsRequest"/> + + <wsdl:output message="impl:getGreetingsResponse" name="getGreetingsResponse"/> + + </wsdl:operation> + + </wsdl:portType> + + <wsdl:binding name="helloworldSoapBinding" type="impl:HelloWorldServiceImpl"> + + <wsdlsoap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/> + + <wsdl:operation name="getGreetings"> + + <wsdlsoap:operation soapAction=""/> + + <wsdl:input name="getGreetingsRequest"> + + <wsdlsoap:body use="literal"/> + + </wsdl:input> + + <wsdl:output name="getGreetingsResponse"> + + <wsdlsoap:body use="literal"/> + + </wsdl:output> + + </wsdl:operation> + + </wsdl:binding> + + <wsdl:service name="HelloWorldServiceImplService"> + + <wsdl:port binding="impl:helloworldSoapBinding" name="helloworld"> + + <!-- Tuscany SCA Service --> +<!-- + <wsdlsoap:address location="http://localhost:8080/tuscany-samples-helloworldws-service/services/HelloWorldService"/> +--> + <wsdlsoap:address location="http://localhost:9876/tuscany-samples-helloworldws-service/services/HelloWorldService"/> + + <!-- Axis Web Service --> + <!-- + <wsdlsoap:address location="http://localhost:8081/helloworldaxissvc-incubating-M1/services/helloworld"/> + --> + + </wsdl:port> + + </wsdl:service> + +</wsdl:definitions> diff --git a/sca-java-1.x/branches/sca-java-1.6.2/tools/java2wsdl/src/test/resources/interopdoc.wsdl b/sca-java-1.x/branches/sca-java-1.6.2/tools/java2wsdl/src/test/resources/interopdoc.wsdl new file mode 100644 index 0000000000..820c26ca34 --- /dev/null +++ b/sca-java-1.x/branches/sca-java-1.6.2/tools/java2wsdl/src/test/resources/interopdoc.wsdl @@ -0,0 +1,180 @@ +<?xml version="1.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. + --> +<definitions name="InteropTestDoc" targetNamespace="http://soapinterop.org/" + xmlns="http://schemas.xmlsoap.org/wsdl/" + xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" + xmlns:xsd="http://www.w3.org/2001/XMLSchema" + xmlns:tns="http://soapinterop.org/" + xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"> + + <types> + + <xsd:schema elementFormDefault="qualified" targetNamespace="http://soapinterop.org/" xmlns:interop="http://soapinterop.org/"> + + <xsd:element name="SingleTag"> + <xsd:complexType> + <xsd:sequence> + <xsd:element minOccurs="0" maxOccurs="1" name="SingleTag" type="interop:SingleTag"/> + </xsd:sequence> + </xsd:complexType> + </xsd:element> + + <xsd:complexType name="SingleTag"/> + <xsd:element name="SingleTagResponse"> + <xsd:complexType> + <xsd:sequence> + <xsd:element minOccurs="0" maxOccurs="1" name="SingleTag" type="interop:SingleTag"/> + </xsd:sequence> + </xsd:complexType> + </xsd:element> + <xsd:element name="SimpleDocument"> + <xsd:complexType> + <xsd:sequence> + <xsd:element minOccurs="0" maxOccurs="1" name="SimpleDocument" type="interop:SimpleDocument"/> + </xsd:sequence> + </xsd:complexType> + </xsd:element> + <xsd:complexType name="SimpleDocument"> + <xsd:simpleContent> + <xsd:extension base="xsd:string"/> + </xsd:simpleContent> + </xsd:complexType> + <xsd:element name="SimpleDocumentResponse"> + <xsd:complexType> + <xsd:sequence> + <xsd:element minOccurs="0" maxOccurs="1" name="SimpleDocument" type="interop:SimpleDocument"/> + </xsd:sequence> + </xsd:complexType> + </xsd:element> + <xsd:element name="ComplexDocument"> + <xsd:complexType> + <xsd:sequence> + <xsd:element minOccurs="0" maxOccurs="1" name="ComplexDocument" type="interop:ComplexDocument"/> + </xsd:sequence> + </xsd:complexType> + </xsd:element> + <xsd:complexType name="ComplexDocument"> + <xsd:sequence> + <xsd:element minOccurs="0" maxOccurs="1" name="simpleDoc" type="interop:ArrayOfSimpleDocument"/> + <xsd:element minOccurs="0" maxOccurs="1" name="child" type="interop:ChildDocument"/> + </xsd:sequence> + <xsd:attribute name="AnAttribute" type="xsd:string"/> + </xsd:complexType> + <xsd:complexType name="ArrayOfSimpleDocument"> + <xsd:sequence> + <xsd:element minOccurs="0" maxOccurs="unbounded" name="SimpleDocument" nillable="true" type="interop:SimpleDocument"/> + </xsd:sequence> + </xsd:complexType> + <xsd:complexType name="ChildDocument"> + <xsd:sequence> + <xsd:element minOccurs="0" maxOccurs="1" name="childSimpleDoc" type="interop:ArrayOfSimpleDocument"/> + </xsd:sequence> + </xsd:complexType> + <xsd:element name="ComplexDocumentResponse"> + <xsd:complexType> + <xsd:sequence> + <xsd:element minOccurs="0" maxOccurs="1" name="ComplexDocument" type="interop:ComplexDocument"/> + </xsd:sequence> + </xsd:complexType> + </xsd:element> + + </xsd:schema> + + </types> + + <message name="SingleTagSoapIn"> + <part name="parameters" element="tns:SingleTag"/> + </message> + <message name="SingleTagSoapOut"> + <part name="outputDoc" element="tns:SingleTagResponse"/> + </message> + <message name="SimpleDocumentSoapIn"> + <part name="parameters" element="tns:SimpleDocument"/> + </message> + <message name="SimpleDocumentSoapOut"> + <part name="outputDoc" element="tns:SimpleDocumentResponse"/> + </message> + <message name="ComplexDocumentSoapIn"> + <part name="parameters" element="tns:ComplexDocument"/> + </message> + <message name="ComplexDocumentSoapOut"> + <part name="outputDoc" element="tns:ComplexDocumentResponse"/> + </message> + + <portType name="DocTestPortType"> + + <operation name="SingleTag"> + <input message="tns:SingleTagSoapIn"/> + <output message="tns:SingleTagSoapOut"/> + </operation> + <operation name="SimpleDocument"> + <input message="tns:SimpleDocumentSoapIn"/> + <output message="tns:SimpleDocumentSoapOut"/> + </operation> + <operation name="ComplexDocument"> + <input message="tns:ComplexDocumentSoapIn"/> + <output message="tns:ComplexDocumentSoapOut"/> + </operation> + + </portType> + + <binding name="doc_test_binding" type="tns:DocTestPortType"> + <soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/> + + <operation name="SingleTag"> + <soap:operation soapAction="http://soapinterop.org/SingleTag"/> + <input> + <soap:body use="literal"/> + </input> + <output> + <soap:body use="literal"/> + </output> + </operation> + + <operation name="SimpleDocument"> + <soap:operation soapAction="http://soapinterop.org/SimpleDocument"/> + <input> + <soap:body use="literal"/> + </input> + <output> + <soap:body use="literal"/> + </output> + </operation> + + <operation name="ComplexDocument"> + <soap:operation soapAction="http://soapinterop.org/ComplexDocument"/> + <input> + <soap:body use="literal"/> + </input> + <output> + <soap:body use="literal"/> + </output> + </operation> + </binding> + + <service name="interopDocSvc"> + + <port name="interopDocPort" binding="tns:doc_test_binding"> + <soap:address location="http://www.whitemesa.net/interopdoc"/> + </port> + + </service> + +</definitions> diff --git a/sca-java-1.x/branches/sca-java-1.6.2/tools/java2wsdl/src/test/resources/sequences.xsd b/sca-java-1.x/branches/sca-java-1.6.2/tools/java2wsdl/src/test/resources/sequences.xsd new file mode 100644 index 0000000000..a565f3fa65 --- /dev/null +++ b/sca-java-1.x/branches/sca-java-1.6.2/tools/java2wsdl/src/test/resources/sequences.xsd @@ -0,0 +1,100 @@ +<?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. + --> +<xsd:schema xmlns:seq="http://www.example.com/sequences" + xmlns:xsd="http://www.w3.org/2001/XMLSchema" + targetNamespace="http://www.example.com/sequences"> + + <xsd:element name="mixedStockQuote" type="seq:MixedQuote" /> + <xsd:element name="rc" type="seq:RepeatingChoice" /> + <xsd:element name="mrc" type="seq:MixedRepeatingChoice" /> + <xsd:element name="rc2" type="seq:TwoRCs" /> + <xsd:element name="mrc2" type="seq:TwoRCsMixed" /> + + + + <xsd:complexType mixed="true" name="MixedQuote"> + <xsd:sequence> + <xsd:element name="symbol" type="xsd:string" /> + <xsd:element name="companyName" type="xsd:string" /> + <xsd:element name="price" type="xsd:decimal" /> + <xsd:element name="open1" type="xsd:decimal" /> + <xsd:element name="high" type="xsd:decimal" /> + <xsd:element name="low" type="xsd:decimal" /> + <xsd:element name="volume" type="xsd:double" /> + <xsd:element name="change1" type="xsd:double" /> + <xsd:element maxOccurs="unbounded" minOccurs="0" + name="quotes" type="seq:MixedQuote" /> + </xsd:sequence> + </xsd:complexType> + + + <xsd:complexType name="RepeatingChoice"> + <xsd:choice maxOccurs="unbounded" minOccurs="0"> + <xsd:element name="a" type="xsd:string" /> + <xsd:element name="b" type="xsd:int" /> + </xsd:choice> + </xsd:complexType> + + + <xsd:complexType mixed="true" name="MixedRepeatingChoice"> + <xsd:choice maxOccurs="unbounded" minOccurs="0"> + <xsd:element name="a" type="xsd:string" /> + <xsd:element name="b" type="xsd:int" /> + </xsd:choice> + </xsd:complexType> + + + <xsd:complexType name="TwoRCs"> + <xsd:sequence> + + <xsd:choice maxOccurs="unbounded" minOccurs="0"> + <xsd:element name="a" type="xsd:string" /> + <xsd:element name="b" type="xsd:int" /> + </xsd:choice> + + <xsd:element name="split" type="xsd:string" /> + + <xsd:choice maxOccurs="unbounded" minOccurs="0"> + <xsd:element name="y" type="xsd:string" /> + <xsd:element name="z" type="xsd:int" /> + </xsd:choice> + + </xsd:sequence> + </xsd:complexType> + + <xsd:complexType mixed="true" name="TwoRCsMixed"> + <xsd:sequence> + + <xsd:choice maxOccurs="unbounded" minOccurs="0"> + <xsd:element name="a" type="xsd:string" /> + <xsd:element name="b" type="xsd:int" /> + </xsd:choice> + + <xsd:element name="split" type="xsd:string" /> + + <xsd:choice maxOccurs="unbounded" minOccurs="0"> + <xsd:element name="y" type="xsd:string" /> + <xsd:element name="z" type="xsd:int" /> + </xsd:choice> + + </xsd:sequence> + </xsd:complexType> + +</xsd:schema> diff --git a/sca-java-1.x/branches/sca-java-1.6.2/tools/maven/maven-ant-generator/LICENSE b/sca-java-1.x/branches/sca-java-1.6.2/tools/maven/maven-ant-generator/LICENSE new file mode 100644 index 0000000000..8aa906c321 --- /dev/null +++ b/sca-java-1.x/branches/sca-java-1.6.2/tools/maven/maven-ant-generator/LICENSE @@ -0,0 +1,205 @@ + + 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-1.x/branches/sca-java-1.6.2/tools/maven/maven-ant-generator/NOTICE b/sca-java-1.x/branches/sca-java-1.6.2/tools/maven/maven-ant-generator/NOTICE new file mode 100644 index 0000000000..ad2ba40961 --- /dev/null +++ b/sca-java-1.x/branches/sca-java-1.6.2/tools/maven/maven-ant-generator/NOTICE @@ -0,0 +1,6 @@ +${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-1.x/branches/sca-java-1.6.2/tools/maven/maven-ant-generator/pom.xml b/sca-java-1.x/branches/sca-java-1.6.2/tools/maven/maven-ant-generator/pom.xml new file mode 100644 index 0000000000..c7ada92f3a --- /dev/null +++ b/sca-java-1.x/branches/sca-java-1.6.2/tools/maven/maven-ant-generator/pom.xml @@ -0,0 +1,64 @@ +<?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-sca-maven-tools</artifactId> + <version>1.6.1-SNAPSHOT</version> + <relativePath>../pom.xml</relativePath> + </parent> + <artifactId>tuscany-maven-ant-generator</artifactId> + <packaging>maven-plugin</packaging> + <name>Apache Tuscany SCA Ant Build Generator Maven Plugin</name> + + <dependencies> + <dependency> + <groupId>org.apache.maven</groupId> + <artifactId>maven-plugin-api</artifactId> + <version>2.0.5</version> + </dependency> + + <dependency> + <groupId>org.apache.maven</groupId> + <artifactId>maven-project</artifactId> + <version>2.0.5</version> + </dependency> + + <dependency> + <groupId>org.apache.maven</groupId> + <artifactId>maven-settings</artifactId> + <version>2.0.5</version> + </dependency> + + <dependency> + <groupId>org.apache.maven</groupId> + <artifactId>maven-artifact</artifactId> + <version>2.0.5</version> + </dependency> + + <dependency> + <groupId>org.apache.maven</groupId> + <artifactId>maven-model</artifactId> + <version>2.0.5</version> + </dependency> + + </dependencies> +</project> diff --git a/sca-java-1.x/branches/sca-java-1.6.2/tools/maven/maven-ant-generator/src/main/java/org/apache/tuscany/sca/tools/ant/generator/plugin/AntGeneratorMojo.java b/sca-java-1.x/branches/sca-java-1.6.2/tools/maven/maven-ant-generator/src/main/java/org/apache/tuscany/sca/tools/ant/generator/plugin/AntGeneratorMojo.java new file mode 100644 index 0000000000..bffaea8e11 --- /dev/null +++ b/sca-java-1.x/branches/sca-java-1.6.2/tools/maven/maven-ant-generator/src/main/java/org/apache/tuscany/sca/tools/ant/generator/plugin/AntGeneratorMojo.java @@ -0,0 +1,628 @@ +/* + * 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.tools.ant.generator.plugin; + +import java.io.File; +import java.io.FileNotFoundException; +import java.io.FileOutputStream; +import java.io.PrintWriter; +import java.util.ArrayList; +import java.util.Collections; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import org.apache.maven.artifact.Artifact; +import org.apache.maven.artifact.factory.ArtifactFactory; +import org.apache.maven.artifact.repository.ArtifactRepository; +import org.apache.maven.artifact.resolver.ArtifactResolver; +import org.apache.maven.model.FileSet; +import org.apache.maven.model.Plugin; +import org.apache.maven.model.PluginExecution; +import org.apache.maven.plugin.AbstractMojo; +import org.apache.maven.plugin.MojoExecutionException; +import org.apache.maven.project.MavenProject; +import org.apache.maven.settings.Settings; +import org.codehaus.plexus.util.xml.Xpp3Dom; + +/** + * A Maven plugin that generates an Ant build.xml file for Tuscany SCA samples. + * + * Build dependencies and additional build steps like WSDL2Java for example are + * automatically determined from the pom.xml file describing the module's Maven build. + * + * @version $Rev$ $Date$ + * @goal generate + * @phase generate-sources + * @requiresDependencyResolution test + * @description Generate Ant build script for an SCA project + */ +public class AntGeneratorMojo extends AbstractMojo { + + /** + * The project to generate an Ant build for. + * + * @parameter expression="${project}" + * @required + */ + private MavenProject project; + + /** + * Used for resolving artifacts + * + * @component + */ + private ArtifactResolver resolver; + + /** + * Factory for creating artifact objects + * + * @component + */ + private ArtifactFactory factory; + + /** + * The local repository where the artifacts are located + * + * @parameter expression="${localRepository}" + * @required + */ + private ArtifactRepository localRepository; + + /** + * The remote repositories where artifacts are located + * + * @parameter expression="${project.remoteArtifactRepositories}" + */ + private List remoteRepositories; + + /** + * The current user system settings for use in Maven. + * + * @parameter expression="${settings}" + * @required + * @readonly + */ + private Settings settings; + + /** + * The main class name. + * @parameter + */ + private String mainClass; + + /** + * If set true then only the dependency file is created. The dependency + * file can then be included in a hand generated build.xml file + * @parameter + */ + private Boolean buildDependencyFileOnly; + + /** + * The build.xml file to generate. + * @parameter expression="${basedir}/build.xml" + */ + private String buildFile; + + /** + * The build-dependency.xml file to generate. + * @parameter expression="${basedir}/build-dependency.xml" + */ + private String buildDependencyFile; + + /** + * The path to the root dir so that build.xml files can be generated at any level + * in the distribution hierarchy + * @parameter expression="../.." + */ + private String pathToRootDir; + + /** + * Additional run targets and corresponding class names + * @parameter + */ + private Map<String, String> runTargets; + + /** + * Set this to true if test source needs to be compiled + * @parameter + */ + private boolean testSource; + + /** + * Additional jar files to be produced + * @parameter + */ + private List<JarFile> jarFiles; + + public void execute() throws MojoExecutionException { + if ((buildDependencyFileOnly != null) && + (buildDependencyFileOnly == true)){ + generateBuildDependencyFile(); + } else { + generateBuildFile(); + } + } + + /** + * Generate Ant build dependency XML file + */ + private void generateBuildDependencyFile() throws MojoExecutionException { + + getLog().info("Generating " + buildDependencyFile); + + // Open the target build-dependency.xml file + File targetFile = new File(buildDependencyFile); + PrintWriter pw; + try { + pw = new PrintWriter(new FileOutputStream(targetFile)); + } catch (FileNotFoundException e) { + throw new MojoExecutionException(e.toString()); + } + + // Generate the Apache license header + generateLicenseHeader(pw); + + // Generate Ant filesets representing the build dependencies + generateBuildDependencies(pw); + + pw.close(); + } + + /** + * Generate Ant build XML file + */ + private void generateBuildFile() throws MojoExecutionException { + + getLog().info("Generating " + buildFile); + + // Open the target build.xml file + File targetFile = new File(buildFile); + PrintWriter pw; + try { + pw = new PrintWriter(new FileOutputStream(targetFile)); + } catch (FileNotFoundException e) { + throw new MojoExecutionException(e.toString()); + } + + // Determine the project packaging + String packaging = project.getPackaging().toLowerCase(); + + // Generate the Apache license header + generateLicenseHeader(pw); + + pw.println("<project name=\"" + project.getArtifactId() + "\" default=\"compile\">"); + pw.println(); + + // Generate the compile target + int base = project.getBasedir().toString().length() + 1; + pw.println(" <target name=\"compile\">"); + pw.println(" <mkdir dir=\"target/classes\"/>"); + + // Generate any pre-compilation tasks + generatePreCompileTasks(pw); + + // Generate the compile task + pw.println(" <javac destdir=\"target/classes\" debug=\"on\" source=\"1.5\" target=\"1.5\">"); + for (String source: (List<String>)project.getCompileSourceRoots()) { + if (source.length() > base) { + source = source.substring(base); + } else { + source = "."; + } + pw.println(" <src path=\"" + source + "\"/>"); + } + pw.println(" <classpath>"); + pw.println(" <fileset refid=\"tuscany.jars\"/>"); + pw.println(" <fileset refid=\"3rdparty.jars\"/>"); + pw.println(" </classpath>"); + pw.println(" </javac>"); + pw.println(" <copy todir=\"target/classes\">"); + for (FileSet resource: (List<FileSet>)project.getResources()) { + String source = resource.getDirectory(); + if (source.length() > base) { + source = source.substring(base); + + if (source.equals(".")){ + pw.println(" <fileset dir=\".\" includes=\"*\" excludes=\"src, target, pom.xml, build.xml\"/>"); + } else { + pw.println(" <fileset dir=\"" + source + "\"/>"); + } + } else { + if (project.getResources().size() > 1) { + break; + } + pw.println(" <fileset dir=\".\" excludes=\"**/*.java, **/.*/**, pom.xml, build*.xml, target/**\"/>"); + source = "."; + } + } + pw.println(" </copy>"); + + // Compile test source using code cut and pasted from above + if (testSource) { + pw.println(" <mkdir dir=\"target/test-classes\"/>"); + pw.println(" <javac destdir=\"target/test-classes\" debug=\"on\" source=\"1.5\" target=\"1.5\">"); + for (String source: (List<String>)project.getTestCompileSourceRoots()) { + if (source.length() > base) { + source = source.substring(base); + } else { + source = "."; + } + pw.println(" <src path=\"" + source + "\"/>"); + } + pw.println(" <classpath>"); + pw.println(" <fileset dir=\"target/classes\"/>"); + pw.println(" <fileset refid=\"tuscany.jars\"/>"); + pw.println(" <fileset refid=\"3rdparty.jars\"/>"); + pw.println(" </classpath>"); + pw.println(" </javac>"); + pw.println(" <copy todir=\"target/test-classes\">"); + for (FileSet resource: (List<FileSet>)project.getTestResources()) { + String source = resource.getDirectory(); + if (source.length() > base) { + source = source.substring(base); + + if (source.equals(".")){ + pw.println(" <fileset dir=\".\" includes=\"*\" excludes=\"src, target, pom.xml, build.xml\"/>"); + } else { + pw.println(" <fileset dir=\"" + source + "\"/>"); + } + } else { + if (project.getTestResources().size() > 1) { + break; + } + pw.println(" <fileset dir=\".\" excludes=\"**/*.java, **/.*/**, pom.xml, build*.xml, target/**\"/>"); + source = "."; + } + } + pw.println(" </copy>"); + } + + // Build a JAR + if (packaging.equals("jar")) { + pw.println(" <jar destfile=\"target/" + project.getArtifactId() + ".jar\" basedir=\"target/classes\">"); + pw.println(" <manifest>"); + if (mainClass != null) { + pw.println(" <attribute name=\"Main-Class\" value=\"" + mainClass + "\"/>"); + } + pw.println(" </manifest>"); + pw.println(" </jar>"); + + } else if (packaging.equals("war")) { + + // Build a WAR + pw.println(" <war destfile=\"target/" + project.getArtifactId() + ".war\" webxml=\"src/main/webapp/WEB-INF/web.xml\">"); + pw.println(" <fileset dir=\"src/main/webapp\"/>"); + pw.println(" <lib refid=\"tuscany.jars\"/>"); + pw.println(" <lib refid=\"3rdparty.jars\"/>"); + pw.println(" <classes dir=\"target/classes\"/>"); + pw.println(" </war>"); + } + + // Build additional JARs + if (jarFiles != null) { + for (JarFile jarFile: jarFiles) { + pw.println(" <jar destfile=\"" + jarFile.getDestfile() + "\">"); + if (jarFile.getFilesets() != null) { + for (String fileset: jarFile.getFilesets()) { + pw.println(" <fileset " + fileset + "/>"); + } + } + pw.println(" </jar>"); + } + } + + // Finish the compile target + pw.println(" </target>"); + pw.println(); + + + // Generate a package target alongside the compile target + // Tuscany SCA samples use "package" as the target for webapps + pw.println(" <target name=\"package\" depends=\"compile\"/>"); + pw.println(); + + // Generate the run target + if (mainClass != null) { + pw.println(" <target name=\"run\">"); + pw.println(" <java classname=\"" + mainClass + "\" fork=\"true\">"); + pw.println(" <classpath>"); + pw.println(" <pathelement location=\"target/" + project.getArtifactId() + ".jar\"/>"); + pw.println(" <fileset refid=\"tuscany.jars\"/>"); + pw.println(" <fileset refid=\"3rdparty.jars\"/>"); + pw.println(" </classpath>"); + pw.println(" </java>"); + pw.println(" </target>"); + pw.println(); + } + + // Generate other run targets + if (runTargets != null) { + for (Map.Entry<String, String> element: runTargets.entrySet()) { + pw.println(" <target name=\"" + element.getKey() + "\">"); + pw.println(" <java classname=\"" + element.getValue() + "\" fork=\"true\">"); + pw.println(" <classpath>"); + pw.println(" <pathelement location=\"target/" + project.getArtifactId() + ".jar\"/>"); + pw.println(" <fileset refid=\"tuscany.jars\"/>"); + pw.println(" <fileset refid=\"3rdparty.jars\"/>"); + pw.println(" </classpath>"); + pw.println(" </java>"); + pw.println(" </target>"); + pw.println(); + } + } + + // Generate the clean target + pw.println(" <target name=\"clean\">"); + pw.println(" <delete dir=\"target\" includeemptydirs=\"true\"/>"); + pw.println(" </target>"); + pw.println(); + + // Generate Ant filesets representing the build dependencies + generateBuildDependencies(pw); + + pw.println("</project>"); + pw.close(); + } + + /** + * Generate Ant filesets representing the build dependencies. + * @param pw PrintWriter to write to + */ + private void generateBuildDependencies(PrintWriter pw) { + + // Determine the module dependencies + List<String> tuscanyModules = new ArrayList<String>(); + List<String> otherModules = new ArrayList<String>(); + for (Artifact artifact: (List<Artifact>)project.getRuntimeArtifacts()) { + if (artifact.getGroupId().startsWith("org.apache.tuscany.sca")) { + tuscanyModules.add(artifact.getFile().getName()); + } else { + otherModules.add(artifact.getFile().getName()); + } + } + + // Sort lists of modules, making output deterministic + Collections.sort(tuscanyModules); + Collections.sort(otherModules); + + // Generate filesets for the tuscany and 3rd party dependencies + pw.println(" <fileset id=\"tuscany.jars\" dir=\"" + pathToRootDir + "/modules\">"); + for (String name: tuscanyModules) { + pw.println(" <include name=\"" + name +"\"/>"); + } + pw.println(" </fileset>"); + pw.println(" <fileset id=\"3rdparty.jars\" dir=\"" + pathToRootDir + "/lib\">"); + for (String name: otherModules) { + pw.println(" <include name=\"" + name +"\"/>"); + } + pw.println(" </fileset>"); + pw.println(); + } + + /** + * Extract plugin execution configurations out of the Maven model. This handles + * nested configurations with a base configuration and a collection of nested + * configuration elements, for example: + * <configuration> + * <schemaFiles> + * <configuration> + * <fileName>x.wsdl</fileName> + * </configuration> + * <configuration> + * <fileName>y.wsdl</fileName> + * </configuration> + * </schemaFiles> + * <noNotification>true</noNotification> + * </configuration> + * + * @param execution Maven plugin execution model + * @return a list of maps containing the plugin configuration key value pairs + */ + private static List<Map<String, String>> pluginConfigurations(PluginExecution execution) { + List<Map<String, String>> configurations = new ArrayList<Map<String,String>>(); + Map<String, String> topConfiguration = new HashMap<String, String>(); + + Xpp3Dom dom = (Xpp3Dom)execution.getConfiguration(); + for (Xpp3Dom element: dom.getChildren()) { + if (element.getChildCount() != 0) { + // Handle nested configuration element, create a child configuration + // for each + for (Xpp3Dom childConfigurationElement: element.getChildren()) { + Map<String, String> childConfiguration = new HashMap<String, String>(); + for (Xpp3Dom childElement: childConfigurationElement.getChildren()) { + childConfiguration.put(childElement.getName(), childElement.getValue()); + } + configurations.add(childConfiguration); + } + } else { + // Handle top level key value pair element + topConfiguration.put(element.getName(), element.getValue()); + } + } + // Return the top configuration or the child configurations merged + // with the top one + if (configurations.isEmpty()) { + configurations.add(topConfiguration); + } else { + for (Map<String, String> configuration: configurations) { + configuration.putAll(topConfiguration); + } + } + return configurations; + } + + /** + * Generate Ant tasks for the pre-compilation generation plugins + * used in the Maven module. + * @param pw PrintWriter to write to + * @return list of directories containing generated source to compile + */ + private void generatePreCompileTasks(PrintWriter pw) { + String baseDir = project.getBasedir().getAbsolutePath() + '/'; + + List<Plugin> plugins = (List<Plugin>)project.getBuildPlugins(); + for (Plugin plugin: plugins) { + + // Generate Ant task equivalent to the Tuscany SDO plugin + if ("org.apache.tuscany.sdo".equals(plugin.getGroupId()) && "tuscany-sdo-plugin".equals(plugin.getArtifactId())) { + for (PluginExecution execution: (List<PluginExecution>)plugin.getExecutions()) { + for (Map<String, String> configuration: pluginConfigurations(execution)) { + + pw.println(" <java classname=\"org.apache.tuscany.sdo.generate.XSD2JavaGenerator\" fork=\"true\">"); + + // Generate the various code generation options + for (Map.Entry<String, String> element: configuration.entrySet()) { + String key = element.getKey(); + String value = element.getValue(); + if (key.equals("schemaNamespace")) { + pw.println(" <arg value=\"-schemaNamespace\"/>"); + pw.println(" <arg value=\"" + value + "\"/>"); + } + if (key.equals("javaPackage")) { + pw.println(" <arg value=\"-javaPackage\"/>"); + pw.println(" <arg value=\"" + value + "\"/>"); + } + if (key.equals("prefix")) { + pw.println(" <arg value=\"-prefix\"/>"); + pw.println(" <arg value=\"" + value + "\"/>"); + } + if (key.equals("noInterfaces") && "true".equals(value)) { + pw.println(" <arg value=\"-noInterfaces\"/>"); + } + if (key.equals("noNotification") && "true".equals(value)) { + pw.println(" <arg value=\"-noNotification\"/>"); + } + if (key.equals("noContainer") && "true".equals(value)) { + pw.println(" <arg value=\"-noContainment\"/>"); + } + if (key.equals("noUnsettable") && "true".equals(value)) { + pw.println(" <arg value=\"-noUnsettable\"/>"); + } + } + + // Generate target directory parameter + String targetDirectory = configuration.get("targetDirectory"); + if (targetDirectory == null) { + targetDirectory = "target/sdo-source"; + } else if (targetDirectory.startsWith(baseDir)) { + targetDirectory = targetDirectory.substring(baseDir.length()); + } + pw.println(" <arg value=\"-targetDirectory\"/>"); + pw.println(" <arg value=\"" + targetDirectory + "\"/>"); + + // Generate schema file parameter + String schemaFile = configuration.get("schemaFile"); + if (schemaFile == null) { + schemaFile = configuration.get("fileName"); + } + if (schemaFile != null) { + if (schemaFile.startsWith(baseDir)) { + schemaFile = schemaFile.substring(baseDir.length()); + } + pw.println(" <arg value=\"" + schemaFile + "\"/>"); + } + + pw.println(" <classpath>"); + pw.println(" <fileset refid=\"tuscany.jars\"/>"); + pw.println(" <fileset refid=\"3rdparty.jars\"/>"); + pw.println(" </classpath>"); + pw.println(" </java>"); + } + } + } + + // Generate Ant task equivalent to the Tuscany WSDL2Java plugin + else if ("org.apache.tuscany.sca".equals(plugin.getGroupId()) && "tuscany-maven-wsdl2java".equals(plugin.getArtifactId())) { + for (PluginExecution execution: (List<PluginExecution>)plugin.getExecutions()) { + for (Map<String, String> configuration: pluginConfigurations(execution)) { + + pw.println(" <java classname=\"org.apache.tuscany.tools.wsdl2java.generate.WSDL2JavaGenerator\" fork=\"true\">"); + + // Generate the various code generation options + for (Map.Entry<String, String> element: configuration.entrySet()) { + String key = element.getKey(); + String value = element.getValue(); + if (key.equals("javaPackage")) { + pw.println(" <arg value=\"-javaPackage\"/>"); + pw.println(" <arg value=\"" + value + "\"/>"); + } + } + + // Generate target directory parameter + String targetDirectory = configuration.get("targetDirectory"); + if (targetDirectory == null) { + targetDirectory = "target/wsdl2java-source"; + } else if (targetDirectory.startsWith(baseDir)) { + targetDirectory = targetDirectory.substring(baseDir.length()); + } + pw.println(" <arg value=\"-targetDirectory\"/>"); + pw.println(" <arg value=\"" + targetDirectory + "\"/>"); + + // Generate WSDL file parameter + String wsdlFile = configuration.get("wsdlFile"); + if (wsdlFile == null) { + wsdlFile = configuration.get("fileName"); + } + if (wsdlFile != null) { + if (wsdlFile.startsWith(baseDir)) { + wsdlFile = wsdlFile.substring(baseDir.length()); + } + pw.println(" <arg value=\"" + wsdlFile + "\"/>"); + } + + pw.println(" <classpath>"); + pw.println(" <fileset refid=\"tuscany.jars\"/>"); + pw.println(" <fileset refid=\"3rdparty.jars\"/>"); + pw.println(" </classpath>"); + pw.println(" </java>"); + } + } + } + } + } + + /** + * Generate license header. + * + * @param pw PrintWriter to write to + */ + private void generateLicenseHeader(PrintWriter pw) { + pw.println("<!--"); + pw.println(" * Licensed to the Apache Software Foundation (ASF) under one"); + pw.println(" * or more contributor license agreements. See the NOTICE file"); + pw.println(" * distributed with this work for additional information"); + pw.println(" * regarding copyright ownership. The ASF licenses this file"); + pw.println(" * to you under the Apache License, Version 2.0 (the"); + pw.println(" * \"License\"); you may not use this file except in compliance"); + pw.println(" * with the License. You may obtain a copy of the License at"); + pw.println(" * "); + pw.println(" * http://www.apache.org/licenses/LICENSE-2.0"); + pw.println(" * "); + pw.println(" * Unless required by applicable law or agreed to in writing,"); + pw.println(" * software distributed under the License is distributed on an"); + pw.println(" * \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY"); + pw.println(" * KIND, either express or implied. See the License for the"); + pw.println(" * specific language governing permissions and limitations"); + pw.println(" * under the License."); + pw.println("-->"); + pw.println(); + } + +}
\ No newline at end of file diff --git a/sca-java-1.x/branches/sca-java-1.6.2/tools/maven/maven-ant-generator/src/main/java/org/apache/tuscany/sca/tools/ant/generator/plugin/JarFile.java b/sca-java-1.x/branches/sca-java-1.6.2/tools/maven/maven-ant-generator/src/main/java/org/apache/tuscany/sca/tools/ant/generator/plugin/JarFile.java new file mode 100644 index 0000000000..3d8bc581cb --- /dev/null +++ b/sca-java-1.x/branches/sca-java-1.6.2/tools/maven/maven-ant-generator/src/main/java/org/apache/tuscany/sca/tools/ant/generator/plugin/JarFile.java @@ -0,0 +1,46 @@ +/*
+ * 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.tools.ant.generator.plugin;
+
+import java.util.List;
+
+public class JarFile {
+
+ /**
+ * The destfile attribute of the generated <jar> task
+ *
+ * @parameter
+ */
+ private String destfile;
+
+ /**
+ * The filesets to be included in the generated <jar> task
+ *
+ * @parameter
+ */
+ private List filesets;
+
+ public String getDestfile() {
+ return destfile;
+ }
+
+ public List<String> getFilesets() {
+ return filesets;
+ }
+}
diff --git a/sca-java-1.x/branches/sca-java-1.6.2/tools/maven/maven-dependency-lister/LICENSE b/sca-java-1.x/branches/sca-java-1.6.2/tools/maven/maven-dependency-lister/LICENSE new file mode 100644 index 0000000000..6e529a25c4 --- /dev/null +++ b/sca-java-1.x/branches/sca-java-1.6.2/tools/maven/maven-dependency-lister/LICENSE @@ -0,0 +1,205 @@ +
+ 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-1.x/branches/sca-java-1.6.2/tools/maven/maven-dependency-lister/NOTICE b/sca-java-1.x/branches/sca-java-1.6.2/tools/maven/maven-dependency-lister/NOTICE new file mode 100644 index 0000000000..9ddba06a32 --- /dev/null +++ b/sca-java-1.x/branches/sca-java-1.6.2/tools/maven/maven-dependency-lister/NOTICE @@ -0,0 +1,6 @@ +${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-1.x/branches/sca-java-1.6.2/tools/maven/maven-dependency-lister/README b/sca-java-1.x/branches/sca-java-1.6.2/tools/maven/maven-dependency-lister/README new file mode 100644 index 0000000000..d53760029f --- /dev/null +++ b/sca-java-1.x/branches/sca-java-1.6.2/tools/maven/maven-dependency-lister/README @@ -0,0 +1,46 @@ +Tuscany SCA Dependency Lister
+=============================
+
+Makes use of the extension Maven dependency support to list out all of the
+dependencis in the module where the plugin is used. The module is
+analysed and a report (dependency.txt) is written into the modules directory including
+each dependency and the path through the maven transitive dependencies that caused
+the original dependency to be included. For example, Here is a line which lists
+a a jar dependency, the phase in which it was found, the module being processed
+and he path that causes the dependency
+
+DEPENDENCY PHASE MODULE PATH TO DEPENDENCY
+jaxb-api-2.1.jar compile Apache Tuscany SCA Atom+RSS Feed Aggregator Sample Webapp tuscany-host-webapp-1.1-incubating-SNAPSHOT tuscany-host-embedded-1.1-incubating-SNAPSHOT tuscany-core-databinding-1.1-incubating-SNAPSHOT tuscany-databinding-jaxb-1.1-incubating-SNAPSHOT jaxb-api-2.1
+
+It is often convenient to further analyse these entries using the spreadsheet of your
+choice so the columns are tab separated to allow for easy conversion.
+
+The plugin can be included in a module using the following,
+
+<plugin>
+ <groupId>org.apache.tuscany.sca</groupId>
+ <artifactId>tuscany-maven-dependency-lister</artifactId>
+ <version>1.1-incubating-SNAPSHOT</version>
+ <executions>
+ <execution>
+ <goals>
+ <goal>execute</goal>
+ </goals>
+ </execution>
+ </executions>
+</plugin>
+
+If you include this at the top level of you project and have it run for each model you
+will get a report for each model independently. For example, in the Tuscany SCA project
+the plugin is included in the pom.xml files at the sca level under the profile
+"dependecies" so to generate a dependencies report for the Tuscany SCA project:
+
+cd sca
+mvn -o -Pdependencies -Dmaven.test.skip=true
+
+Once you have dependency.txt files in your modules
+the you favourite command line tools can be used to concatenate and sort them
+to get a full picture of the dependencies in you project, for example, with linux you
+could do,
+
+find . -name dependency.txt -exec cat '{}' >> deptotal.txt \;
diff --git a/sca-java-1.x/branches/sca-java-1.6.2/tools/maven/maven-dependency-lister/pom.xml b/sca-java-1.x/branches/sca-java-1.6.2/tools/maven/maven-dependency-lister/pom.xml new file mode 100644 index 0000000000..2c00a7ed05 --- /dev/null +++ b/sca-java-1.x/branches/sca-java-1.6.2/tools/maven/maven-dependency-lister/pom.xml @@ -0,0 +1,71 @@ +<?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-sca-maven-tools</artifactId>
+ <version>1.6.1-SNAPSHOT</version>
+ <relativePath>../pom.xml</relativePath>
+ </parent>
+ <artifactId>tuscany-maven-dependency-lister</artifactId>
+ <packaging>maven-plugin</packaging>
+ <name>Apache Tuscany SCA Dependency Lister Maven Plugin</name>
+
+ <dependencies>
+ <dependency>
+ <groupId>org.apache.maven</groupId>
+ <artifactId>maven-plugin-api</artifactId>
+ <version>2.0.7</version>
+ </dependency>
+
+ <dependency>
+ <groupId>org.apache.maven</groupId>
+ <artifactId>maven-project</artifactId>
+ <version>2.0.7</version>
+ </dependency>
+
+ <dependency>
+ <groupId>org.apache.maven</groupId>
+ <artifactId>maven-settings</artifactId>
+ <version>2.0.7</version>
+ </dependency>
+
+ <dependency>
+ <groupId>org.apache.maven</groupId>
+ <artifactId>maven-artifact</artifactId>
+ <version>2.0.7</version>
+ </dependency>
+
+ <dependency>
+ <groupId>org.apache.maven</groupId>
+ <artifactId>maven-model</artifactId>
+ <version>2.0.7</version>
+ </dependency>
+
+ <dependency>
+ <groupId>org.apache.maven.shared</groupId>
+ <artifactId>maven-dependency-tree</artifactId>
+ <version>1.0</version>
+ </dependency>
+
+
+ </dependencies>
+</project>
diff --git a/sca-java-1.x/branches/sca-java-1.6.2/tools/maven/maven-dependency-lister/src/main/java/org/apache/tuscany/tools/sca/dependency/lister/plugin/DependencyListerMojo.java b/sca-java-1.x/branches/sca-java-1.6.2/tools/maven/maven-dependency-lister/src/main/java/org/apache/tuscany/tools/sca/dependency/lister/plugin/DependencyListerMojo.java new file mode 100644 index 0000000000..b904ac4804 --- /dev/null +++ b/sca-java-1.x/branches/sca-java-1.6.2/tools/maven/maven-dependency-lister/src/main/java/org/apache/tuscany/tools/sca/dependency/lister/plugin/DependencyListerMojo.java @@ -0,0 +1,198 @@ +/*
+ * 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.tools.sca.dependency.lister.plugin;
+
+import java.io.File;
+import java.io.FileNotFoundException;
+import java.io.FileOutputStream;
+import java.io.PrintWriter;
+import java.util.Iterator;
+import java.util.List;
+
+import org.apache.maven.artifact.Artifact;
+import org.apache.maven.artifact.factory.ArtifactFactory;
+import org.apache.maven.artifact.metadata.ArtifactMetadataSource;
+import org.apache.maven.artifact.repository.ArtifactRepository;
+import org.apache.maven.artifact.resolver.ArtifactCollector;
+import org.apache.maven.artifact.resolver.ArtifactResolver;
+import org.apache.maven.plugin.AbstractMojo;
+import org.apache.maven.plugin.MojoExecutionException;
+import org.apache.maven.project.MavenProject;
+import org.apache.maven.project.MavenProjectBuilder;
+import org.apache.maven.settings.Settings;
+import org.apache.maven.shared.dependency.tree.DependencyNode;
+import org.apache.maven.shared.dependency.tree.DependencyTree;
+import org.apache.maven.shared.dependency.tree.DependencyTreeBuilder;
+import org.apache.maven.shared.dependency.tree.DependencyTreeBuilderException;
+
+/**
+ * @version $Rev: 588816 $ $Date: 2007-10-27 01:22:38 +0100 (Sat, 27 Oct 2007) $
+ * @goal execute
+ * @phase generate-sources
+ * @requiresDependencyResolution test
+ * @description List dependencies for an SCA project
+ */
+public class DependencyListerMojo extends AbstractMojo {
+ /**
+ * The project to create a build for.
+ *
+ * @parameter expression="${project}"
+ * @required
+ */
+ private MavenProject project;
+
+ /**
+ * Used for resolving artifacts
+ *
+ * @component
+ */
+ private ArtifactResolver artifactResolver;
+
+ /**
+ * Factory for creating artifact objects
+ *
+ * @component
+ */
+ private ArtifactFactory artifactFactory;
+
+ /**
+ * @component
+ */
+ private ArtifactMetadataSource artifactMetadataSource;
+
+ /**
+ * @component
+ */
+ private DependencyTreeBuilder dependencyTreeBuilder;
+
+ /**
+ * @component
+ */
+ private ArtifactCollector collector;
+
+ /**
+ * @component
+ */
+ private MavenProjectBuilder mavenProjectBuilder;
+
+ /**
+ * The local repository where the artifacts are located
+ *
+ * @parameter expression="${localRepository}"
+ * @required
+ */
+ private ArtifactRepository localRepository;
+
+ /**
+ * The remote repositories where artifacts are located
+ *
+ * @parameter expression="${project.remoteArtifactRepositories}"
+ */
+ private List remoteRepositories;
+
+ /**
+ * The current user system settings for use in Maven.
+ *
+ * @parameter expression="${settings}"
+ * @required
+ * @readonly
+ */
+ private Settings settings;
+
+
+ /**
+ * The build.xml file to generate.
+ * @parameter expression="${basedir}/target/dependency.txt"
+ */
+ private String buildFile;
+
+ public void execute() throws MojoExecutionException {
+
+ System.out.println("Analysing " + buildFile);
+
+ // Open the target build.xml file
+ File targetFile = new File(buildFile);
+ PrintWriter pw;
+ try {
+ pw = new PrintWriter(new FileOutputStream(targetFile));
+ } catch (FileNotFoundException e) {
+ System.out.println(e.toString());
+ return;
+ }
+
+ DependencyTree dependencyTree;
+
+ try
+ {
+ dependencyTree = dependencyTreeBuilder.buildDependencyTree( project, localRepository, artifactFactory,
+ artifactMetadataSource, collector );
+ }
+ catch ( DependencyTreeBuilderException e )
+ {
+ throw new MojoExecutionException( "Can't build dependency tree", e );
+ }
+
+ // processNode(dependencyTree.getRootNode(), "--", pw);
+
+ for (Artifact artifact: (List<Artifact>)project.getTestArtifacts()) {
+ pw.println( artifact.getFile().getName() + "\t" +
+ artifact.getScope() + "\t" +
+ project.getName() + "\t" +
+ findArtifactPath(dependencyTree.getRootNode(), artifact));
+ }
+
+ pw.close();
+ }
+
+ private void processNode(DependencyNode node, String indent, PrintWriter pw){
+
+ pw.println(indent + node.getArtifact().getScope() + " " + node.getArtifact().toString());
+
+ Iterator it = node.getChildren().iterator();
+ while ( it.hasNext() )
+ {
+ DependencyNode child = (DependencyNode) it.next();
+
+ processNode(child, indent + "--", pw);
+ }
+ }
+
+ private String findArtifactPath(DependencyNode node, Artifact artifact){
+ String path = null;
+
+ Iterator it = node.getChildren().iterator();
+ while ( it.hasNext() && (path == null) )
+ {
+ DependencyNode child = (DependencyNode) it.next();
+
+ if (child.getArtifact().getArtifactId().equals(artifact.getArtifactId())) {
+ path = child.getArtifact().getArtifactId() + "-" + child.getArtifact().getVersion();
+ } else {
+ path = findArtifactPath(child, artifact);
+
+ if (path != null){
+ path = child.getArtifact().getArtifactId() + "-" + child.getArtifact().getVersion() + "\t" + path;
+ }
+ }
+ }
+
+ return path;
+ }
+
+}
\ No newline at end of file diff --git a/sca-java-1.x/branches/sca-java-1.6.2/tools/maven/maven-incremental-build/LICENSE b/sca-java-1.x/branches/sca-java-1.6.2/tools/maven/maven-incremental-build/LICENSE new file mode 100644 index 0000000000..8aa906c321 --- /dev/null +++ b/sca-java-1.x/branches/sca-java-1.6.2/tools/maven/maven-incremental-build/LICENSE @@ -0,0 +1,205 @@ + + 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-1.x/branches/sca-java-1.6.2/tools/maven/maven-incremental-build/NOTICE b/sca-java-1.x/branches/sca-java-1.6.2/tools/maven/maven-incremental-build/NOTICE new file mode 100644 index 0000000000..ad2ba40961 --- /dev/null +++ b/sca-java-1.x/branches/sca-java-1.6.2/tools/maven/maven-incremental-build/NOTICE @@ -0,0 +1,6 @@ +${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-1.x/branches/sca-java-1.6.2/tools/maven/maven-incremental-build/pom.xml b/sca-java-1.x/branches/sca-java-1.6.2/tools/maven/maven-incremental-build/pom.xml new file mode 100644 index 0000000000..177c49bc76 --- /dev/null +++ b/sca-java-1.x/branches/sca-java-1.6.2/tools/maven/maven-incremental-build/pom.xml @@ -0,0 +1,108 @@ +<?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-sca-maven-tools</artifactId> + <version>1.6.1-SNAPSHOT</version> + <relativePath>../pom.xml</relativePath> + </parent> + <artifactId>tuscany-maven-incremental-build</artifactId> + <packaging>maven-plugin</packaging> + <name>Apache Tuscany SCA Incremental Build Generator Maven Plugin</name> + + <dependencies> + <dependency> + <groupId>org.apache.maven</groupId> + <artifactId>maven-plugin-api</artifactId> + <version>2.0.5</version> + </dependency> + + <dependency> + <groupId>org.apache.maven</groupId> + <artifactId>maven-project</artifactId> + <version>2.0.5</version> + </dependency> + + <dependency> + <groupId>org.apache.maven</groupId> + <artifactId>maven-settings</artifactId> + <version>2.0.5</version> + </dependency> + + <dependency> + <groupId>org.apache.maven</groupId> + <artifactId>maven-artifact</artifactId> + <version>2.0.5</version> + </dependency> + + <dependency> + <groupId>org.apache.maven</groupId> + <artifactId>maven-model</artifactId> + <version>2.0.5</version> + </dependency> + + <dependency> + <groupId>org.apache.maven</groupId> + <artifactId>maven-core</artifactId> + <version>2.0.5</version> + </dependency> + + <dependency> + <groupId>org.apache.maven.shared</groupId> + <artifactId>maven-invoker</artifactId> + <version>2.0.7</version> + </dependency> + + <dependency> + <groupId>org.codehaus.plexus</groupId> + <artifactId>plexus-compiler-api</artifactId> + <version>1.5.3</version> + </dependency> + + <dependency> + <groupId>org.codehaus.plexus</groupId> + <artifactId>plexus-compiler-manager</artifactId> + <version>1.5.3</version> + </dependency> + <dependency> + <groupId>org.codehaus.plexus</groupId> + <artifactId>plexus-compiler-javac</artifactId> + <version>1.5.3</version> + <scope>runtime</scope> + </dependency> + + </dependencies> + + <build> + <plugins> + <plugin> + <groupId>org.apache.maven.plugins</groupId> + <artifactId>maven-plugin-plugin</artifactId> + <version>2.5</version> + <configuration> + <goalPrefix>incremental</goalPrefix> + </configuration> + </plugin> + </plugins> + </build> + +</project> diff --git a/sca-java-1.x/branches/sca-java-1.6.2/tools/maven/maven-incremental-build/src/main/java/org/apache/tuscany/sca/tools/incremental/build/plugin/IncrementalBuildMojo.java b/sca-java-1.x/branches/sca-java-1.6.2/tools/maven/maven-incremental-build/src/main/java/org/apache/tuscany/sca/tools/incremental/build/plugin/IncrementalBuildMojo.java new file mode 100644 index 0000000000..3a6870732b --- /dev/null +++ b/sca-java-1.x/branches/sca-java-1.6.2/tools/maven/maven-incremental-build/src/main/java/org/apache/tuscany/sca/tools/incremental/build/plugin/IncrementalBuildMojo.java @@ -0,0 +1,415 @@ +/* + * 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.tools.incremental.build.plugin; + +import java.io.File; +import java.io.IOException; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.HashSet; +import java.util.List; +import java.util.Set; + +import org.apache.maven.artifact.Artifact; +import org.apache.maven.model.Resource; +import org.apache.maven.plugin.AbstractMojo; +import org.apache.maven.plugin.MojoExecutionException; +import org.apache.maven.project.MavenProject; +import org.apache.maven.settings.Settings; +import org.apache.maven.shared.invoker.DefaultInvocationRequest; +import org.apache.maven.shared.invoker.InvocationResult; +import org.apache.maven.shared.invoker.Invoker; +import org.apache.maven.shared.invoker.MavenInvocationException; +import org.codehaus.plexus.util.DirectoryScanner; +import org.codehaus.plexus.util.cli.CommandLineException; + +/** + * @version $Rev$ $Date$ + * @goal build + * @phase validate + * @requiresDependencyResolution test + * @description Incrementally build project modules that depend on modified modules. + */ +public class IncrementalBuildMojo extends AbstractMojo { + + /** + * Keep track of modified projects. + */ + private static Set<String> modifiedProjectIDs = new HashSet<String>(); + + /** + * The current user system settings for use in Maven. + * + * @parameter expression="${settings}" + * @required + * @readonly + */ + private Settings settings; + + /** + * Used to invoke Maven builds. + * + * @component + */ + private Invoker invoker; + + /** + * The target directory of the compiler if fork is true. + * + * @parameter expression="${project.build.directory}" + * @required + * @readonly + */ + private File buildDirectory; + + /** + * The project to create a build for. + * + * @parameter expression="${project}" + * @required + * @readonly + */ + private MavenProject project; + + private File outputFile; + + public void execute() throws MojoExecutionException { + String projectID = id(project); + outputFile = getOutputFile(); + + File testMarkerFile = new File(project.getBasedir().getPath() + "/.test"); + + List<String> goals = new ArrayList<String>(); + String type = project.getArtifact().getType(); + if ("pom".equals(type)) { + + // Always install pom modules + goals.add("install"); + + } else { + + // Check if anything has changed in the project + boolean changed = false; + boolean testChanged = false; + boolean testFailed = false; + if (new File(project.getBasedir().getPath() + "/.modified").exists()) { + getLog().info("Found .modified marker file."); + changed = true; + } else { + changed = areSourcesStale() || areResourcesStale() || isPOMStale(); + } + if (changed) { + modifiedProjectIDs.add(projectID); + } else { + testChanged = areTestSourcesStale() || areTestResourcesStale(); + } + + // Check if a project has compile dependencies on the modified projects + // and will need to be recompiled, or has runtime or test dependencies + // on the modified projects and needs to be retested + if (changed) { + goals.add("clean"); + goals.add("install"); + getLog().info("Project " + projectID + " has changed and will be recompiled."); + + } else { + for (Artifact artifact : (List<Artifact>)project.getCompileArtifacts()) { + String artifactID = id(artifact); + if (modifiedProjectIDs.contains(artifactID)) { + getLog().info("Project " + projectID + " depends on modified project " + artifactID + " and will be recompiled."); + goals.add("clean"); + goals.add("install"); + break; + } + } + + if (goals.isEmpty()) { + List<Artifact> artifacts = new ArrayList<Artifact>(); + artifacts.addAll(project.getRuntimeArtifacts()); + artifacts.addAll(project.getTestArtifacts()); + for (Artifact artifact : artifacts) { + String artifactID = id(artifact); + if (modifiedProjectIDs.contains(artifactID)) { + getLog().info("Project " + projectID + " depends on modified project " + artifactID + " and will be retested."); + goals.add("test"); + break; + } + } + } + } + + if (testChanged && goals.isEmpty()) { + getLog().info("Project " + projectID + " has changed and will be retested."); + goals.add("test"); + } + + if (goals.isEmpty()) { + if (testMarkerFile.exists()) { + testFailed = true; + getLog().info("Project " + projectID + " contains failed tests and will be retested."); + goals.add("test"); + } + } + } + + // Invoke Maven with the necessary goals + if (!goals.isEmpty()) { + DefaultInvocationRequest request = new DefaultInvocationRequest(); + request.setGoals(goals); + // FIXME: The maven invoker doesn't handle the directory names with spaces + // request.setLocalRepositoryDirectory(new File(localRepository.getBasedir())); + request.setInteractive(false); + request.setShowErrors(false); + request.setRecursive(false); + // request.setDebug(true); + request.setOffline(settings.isOffline()); + request.setBaseDirectory(project.getBasedir()); + request.setPomFile(project.getFile()); + + boolean success = false; + try { + try { + InvocationResult result = invoker.execute(request); + + CommandLineException cle = result.getExecutionException(); + if (cle != null) { + throw new MojoExecutionException(cle.getMessage(), cle); + } + + int ec = result.getExitCode(); + if (ec != 0) { + throw new MojoExecutionException("Maven invocation exit code: " + ec); + } + + success = true; + + + + } catch (MavenInvocationException e) { + throw new MojoExecutionException(e.getMessage(), e); + } + } finally { + + // Create or delete a .test marker file to keep track of the latest + // test result status and trigger testing again next time the build + // is run + if (!success) { + try { + if (!testMarkerFile.exists()) { + testMarkerFile.createNewFile(); + } + } catch (IOException e) { + throw new MojoExecutionException(e.getMessage(), e); + } + } else { + if (testMarkerFile.exists()) { + testMarkerFile.delete(); + } + } + } + } else { + getLog().info("The project is up-to-date. No build is required."); + } + } + + private File getOutputFile() { + File basedir = buildDirectory; + String finalName = project.getBuild().getFinalName(); + String classifier = project.getArtifact().getClassifier(); + if (classifier == null) { + classifier = ""; + } else if (classifier.trim().length() > 0 && !classifier.startsWith("-")) { + classifier = "-" + classifier; + } + + String pkg = project.getPackaging(); + if ("maven-plugin".equals(pkg)) { + pkg = "jar"; + } + return new File(basedir, finalName + classifier + "." + pkg); + } + + /** + * Test if any of the resources are stale + * @param resources + * @param outputDirectory + * @return + * @throws MojoExecutionException + */ + private boolean areStale(List<Resource> resources, String outputDirectory) throws MojoExecutionException { + + for (Resource resource: resources) { + + File resourceDirectory = new File(resource.getDirectory()); + if (!resourceDirectory.exists()) { + continue; + } + + DirectoryScanner scanner = new DirectoryScanner(); + + scanner.setBasedir(resource.getDirectory()); + if (resource.getIncludes() != null && !resource.getIncludes().isEmpty()) { + scanner.setIncludes((String[])resource.getIncludes().toArray(new String[]{})); + } else { + scanner.setIncludes(new String[]{"**/**"}); + } + if (resource.getExcludes() != null && !resource.getExcludes().isEmpty()) { + scanner.setExcludes((String[])resource.getExcludes().toArray(new String[]{})); + } + + scanner.addDefaultExcludes(); + scanner.scan(); + + List<String> includedFiles = Arrays.asList(scanner.getIncludedFiles()); + String targetPath = resource.getTargetPath(); + for (String source: includedFiles) { + String target; + if (source.endsWith(".java")) { + target = source.substring(0, source.length() - 5) + ".class"; + } else { + target = source; + } + + String destination; + if (targetPath != null) { + destination = targetPath + "/" + target; + } else { + destination = target; + } + + File sourceFile = new File(resource.getDirectory(), source); + File destinationFile = new File(outputDirectory, destination); + + if (!destinationFile.exists()) { + getLog().info("Source file " + sourceFile + "."); + getLog().info("Target file " + destinationFile + " could not be found."); + return true; + } else { + if (sourceFile.lastModified() > destinationFile.lastModified()) { + getLog().info("Source file " + sourceFile + " has changed."); + getLog().info("Target file " + destinationFile + " is stale."); + return true; + } else if (sourceFile.lastModified() > outputFile.lastModified()) { + getLog().info("Source file " + sourceFile + " has changed."); + getLog().info("Target build output file " + outputFile + " is stale."); + return true; + } else if (outputFile.lastModified() == 0) { + getLog().info("Target build output file " + outputFile + " could not be found."); + return true; + } + } + } + } + return false; + } + + /** + * Test if the POM resource is stale. + * + * @return + */ + private boolean isPOMStale() { + File pom = project.getFile(); + if (pom.lastModified() > outputFile.lastModified()) { + getLog().info("File " + pom + " has changed."); + getLog().info("Target build output file " + pom + " is stale."); + return true; + } else if (outputFile.lastModified() == 0) { + getLog().info("Target build output file " + outputFile + " could not be found."); + return true; + } else { + return false; + } + } + + /** + * Test if the project resources are stale. + * + * @return + * @throws MojoExecutionException + */ + private boolean areResourcesStale() throws MojoExecutionException { + return areStale(project.getResources(), project.getBuild().getOutputDirectory()); + } + + /** + * Test if the project sources are stale. + * + * @return + * @throws MojoExecutionException + */ + private boolean areSourcesStale() throws MojoExecutionException { + List<Resource> resources = new ArrayList<Resource>(); + for (String root: (List<String>)project.getCompileSourceRoots()) { + if (new File(root).exists()) { + Resource resource = new Resource(); + resource.setDirectory(root); + resource.addInclude("*.java"); + resources.add(resource); + } + } + return areStale(resources, project.getBuild().getOutputDirectory()); + } + + /** + * Tests if the project test resources are stale. + * + * @return + * @throws MojoExecutionException + */ + private boolean areTestResourcesStale() throws MojoExecutionException { + return areStale(project.getTestResources(), project.getBuild().getTestOutputDirectory()); + } + + /** + * Tests if the project test sources are stale. + * + * @return + * @throws MojoExecutionException + */ + private boolean areTestSourcesStale() throws MojoExecutionException { + List<Resource> resources = new ArrayList<Resource>(); + for (String root: (List<String>)project.getTestCompileSourceRoots()) { + if (new File(root).exists()) { + Resource resource = new Resource(); + resource.setDirectory(root); + resources.add(resource); + } + } + return areStale(resources, project.getBuild().getTestOutputDirectory()); + } + + /** + * Returns the qualified id of a Maven artifact . + * @param p a Maven artifact + * @return a qualified id + */ + private static String id(Artifact a) { + return a.getGroupId() + ':' + a.getArtifactId(); + } + + /** + * Returns the qualified id of a Maven project. + * @param p a Maven project + * @return a qualified id + */ + private static String id(MavenProject p) { + return p.getGroupId() + ':' + p.getArtifactId(); + } +} diff --git a/sca-java-1.x/branches/sca-java-1.6.2/tools/maven/maven-java2wsdl/LICENSE b/sca-java-1.x/branches/sca-java-1.6.2/tools/maven/maven-java2wsdl/LICENSE new file mode 100644 index 0000000000..8aa906c321 --- /dev/null +++ b/sca-java-1.x/branches/sca-java-1.6.2/tools/maven/maven-java2wsdl/LICENSE @@ -0,0 +1,205 @@ + + 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-1.x/branches/sca-java-1.6.2/tools/maven/maven-java2wsdl/NOTICE b/sca-java-1.x/branches/sca-java-1.6.2/tools/maven/maven-java2wsdl/NOTICE new file mode 100644 index 0000000000..ad2ba40961 --- /dev/null +++ b/sca-java-1.x/branches/sca-java-1.6.2/tools/maven/maven-java2wsdl/NOTICE @@ -0,0 +1,6 @@ +${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-1.x/branches/sca-java-1.6.2/tools/maven/maven-java2wsdl/pom.xml b/sca-java-1.x/branches/sca-java-1.6.2/tools/maven/maven-java2wsdl/pom.xml new file mode 100644 index 0000000000..51ea1cc808 --- /dev/null +++ b/sca-java-1.x/branches/sca-java-1.6.2/tools/maven/maven-java2wsdl/pom.xml @@ -0,0 +1,45 @@ +<?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-sca-maven-tools</artifactId> + <version>1.6.1-SNAPSHOT</version> + <relativePath>../pom.xml</relativePath> + </parent> + <artifactId>tuscany-maven-java2wsdl</artifactId> + <packaging>maven-plugin</packaging> + <name>Apache Tuscany SCA Java2WSDL Maven Plugin</name> + + <dependencies> + <dependency> + <groupId>org.apache.maven</groupId> + <artifactId>maven-plugin-api</artifactId> + <version>2.0</version> + </dependency> + + <dependency> + <groupId>org.apache.tuscany.sca</groupId> + <artifactId>tuscany-java2wsdl</artifactId> + <version>1.6.1-SNAPSHOT</version> + </dependency> + </dependencies> +</project> diff --git a/sca-java-1.x/branches/sca-java-1.6.2/tools/maven/maven-java2wsdl/src/main/java/org/apache/tuscany/tools/java2wsdl/plugin/Java2WSDLGeneratorMojo.java b/sca-java-1.x/branches/sca-java-1.6.2/tools/maven/maven-java2wsdl/src/main/java/org/apache/tuscany/tools/java2wsdl/plugin/Java2WSDLGeneratorMojo.java new file mode 100644 index 0000000000..620e32a6fd --- /dev/null +++ b/sca-java-1.x/branches/sca-java-1.6.2/tools/maven/maven-java2wsdl/src/main/java/org/apache/tuscany/tools/java2wsdl/plugin/Java2WSDLGeneratorMojo.java @@ -0,0 +1,153 @@ +/* + * 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.tools.java2wsdl.plugin; + +import java.util.Hashtable; +import java.util.Map; + +import org.apache.axis2.description.java2wsdl.Java2WSDLConstants; +import org.apache.maven.plugin.AbstractMojo; +import org.apache.maven.plugin.MojoExecutionException; +import org.apache.tuscany.tools.java2wsdl.generate.Java2WSDLGeneratorFactory; +import org.apache.ws.java2wsdl.utils.Java2WSDLCommandLineOption; + +/** + * @version $Rev$ $Date$ + * @goal generate + * @phase generate-sources + * @description Generate WSDL from a given Java class / interface + */ +public class Java2WSDLGeneratorMojo extends AbstractMojo +{ + + /** + * The name of the class for which the WSDL must be generated + * @parameter + * + */ + private String sourceClassName; + + /** + * The location where the WSDLs should be generated into + * @parameter expression="${project.build.directory}\\java2wsdl-wsdl" + */ + private String targetLocation; + + /** + * The name of the WSDL file + * @parameter + */ + private String wsdlFilename; + + + /** + * Classpaths to be included + * @parameter + * + */ + String[] classpaths; + + /** + * The name of the service + * @parameter + */ + private String serviceName; + + /** + * The binding style for the service + * @parameter + */ + private String bindingStyle; + + /** + * The binding use option + * @parameter + */ + private String bindingUse; + + /** + * The soap address + * @parameter + */ + private String soapAddress; + + public void execute() throws MojoExecutionException + { + try + { + Java2WSDLGeneratorFactory.getInstance().createGenerator().generateWSDL(createOptionsMap ()); + } + catch ( Exception e ) + { + throw new MojoExecutionException("Exception in Java2WSDL Maven Plugin ", e); + } + } + + protected Map createOptionsMap() + { + Map optionsMap = new Hashtable(); + + optionsMap.put(Java2WSDLConstants.CLASSNAME_OPTION, + new Java2WSDLCommandLineOption(Java2WSDLConstants.CLASSNAME_OPTION, new String[]{sourceClassName})); + + if ( targetLocation != null ) + { + optionsMap.put(Java2WSDLConstants.OUTPUT_LOCATION_OPTION, + new Java2WSDLCommandLineOption(Java2WSDLConstants.OUTPUT_LOCATION_OPTION, new String[]{targetLocation})); + } + + if ( wsdlFilename != null ) + { + optionsMap.put(Java2WSDLConstants.OUTPUT_FILENAME_OPTION, + new Java2WSDLCommandLineOption(Java2WSDLConstants.OUTPUT_FILENAME_OPTION, new String[]{wsdlFilename})); + } + + if ( classpaths != null && classpaths.length > 0 ) + { + optionsMap.put(Java2WSDLConstants.CLASSPATH_OPTION, + new Java2WSDLCommandLineOption(Java2WSDLConstants.CLASSPATH_OPTION, classpaths)); + } + + if ( serviceName != null ) + { + optionsMap.put(Java2WSDLConstants.SERVICE_NAME_OPTION, + new Java2WSDLCommandLineOption(Java2WSDLConstants.SERVICE_NAME_OPTION, new String[]{serviceName})); + } + + if ( bindingStyle != null ) + { + optionsMap.put(Java2WSDLConstants.STYLE_OPTION, + new Java2WSDLCommandLineOption(Java2WSDLConstants.STYLE_OPTION, new String[]{bindingStyle})); + } + + if ( bindingUse != null ) + { + optionsMap.put(Java2WSDLConstants.USE_OPTION, + new Java2WSDLCommandLineOption(Java2WSDLConstants.USE_OPTION, new String[]{bindingUse})); + } + + if ( soapAddress != null ) + { + optionsMap.put(Java2WSDLConstants.LOCATION_OPTION, + new Java2WSDLCommandLineOption(Java2WSDLConstants.LOCATION_OPTION, new String[]{soapAddress})); + } + + return optionsMap; + } +} diff --git a/sca-java-1.x/branches/sca-java-1.6.2/tools/maven/maven-tuscany-bundle-plugin/pom.xml b/sca-java-1.x/branches/sca-java-1.6.2/tools/maven/maven-tuscany-bundle-plugin/pom.xml new file mode 100644 index 0000000000..6c3b90328d --- /dev/null +++ b/sca-java-1.x/branches/sca-java-1.6.2/tools/maven/maven-tuscany-bundle-plugin/pom.xml @@ -0,0 +1,77 @@ +<?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-sca-maven-tools</artifactId> + <version>1.6.1-SNAPSHOT</version> + <relativePath>../pom.xml</relativePath> + </parent> + <artifactId>tuscany-maven-bundle-plugin</artifactId> + <packaging>maven-plugin</packaging> + <name>Apache Tuscany SCA Maven OSGi Bundle Plugin</name> + + <dependencies> + <dependency> + <groupId>org.apache.maven</groupId> + <artifactId>maven-plugin-api</artifactId> + <version>2.0.7</version> + </dependency> + + <dependency> + <groupId>org.apache.maven</groupId> + <artifactId>maven-project</artifactId> + <version>2.0.7</version> + </dependency> + + <dependency> + <groupId>org.apache.maven</groupId> + <artifactId>maven-settings</artifactId> + <version>2.0.7</version> + </dependency> + + <dependency> + <groupId>org.apache.maven</groupId> + <artifactId>maven-artifact</artifactId> + <version>2.0.7</version> + </dependency> + + <dependency> + <groupId>org.apache.maven</groupId> + <artifactId>maven-model</artifactId> + <version>2.0.7</version> + </dependency> + + <dependency> + <groupId>org.apache.maven.shared</groupId> + <artifactId>maven-dependency-tree</artifactId> + <version>1.1</version> + </dependency> + + <dependency> + <groupId>org.apache.felix</groupId> + <artifactId>maven-bundle-plugin</artifactId> + <version>1.4.3</version> + </dependency> + + + </dependencies> +</project> diff --git a/sca-java-1.x/branches/sca-java-1.6.2/tools/maven/maven-tuscany-bundle-plugin/src/main/java/org/apache/tuscany/tools/sca/tuscany/bundle/plugin/LibraryBundleMojo.java b/sca-java-1.x/branches/sca-java-1.6.2/tools/maven/maven-tuscany-bundle-plugin/src/main/java/org/apache/tuscany/tools/sca/tuscany/bundle/plugin/LibraryBundleMojo.java new file mode 100644 index 0000000000..5fbd3008d2 --- /dev/null +++ b/sca-java-1.x/branches/sca-java-1.6.2/tools/maven/maven-tuscany-bundle-plugin/src/main/java/org/apache/tuscany/tools/sca/tuscany/bundle/plugin/LibraryBundleMojo.java @@ -0,0 +1,184 @@ +/* + * 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.tools.sca.tuscany.bundle.plugin; + +import java.io.File; +import java.io.FileInputStream; +import java.io.FileOutputStream; +import java.io.IOException; +import java.util.ArrayList; +import java.util.List; +import java.util.jar.Manifest; + +import org.apache.maven.artifact.Artifact; +import org.apache.maven.plugin.AbstractMojo; +import org.apache.maven.plugin.MojoExecutionException; +import org.apache.maven.plugin.logging.Log; +import org.apache.maven.project.MavenProject; + +/** + * @version $Rev$ $Date$ + * @goal build + * @phase process-sources + * @requiresDependencyResolution test + * @description Build a virtual bundle for 3rd party dependencies + */ +public class LibraryBundleMojo extends AbstractMojo { + /** + * The project to create a build for. + * + * @parameter expression="${project}" + * @required + * @readonly + */ + private MavenProject project; + + /** + * The basedir of the project. + * + * @parameter expression="${basedir}" + * @required @readonly + */ + protected File basedir; + + /** + * Used to look up Artifacts in the remote repository. + * + * @parameter expression="${component.org.apache.maven.artifact.factory.ArtifactFactory}" + * @required + * @readonly + */ + protected org.apache.maven.artifact.factory.ArtifactFactory factory; + + /** + * Used to look up Artifacts in the remote repository. + * + * @parameter expression="${component.org.apache.maven.artifact.resolver.ArtifactResolver}" + * @required + * @readonly + */ + protected org.apache.maven.artifact.resolver.ArtifactResolver resolver; + + /** + * Location of the local repository. + * + * @parameter expression="${localRepository}" + * @readonly + * @required + */ + protected org.apache.maven.artifact.repository.ArtifactRepository local; + + /** + * List of Remote Repositories used by the resolver + * + * @parameter expression="${project.remoteArtifactRepositories}" + * @readonly + * @required + */ + protected java.util.List remoteRepos; + + /** + * @parameter + */ + protected boolean copyJars = false; + + public void execute() throws MojoExecutionException { + if (project.getPackaging().equals("pom")) { + return; + } + + Log log = getLog(); + List<File> jarFiles = new ArrayList<File>(); + for (Object o : project.getArtifacts()) { + Artifact a = (Artifact)o; + if (!(Artifact.SCOPE_COMPILE.equals(a.getScope()) || Artifact.SCOPE_RUNTIME.equals(a.getScope()))) { + if (log.isDebugEnabled()) { + log.debug("Skipping artifact: " + a); + } + continue; + } + if (log.isDebugEnabled()) { + log.debug("Artifact: " + a); + } + String bundleName = null; + try { + bundleName = LibraryBundleUtil.getBundleName(a.getFile()); + } catch (IOException e) { + throw new MojoExecutionException(e.getMessage(), e); + } + if (bundleName == null) { + if (log.isDebugEnabled()) { + log.debug("Adding non-OSGi jar: " + a); + } + jarFiles.add(a.getFile()); + } + } + + try { + String version = project.getVersion(); + if (version.endsWith(Artifact.SNAPSHOT_VERSION)) { + version = version.substring(0, version.length() - Artifact.SNAPSHOT_VERSION.length() - 1); + } + + Manifest mf = LibraryBundleUtil.libraryManifest(jarFiles, project.getName(), version, copyJars); + File file = new File(project.getBasedir(), "META-INF"); + file.mkdir(); + file= new File(file, "MANIFEST.MF"); + if (log.isDebugEnabled()) { + log.debug("Generating " + file); + } + + FileOutputStream fos = new FileOutputStream(file); + mf.write(fos); + fos.close(); + + if (copyJars) { + File lib = new File(project.getBasedir(), "lib"); + if (lib.isDirectory()) { + for (File c : lib.listFiles()) { + c.delete(); + } + } + lib.mkdir(); + byte[] buf = new byte[4096]; + for (File jar : jarFiles) { + File jarFile = new File(lib, jar.getName()); + if (log.isDebugEnabled()) { + log.debug("Copying " + jar + " to " + jarFile); + } + FileInputStream in = new FileInputStream(jar); + FileOutputStream out = new FileOutputStream(jarFile); + int len = 0; + while (len > 0) { + len = in.read(buf); + if (len > 0) { + out.write(buf, 0, len); + } + } + in.close(); + out.close(); + } + } + } catch (Exception e) { + throw new MojoExecutionException(e.getMessage(), e); + } + + } + +} diff --git a/sca-java-1.x/branches/sca-java-1.6.2/tools/maven/maven-tuscany-bundle-plugin/src/main/java/org/apache/tuscany/tools/sca/tuscany/bundle/plugin/LibraryBundleUtil.java b/sca-java-1.x/branches/sca-java-1.6.2/tools/maven/maven-tuscany-bundle-plugin/src/main/java/org/apache/tuscany/tools/sca/tuscany/bundle/plugin/LibraryBundleUtil.java new file mode 100644 index 0000000000..ed4ac63533 --- /dev/null +++ b/sca-java-1.x/branches/sca-java-1.6.2/tools/maven/maven-tuscany-bundle-plugin/src/main/java/org/apache/tuscany/tools/sca/tuscany/bundle/plugin/LibraryBundleUtil.java @@ -0,0 +1,244 @@ +/* + * 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.tools.sca.tuscany.bundle.plugin; + +import static org.osgi.framework.Constants.BUNDLE_CLASSPATH; +import static org.osgi.framework.Constants.BUNDLE_MANIFESTVERSION; +import static org.osgi.framework.Constants.BUNDLE_NAME; +import static org.osgi.framework.Constants.BUNDLE_SYMBOLICNAME; +import static org.osgi.framework.Constants.BUNDLE_VERSION; +import static org.osgi.framework.Constants.DYNAMICIMPORT_PACKAGE; +import static org.osgi.framework.Constants.EXPORT_PACKAGE; +import static org.osgi.framework.Constants.IMPORT_PACKAGE; + +import java.io.ByteArrayOutputStream; +import java.io.File; +import java.io.FileInputStream; +import java.io.IOException; +import java.net.URL; +import java.util.HashSet; +import java.util.List; +import java.util.Set; +import java.util.jar.Attributes; +import java.util.jar.JarFile; +import java.util.jar.JarOutputStream; +import java.util.jar.Manifest; +import java.util.regex.Matcher; +import java.util.regex.Pattern; +import java.util.zip.ZipEntry; +import java.util.zip.ZipInputStream; + +import org.osgi.framework.Bundle; + +/** + * Common functions and constants used by the admin components. + * + * @version $Rev$ $Date$ + */ +public final class LibraryBundleUtil { + + private static final String LAUNCHER_EQUINOX_LIBRARIES = "org.apache.tuscany.sca.node.launcher.equinox.libraries"; + + static File file(URL url) { + if (url == null || !url.getProtocol().equals("file")) { + return null; + } else { + String filename = url.getFile().replace('/', File.separatorChar); + int pos = 0; + while ((pos = filename.indexOf('%', pos)) >= 0) { + if (pos + 2 < filename.length()) { + String hexStr = filename.substring(pos + 1, pos + 3); + char ch = (char)Integer.parseInt(hexStr, 16); + filename = filename.substring(0, pos) + ch + filename.substring(pos + 3); + } + } + return new File(filename); + } + } + + static Pattern pattern = Pattern.compile("-([0-9.]+)"); + + private static String version(String jarFile) { + Matcher matcher = pattern.matcher(jarFile); + String version = "1.0.0"; + if (matcher.find()) { + version = matcher.group(); + if (version.endsWith(".")) { + version = version.substring(1, version.length() - 1); + } else { + version = version.substring(1); + } + } + return version; + } + + private static void addPackages(File jarFile, Set<String> packages) throws IOException { + String version = ";version=" + version(jarFile.getPath()); + ZipInputStream is = new ZipInputStream(new FileInputStream(jarFile)); + ZipEntry entry; + while ((entry = is.getNextEntry()) != null) { + String entryName = entry.getName(); + if (!entry.isDirectory() && entryName != null + && entryName.length() > 0 + && !entryName.startsWith(".") + && entryName.endsWith(".class") // Exclude resources from Export-Package + && entryName.lastIndexOf("/") > 0) { + String pkg = entryName.substring(0, entryName.lastIndexOf("/")).replace('/', '.') + version; + packages.add(pkg); + } + } + is.close(); + } + + static Manifest libraryManifest(List<File> jarFiles, String name, String version, boolean copyJars) + throws IllegalStateException { + try { + + // List exported packages and bundle classpath entries + StringBuffer classpath = new StringBuffer(); + StringBuffer exports = new StringBuffer(); + StringBuffer imports = new StringBuffer(); + Set<String> packages = new HashSet<String>(); + for (File jarFile : jarFiles) { + addPackages(jarFile, packages); + if (copyJars) { + classpath.append("\"lib/"); + classpath.append(jarFile.getName()); + classpath.append("\","); + } else { + classpath.append("\"external:"); + classpath.append(jarFile.getPath().replace(File.separatorChar, '/')); + classpath.append("\","); + } + } + + Set<String> importPackages = new HashSet<String>(); + for (String pkg : packages) { + exports.append(pkg); + exports.append(','); + + String importPackage = pkg; + int index = pkg.indexOf(';'); + if (index != -1) { + importPackage = pkg.substring(0, index); + } + if (!importPackages.contains(importPackage)) { + imports.append(importPackage); + imports.append(','); + importPackages.add(importPackage); + } + } + + // Create a manifest + Manifest manifest = new Manifest(); + Attributes attributes = manifest.getMainAttributes(); + attributes.putValue("Manifest-Version", "1.0"); + attributes.putValue(BUNDLE_MANIFESTVERSION, "2"); + attributes.putValue(BUNDLE_SYMBOLICNAME, LAUNCHER_EQUINOX_LIBRARIES); + attributes.putValue(BUNDLE_NAME, name); + attributes.putValue(BUNDLE_VERSION, version); + attributes.putValue(EXPORT_PACKAGE, exports.substring(0, exports.length() - 1)); + attributes.putValue(IMPORT_PACKAGE, imports.substring(0, imports.length() - 1)); + attributes.putValue(BUNDLE_CLASSPATH, classpath.substring(0, classpath.length() - 1)); + attributes.putValue(DYNAMICIMPORT_PACKAGE, "*"); + + return manifest; + } catch (IOException e) { + throw new IllegalStateException(e); + } + } + + static String dump(Manifest mf) throws IOException { + ByteArrayOutputStream bos = new ByteArrayOutputStream(); + mf.write(bos); + return new String(bos.toByteArray()); + } + + static byte[] generateBundle(Manifest mf) throws IOException { + ByteArrayOutputStream bos = new ByteArrayOutputStream(); + JarOutputStream jos = new JarOutputStream(bos, mf); + jos.close(); + return bos.toByteArray(); + } + + /** + * Returns the name of a bundle, or null if the given file is not a bundle. + * + * @param file + * @return + * @throws IOException + */ + static String getBundleName(File file) throws IOException { + if (!file.exists()) { + return null; + } + String bundleName = null; + if (file.isDirectory()) { + File mf = new File(file, "META-INF/MANIFEST.MF"); + if (mf.isFile()) { + Manifest manifest = new Manifest(new FileInputStream(mf)); + bundleName = manifest.getMainAttributes().getValue(BUNDLE_SYMBOLICNAME); + } + } else { + JarFile jar = new JarFile(file, false); + Manifest manifest = jar.getManifest(); + bundleName = manifest.getMainAttributes().getValue(BUNDLE_SYMBOLICNAME); + jar.close(); + } + if (bundleName == null) { + return bundleName; + } + int sc = bundleName.indexOf(';'); + if (sc != -1) { + bundleName = bundleName.substring(0, sc); + } + return bundleName; + } + + public static String string(Bundle b, boolean verbose) { + StringBuffer sb = new StringBuffer(); + sb.append(b.getBundleId()).append(" ").append(b.getSymbolicName()); + int s = b.getState(); + if ((s & Bundle.UNINSTALLED) != 0) { + sb.append(" UNINSTALLED"); + } + if ((s & Bundle.INSTALLED) != 0) { + sb.append(" INSTALLED"); + } + if ((s & Bundle.RESOLVED) != 0) { + sb.append(" RESOLVED"); + } + if ((s & Bundle.STARTING) != 0) { + sb.append(" STARTING"); + } + if ((s & Bundle.STOPPING) != 0) { + sb.append(" STOPPING"); + } + if ((s & Bundle.ACTIVE) != 0) { + sb.append(" ACTIVE"); + } + + if (verbose) { + sb.append(" ").append(b.getLocation()); + sb.append(" ").append(b.getHeaders()); + } + return sb.toString(); + } +} diff --git a/sca-java-1.x/branches/sca-java-1.6.2/tools/maven/maven-tuscany-bundle-plugin/src/main/java/org/apache/tuscany/tools/sca/tuscany/bundle/plugin/TuscanyBundlePluginMojo.java b/sca-java-1.x/branches/sca-java-1.6.2/tools/maven/maven-tuscany-bundle-plugin/src/main/java/org/apache/tuscany/tools/sca/tuscany/bundle/plugin/TuscanyBundlePluginMojo.java new file mode 100644 index 0000000000..79b0db4223 --- /dev/null +++ b/sca-java-1.x/branches/sca-java-1.6.2/tools/maven/maven-tuscany-bundle-plugin/src/main/java/org/apache/tuscany/tools/sca/tuscany/bundle/plugin/TuscanyBundlePluginMojo.java @@ -0,0 +1,505 @@ +/* + * 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.tools.sca.tuscany.bundle.plugin; + +import java.io.ByteArrayInputStream; +import java.io.ByteArrayOutputStream; +import java.io.File; +import java.io.FileInputStream; +import java.io.FileOutputStream; +import java.io.IOException; +import java.lang.reflect.Field; +import java.util.Collection; +import java.util.HashSet; +import java.util.Hashtable; +import java.util.List; +import java.util.Map; +import java.util.Set; +import java.util.jar.Attributes; +import java.util.jar.JarInputStream; +import java.util.jar.JarOutputStream; +import java.util.jar.Manifest; +import java.util.zip.ZipEntry; + +import org.apache.felix.bundleplugin.BundleAllPlugin; +import org.apache.maven.artifact.Artifact; +import org.apache.maven.artifact.factory.ArtifactFactory; +import org.apache.maven.artifact.metadata.ArtifactMetadataSource; +import org.apache.maven.artifact.repository.ArtifactRepository; +import org.apache.maven.artifact.resolver.ArtifactCollector; +import org.apache.maven.artifact.resolver.ArtifactNotFoundException; +import org.apache.maven.artifact.resolver.ArtifactResolutionException; +import org.apache.maven.artifact.resolver.ArtifactResolver; +import org.apache.maven.artifact.versioning.OverConstrainedVersionException; +import org.apache.maven.artifact.versioning.VersionRange; +import org.apache.maven.plugin.MojoExecutionException; +import org.apache.maven.project.MavenProject; +import org.apache.maven.project.MavenProjectBuilder; +import org.apache.maven.project.ProjectBuildingException; +import org.apache.maven.project.artifact.InvalidDependencyVersionException; +import org.apache.maven.shared.dependency.tree.DependencyTree; +import org.apache.maven.shared.dependency.tree.DependencyTreeBuilder; +import org.apache.maven.shared.dependency.tree.DependencyTreeBuilderException; +import org.apache.maven.shared.osgi.Maven2OsgiConverter; +import org.osgi.framework.Version; + +import aQute.lib.header.OSGiHeader; + +/** + * @version $$ + * @goal execute + * @phase compile + * @requiresDependencyResolution test + * @description Generate versioned OSGi bundles corresponding to Tuscany modules and all 3rd party dependencies + */ +public class TuscanyBundlePluginMojo extends BundleAllPlugin { + /** + * The maven project + * + * @parameter expression="${project}" + * @required + */ + private MavenProject project; + + /** + * Directory containing pom. + * + * @parameter expression="${basedir}" + * @required + */ + private File baseDir; + + /** + * Build directory for project + * + * @parameter expression="${project.build.directory}" + * @required + */ + private String buildDirectory; + + /** + * Output directory where bundles are generated. + * + * @parameter expression="${project.build.outputDirectory}" + * @required + */ + private File outputDirectory; + + /** + * Artifact resolver + * + * @component + */ + private ArtifactResolver artifactResolver; + + /** + * Artifact factory + * + * @component + */ + private ArtifactFactory artifactFactory; + + /** + * @component + */ + private ArtifactMetadataSource artifactMetadataSource; + + /** + * Dependency tree builder + * + * @component + */ + private DependencyTreeBuilder dependencyTreeBuilder; + + /** + * @component + */ + private ArtifactCollector collector; + + /** + * @component + */ + private MavenProjectBuilder mavenProjectBuilder; + + /** + * The local repository + * + * @parameter expression="${localRepository}" + * @required + */ + private ArtifactRepository localRepository; + + /** + * The remote repositories + * + * @parameter expression="${project.remoteArtifactRepositories}" + */ + private List remoteRepositories; + + /** + * @component + */ + private Maven2OsgiConverter maven2OsgiConverter; + + private static final HashSet<String> dependenciesToIgnore = new HashSet<String>(); + private static final HashSet<String> importDirectives = new HashSet<String>(); + private static final HashSet<String> exportDirectives = new HashSet<String>(); + private static final Hashtable<String, String> privatePackages = new Hashtable<String, String>(); + private static final Hashtable<String, String> dynamicImports = new Hashtable<String, String>(); + + static { + importDirectives.add("resolution"); + + exportDirectives.add("uses"); + exportDirectives.add("mandatory"); + exportDirectives.add("include"); + exportDirectives.add("exclude"); + + dependenciesToIgnore.add("xml-apis:xml-apis"); + dependenciesToIgnore.add("stax:stax-api"); + + + // Comma separated list of packages + privatePackages.put("org.apache.woden:woden", "javax.xml.namespace"); + privatePackages.put("org.apache.xmlbeans:xmlbeans", "org.w3c.dom"); + privatePackages.put("org.apache.axis2:axis2-adb", "org.apache.axis2.util"); + privatePackages.put("org.apache.axis2:addressing", "org.apache.axis2.addressing"); + privatePackages.put("org.apache.axis2:axis2-kernel", "org.apache.axis2.wsdl"); + privatePackages.put("org.apache.bsf:bsf-all", "org.mozilla.javascript"); + privatePackages.put("org.apache.axis2:axis2-codegen", "org.apache.axis2.wsdl,org.apache.axis2.wsdl.util"); + + dynamicImports.put("org.apache.ws.commons.axiom:axiom-api", "org.apache.axiom.om.impl.*,org.apache.axiom.soap.impl.*"); + dynamicImports.put("org.apache.bsf:bsf-all", "org.mozilla.*"); + dynamicImports.put("org.apache.santuario:xmlsec", "org.apache.ws.security.*"); + } + + + @SuppressWarnings("unchecked") + public void execute() throws MojoExecutionException { + try { + + setBasedir(baseDir); + setBuildDirectory(buildDirectory); + setOutputDirectory(outputDirectory); + setMaven2OsgiConverter(maven2OsgiConverter); + try { + Field importField = this.getClass().getSuperclass().getDeclaredField("wrapImportPackage"); + importField.setAccessible(true); + importField.set(this, "*;resolution:=optional"); + } catch (Exception e2) { + e2.printStackTrace(); + getLog().error("Could not set import instructions"); + } + + + DependencyTree dependencyTree = dependencyTreeBuilder.buildDependencyTree(project, + localRepository, artifactFactory, + artifactMetadataSource, collector ); + + Hashtable<String, String> duplicateWarnings = new Hashtable<String, String>(); + Hashtable<String, Artifact> artifactsToBundle = new Hashtable<String, Artifact>(); + + for (Object a : dependencyTree.getArtifacts()) { + Artifact artifact = (Artifact)a; + + if (project.getArtifactId().equals(artifact.getArtifactId()) && project.getGroupId().equals(artifact.getGroupId())) + continue; + + if (Artifact.SCOPE_SYSTEM.equals(artifact.getScope())||Artifact.SCOPE_TEST.equals(artifact.getScope())) + continue; + + String id = artifact.getGroupId() + ":" + artifact.getArtifactId(); + if (dependenciesToIgnore.contains(id)) + continue; + + Artifact old = artifactsToBundle.get(id); + if (old != null && !old.getVersion().equals(artifact.getVersion())) { + String oldVersion = old.getVersion(); + String thisVersion = artifact.getVersion(); + if (!thisVersion.equals(duplicateWarnings.get(oldVersion))&&!oldVersion.equals(duplicateWarnings.get(thisVersion))) { + getLog().warn("Multiple versions of artifacts : " + old + ", " + artifact); + duplicateWarnings.put(oldVersion, thisVersion); + } + + } + + VersionRange versionRange = artifact.getVersionRange(); + if (versionRange == null) + versionRange = VersionRange.createFromVersion(artifact.getVersion()); + + Artifact dependencyArtifact = artifactFactory.createDependencyArtifact(artifact.getGroupId(), + artifact.getArtifactId(), + versionRange, + artifact.getType(), + artifact.getClassifier(), + artifact.getScope()); + + try { + if (old != null && old.getSelectedVersion().compareTo(artifact.getSelectedVersion()) >= 0) + continue; + else + artifactsToBundle.remove(id); + } catch (OverConstrainedVersionException e1) { + getLog().warn("Could not process maven version for artifact " + artifact); + continue; + } + + try { + artifactResolver.resolve(dependencyArtifact, remoteRepositories, localRepository); + } catch (ArtifactResolutionException e) { + getLog().warn("Artifact " + artifact + " could not be resolved."); + } catch (ArtifactNotFoundException e) { + getLog().warn("Artifact " + artifact + " could not be found."); + } + + artifact.setFile(dependencyArtifact.getFile()); + + artifactsToBundle.put(id, artifact); + + } + + bundleArtifacts(artifactsToBundle.values()); + + + } catch (DependencyTreeBuilderException e) { + throw new MojoExecutionException("Could not build dependency tree", e); + } catch (ProjectBuildingException e) { + throw new MojoExecutionException("Could not build project for artifact", e); + } catch (InvalidDependencyVersionException e) { + throw new MojoExecutionException("Invalid dependency version", e); + } catch (IOException e) { + throw new MojoExecutionException("Could not build bundle manifest", e); + } + } + + + private void bundleArtifacts(Collection<Artifact> artifacts) throws ProjectBuildingException, + InvalidDependencyVersionException, MojoExecutionException, IOException { + + for (Artifact artifact : artifacts) { + + artifact.setFile(getFile( artifact )); + + MavenProject bundleProject; + try { + bundleProject = + mavenProjectBuilder.buildFromRepository(artifact, remoteRepositories, localRepository, true); + } catch (Exception e) { + getLog().error(e); + continue; + } + bundleProject.setArtifact(artifact); + + if ( bundleProject.getDependencyArtifacts() == null ) { + bundleProject.setDependencyArtifacts(bundleProject.createArtifacts(artifactFactory, null, null ) ); + } + + File outputFile = getOutputFile(bundleProject.getArtifact()); + if (outputFile.exists()) + outputFile.delete(); + bundle(bundleProject); + postProcessBundle(artifact, outputFile); + + } + } + + + @SuppressWarnings("unchecked") + private void postProcessBundle(Artifact artifact, File bundleFile) throws IOException { + + if (!bundleFile.exists()) + return; + + File processedFile = bundleFile; + boolean retainManifestEntries = false; + if (!artifact.getGroupId().equals("org.apache.tuscany.sca")) { + // For pre-bundled 3rd party bundles, retain all OSGi manifest entries except Require-Bundle + Manifest manifest = getManifest(artifact.getFile()); + if (manifest != null && manifest.getMainAttributes() != null && + manifest.getMainAttributes().getValue("Bundle-SymbolicName") != null) { + retainManifestEntries = true; + } + } + + Manifest manifest = getManifest(bundleFile); + Attributes attributes = manifest.getMainAttributes(); + + if (attributes == null) { + return; + } + + String artifactId = artifact.getGroupId() + ":" + artifact.getArtifactId(); + + String bundleSymName = (String)attributes.getValue("Bundle-SymbolicName"); + if (!bundleSymName.startsWith("org.apache.tuscany.sca")) { + bundleSymName = "org.apache.tuscany.sca.3rdparty." + bundleSymName; + attributes.putValue("Bundle-SymbolicName", bundleSymName); + + processedFile = new File(bundleFile.getParent(), "org.apache.tuscany.sca.3rdparty." + bundleFile.getName()); + } + + String imports = (String)attributes.getValue("Import-Package"); + String exports = (String)attributes.getValue("Export-Package"); + + // For EMF jars + if (attributes.getValue("Require-Bundle") != null) { + attributes.remove(new Attributes.Name("Require-Bundle")); + attributes.putValue("DynamicImport-Package", "*"); + attributes.remove(new Attributes.Name("Eclipse-LazyStart")); + } + + if (!retainManifestEntries && imports != null) { + StringBuilder newImportBuf = new StringBuilder(); + Map importMap = OSGiHeader.parseHeader(imports); + for (Object pkg : importMap.keySet()) { + + if (isPrivatePackage(artifactId, (String)pkg)) { + continue; + } + + Map importAttr = (Map)importMap.get(pkg); + String version = (String)importAttr.get("version"); + if (version != null && version.indexOf(',') == -1) { + if (((String)pkg).startsWith("org.osgi")) { + // Leave version as is - for OSGi packages, assume backward compatibility + } + else if (!version.matches(".*\\..*\\.")) { + Version curVersion = new Version(version); + Version nextVersion = new Version(curVersion.getMajor(), curVersion.getMinor()+1, 0); + version = '[' + version + ',' + nextVersion + ')'; + } + else + version = '[' + version + ',' + version + ']'; + importAttr.put("version", version); + } + updateManifestAttribute((String)pkg, importAttr, importDirectives, newImportBuf); + + } + attributes.putValue("Import-Package", newImportBuf.toString()); + } + + if (!retainManifestEntries && exports != null) { + StringBuilder newExportBuf = new StringBuilder(); + Map exportMap = OSGiHeader.parseHeader(exports); + + for (Object value : exportMap.keySet()) { + String pkg = (String)value; + if (!isPrivatePackage(artifactId, pkg)) { + Map exportAttr = (Map)exportMap.get(pkg); + updateManifestAttribute((String)pkg, exportAttr, exportDirectives, newExportBuf); + } + } + if (newExportBuf.length() > 0) + attributes.putValue("Export-Package", newExportBuf.toString()); + else + attributes.remove(new Attributes.Name("Export-Package")); + } + + String dynImport = dynamicImports.get(artifactId); + if (dynImport != null) + attributes.putValue("DynamicImport-Package", dynImport); + + ByteArrayOutputStream out = new ByteArrayOutputStream(); + JarOutputStream jarOut = new JarOutputStream(out, manifest); + copyJar(bundleFile, jarOut); + jarOut.close(); + out.close(); + bundleFile.delete(); + FileOutputStream fileOut = new FileOutputStream(processedFile); + fileOut.write(out.toByteArray()); + fileOut.close(); + + } + + + private void copyJar(File file, JarOutputStream jarOut) throws IOException { + + try { + JarInputStream jarIn = new JarInputStream(new FileInputStream(file)); + ZipEntry ze; + byte[] readBuf = new byte[1000]; + int bytesRead; + while ((ze = jarIn.getNextEntry()) != null) { + if (ze.getName().equals("META-INF/MANIFEST.MF")) + continue; + jarOut.putNextEntry(ze); + while ((bytesRead = jarIn.read(readBuf)) > 0) { + jarOut.write(readBuf, 0, bytesRead); + } + } + jarIn.close(); + } catch (Exception e) { + e.printStackTrace(); + } + } + + private Manifest getManifest(File jar) { + try { + JarInputStream jarIn = new JarInputStream(new FileInputStream(jar)); + Manifest manifest = jarIn.getManifest(); + if (manifest == null) { + ZipEntry ze; + while ((ze = jarIn.getNextEntry()) != null) { + if (ze.getName().equals("META-INF/MANIFEST.MF")) + break; + } + if (ze != null) { + byte[] bytes = new byte[(int)ze.getSize()]; + jarIn.read(bytes); + manifest = new Manifest(new ByteArrayInputStream(bytes)); + } + } + jarIn.close(); + return manifest; + } catch (IOException e) { + return null; + } + } + + private boolean isPrivatePackage(String artifactId, String pkg) { + String privatePkgs = privatePackages.get(artifactId); + if (privatePkgs != null) { + String[] pkgs = privatePkgs.split(","); + for (int i = 0; i < pkgs.length; i++) { + if (pkgs[i].trim().equals(pkg)) + return true; + } + } + return false; + } + + + private void updateManifestAttribute(String pkg, Map newMap, Set<String> directives, StringBuilder newAttrBuffer) { + if (newAttrBuffer.length() != 0) newAttrBuffer.append(','); + newAttrBuffer.append(pkg); + if (newMap.size() > 0) { + for (Object attrName : newMap.keySet()) { + newAttrBuffer.append(';'); + newAttrBuffer.append(attrName); + if (directives.contains(attrName)) + newAttrBuffer.append(":="); + else + newAttrBuffer.append('='); + newAttrBuffer.append('\"'); + newAttrBuffer.append(newMap.get(attrName)); + newAttrBuffer.append('\"'); + } + } + } +} diff --git a/sca-java-1.x/branches/sca-java-1.6.2/tools/maven/maven-wsdl2java/LICENSE b/sca-java-1.x/branches/sca-java-1.6.2/tools/maven/maven-wsdl2java/LICENSE new file mode 100644 index 0000000000..8aa906c321 --- /dev/null +++ b/sca-java-1.x/branches/sca-java-1.6.2/tools/maven/maven-wsdl2java/LICENSE @@ -0,0 +1,205 @@ + + 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-1.x/branches/sca-java-1.6.2/tools/maven/maven-wsdl2java/NOTICE b/sca-java-1.x/branches/sca-java-1.6.2/tools/maven/maven-wsdl2java/NOTICE new file mode 100644 index 0000000000..ad2ba40961 --- /dev/null +++ b/sca-java-1.x/branches/sca-java-1.6.2/tools/maven/maven-wsdl2java/NOTICE @@ -0,0 +1,6 @@ +${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-1.x/branches/sca-java-1.6.2/tools/maven/maven-wsdl2java/pom.xml b/sca-java-1.x/branches/sca-java-1.6.2/tools/maven/maven-wsdl2java/pom.xml new file mode 100644 index 0000000000..9108aa549a --- /dev/null +++ b/sca-java-1.x/branches/sca-java-1.6.2/tools/maven/maven-wsdl2java/pom.xml @@ -0,0 +1,45 @@ +<?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-sca-maven-tools</artifactId> + <version>1.6.1-SNAPSHOT</version> + <relativePath>../pom.xml</relativePath> + </parent> + <artifactId>tuscany-maven-wsdl2java</artifactId> + <packaging>maven-plugin</packaging> + <name>Apache Tuscany SCA WSDL2Java Maven Plugin</name> + + <dependencies> + <dependency> + <groupId>org.apache.maven</groupId> + <artifactId>maven-plugin-api</artifactId> + <version>2.0</version> + </dependency> + + <dependency> + <groupId>org.apache.tuscany.sca</groupId> + <artifactId>tuscany-wsdl2java</artifactId> + <version>1.6.1-SNAPSHOT</version> + </dependency> + </dependencies> +</project> diff --git a/sca-java-1.x/branches/sca-java-1.6.2/tools/maven/maven-wsdl2java/src/main/java/org/apache/tuscany/tools/wsdl2java/plugin/WSDL2JavaGeneratorMojo.java b/sca-java-1.x/branches/sca-java-1.6.2/tools/maven/maven-wsdl2java/src/main/java/org/apache/tuscany/tools/wsdl2java/plugin/WSDL2JavaGeneratorMojo.java new file mode 100644 index 0000000000..8021692521 --- /dev/null +++ b/sca-java-1.x/branches/sca-java-1.6.2/tools/maven/maven-wsdl2java/src/main/java/org/apache/tuscany/tools/wsdl2java/plugin/WSDL2JavaGeneratorMojo.java @@ -0,0 +1,152 @@ +/* + * 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.tools.wsdl2java.plugin; + +import java.io.File; +import java.io.FileFilter; +import java.io.IOException; +import java.util.List; + +import org.apache.maven.plugin.AbstractMojo; +import org.apache.maven.plugin.MojoExecutionException; +import org.apache.tuscany.tools.wsdl2java.generate.WSDL2JavaGenerator; + +/** + * @version $Rev$ $Date$ + * @goal generate + * @phase generate-sources + * @description Generate SDO interface classes from an XML Schema + */ +public class WSDL2JavaGeneratorMojo extends AbstractMojo { + /** + * The directory containing WSDL files; defaults to ${basedir}/src/main/wsdl + * @parameter expression="${basedir}/src/main/wsdl" + */ + private String wsdlDir; + + /** + * Name of the WSDL file; if omitted all files in the directory are processed + * @parameter + */ + private File wsdlFile; + + /** + * The Java package to generate into. By default the value is derived from the schema URI. + * + * @parameter + */ + private String javaPackage; + + /** + * The directory to generate into; defaults to ${project.build.directory}/wsdl2java-source + * + * @parameter expression="${project.build.directory}/wsdl2java-source" + */ + private String targetDirectory; + + /** + * The directory to generate into; defaults to ${project.build.directory}/wsdl2java-source + * + * @parameter + */ + private WSDLFileOption[] wsdlFiles; + + /** + * @parameter expression="${project.compileSourceRoots}" + * @readonly + */ + private List compilerSourceRoots; + + public void execute() throws MojoExecutionException { + + if(null != wsdlFiles){ + for(int i=0; i< wsdlFiles.length ; ++i ){ + System.err.println("wsdlFiles" + wsdlFiles[i].getFileName()); + WSDLFileOption wf = wsdlFiles[i]; + + if(null == wf.getTargetDirectory()) + wf.setTargetDirectory(targetDirectory); + if(null == wf.getJavaPackage()){ + wf.setJavaPackage(javaPackage); + } + if(wf.getFileName() == null || wf.getFileName().length() ==0){ + throw new MojoExecutionException("no fileName specfied for wsdl."); + } + if(!wf.getFileName().canRead() || !wf.getFileName().isFile()){ + + throw new MojoExecutionException("file can not be read:"+wf.getFileName()); + } + + } + }else{ + + + + if (wsdlFile == null) { + + File[] files = new File(wsdlDir).listFiles(FILTER); + + wsdlFiles= new WSDLFileOption[files.length]; + for(int i= files.length -1; i> -1; --i){ + + + wsdlFiles[i] = new WSDLFileOption(); + wsdlFiles[i].setFileName(files[i]); + wsdlFiles[i].setJavaPackage(javaPackage); + wsdlFiles[i].setPorts(null); + wsdlFiles[i].setTargetDirectory(targetDirectory); + + + } + + } else { + wsdlFiles= new WSDLFileOption[]{new WSDLFileOption()}; + wsdlFiles[0].setFileName(wsdlFile); + wsdlFiles[0].setJavaPackage(javaPackage); + wsdlFiles[0].setPorts(null); + wsdlFiles[0].setTargetDirectory(targetDirectory); + } + } + + int genOptions = 0; + + for (int i = 0; i < wsdlFiles.length; i++) { + File file = wsdlFiles[i].getFileName(); + File marker = new File(targetDirectory, ".gen#" + file.getName()+".wsdl2java"); + if (file.lastModified() > marker.lastModified()) { + getLog().info("Generating Java service interfaces from " + file); + WSDL2JavaGenerator.generateFromWSDL(file.toString(), wsdlFiles[i].getPorts(), wsdlFiles[i].getTargetDirectory(), wsdlFiles[i].getJavaPackage(), null, genOptions); + } + try { + marker.createNewFile(); + } catch (IOException e) { + throw new MojoExecutionException(e.getMessage(), e); + } + marker.setLastModified(System.currentTimeMillis()); + } + + compilerSourceRoots.add(targetDirectory); + } + + private static final FileFilter FILTER = new FileFilter() { + public boolean accept(File pathname) { + return (pathname.isFile() || !pathname.isHidden()); + } + }; +}
\ No newline at end of file diff --git a/sca-java-1.x/branches/sca-java-1.6.2/tools/maven/maven-wsdl2java/src/main/java/org/apache/tuscany/tools/wsdl2java/plugin/WSDLFileOption.java b/sca-java-1.x/branches/sca-java-1.6.2/tools/maven/maven-wsdl2java/src/main/java/org/apache/tuscany/tools/wsdl2java/plugin/WSDLFileOption.java new file mode 100644 index 0000000000..cc10c351b1 --- /dev/null +++ b/sca-java-1.x/branches/sca-java-1.6.2/tools/maven/maven-wsdl2java/src/main/java/org/apache/tuscany/tools/wsdl2java/plugin/WSDLFileOption.java @@ -0,0 +1,92 @@ +/* + * 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.tools.wsdl2java.plugin; + +import java.io.File; + +public class WSDLFileOption { + /** + * Name of the WSDL file; if omitted all files in the directory are processed + * + */ + private File fileName; + + /** + * The Java package to generate into. By default the value is derived from the schema URI. + * + * + */ + private String javaPackage; + + /** + * The directory to generate into; defaults to ${project.build.directory}/wsdl2java-source + * + * + */ + private String targetDirectory; + + /** + * @parameter expression="${project.compileSourceRoots}" + * @readonly + */ + + private String ports[]; + + /** + * @parameter expression="${project.compileSourceRoots}" + * @readonly + */ + + + public WSDLFileOption(){} + + public String getJavaPackage() { + return javaPackage; + } + + public void setJavaPackage(String javaPackage) { + this.javaPackage = javaPackage; + } + + + public String[] getPorts() { + return ports; + } + + public void setPorts(String[] ports) { + this.ports = ports; + } + + public String getTargetDirectory() { + return targetDirectory; + } + + public void setTargetDirectory(String targetDirectory) { + this.targetDirectory = targetDirectory; + } + + public File getFileName() { + return fileName; + } + + public void setFileName(File fileName) { + this.fileName = fileName; + } + +} diff --git a/sca-java-1.x/branches/sca-java-1.6.2/tools/maven/pom.xml b/sca-java-1.x/branches/sca-java-1.6.2/tools/maven/pom.xml new file mode 100644 index 0000000000..83cf55ca68 --- /dev/null +++ b/sca-java-1.x/branches/sca-java-1.6.2/tools/maven/pom.xml @@ -0,0 +1,59 @@ +<?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-sca-tools</artifactId> + <version>1.6.1-SNAPSHOT</version> + <relativePath>../pom.xml</relativePath> + </parent> + + <packaging>pom</packaging> + <artifactId>tuscany-sca-maven-tools</artifactId> + <name>Apache Tuscany SCA Maven Tools</name> + + <profiles> + <profile> + <id>default</id> + <activation> + <activeByDefault>true</activeByDefault> + </activation> + <modules> + <module>maven-ant-generator</module> + <module>maven-dependency-lister</module> + <module>maven-incremental-build</module> + <module>maven-java2wsdl</module> + <module>maven-wsdl2java</module> + <module>maven-tuscany-bundle-plugin</module> + </modules> + </profile> + </profiles> + + <dependencies> + <dependency> + <groupId>junit</groupId> + <artifactId>junit</artifactId> + <version>4.2</version> + <scope>test</scope> + </dependency> + </dependencies> + +</project> diff --git a/sca-java-1.x/branches/sca-java-1.6.2/tools/pom.xml b/sca-java-1.x/branches/sca-java-1.6.2/tools/pom.xml new file mode 100644 index 0000000000..746b51eaaf --- /dev/null +++ b/sca-java-1.x/branches/sca-java-1.6.2/tools/pom.xml @@ -0,0 +1,48 @@ +<?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-sca</artifactId>
+ <version>1.6.1-SNAPSHOT</version>
+ <relativePath>../pom.xml</relativePath>
+ </parent>
+ <artifactId>tuscany-sca-tools</artifactId>
+ <packaging>pom</packaging>
+ <name>Apache Tuscany SCA Tools</name>
+
+ <profiles>
+ <profile>
+ <id>default</id>
+ <activation>
+ <activeByDefault>true</activeByDefault>
+ </activation>
+ <modules>
+ <module>contrib2wsdl</module>
+ <module>eclipse</module>
+ <module>java2wsdl</module>
+ <module>maven</module>
+ <module>wsdl2java</module>
+ </modules>
+ </profile>
+ </profiles>
+
+</project>
diff --git a/sca-java-1.x/branches/sca-java-1.6.2/tools/wsdl2java/LICENSE b/sca-java-1.x/branches/sca-java-1.6.2/tools/wsdl2java/LICENSE new file mode 100644 index 0000000000..8aa906c321 --- /dev/null +++ b/sca-java-1.x/branches/sca-java-1.6.2/tools/wsdl2java/LICENSE @@ -0,0 +1,205 @@ + + 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-1.x/branches/sca-java-1.6.2/tools/wsdl2java/NOTICE b/sca-java-1.x/branches/sca-java-1.6.2/tools/wsdl2java/NOTICE new file mode 100644 index 0000000000..ad2ba40961 --- /dev/null +++ b/sca-java-1.x/branches/sca-java-1.6.2/tools/wsdl2java/NOTICE @@ -0,0 +1,6 @@ +${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-1.x/branches/sca-java-1.6.2/tools/wsdl2java/pom.xml b/sca-java-1.x/branches/sca-java-1.6.2/tools/wsdl2java/pom.xml new file mode 100644 index 0000000000..ba2e40e4fe --- /dev/null +++ b/sca-java-1.x/branches/sca-java-1.6.2/tools/wsdl2java/pom.xml @@ -0,0 +1,210 @@ +<?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-sca-tools</artifactId> + <version>1.6.1-SNAPSHOT</version> + <relativePath>../pom.xml</relativePath> + </parent> + <artifactId>tuscany-wsdl2java</artifactId> + <name>Apache Tuscany SCA WSDL2Java Tool</name> + <dependencies> + <dependency> + <groupId>org.apache.tuscany.sca</groupId> + <artifactId>tuscany-sca-api</artifactId> + <version>1.6.1-SNAPSHOT</version> + <scope>test</scope> + </dependency> + <dependency> + <groupId>org.apache.tuscany.sdo</groupId> + <artifactId>tuscany-sdo-impl</artifactId> + <version>1.1.1</version> + <exclusions> + <exclusion> + <groupId>org.codehaus.woodstox</groupId> + <artifactId>wstx-asl</artifactId> + </exclusion> + <exclusion> + <groupId>stax</groupId> + <artifactId>stax-api</artifactId> + </exclusion> + </exclusions> + </dependency> + <dependency> + <groupId>org.apache.tuscany.sdo</groupId> + <artifactId>tuscany-sdo-tools</artifactId> + <version>1.1.1</version> + </dependency> + <dependency> + <groupId>com.sun.xml.bind</groupId> + <artifactId>jaxb-xjc</artifactId> + <version>2.1.7</version> + </dependency> + <dependency> + <groupId>javax.xml.bind</groupId> + <artifactId>jaxb-api</artifactId> + <version>2.1</version> + </dependency> + <dependency> + <groupId>com.sun.xml.bind</groupId> + <artifactId>jaxb-impl</artifactId> + <version>2.1.7</version> + <scope>runtime</scope> + <exclusions> + <exclusion> + <groupId>javax.xml.bind</groupId> + <artifactId>jsr173_api</artifactId> + </exclusion> + </exclusions> + </dependency> + <dependency> + <groupId>javax.xml.stream</groupId> + <artifactId>stax-api</artifactId> + <version>1.0-2</version> + </dependency> + <dependency> + <groupId>wsdl4j</groupId> + <artifactId>wsdl4j</artifactId> + <version>1.6.2</version> + </dependency> + <dependency> + <groupId>org.apache.neethi</groupId> + <artifactId>neethi</artifactId> + <version>2.0.4</version> + <exclusions> + <exclusion> + <groupId>wsdl4j</groupId> + <artifactId>wsdl4j</artifactId> + </exclusion> + <exclusion> + <groupId>org.codehaus.woodstox</groupId> + <artifactId>wstx-asl</artifactId> + </exclusion> + </exclusions> + </dependency> + + <dependency> + <groupId>org.apache.axis2</groupId> + <artifactId>axis2-java2wsdl</artifactId> + <version>1.4.1</version> + <exclusions> + <exclusion> + <groupId>org.apache.ant</groupId> + <artifactId>ant</artifactId> + </exclusion> + </exclusions> + </dependency> + <dependency> + <groupId>org.apache.axis2</groupId> + <artifactId>axis2-codegen</artifactId> + <version>1.4.1</version> + <exclusions> + <exclusion> + <groupId>org.apache.geronimo.specs</groupId> + <artifactId>geronimo-activation_1.1_spec</artifactId> + </exclusion> + </exclusions> + </dependency> + <dependency> + <groupId>org.eclipse.emf</groupId> + <artifactId>codegen</artifactId> + <version>2.2.3</version> + </dependency> + <dependency> + <groupId>org.eclipse.emf</groupId> + <artifactId>codegen-ecore</artifactId> + <version>2.2.3</version> + </dependency> + + <dependency> + <groupId>junit</groupId> + <artifactId>junit</artifactId> + <version>4.5</version> + <scope>test</scope> + </dependency> + </dependencies> + <build> + <plugins> + <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/sdo-source</source> + </sources> + </configuration> + </execution> + </executions> + </plugin> + <plugin> + <groupId>org.apache.tuscany.sdo</groupId> + <artifactId>tuscany-sdo-plugin</artifactId> + <version>1.1.1</version> + <executions> + <execution> + <id>generate-sdo</id> + <phase>generate-test-sources</phase> + <configuration> + <schemaFile>${basedir}/src/test/resources/CreditScoreDocLit.wsdl + </schemaFile> + <javaPackage>org.example.creditscore.doclit</javaPackage> + <noNotification>true</noNotification> + <noContainer>true</noContainer> + <noUnsettable>true</noUnsettable> + </configuration> + <goals> + <goal>generate</goal> + </goals> + </execution> + </executions> + </plugin> + </plugins> + </build> + <repositories> + <repository> + <snapshots> + <enabled>true</enabled> + </snapshots> + <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> + <!-- temporarily using indiana state univ as eclipse site diesnt have 2.2.2 at the moment --> + <id>indiana</id> + <url>http://ftp.ussg.iu.edu/eclipse/modeling/emf/emf/maven2/ + </url> + <snapshots> + <enabled>false</enabled> + </snapshots> + </repository> + </repositories> +</project> diff --git a/sca-java-1.x/branches/sca-java-1.6.2/tools/wsdl2java/src/main/java/org/apache/tuscany/tools/wsdl2java/generate/JavaInterfaceEmitter.java b/sca-java-1.x/branches/sca-java-1.6.2/tools/wsdl2java/src/main/java/org/apache/tuscany/tools/wsdl2java/generate/JavaInterfaceEmitter.java new file mode 100644 index 0000000000..08c7131208 --- /dev/null +++ b/sca-java-1.x/branches/sca-java-1.6.2/tools/wsdl2java/src/main/java/org/apache/tuscany/tools/wsdl2java/generate/JavaInterfaceEmitter.java @@ -0,0 +1,224 @@ +/* + * 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.tools.wsdl2java.generate; + +import static org.apache.tuscany.tools.wsdl2java.util.XMLNameUtil.getJavaNameFromXMLName; + +import java.io.File; +import java.util.ArrayList; +import java.util.List; + +import javax.xml.namespace.QName; + +import org.apache.axis2.description.AxisBindingOperation; +import org.apache.axis2.description.AxisMessage; +import org.apache.axis2.description.AxisOperation; +import org.apache.axis2.util.FileWriter; +import org.apache.axis2.wsdl.WSDLConstants; +import org.apache.axis2.wsdl.codegen.CodeGenConfiguration; +import org.apache.axis2.wsdl.codegen.emitter.JavaEmitter; +import org.apache.axis2.wsdl.codegen.writer.InterfaceWriter; +import org.apache.axis2.wsdl.databinding.TypeMapper; +import org.w3c.dom.Document; +import org.w3c.dom.Element; +/** + * Overrides the Axis2 JavaEmitter to generate unwrapped methods. + */ +public class JavaInterfaceEmitter extends JavaEmitter { + + private CodeGenConfiguration codegenConfiguration; + private TypeMapper typeMapper; + + @Override + public void setCodeGenConfiguration(CodeGenConfiguration configuration) { + super.setCodeGenConfiguration(configuration); + codegenConfiguration = configuration; + } + + @Override + public void setMapper(TypeMapper typeMapper) { + super.setMapper(typeMapper); + this.typeMapper = typeMapper; + } + + private List getParameterElementList(Document doc, AxisMessage message, boolean wrapped) { + List parameterElementList = new ArrayList(); + + if (message != null && message.getElementQName() != null) { + + SDODataBindingTypeMappingEntry typeMappingEntry = + (SDODataBindingTypeMappingEntry)this.typeMapper.getTypeMappingObject(message.getElementQName()); + List typeMappings; + if (wrapped) { + typeMappings = typeMappingEntry.getPropertyClassNames(); + if(typeMappings == null) { + typeMappings = new ArrayList(); + typeMappings.add(typeMappingEntry.getClassName()); + } + } else { + typeMappings = new ArrayList(); + typeMappings.add(typeMappingEntry.getClassName()); + } + + for (int i = 0; i < typeMappings.size(); i++) { + Element param = doc.createElement("param"); + parameterElementList.add(param); + + String typeMapping = (String)typeMappings.get(i); + + addAttribute(doc, "name", this.typeMapper.getParameterName(message.getElementQName()), param); + addAttribute(doc, "type", (typeMapping == null) ? "" : typeMapping, param); + + // add an extra attribute to say whether the type mapping is the + // default + // if (TypeMapper.DEFAULT_CLASS_NAME.equals(typeMapping)) { + if (typeMapper.getDefaultMappingName().equals(typeMapping)) { + + addAttribute(doc, "default", "yes", param); + } + + addAttribute(doc, "value", null, param); + + // add this as a body parameter + addAttribute(doc, "location", "body", param); + + } + } + + return parameterElementList; + } + + @Override + public List getParameterElementList(Document doc, List parameters, String location) { + List parameterElementList = new ArrayList(); + + if ((parameters != null) && !parameters.isEmpty()) { + int count = parameters.size(); + + for (int i = 0; i < count; i++) { + Element param = doc.createElement("param"); + QName name = (QName)parameters.get(i); + + addAttribute(doc, "name", this.typeMapper.getParameterName(name), param); + + String typeMapping = this.typeMapper.getTypeMappingName(name); + String typeMappingStr = (typeMapping == null) ? "" : typeMapping; + + addAttribute(doc, "type", typeMappingStr, param); + addAttribute(doc, "location", location, param); + parameterElementList.add(param); + } + } + + return parameterElementList; + } + + @Override + protected Element getInputElement(Document doc, AxisBindingOperation operation, List headerParameterQNameList) { + return getElement(doc, + "input", + operation.getAxisOperation().getMessage(WSDLConstants.MESSAGE_LABEL_IN_VALUE), + operation.getAxisOperation().getMessage(WSDLConstants.MESSAGE_LABEL_IN_VALUE).isWrapped(), + headerParameterQNameList); + } + + @Override + protected Element getOutputElement(Document doc, AxisBindingOperation operation, List headerParameterQNameList) { + return getElement(doc, + "output", + operation.getAxisOperation().getMessage(WSDLConstants.MESSAGE_LABEL_OUT_VALUE), + operation.getAxisOperation().getMessage(WSDLConstants.MESSAGE_LABEL_OUT_VALUE).isWrapped(), + headerParameterQNameList); + } + + protected Element getElement(Document doc, + String elementName, + AxisMessage message, + boolean wrapped, + List headerParameterQNameList) { + Element element = doc.createElement(elementName); + + List parameterElementList = getParameterElementList(doc, message, wrapped); + for (int i = 0; i < parameterElementList.size(); i++) { + element.appendChild((Element)parameterElementList.get(i)); + } + + List outputElementList = getParameterElementList(doc, headerParameterQNameList, "header"); + + for (int i = 0; i < outputElementList.size(); i++) { + element.appendChild((Element)outputElementList.get(i)); + } + + return element; + } + + @Override + protected void writeInterface(boolean writeDatabinders) throws Exception { + Document interfaceModel = createDOMDocumentForInterface(writeDatabinders); + if (!codegenConfiguration.getOutputLocation().exists()) { + codegenConfiguration.getOutputLocation().mkdirs(); + } + InterfaceWriter interfaceWriter = + new RemotableInterfaceWritter(this.codegenConfiguration.getOutputLocation(), this.codegenConfiguration + .getOutputLanguage()); + + String packageName = interfaceModel.getDocumentElement().getAttribute("package"); + String className = interfaceModel.getDocumentElement().getAttribute("name"); + + System.out.println(">> Generating Java class " + packageName + "." + className); + File outputFile = + FileWriter.createClassFile(this.codegenConfiguration.getOutputLocation(), packageName, className, ".java"); + if (outputFile.exists()) { + outputFile.delete(); + } + +// JIRA TUSCANY-1561 Port to Axis2 1.3 +// writeClass(interfaceModel, interfaceWriter); + + writeFile(interfaceModel, interfaceWriter); + } + + @Override + protected String makeJavaClassName(String word) { + // return XMLNameUtil.getJavaNameFromXMLName(word, true); + return getJavaNameFromXMLName(word, true); + } + + @Override + protected Element[] getFaultParamElements(Document doc, AxisOperation operation) { + ArrayList params = new ArrayList(); + ArrayList faultMessages = operation.getFaultMessages(); + + if (faultMessages != null && !faultMessages.isEmpty()) { + Element paramElement; + AxisMessage msg; + for (int i = 0; i < faultMessages.size(); i++) { + paramElement = doc.createElement("param"); + msg = (AxisMessage)faultMessages.get(i); + String msgClassName = WSDL2JavaGenerator.normalizeClassName(msg.getName()); + addAttribute(doc, "name", msgClassName, paramElement); + params.add(paramElement); + } + + return (Element[])params.toArray(new Element[params.size()]); + } else { + return new Element[] {};// return empty array + } + } +} diff --git a/sca-java-1.x/branches/sca-java-1.6.2/tools/wsdl2java/src/main/java/org/apache/tuscany/tools/wsdl2java/generate/JavaInterfaceGenerator.java b/sca-java-1.x/branches/sca-java-1.6.2/tools/wsdl2java/src/main/java/org/apache/tuscany/tools/wsdl2java/generate/JavaInterfaceGenerator.java new file mode 100644 index 0000000000..8e0c3683a3 --- /dev/null +++ b/sca-java-1.x/branches/sca-java-1.6.2/tools/wsdl2java/src/main/java/org/apache/tuscany/tools/wsdl2java/generate/JavaInterfaceGenerator.java @@ -0,0 +1,327 @@ +/* + * 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.tools.wsdl2java.generate; + +import java.io.File; +import java.io.FileOutputStream; +import java.io.IOException; +import java.io.PrintStream; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collections; +import java.util.HashSet; +import java.util.Iterator; +import java.util.LinkedList; +import java.util.List; +import java.util.Map; + +import javax.wsdl.Binding; +import javax.wsdl.Definition; +import javax.wsdl.Fault; +import javax.wsdl.Message; +import javax.wsdl.Operation; +import javax.wsdl.Part; +import javax.wsdl.Port; +import javax.wsdl.PortType; +import javax.wsdl.Service; +import javax.wsdl.WSDLException; +import javax.wsdl.factory.WSDLFactory; +import javax.wsdl.xml.WSDLReader; +import javax.xml.namespace.QName; +import javax.xml.parsers.ParserConfigurationException; + +import org.apache.axis2.AxisFault; +import org.apache.axis2.description.AxisService; +import org.apache.axis2.description.WSDL11ToAxisServiceBuilder; +import org.apache.axis2.util.FileWriter; +import org.apache.axis2.util.XMLUtils; +import org.apache.axis2.wsdl.codegen.CodeGenConfiguration; +import org.apache.axis2.wsdl.codegen.CodeGenerationException; +import org.apache.axis2.wsdl.codegen.extension.CodeGenExtension; +import org.apache.axis2.wsdl.codegen.extension.DefaultDatabindingExtension; +import org.apache.axis2.wsdl.codegen.extension.PackageFinder; +import org.apache.axis2.wsdl.codegen.extension.WSDLValidatorExtension; +import org.apache.axis2.wsdl.databinding.JavaTypeMapper; +import org.w3c.dom.Document; +import org.xml.sax.SAXException; + +import com.sun.tools.xjc.api.XJC; + +public class JavaInterfaceGenerator { + + private List codegenExtensions = new ArrayList(); + private List<CodeGenConfiguration> codegenConfigurations= new LinkedList<CodeGenConfiguration>(); + private String outputLocation; + + + + public JavaInterfaceGenerator(String uri, String ports[], String outputLocation, String packageName, + Map<QName, SDODataBindingTypeMappingEntry> typeMapping) throws CodeGenerationException { + this.outputLocation = outputLocation; + + Definition definition; + try { + definition = readWSDL(uri); + } catch (WSDLException e) { + throw new CodeGenerationException(e); + } + + HashSet<String> interestedPorts = ports == null ? null : new HashSet<String>(Arrays.asList(ports)); + + // Service service=(Service)definition.getServices().values().().next(); + + HashSet<QName> donePortTypes= new HashSet<QName>(); + + for (Iterator sIter = definition.getServices().values().iterator(); sIter.hasNext(); ) { + Service service = (Service) sIter.next(); + + QName serviceQname = service.getQName(); + for (Iterator pIter= service.getPorts().values().iterator(); pIter.hasNext(); ) { + Port port= (Port) pIter.next(); + if(interestedPorts != null && ! interestedPorts.contains(port.getName())) continue;//not iterested. + PortType portType= getPortType(port); + if(null == portType) continue; // not connected. + QName pQName= portType.getQName(); + if(donePortTypes.contains(pQName)) continue; //allready did it. + donePortTypes.add(pQName); + + if (packageName == null) { + //use JAXWS/JAXB NS->package default algorithm, not the SDO/EMF one + packageName = XJC.getDefaultPackageName(definition.getTargetNamespace()); + } + // + // Use WSDL4J object to generate exception classes + // + generateFaults(packageName, portType, typeMapping); + JavaTypeMapper typeMapper = new JavaTypeMapper(); + for (Map.Entry<QName, SDODataBindingTypeMappingEntry> e : typeMapping.entrySet()) { + typeMapper.addTypeMappingObject(e.getKey(), e.getValue()); + // Added for generation of exceptions from faults + typeMapper.addTypeMappingName(e.getKey(), e.getValue().getClassName()); + } + + + AxisService axisService; + WSDL11ToAxisServiceBuilder builder; + try { + // + // Added since at a newer level of Axis2, this doesn't work + // without the setCodegen(true) + // + builder = new WSDL11ToAxisServiceBuilder(definition, serviceQname, port.getName()); + builder.setCodegen(true); + axisService = builder.populateService(); + } catch (AxisFault e) { + throw new CodeGenerationException(e); + } + + axisService.setName(port.getBinding().getPortType().getQName().getLocalPart()); + CodeGenConfiguration codegenConfiguration = new CodeGenConfiguration(Collections.EMPTY_MAP); + codegenConfigurations.add(codegenConfiguration); + codegenConfiguration.setAxisService(axisService); + codegenConfiguration.setAdvancedCodeGenEnabled(false); + codegenConfiguration.setAsyncOn(false); + codegenConfiguration.setDatabindingType("sdo"); + codegenConfiguration.setGenerateAll(true); + codegenConfiguration.setGenerateDeployementDescriptor(false); + codegenConfiguration.setOutputLanguage("java"); + codegenConfiguration.setOutputLocation(new File(outputLocation)); + codegenConfiguration.setPackageName(packageName); + codegenConfiguration.setPackClasses(false); + codegenConfiguration.setPolicyMap(Collections.EMPTY_MAP); + codegenConfiguration.setPortName(port.getName()); + codegenConfiguration.setServerSide(false); + codegenConfiguration.setServiceName(service.getQName().getLocalPart()); + // This lines up with the sync/async variable from the XSL template + codegenConfiguration.setSyncOn(true); + codegenConfiguration.setTypeMapper(typeMapper); + +// JIRA TUSCANY-1561 Port to Axis2 1.3 +// codegenConfiguration.setWriteMessageReceiver(false); + codegenConfiguration.setSkipMessageReceiver(true); + + codegenConfiguration.setWriteTestCase(false); + addExtension(new WSDLValidatorExtension(), codegenConfiguration); + addExtension(new PackageFinder(), codegenConfiguration); + addExtension(new SDODataBindingCodegenExtension(typeMapper), codegenConfiguration); + addExtension(new DefaultDatabindingExtension(), codegenConfiguration); + } + } + } + + + private PortType getPortType(Port port) { + Binding binding = port.getBinding(); + if(null != binding){ + return binding.getPortType(); + } + return null; + + } + + + @SuppressWarnings("unchecked") + private void addExtension(CodeGenExtension ext, CodeGenConfiguration codegenConfiguration) { + //ext.init(codegenConfiguration); + codegenExtensions.add(new Object[]{ext, codegenConfiguration}); + } + + public void generate() throws CodeGenerationException { + try { + for (int i = 0; i < codegenExtensions.size(); i++) { + // CodeGenExtension + Object[] pair = (Object[])codegenExtensions.get(i); + + CodeGenExtension cge = (CodeGenExtension)pair[0]; + CodeGenConfiguration cgf = (CodeGenConfiguration)pair[1]; + + cge.engage(cgf); + } + + for (CodeGenConfiguration codegenConfiguration : codegenConfigurations) { + JavaInterfaceEmitter emitter = new JavaInterfaceEmitter(); + emitter.setCodeGenConfiguration(codegenConfiguration); + emitter.setMapper(codegenConfiguration.getTypeMapper()); + + emitter.writeInterface(false); + } + + } catch (Exception e) { + throw new CodeGenerationException(e); + } + } + + /** + * Read the WSDL file + * + * @param uri + * @return + * @throws WSDLException + */ + private Definition readWSDL(String uri) throws WSDLException { + + WSDLReader reader = WSDLFactory.newInstance().newWSDLReader(); + reader.setFeature("javax.wsdl.importDocuments", true); + + File file = new File(uri); + String baseURI; + + if (uri.startsWith("http://")) { + baseURI = uri; + } else { + if (file.getParentFile() == null) { + try { + baseURI = new File(".").getCanonicalFile().toURI().toString(); + } catch (IOException e) { + throw new RuntimeException(e); + } + } else { + baseURI = file.getParentFile().toURI().toString(); + } + } + + Document doc; + try { + doc = XMLUtils.newDocument(uri); + } catch (ParserConfigurationException e) { + throw new WSDLException(WSDLException.PARSER_ERROR, "Parser Configuration Error", e); + } catch (SAXException e) { + throw new WSDLException(WSDLException.PARSER_ERROR, "Parser SAX Error", e); + + } catch (IOException e) { + throw new WSDLException(WSDLException.INVALID_WSDL, "IO Error", e); + } + + return reader.readWSDL(baseURI, doc); + } + + private void generateFaults(String packageName, PortType portType, Map<QName, SDODataBindingTypeMappingEntry> typeMapping) + throws CodeGenerationException{ + + for (Object o: portType.getOperations()) { + Operation op = (Operation)o; + Map messageMap = op.getFaults(); + Iterator iter = messageMap.values().iterator(); + while (iter.hasNext()) { + Fault fault = (Fault)iter.next(); + Message faultMsg = fault.getMessage(); + Iterator iter2 = faultMsg.getParts().values().iterator(); + Part faultMsgPart = (Part)iter2.next(); + // TODO - if other parts throw exc + QName faultMsgQName = faultMsg.getQName(); + QName faultMsgPartElementQName = faultMsgPart.getElementName(); + String faultClassName = typeMapping.get(faultMsgPartElementQName).getClassName(); + writeException(packageName, faultMsgQName, faultClassName, faultMsgPartElementQName); + } + } + } + + private void writeException(String packageName, QName faultMsgQName, String faultClassName, QName faultMsgPartElementQName) + throws CodeGenerationException{ + + try { + String faultWrapperClassName = + WSDL2JavaGenerator.normalizeClassName(faultMsgQName.getLocalPart()); + + File outputDir = new File(this.outputLocation); + + if (!outputDir.exists()) { + outputDir.mkdirs(); + } + File outputFile = FileWriter.createClassFile(outputDir, + packageName, faultWrapperClassName, ".java"); + + FileOutputStream fileStream = new FileOutputStream(outputFile); + PrintStream stream = new PrintStream(fileStream); + + System.out.println(">> Generating Java exception class " + packageName + "." + faultWrapperClassName); + + stream.println(); + stream.println("package " + packageName + ";"); + stream.println(); + stream.println("import javax.xml.ws.WebFault;"); + stream.println(); + stream.println("@WebFault(name=\"" + faultMsgPartElementQName.getLocalPart() + + "\", targetNamespace=\"" + + faultMsgPartElementQName.getNamespaceURI() + + "\")"); + stream.println("public class " + faultWrapperClassName + " extends Exception {"); + stream.println(); + stream.println(" private " + faultClassName + " fault;"); + stream.println(); + stream.println(" public " + faultWrapperClassName + "(String message, " + faultClassName + " fault) {"); + stream.println(" super(message);"); + stream.println(" this.fault = fault;"); + stream.println(" }"); + stream.println(); + stream.println(" public " + faultWrapperClassName + "(String message, " + faultClassName + " fault, Throwable cause) {"); + stream.println(" super(message, cause);"); + stream.println(" this.fault = fault;"); + stream.println(" }"); + stream.println(); + stream.println(" public " + faultClassName + " getFaultInfo() {"); + stream.println(" return this.fault;"); + stream.println(" }"); + stream.println("}"); + stream.println(); + } catch (Exception e) { + throw new CodeGenerationException(e); + } + } +} diff --git a/sca-java-1.x/branches/sca-java-1.6.2/tools/wsdl2java/src/main/java/org/apache/tuscany/tools/wsdl2java/generate/RemotableInterfaceWritter.java b/sca-java-1.x/branches/sca-java-1.6.2/tools/wsdl2java/src/main/java/org/apache/tuscany/tools/wsdl2java/generate/RemotableInterfaceWritter.java new file mode 100644 index 0000000000..0c4f42633a --- /dev/null +++ b/sca-java-1.x/branches/sca-java-1.6.2/tools/wsdl2java/src/main/java/org/apache/tuscany/tools/wsdl2java/generate/RemotableInterfaceWritter.java @@ -0,0 +1,53 @@ +/* + * 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.tools.wsdl2java.generate; + +import java.io.File; + +import org.apache.axis2.wsdl.codegen.CodeGenerationException; +import org.apache.axis2.wsdl.codegen.writer.InterfaceWriter; + +/** + * + */ +public class RemotableInterfaceWritter extends InterfaceWriter { + private static final String REMOTABLE_INTERFACE_TEMPLATE="/RemotableInterfaceTemplate.xsl"; + + public RemotableInterfaceWritter(String outputFileLocation) { + super(outputFileLocation); + } + + public RemotableInterfaceWritter(File outputFileLocation, String language) { + super(outputFileLocation, language); + } + + /** + * Loads the template. + */ + @Override + public void loadTemplate() throws CodeGenerationException { + // the default behavior for the class writers is to use the property map from the language specific types + // The properties are arranged in the following order + // <lang-name>.* .template=<write-class>,<template-name> + + //override original behaviour to always load the template we specified + this.xsltStream = this.getClass().getResourceAsStream(REMOTABLE_INTERFACE_TEMPLATE); + + } +} diff --git a/sca-java-1.x/branches/sca-java-1.6.2/tools/wsdl2java/src/main/java/org/apache/tuscany/tools/wsdl2java/generate/SDODataBindingCodegenExtension.java b/sca-java-1.x/branches/sca-java-1.6.2/tools/wsdl2java/src/main/java/org/apache/tuscany/tools/wsdl2java/generate/SDODataBindingCodegenExtension.java new file mode 100644 index 0000000000..4ab152fb90 --- /dev/null +++ b/sca-java-1.x/branches/sca-java-1.6.2/tools/wsdl2java/src/main/java/org/apache/tuscany/tools/wsdl2java/generate/SDODataBindingCodegenExtension.java @@ -0,0 +1,63 @@ +/* + * 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.tools.wsdl2java.generate; + +import org.apache.axis2.wsdl.codegen.CodeGenConfiguration; +import org.apache.axis2.wsdl.codegen.CodeGenerationException; +import org.apache.axis2.wsdl.codegen.extension.AbstractDBProcessingExtension; +import org.apache.axis2.wsdl.databinding.TypeMapper; + +/** + * SDO data binding codegen extension. + */ +public class SDODataBindingCodegenExtension extends AbstractDBProcessingExtension { + + private TypeMapper typeMapper; + + public SDODataBindingCodegenExtension(TypeMapper typeMapper) { + this.typeMapper=typeMapper; + } + + @Override + protected boolean testFallThrough(String dbFrameworkName) { + return !dbFrameworkName.equals("sdo"); + } + +// public void engage() { +// if (testFallThrough(configuration.getDatabindingType())) { +// return; +// } +// +// // Set the type mapper into the config +// configuration.setTypeMapper(typeMapper); +// +// } + + public void engage(CodeGenConfiguration configuration) throws CodeGenerationException { + if (testFallThrough(configuration.getDatabindingType())) { + return; + } + + // Set the type mapper into the config + configuration.setTypeMapper(typeMapper); + + + } + +} diff --git a/sca-java-1.x/branches/sca-java-1.6.2/tools/wsdl2java/src/main/java/org/apache/tuscany/tools/wsdl2java/generate/SDODataBindingTypeMappingEntry.java b/sca-java-1.x/branches/sca-java-1.6.2/tools/wsdl2java/src/main/java/org/apache/tuscany/tools/wsdl2java/generate/SDODataBindingTypeMappingEntry.java new file mode 100644 index 0000000000..2d81ef12bf --- /dev/null +++ b/sca-java-1.x/branches/sca-java-1.6.2/tools/wsdl2java/src/main/java/org/apache/tuscany/tools/wsdl2java/generate/SDODataBindingTypeMappingEntry.java @@ -0,0 +1,51 @@ +/* + * 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.tools.wsdl2java.generate; + +import java.util.List; + +/** + * This represents a type mapping entry, used by the JavaInterfaceEmitter to generate + * method signatures. + */ +public class SDODataBindingTypeMappingEntry { + + private final boolean anonymous; + private final List<String> propertyClassNames; + private final String className; + + public SDODataBindingTypeMappingEntry(String className, boolean anonymous, List<String> propertyClassNames) { + this.className = className; + this.anonymous = anonymous; + this.propertyClassNames = propertyClassNames; + } + + public boolean isAnonymous() { + return anonymous; + } + + public String getClassName() { + return className; + } + + public List<String> getPropertyClassNames() { + return propertyClassNames; + } + +} diff --git a/sca-java-1.x/branches/sca-java-1.6.2/tools/wsdl2java/src/main/java/org/apache/tuscany/tools/wsdl2java/generate/WSDL2JavaGenerator.java b/sca-java-1.x/branches/sca-java-1.6.2/tools/wsdl2java/src/main/java/org/apache/tuscany/tools/wsdl2java/generate/WSDL2JavaGenerator.java new file mode 100644 index 0000000000..f6d1f3a64a --- /dev/null +++ b/sca-java-1.x/branches/sca-java-1.6.2/tools/wsdl2java/src/main/java/org/apache/tuscany/tools/wsdl2java/generate/WSDL2JavaGenerator.java @@ -0,0 +1,529 @@ +/* + * 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.tools.wsdl2java.generate; + +import java.io.BufferedReader; +import java.io.File; +import java.io.FileInputStream; +import java.io.FileReader; +import java.io.IOException; +import java.io.InputStream; +import java.util.ArrayList; +import java.util.Collections; +import java.util.HashMap; +import java.util.Iterator; +import java.util.List; +import java.util.Map; +import java.util.StringTokenizer; +import java.util.Vector; + +import javax.xml.namespace.QName; + +import org.apache.tuscany.sdo.generate.XSD2JavaGenerator; +import org.apache.tuscany.sdo.helper.HelperContextImpl; +import org.apache.tuscany.sdo.util.DataObjectUtil; +import org.eclipse.emf.codegen.ecore.genmodel.GenClass; +import org.eclipse.emf.codegen.ecore.genmodel.GenModel; +import org.eclipse.emf.codegen.ecore.genmodel.GenModelFactory; +import org.eclipse.emf.codegen.ecore.genmodel.GenPackage; +import org.eclipse.emf.codegen.util.CodeGenUtil; +import org.eclipse.emf.common.util.Diagnostic; +import org.eclipse.emf.common.util.URI; +import org.eclipse.emf.ecore.EClass; +import org.eclipse.emf.ecore.EClassifier; +import org.eclipse.emf.ecore.EPackage; +import org.eclipse.emf.ecore.EStructuralFeature; +import org.eclipse.emf.ecore.impl.EPackageRegistryImpl; +import org.eclipse.emf.ecore.resource.Resource; +import org.eclipse.emf.ecore.resource.ResourceSet; +import org.eclipse.emf.ecore.util.BasicExtendedMetaData; +import org.eclipse.emf.ecore.util.ExtendedMetaData; + +import commonj.sdo.helper.HelperContext; +import commonj.sdo.helper.XSDHelper; + +public class WSDL2JavaGenerator { + //Note: Dynamic SDO is defined as 0x4000 to avoid conflict with XSD2Java genOptions + static protected final int DYNAMIC_SDO = 0x1; + static protected final int GENERATE_SDO = 0x2; + static protected final int VERBOSE_MODE = 0x4; + static protected final String NO_GEN_PARM = "-noGenerate"; + static protected final String TARGET_DIR_PARM = "-targetDirectory"; + static protected final String JAVA_PACKAGE_PARM = "-javaPackage"; + static protected final String ALL_NAMESPACES_PARM = "-schemaNamespace all"; + + /** + * Generate Java interfaces from WSDL Usage arguments: [ -targetDirectory + * <target-root-directory> ] [ -javaPackage <java-package-name> ] + * <wsdl-file> For example: generate somedir/somefile.wsdl Basic options: + * -targetDirectory Generates the Java source code in the specified + * directory. By default, the code is generated in the same directory as the + * input WSDL file. -javaPackage Overrides the Java package for the + * generated classes. By default the package name is derived from the + * targetNamespace of the WSDL definition being generated. For example, if + * the targetNamespace is "http://www.example.com/simple", the default + * package will be "com.example.simple". + */ + public static void main(String args[]) { + if (args.length == 0) { + printUsage(); + return; + } + + String portName = null; + String targetDirectory = null; + String wsdlJavaPackage = null; + String xsdJavaPackage = null; + String sdoGenArgs = null; + String sdoGenArgsString = null; + int genOptions = 0; + + int index = 0; + for (; index < args.length && args[index].startsWith("-"); ++index) { + if (args[index].equalsIgnoreCase("-port")) { + portName = args[++index]; + } else if (args[index].equalsIgnoreCase("-targetDirectory")) { + targetDirectory = args[++index]; + } else if (args[index].equalsIgnoreCase("-javaPackage")) { + wsdlJavaPackage = args[++index]; + } else if (args[index].equalsIgnoreCase("-dynamicSDO")) { + genOptions |= DYNAMIC_SDO; + } else if (args[index].equalsIgnoreCase("-generateSDO")){ + genOptions |= GENERATE_SDO; + } else if (args[index].equalsIgnoreCase("-sdoGenArgs")){ + sdoGenArgs = args[++index]; + } else if (args[index].equalsIgnoreCase("-verbose")){ + genOptions |= VERBOSE_MODE; + } + // else if (...) + else { + printUsage(); + return; + } + } + if (sdoGenArgs!=null && (GENERATE_SDO & genOptions)== 0){ + genOptions |= GENERATE_SDO; + } + + if (targetDirectory == null) { + targetDirectory = "."; + } + String wsdlFileName = args[index]; + if (wsdlFileName == null || ((DYNAMIC_SDO & genOptions)!=0 && (GENERATE_SDO & genOptions)!= 0)) { + printUsage(); + return; + } + if (sdoGenArgs !=null){ + try { + File inFile = new File(sdoGenArgs).getAbsoluteFile(); + FileReader inputFile = new FileReader(inFile); + BufferedReader bufRead = new BufferedReader(inputFile); + StringBuffer fileContents= new StringBuffer(); + String line; + while ((line = bufRead.readLine())!=null){ + fileContents.append(line + " "); + } + sdoGenArgsString = fileContents.toString(); + } catch (IOException e) { + e.printStackTrace(); + throw new IllegalArgumentException(e); + } + } else { + sdoGenArgsString = null; + } + + if ((DYNAMIC_SDO & genOptions) != 0){ + generateDynamicFromWSDL(wsdlFileName, portName!=null? new String[]{portName}:null, targetDirectory, wsdlJavaPackage, xsdJavaPackage, genOptions); + } else { + generateFromWSDL(wsdlFileName, portName!=null? new String[]{portName}:null, targetDirectory, wsdlJavaPackage, genOptions, sdoGenArgsString); + } + + } + + @SuppressWarnings("unchecked") + public static void generateFromWSDL(String wsdlFileName, String[] ports, String targetDirectory, String wsdlJavaPackage, int genOptions, String sdoGenArgsString) + { + try { + if (targetDirectory == null) { + targetDirectory = new File(wsdlFileName).getCanonicalFile().getParent(); + } else { + targetDirectory = new File(targetDirectory).getCanonicalPath(); + } + + // Populate the typeMapping table that will be given to the Axis2 WSDL2Java + Map<QName, SDODataBindingTypeMappingEntry> typeMapping = + new HashMap<QName, SDODataBindingTypeMappingEntry>(); + StringBuffer buildCommand = new StringBuffer(); + //build XSD command lines + //build generic command for simple case & dynamic SDO + buildCommand.append(ALL_NAMESPACES_PARM); + if (sdoGenArgsString == null){ + buildCommand.append(" " + TARGET_DIR_PARM + " " + targetDirectory); + if (wsdlJavaPackage != null && (genOptions & GENERATE_SDO)!=0){ + buildCommand.append(" " + JAVA_PACKAGE_PARM + " " + wsdlJavaPackage); + } + if ((genOptions & GENERATE_SDO)==0){ + buildCommand.append(" "); + buildCommand.append(NO_GEN_PARM); + } + } else { + buildCommand.append(" "); + buildCommand.append(sdoGenArgsString); + } + + //TUSCANY-1642 - We shouldn't split the wsdlFileName as it my contain a filename with spaces + Vector sdoCommand = new Vector(java.util.Arrays.asList(buildCommand.toString().split("\\s+"))); + sdoCommand.add(wsdlFileName); + + String[] sdoGenCommand = new String[sdoCommand.size()]; + sdoCommand.toArray(sdoGenCommand); + + if ((genOptions & VERBOSE_MODE)!=0){ + System.out.println("Options passed to XSD2Java: "); + for (int i=0; i<sdoGenCommand.length; i++){ System.out.println("\"" + sdoGenCommand[i] + "\"");} + } + + XSD2JavaGenerator codeGen = new XSD2JavaGenerator(); + try { + codeGen.generateFromXMLSchema( sdoGenCommand ); + } catch (IllegalArgumentException e) { + System.out.println("Specified Invalid XSD2Java Arguments.\nFollow the XSD2Java usage, omitting the wsdl/xsd file argument."); + throw new IllegalArgumentException(e); + } + + List packages = codeGen.getGeneratedPackageInfo(); + + for (Iterator iter = packages.iterator(); iter.hasNext();) + { + XSD2JavaGenerator.GeneratedPackage packageInfo = (XSD2JavaGenerator.GeneratedPackage)iter.next(); + for (Iterator iterClass = packageInfo.getClasses().iterator(); iterClass.hasNext();) + { + XSD2JavaGenerator.GeneratedPackage.PackageClassInfo classInfo = (XSD2JavaGenerator.GeneratedPackage.PackageClassInfo)iterClass.next(); + SDODataBindingTypeMappingEntry typeMappingEntry; + if ((genOptions & DYNAMIC_SDO)==0){ + + typeMappingEntry = new SDODataBindingTypeMappingEntry(classInfo.getClassName(), classInfo.getAnonymous(), classInfo.getProperties()); + } else { + // TO DO implement dynamic sdo case + typeMappingEntry = null; + System.out.println(); + } + QName qname = new QName(packageInfo.getNamespace(),classInfo.getName()); + + //FIXME Workaround for JIRA TUSCANY-1673 + // Do not overwrite a typemapping entry describing a element typed by an anonymous + // complex type with a typemapping entry describing a complex type named like the + // element + SDODataBindingTypeMappingEntry existingTypeMapping = typeMapping.get(qname); + if (existingTypeMapping == null || !existingTypeMapping.isAnonymous()) { + typeMapping.put(qname, typeMappingEntry); + } + } + } + + JavaInterfaceGenerator codeGenerator = new JavaInterfaceGenerator(wsdlFileName, + ports, + targetDirectory, + wsdlJavaPackage, + typeMapping); + codeGenerator.generate(); + } catch (Exception e) { + e.printStackTrace(); + throw new IllegalArgumentException(e); + } + } + + @SuppressWarnings("unchecked") + public static void generateFromWSDL(String wsdlFileName, String targetDirectory, + String wsdlJavaPackage, + String xsdJavaPackage, int genOptions){ + String sdoGenArgsString = null; + if (xsdJavaPackage != null){ + sdoGenArgsString = JAVA_PACKAGE_PARM + " " + xsdJavaPackage; + } + generateFromWSDL( wsdlFileName, null, targetDirectory, wsdlJavaPackage, genOptions, sdoGenArgsString); + + } + + public static void generateFromWSDL(String wsdlFileName, String[] ports, + String targetDirectory, String wsdlJavaPackage, + String xsdJavaPackage, int genOptions) { + String sdoGenArgsString = null; + if (xsdJavaPackage != null){ + sdoGenArgsString = JAVA_PACKAGE_PARM + " " + xsdJavaPackage; + } + generateFromWSDL( wsdlFileName, null, targetDirectory, wsdlJavaPackage, genOptions, sdoGenArgsString); + } + + @SuppressWarnings("unchecked") + public static void generateDynamicFromWSDL(String wsdlFileName, String[] ports, + String targetDirectory, String wsdlJavaPackage, + String xsdJavaPackage, int genOptions) + { + + // Initialize the SDO runtime + DataObjectUtil.initRuntime(); + EPackage.Registry packageRegistry = new EPackageRegistryImpl(EPackage.Registry.INSTANCE); + ExtendedMetaData extendedMetaData = new BasicExtendedMetaData(packageRegistry); + HelperContext context = new HelperContextImpl(extendedMetaData, false); + XSDHelper xsdHelper = context.getXSDHelper(); + + try { + + // Load the WSDL file + File inputFile = new File(wsdlFileName).getAbsoluteFile(); + InputStream inputStream = new FileInputStream(inputFile); + + // Define SDO metadata + xsdHelper.define(inputStream, inputFile.toURI().toString()); + + if (targetDirectory == null) { + targetDirectory = new File(wsdlFileName).getCanonicalFile().getParent(); + } else { + targetDirectory = new File(targetDirectory).getCanonicalPath(); + } + + // Populate the typeMapping table that will be given to the Axis2 WSDL2Java + Map<QName, SDODataBindingTypeMappingEntry> typeMapping = + new HashMap<QName, SDODataBindingTypeMappingEntry>(); + if (!packageRegistry.values().isEmpty()) { + ResourceSet resourceSet = DataObjectUtil.createResourceSet(); + + // Populate list of GenPackages and a map of GenClasses keyed by EClass + List<GenPackage> genPackages = new ArrayList<GenPackage>(); + Map<EClass, GenClass> genClasses = new HashMap<EClass, GenClass>(); + for (Iterator iter = packageRegistry.values().iterator(); iter.hasNext();) { + EPackage currentEPackage = (EPackage)iter.next(); + String currentBasePackage = extractBasePackageName(currentEPackage, xsdJavaPackage); + String currentPrefix = CodeGenUtil.capName(currentEPackage.getName()); + + GenPackage currentGenPackage = createGenPackage(currentEPackage, currentBasePackage, + currentPrefix, genOptions, resourceSet); + genPackages.add(currentGenPackage); + for (GenClass genClass : (List<GenClass>)currentGenPackage.getGenClasses()) { + genClasses.put(genClass.getEcoreClass(), genClass); + } + + } + + // Process all the SDO packages + // Populate the QName -> interfaceName typeMapping table + for (GenPackage currentGenPackage : genPackages) { + EPackage currentEPackage = currentGenPackage.getEcorePackage(); + + // Populate the type mappings for all the complex types + for (GenClass genClass : (List<GenClass>)currentGenPackage.getGenClasses()) { + QName qname = new QName(extendedMetaData.getNamespace(currentEPackage), + extendedMetaData.getName(genClass.getEcoreClass())); + String interfaceName = (DYNAMIC_SDO & genOptions) == DYNAMIC_SDO ? "commonj.sdo.DataObject" : currentGenPackage + .getInterfacePackageName() + + '.' + genClass.getInterfaceName(); + SDODataBindingTypeMappingEntry typeMappingEntry = + new SDODataBindingTypeMappingEntry(interfaceName, false, null); + typeMapping.put(qname, typeMappingEntry); + } + + // Process all the global XSD elements + EClass documentRoot = extendedMetaData.getDocumentRoot(currentEPackage); + if (documentRoot != null) { + for (EStructuralFeature element : (List<EStructuralFeature>)extendedMetaData + .getElements(documentRoot)) { + EClassifier elementType = element.getEType(); + + // Handle a complex type + if (elementType instanceof EClass) { + EClass eClass = (EClass)elementType; + + GenClass genClass = genClasses.get(elementType); + QName qname = new QName(extendedMetaData.getNamespace(currentEPackage), + extendedMetaData.getName(element)); + String interfaceName = (DYNAMIC_SDO & genOptions) == DYNAMIC_SDO ? "commonj.sdo.DataObject" : genClass + .getGenPackage().getInterfacePackageName() + + '.' + genClass.getInterfaceName(); + boolean anonymous = extendedMetaData.isAnonymous(eClass); + + // Build list of property class names + List<String> propertyClassNames=new ArrayList<String>(); + for (EStructuralFeature feature : (List<EStructuralFeature>)eClass.getEStructuralFeatures()) { + EClassifier propertyType = feature.getEType(); + if (propertyType instanceof EClass) { + GenClass propertyGenClass = genClasses.get(propertyType); + String propertyClassName = (DYNAMIC_SDO & genOptions) == DYNAMIC_SDO ? "commonj.sdo.DataObject" + : propertyGenClass.getGenPackage().getInterfacePackageName() + '.' + + '.' + propertyGenClass.getInterfaceName(); + propertyClassNames.add(propertyClassName); + } else if (propertyType instanceof EClassifier) { + String propertyClassName = propertyType.getInstanceClass().getName(); + propertyClassNames.add(propertyClassName); + } + } + + SDODataBindingTypeMappingEntry typeMappingEntry = + new SDODataBindingTypeMappingEntry(interfaceName, anonymous, propertyClassNames); + typeMapping.put(qname, typeMappingEntry); + + } else { + + // Handle a simple type + QName qname = new QName(extendedMetaData.getNamespace(currentEPackage), + extendedMetaData.getName(element)); + String className = elementType.getInstanceClass().getName(); + SDODataBindingTypeMappingEntry typeMappingEntry = + new SDODataBindingTypeMappingEntry(className, false, null); + typeMapping.put(qname, typeMappingEntry); + } + } + } + } + } + + try { + JavaInterfaceGenerator codeGenerator = new JavaInterfaceGenerator(wsdlFileName, + ports, + targetDirectory, + wsdlJavaPackage, + typeMapping); + codeGenerator.generate(); + } catch (Exception e) { + e.printStackTrace(); + throw new IllegalArgumentException(e); + } + + } catch (IOException e) { + e.printStackTrace(); + throw new IllegalArgumentException(e); + } + } + + @SuppressWarnings("unchecked") + public static GenPackage createGenPackage(EPackage ePackage, String basePackage, String prefix, + int genOptions, ResourceSet resourceSet) { + GenModel genModel = ecore2GenModel(ePackage, basePackage, prefix, genOptions); + + URI ecoreURI = URI.createURI("file:///" + ePackage.getName() + ".ecore"); + URI genModelURI = ecoreURI.trimFileExtension().appendFileExtension("genmodel"); + + Resource ecoreResource = resourceSet.createResource(ecoreURI); + ecoreResource.getContents().add(ePackage); + + Resource genModelResource = resourceSet.createResource(genModelURI); + genModelResource.getContents().add(genModel); + + return (GenPackage)genModel.getGenPackages().get(0); + } + + public static GenModel ecore2GenModel(EPackage ePackage, String basePackage, + String prefix, int genOptions) { + GenModel genModel = GenModelFactory.eINSTANCE.createGenModel(); + genModel.initialize(Collections.singleton(ePackage)); + + genModel.setRootExtendsInterface(""); + genModel.setRootImplementsInterface("commonj.sdo.DataObject"); + genModel.setRootExtendsClass("org.apache.tuscany.sdo.impl.DataObjectImpl"); + genModel.setFeatureMapWrapperInterface("commonj.sdo.Sequence"); + genModel.setFeatureMapWrapperInternalInterface("org.apache.tuscany.sdo.util.BasicSequence"); + genModel.setFeatureMapWrapperClass("org.apache.tuscany.sdo.util.BasicSequence"); + genModel.setSuppressEMFTypes(true); + genModel.setSuppressEMFMetaData(true); + genModel.setSuppressEMFModelTags(true); + genModel.setCanGenerate(true); + // FIXME workaround java.lang.NoClassDefFoundError: + // org/eclipse/jdt/core/jdom/IDOMNode with 02162006 build + genModel.setFacadeHelperClass("Hack"); + genModel.setForceOverwrite(true); + + GenPackage genPackage = (GenPackage)genModel.getGenPackages().get(0); + + if (basePackage != null) { + genPackage.setBasePackage(basePackage); + } + if (prefix != null) { + genPackage.setPrefix(prefix); + } + + return genModel; + } + + public static String extractBasePackageName(EPackage ePackage, String javaPackage) { + String qualifiedName = javaPackage != null ? javaPackage : ePackage.getName(); + String name = /* CodeGenUtil. */shortName(qualifiedName); + String baseName = qualifiedName.substring(0, qualifiedName.length() - name.length()); + if (javaPackage != null || !name.equals(qualifiedName)) { + ePackage.setName(name); + } + return baseName != null ? /* CodeGenUtil. */safeQualifiedName(baseName) : null; + } + + public static String shortName(String qualifiedName) { + int index = qualifiedName.lastIndexOf("."); + return index != -1 ? qualifiedName.substring(index + 1) : qualifiedName; + } + + public static String safeQualifiedName(String qualifiedName) { + StringBuffer safeQualifiedName = new StringBuffer(); + for (StringTokenizer stringTokenizer = new StringTokenizer(qualifiedName, "."); + stringTokenizer.hasMoreTokens();) { + String name = stringTokenizer.nextToken(); + safeQualifiedName.append(CodeGenUtil.safeName(name)); + if (stringTokenizer.hasMoreTokens()) { + safeQualifiedName.append('.'); + } + } + return safeQualifiedName.toString(); + } + /* + * Converts myClassName to MyClassName + */ + public static String normalizeClassName(String className) { + + StringBuffer normalizedClassName = new StringBuffer(); + + String beginPart = className.substring(0,1); + String endPart = className.substring(1); + + normalizedClassName.append(beginPart.toUpperCase()); + normalizedClassName.append(endPart); + + return normalizedClassName.toString(); + } + + protected static void printDiagnostic(Diagnostic diagnostic, String indent) { + System.out.print(indent); + System.out.println(diagnostic.getMessage()); + for (Iterator i = diagnostic.getChildren().iterator(); i.hasNext();) { + printDiagnostic((Diagnostic)i.next(), indent + " "); + } + } + + protected static void printUsage() { + System.out.println("Usage arguments:"); + System.out.println(" [ -targetDirectory <target-root-directory> ]"); + System.out.println(" [ -javaPackage <java-package-name> ]"); + System.out.println(" [ -dynamicSDO | -generateSDO [ -sdoGenArgs <command-file-name> ]]"); + System.out.println(" [ -verbose ]"); + System.out.println(" <wsdl-file>"); + System.out.println(""); + System.out.println("Where <command-file-name> is a text file containing valid XSD2Java command\narguments (w/o the wsdl/xsd file name)"); + System.out.println("For example:"); + System.out.println(""); + System.out.println(" WSDL2JavaGenerator -targetDirectory myDir somedir/somefile.wsdl"); + } + + +} diff --git a/sca-java-1.x/branches/sca-java-1.6.2/tools/wsdl2java/src/main/java/org/apache/tuscany/tools/wsdl2java/util/XMLNameUtil.java b/sca-java-1.x/branches/sca-java-1.6.2/tools/wsdl2java/src/main/java/org/apache/tuscany/tools/wsdl2java/util/XMLNameUtil.java new file mode 100644 index 0000000000..d0b325982c --- /dev/null +++ b/sca-java-1.x/branches/sca-java-1.6.2/tools/wsdl2java/src/main/java/org/apache/tuscany/tools/wsdl2java/util/XMLNameUtil.java @@ -0,0 +1,143 @@ +/* + * 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.tools.wsdl2java.util; + +import java.util.ArrayList; +import java.util.List; + +public class XMLNameUtil { + + /** + * Returns a valid Java name from an XML Name. + * + * @param name + * @param isUpperCase + * @return a valid Java name from an XML Name + */ + public static String getJavaNameFromXMLName(String name, boolean isUpperCase) { + List<String> parsedName = parseName(name, '_'); + StringBuilder result = new StringBuilder(64 * parsedName.size()); + for (String nameComponent: parsedName) { + if (nameComponent.length() > 0) { + if (result.length() > 0 || isUpperCase) { + result.append(Character.toUpperCase(nameComponent.charAt(0))); + result.append(nameComponent.substring(1)); + } else { + result.append(nameComponent); + } + } + } + + if (result.length() == 0) { + return "_"; + } + if (Character.isJavaIdentifierStart(result.charAt(0))) { + return isUpperCase ? result.toString() : decapitalizeName(result.toString()); + } + return "_" + result; + } + + /** + * Decapitalize a name. + * @param name + * @return a decapitalized name + */ + public static String decapitalizeName(String name) { + if (name.length() == 0) { + return name; + } else { + String lowerName = name.toLowerCase(); + int i; + for (i = 0; i < name.length(); i++) { + if (name.charAt(i) == lowerName.charAt(i)) { + break; + } + } + if (i > 1 && i < name.length()) { + --i; + } + return name.substring(0, i).toLowerCase() + name.substring(i); + } + } + + /** + * Parse the given name. + * + * @param sourceName + * @param separator + * @return some stuff parsed from the name + */ + private static List<String> parseName(String sourceName, char separator) { + List<String> result = new ArrayList<String>(); + if (sourceName != null) { + StringBuilder currentWord = new StringBuilder(64); + boolean lastIsLower = false; + int index; + int length; + for (index = 0, length = sourceName.length(); index < length; ++index) { + char curChar = sourceName.charAt(index); + if (!Character.isJavaIdentifierPart(curChar)) { + curChar = separator; + } + if (Character.isUpperCase(curChar) + || (!lastIsLower && Character.isDigit(curChar)) + || curChar == separator) { + + if (lastIsLower && currentWord.length() > 1 + || curChar == separator && currentWord.length() > 0) { + result.add(currentWord.toString()); + currentWord = new StringBuilder(64); + } + lastIsLower = false; + } else { + if (!lastIsLower) { + int currentWordLength = currentWord.length(); + if (currentWordLength > 1) { + char lastChar = currentWord.charAt(--currentWordLength); + currentWord.setLength(currentWordLength); + result.add(currentWord.toString()); + currentWord = new StringBuilder(64); + currentWord.append(lastChar); + } + } + lastIsLower = true; + } + + if (curChar != separator) { + currentWord.append(curChar); + } + } + + result.add(currentWord.toString()); + } + return result; + } + + /** + * Return an EPackage name for the given namespace. + * + * @param namespace + * @return an EPackage name for the given namespace + */ + public static String getPackageNameFromNamespace(String namespace) { + return org.apache.tuscany.sdo.helper.SDOXSDEcoreBuilder.getDefaultPackageName(namespace); + } + + +} diff --git a/sca-java-1.x/branches/sca-java-1.6.2/tools/wsdl2java/src/main/resources/META-INF/LICENSE.txt b/sca-java-1.x/branches/sca-java-1.6.2/tools/wsdl2java/src/main/resources/META-INF/LICENSE.txt new file mode 100644 index 0000000000..0084319535 --- /dev/null +++ b/sca-java-1.x/branches/sca-java-1.6.2/tools/wsdl2java/src/main/resources/META-INF/LICENSE.txt @@ -0,0 +1,202 @@ + + 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, serviceDefinition 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-1.x/branches/sca-java-1.6.2/tools/wsdl2java/src/main/resources/RemotableInterfaceTemplate.xsl b/sca-java-1.x/branches/sca-java-1.6.2/tools/wsdl2java/src/main/resources/RemotableInterfaceTemplate.xsl new file mode 100644 index 0000000000..43005bcdbc --- /dev/null +++ b/sca-java-1.x/branches/sca-java-1.6.2/tools/wsdl2java/src/main/resources/RemotableInterfaceTemplate.xsl @@ -0,0 +1,130 @@ +<!-- + * 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. +--> +<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> + <xsl:output method="text"/> + + <!-- import the databinding template--> + <xsl:include href="databindsupporter"/> + <!-- import the other templates for databinding + Note - these names would be handled by a special + URI resolver during the xslt transformations + --> + <xsl:include href="externalTemplate"/> + + + <xsl:template match="/interface"> + + <xsl:variable name="isSync"><xsl:value-of select="@isSync"/></xsl:variable> + <xsl:variable name="isAsync"><xsl:value-of select="@isAsync"/></xsl:variable> + <xsl:variable name="callbackname"><xsl:value-of select="@callbackname"/></xsl:variable> + <xsl:variable name="package"><xsl:value-of select="@package"/></xsl:variable> + + /** + * <xsl:value-of select="@name"/>.java + * + * This file was auto-generated from WSDL + * by the Apache Axis2 version: #axisVersion# #today# + */ + package <xsl:value-of select="$package"/>; + + import org.osoa.sca.annotations.Remotable; + import org.osoa.sca.annotations.Service; + + /* + * <xsl:value-of select="@name"/> java interface + */ + + @Remotable + @Service + public interface <xsl:value-of select="@name"></xsl:value-of> { + <xsl:for-each select="method"> + + <!-- Code for in-out mep --> + <xsl:if test="@mep='12'"> + <xsl:variable name="outputtype"><xsl:value-of select="output/param/@type"></xsl:value-of></xsl:variable> + + <!-- start of the sync block --> + <xsl:if test="$isSync='1'"> + /** + * Auto generated method signatures + <xsl:for-each select="input/param[@type!='']">* @param <xsl:value-of select="@name"></xsl:value-of><xsl:text> </xsl:text></xsl:for-each> + <xsl:for-each select="fault/param[@name!='']">* @throws <xsl:value-of select="@name"></xsl:value-of><xsl:text> *</xsl:text></xsl:for-each> + + */ + public <xsl:choose><xsl:when test="$outputtype=''">void</xsl:when><xsl:otherwise><xsl:value-of select="$outputtype"/></xsl:otherwise></xsl:choose> + <xsl:text> </xsl:text><xsl:value-of select="@name"/>( + <xsl:for-each select="input/param[@type!='']"> + <xsl:if test="position()>1">,</xsl:if><xsl:value-of select="@type"/><xsl:text> </xsl:text><xsl:value-of select="@name"/> + </xsl:for-each>) throws <xsl:for-each select="fault/param[@name!='']"> + <xsl:if test="position()>1">,</xsl:if><xsl:text> </xsl:text><xsl:value-of select="@name"/><xsl:if test="position()=last()">,</xsl:if> + + </xsl:for-each> java.rmi.RemoteException; + <!-- end of the sync block --> + </xsl:if> + + <!-- start of the async block --> + <xsl:if test="$isAsync='1'"> + /** + * Auto generated method signature + <xsl:for-each select="input/param[@type!='']">* @param <xsl:value-of select="@name"></xsl:value-of><xsl:text> </xsl:text></xsl:for-each> + <xsl:for-each select="fault/param[@name!='']">* @throws <xsl:value-of select="@name"></xsl:value-of><xsl:text> *</xsl:text></xsl:for-each> + + */ + + public void start<xsl:value-of select="@name"/>( + <xsl:variable name="paramCount"><xsl:value-of select="count(input/param[@type!=''])"></xsl:value-of></xsl:variable> + <xsl:for-each select="input/param"> + <xsl:if test="@type!=''"><xsl:if test="position()>1">,</xsl:if><xsl:value-of select="@type"/><xsl:text> </xsl:text><xsl:value-of select="@name"></xsl:value-of></xsl:if></xsl:for-each> + <xsl:if test="$paramCount>0">,</xsl:if>final <xsl:value-of select="$package"/>.<xsl:value-of select="$callbackname"/> callback) throws <xsl:for-each select="fault/param[@name!='']"> + <xsl:if test="position()>1">,</xsl:if><xsl:text> </xsl:text><xsl:value-of select="@name"/><xsl:if test="position()=last()">,</xsl:if> + </xsl:for-each> java.rmi.RemoteException; + </xsl:if> + <!-- end of async block--> + + </xsl:if> + <!-- Code for in-only mep --> + <xsl:if test="@mep='10'"> + + <!-- For in-only meps there would not be any asynchronous methods since there is no output --> + /** + * Auto generated method signature + <xsl:for-each select="input/param[@type!='']">* @param <xsl:value-of select="@name"></xsl:value-of><xsl:text> </xsl:text></xsl:for-each> + <xsl:for-each select="fault/param[@name!='']">* @throws <xsl:value-of select="@name"></xsl:value-of><xsl:text> *</xsl:text></xsl:for-each> + */ + public void + <xsl:text> </xsl:text><xsl:value-of select="@name"/>( + <xsl:for-each select="input/param"> + + <xsl:if test="@type!=''"><xsl:if test="position()>1">,</xsl:if><xsl:value-of select="@type"/><xsl:text> </xsl:text><xsl:value-of select="@name"/> + </xsl:if> + </xsl:for-each>) throws <xsl:for-each select="fault/param[@name!='']"> + <xsl:if test="position()>1">,</xsl:if><xsl:text> </xsl:text><xsl:value-of select="@name"/><xsl:if test="position()=last()">,</xsl:if> + </xsl:for-each> java.rmi.RemoteException; + + </xsl:if> + + </xsl:for-each> + + <!-- Apply other templates --> + //<xsl:apply-templates/> + } + + + </xsl:template> + </xsl:stylesheet>
\ No newline at end of file diff --git a/sca-java-1.x/branches/sca-java-1.6.2/tools/wsdl2java/src/test/java/org/apache/tuscany/tools/wsdl2java/generate/WSDL2JavaGeneratorTestCase.java b/sca-java-1.x/branches/sca-java-1.6.2/tools/wsdl2java/src/test/java/org/apache/tuscany/tools/wsdl2java/generate/WSDL2JavaGeneratorTestCase.java new file mode 100644 index 0000000000..92581d6ac2 --- /dev/null +++ b/sca-java-1.x/branches/sca-java-1.6.2/tools/wsdl2java/src/test/java/org/apache/tuscany/tools/wsdl2java/generate/WSDL2JavaGeneratorTestCase.java @@ -0,0 +1,80 @@ +/* + * 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.tools.wsdl2java.generate; + +import junit.framework.TestCase; + +/** + * Test case for WSDL2Java + */ +public class WSDL2JavaGeneratorTestCase extends TestCase { + + + public void testAccountService() { + + String basedir = System.getProperty("basedir"); + if (basedir == null) + basedir = "."; + + String[] args = + new String[] {"-targetDirectory", basedir + "/target/wsdl2java-source", + "-javaPackage", "org.apache.tuscany.tools.wsdl2java.generate.account", + basedir + "/src/test/resources/AccountService.wsdl"}; + + WSDL2JavaGenerator.main(args); + + } + + /** + * Test WSDL with faults + * Sample WSDL originated from BigBank and Tuscany 978 + */ + public void testAccountServiceWithFaults() { + + String basedir = System.getProperty("basedir"); + if (basedir == null) + basedir = "."; + + String[] args = + new String[] {"-targetDirectory", basedir + "/target/wsdl2java-source", + "-javaPackage", "org.apache.tuscany.tools.wsdl2java.generate.account", + basedir + "/src/test/resources/AccountServiceWithFault.wsdl"}; + + WSDL2JavaGenerator.main(args); + + } + + /** + * Test Interopdoc WSDL + */ + public void testInteropdocWsdl() { + + String basedir = System.getProperty("basedir"); + if (basedir == null) + basedir = "."; + + String[] args = + new String[] {"-targetDirectory", basedir + "/target/wsdl2java-source", + "-javaPackage", "org.apache.tuscany.tools.wsdl2java.generate.account", + basedir + "/src/test/resources/interopdoc.wsdl"}; + + WSDL2JavaGenerator.main(args); + + } +} diff --git a/sca-java-1.x/branches/sca-java-1.6.2/tools/wsdl2java/src/test/java/org/soapinterop/CreditScoreDocLit.java b/sca-java-1.x/branches/sca-java-1.6.2/tools/wsdl2java/src/test/java/org/soapinterop/CreditScoreDocLit.java new file mode 100644 index 0000000000..e9e8aa882a --- /dev/null +++ b/sca-java-1.x/branches/sca-java-1.6.2/tools/wsdl2java/src/test/java/org/soapinterop/CreditScoreDocLit.java @@ -0,0 +1,25 @@ +/* + * 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.soapinterop; + +public interface CreditScoreDocLit { + public org.example.creditscore.doclit.CreditReport getCreditScore( + org.example.creditscore.doclit.Customer param0) throws java.rmi.RemoteException; + } + diff --git a/sca-java-1.x/branches/sca-java-1.6.2/tools/wsdl2java/src/test/resources/AccountService.wsdl b/sca-java-1.x/branches/sca-java-1.6.2/tools/wsdl2java/src/test/resources/AccountService.wsdl new file mode 100644 index 0000000000..6f2fed1e2a --- /dev/null +++ b/sca-java-1.x/branches/sca-java-1.6.2/tools/wsdl2java/src/test/resources/AccountService.wsdl @@ -0,0 +1,242 @@ +<?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 xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
+ xmlns:tns="http://www.bigbank.com/Account/"
+ xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
+ xmlns:xsd="http://www.w3.org/2001/XMLSchema"
+ xmlns:account="http://www.bigbank.com/Account/"
+ targetNamespace="http://www.bigbank.com/Account/" + name="AccountService">
+
+ <wsdl:types>
+ <xsd:schema targetNamespace="http://www.bigbank.com/Account/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:account="http://www.bigbank.com/Account/" + xmlns:sdojava="commonj.sdo/java" + sdojava:package="org.apache.tuscany.samples.bigbank.account">
+
+ <xsd:element name="getAccountReportWrapped0">
+ <xsd:complexType>
+ <xsd:sequence>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+ <xsd:element name="getAccountReportWrapped0Response">
+ <xsd:complexType>
+ <xsd:sequence>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+
+ <xsd:element name="getAccountReportWrapped1"> + <xsd:complexType> + <xsd:sequence> + <xsd:element name="customerID" type="xsd:string"/> + </xsd:sequence> + </xsd:complexType> + </xsd:element>
+ <xsd:element name="getAccountReportWrapped1Response"> + <xsd:complexType> + <xsd:sequence> + <xsd:element name="accountReport" type="account:AccountReport"/> + </xsd:sequence> + </xsd:complexType> + </xsd:element> +
+ <xsd:element name="getAccountReportWrappedN">
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element name="customerID" type="xsd:string"/>
+ <xsd:element name="customerID2" type="xsd:int"/>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+ <xsd:element name="getAccountReportWrappedNResponse">
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element name="accountReport" type="account:AccountReport"/>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+
+ <xsd:element name="getAccountReportBare0" type="xsd:string"/>
+ <xsd:element name="getAccountReportBare0Response" type="xsd:int"/>
+
+ <xsd:element name="getAccountReportBare1Simple" type="xsd:string"/>
+ <xsd:element name="getAccountReportBare1SimpleResponse" type="xsd:int"/>
+
+ <xsd:element name="getAccountReportBare1Complex" type="account:AccountRequest"/>
+ <xsd:element name="getAccountReportBare1ComplexResponse" type="account:AccountReport"/>
+
+ <xsd:complexType name="AccountRequest">
+ <xsd:sequence>
+ <xsd:element name="customerID" type="xsd:string"/>
+ </xsd:sequence>
+ </xsd:complexType>
+
+ <xsd:complexType name="AccountReport">
+ <xsd:sequence>
+ <xsd:element name="accountSummaries" type="account:AccountSummary" maxOccurs="unbounded"/>
+ </xsd:sequence>
+ </xsd:complexType>
+ <xsd:complexType name="AccountSummary">
+ <xsd:attribute name="accountNumber" type="xsd:string"/>
+ <xsd:attribute name="accountType" type="xsd:string"/>
+ <xsd:attribute name="balance" type="xsd:float"/>
+ </xsd:complexType>
+
+ </xsd:schema>
+ </wsdl:types>
+
+ <wsdl:message name="getAccountReportWrapped0Request">
+ <wsdl:part element="account:getAccountReportWrapped0" name="getAccountReportWrapped0Request"/>
+ </wsdl:message>
+ <wsdl:message name="getAccountReportWrapped0Response">
+ <wsdl:part element="account:getAccountReportWrapped0Response" name="getAccountReportWrapped0Response"/>
+ </wsdl:message>
+
+ <wsdl:message name="getAccountReportWrapped1Request">
+ <wsdl:part element="account:getAccountReportWrapped1" name="getAccountReportWrapped1Request"/>
+ </wsdl:message>
+ <wsdl:message name="getAccountReportWrapped1Response">
+ <wsdl:part element="account:getAccountReportWrapped1Response" name="getAccountReportWrapped1Response"/>
+ </wsdl:message>
+
+ <wsdl:message name="getAccountReportWrappedNRequest">
+ <wsdl:part element="account:getAccountReportWrappedN" name="getAccountReportWrappedNRequest"/>
+ </wsdl:message>
+ <wsdl:message name="getAccountReportWrappedNResponse">
+ <wsdl:part element="account:getAccountReportWrappedNResponse" name="getAccountReportWrappedNResponse"/>
+ </wsdl:message>
+
+ <wsdl:message name="getAccountReportBare0Request">
+ </wsdl:message>
+ <wsdl:message name="getAccountReportBare0Response">
+ </wsdl:message>
+
+ <wsdl:message name="getAccountReportBare1SimpleRequest">
+ <wsdl:part element="account:getAccountReportBare1Simple" name="getAccountReportBare1SimpleRequest"/>
+ </wsdl:message>
+ <wsdl:message name="getAccountReportBare1SimpleResponse">
+ <wsdl:part element="account:getAccountReportBare1SimpleResponse" name="getAccountReportBare1SimpleResponse"/>
+ </wsdl:message>
+
+ <wsdl:message name="getAccountReportBare1ComplexRequest">
+ <wsdl:part element="account:getAccountReportBare1Complex" name="getAccountReportBare1ComplexRequest"/>
+ </wsdl:message>
+ <wsdl:message name="getAccountReportBare1ComplexResponse">
+ <wsdl:part element="account:getAccountReportBare1ComplexResponse" name="getAccountReportBare1ComplexResponse"/>
+ </wsdl:message>
+
+ <wsdl:portType name="Account_Service">
+ <wsdl:operation name="getAccountReportWrapped0">
+ <wsdl:input message="tns:getAccountReportWrapped0Request"/>
+ <wsdl:output message="tns:getAccountReportWrapped0Response"/>
+ </wsdl:operation>
+ <wsdl:operation name="getAccountReportWrapped1">
+ <wsdl:input message="tns:getAccountReportWrapped1Request"/>
+ <wsdl:output message="tns:getAccountReportWrapped1Response"/>
+ </wsdl:operation>
+ <wsdl:operation name="getAccountReportWrappedN">
+ <wsdl:input message="tns:getAccountReportWrappedNRequest"/>
+ <wsdl:output message="tns:getAccountReportWrappedNResponse"/>
+ </wsdl:operation>
+ <wsdl:operation name="getAccountReportBare0">
+ <wsdl:input message="tns:getAccountReportBare0Request"/>
+ <wsdl:output message="tns:getAccountReportBare0Response"/>
+ </wsdl:operation>
+ <wsdl:operation name="getAccountReportBare1Simple">
+ <wsdl:input message="tns:getAccountReportBare1SimpleRequest"/>
+ <wsdl:output message="tns:getAccountReportBare1SimpleResponse"/>
+ </wsdl:operation>
+ <wsdl:operation name="getAccountReportBare1Complex">
+ <wsdl:input message="tns:getAccountReportBare1ComplexRequest"/>
+ <wsdl:output message="tns:getAccountReportBare1ComplexResponse"/>
+ </wsdl:operation>
+ </wsdl:portType>
+ <wsdl:binding name="AccountServiceSOAP" type="tns:Account_Service">
+ <soap:binding style="document"
+ transport="http://schemas.xmlsoap.org/soap/http"/>
+ <wsdl:operation name="getAccountReportWrapped0">
+ <soap:operation
+ soapAction="http://www.bigbank.com/Account/getAccountReportWrapped0"/>
+ <wsdl:input>
+ <soap:body use="literal"/>
+ </wsdl:input>
+ <wsdl:output>
+ <soap:body use="literal"/>
+ </wsdl:output>
+ </wsdl:operation>
+ <wsdl:operation name="getAccountReportWrapped1">
+ <soap:operation
+ soapAction="http://www.bigbank.com/Account/getAccountReportWrapped1"/>
+ <wsdl:input>
+ <soap:body use="literal"/>
+ </wsdl:input>
+ <wsdl:output>
+ <soap:body use="literal"/>
+ </wsdl:output>
+ </wsdl:operation>
+ <wsdl:operation name="getAccountReportWrappedN">
+ <soap:operation
+ soapAction="http://www.bigbank.com/Account/getAccountReportWrappedN"/>
+ <wsdl:input>
+ <soap:body use="literal"/>
+ </wsdl:input>
+ <wsdl:output>
+ <soap:body use="literal"/>
+ </wsdl:output>
+ </wsdl:operation>
+ <wsdl:operation name="getAccountReportBare0">
+ <soap:operation
+ soapAction="http://www.bigbank.com/Account/getAccountReportBare0"/>
+ <wsdl:input>
+ <soap:body use="literal"/>
+ </wsdl:input>
+ <wsdl:output>
+ <soap:body use="literal"/>
+ </wsdl:output>
+ </wsdl:operation>
+ <wsdl:operation name="getAccountReportBare1Simple">
+ <soap:operation
+ soapAction="http://www.bigbank.com/Account/getAccountReportBare1Simple"/>
+ <wsdl:input>
+ <soap:body use="literal"/>
+ </wsdl:input>
+ <wsdl:output>
+ <soap:body use="literal"/>
+ </wsdl:output>
+ </wsdl:operation>
+ <wsdl:operation name="getAccountReportBare1Complex">
+ <soap:operation
+ soapAction="http://www.bigbank.com/Account/getAccountReportBare1Complex"/>
+ <wsdl:input>
+ <soap:body use="literal"/>
+ </wsdl:input>
+ <wsdl:output>
+ <soap:body use="literal"/>
+ </wsdl:output>
+ </wsdl:operation>
+ </wsdl:binding>
+ <wsdl:service name="AccountService">
+ <wsdl:port binding="tns:AccountServiceSOAP"
+ name="AccountServiceSOAP">
+ <soap:address location="http://localhost:8085/sample-account/services/AccountService"/>
+ </wsdl:port>
+ </wsdl:service>
+</wsdl:definitions>
diff --git a/sca-java-1.x/branches/sca-java-1.6.2/tools/wsdl2java/src/test/resources/AccountServiceWithFault.wsdl b/sca-java-1.x/branches/sca-java-1.6.2/tools/wsdl2java/src/test/resources/AccountServiceWithFault.wsdl new file mode 100644 index 0000000000..dda5a36085 --- /dev/null +++ b/sca-java-1.x/branches/sca-java-1.6.2/tools/wsdl2java/src/test/resources/AccountServiceWithFault.wsdl @@ -0,0 +1,475 @@ +<?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 xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" + xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" + xmlns:xsd="http://www.w3.org/2001/XMLSchema" + xmlns:account="http://www.bigbank.com/account" + targetNamespace="http://www.bigbank.com/account" + name="AccountServiceWithFault"> + + <wsdl:types> + <xsd:schema targetNamespace="http://www.bigbank.com/account" + xmlns:xsd="http://www.w3.org/2001/XMLSchema" + xmlns:account="http://www.bigbank.com/account"> + + <xsd:element name="getAccountReport"> + <xsd:complexType> + <xsd:sequence> + <xsd:element name="customerID" + type="xsd:int" /> + </xsd:sequence> + </xsd:complexType> + </xsd:element> + <xsd:element name="getAccountReportResponse"> + <xsd:complexType> + <xsd:sequence> + <xsd:element name="accountReport" + type="account:AccountReport" /> + </xsd:sequence> + </xsd:complexType> + </xsd:element> + + <xsd:complexType name="AccountReport"> + <xsd:sequence> + <xsd:element name="accountSummaries" + type="account:AccountSummary" maxOccurs="unbounded" /> + <xsd:element name="stockSummaries" + type="account:StockSummary" maxOccurs="unbounded" /> + </xsd:sequence> + </xsd:complexType> + <xsd:complexType name="AccountSummary"> + <xsd:attribute name="accountNumber" type="xsd:string" /> + <xsd:attribute name="accountType" type="xsd:string" /> + <xsd:attribute name="balance" type="xsd:float" /> + </xsd:complexType> + + <xsd:complexType name="StockSummary"> + <!-- xsd:attribute name="id" type="xsd:int" / --> + <xsd:attribute name="purchaseLotNumber" type="xsd:int" /> + <!-- unique id for this purchase --> + <xsd:attribute name="symbol" type="xsd:string" /> + <xsd:attribute name="quantity" type="xsd:int" /> + <xsd:attribute name="purchaseDate" type="xsd:dateTime" /> + <xsd:attribute name="purchasePrice" type="xsd:float" /> + <xsd:attribute name="currentPrice" type="xsd:float" /> + <xsd:attribute name="company" type="xsd:string" /> + <xsd:attribute name="highPrice" type="xsd:float" /> + <xsd:attribute name="lowPrice" type="xsd:float" /> + + </xsd:complexType> + + <!-- Profile in data base --> + <xsd:element name="getCustomerProfile"> + <xsd:complexType> + <xsd:sequence> + <xsd:element name="loginID" type="xsd:string" /> + </xsd:sequence> + </xsd:complexType> + </xsd:element> + + <xsd:complexType name="CustomerProfileData"> + <xsd:sequence> + <xsd:element name="firstName" type="xsd:string" /> + <xsd:element name="lastName" type="xsd:string" /> + <xsd:element name="address" type="xsd:string" /> + <xsd:element name="email" type="xsd:string" /> + <xsd:element name="loginID" type="xsd:string" /> + <xsd:element name="password" type="xsd:string" /> + <xsd:element name="id" type="xsd:int" /> + </xsd:sequence> + </xsd:complexType> + + <xsd:element name="getCustomerProfileResponse"> + <xsd:complexType> + <xsd:sequence> + <xsd:element name="customerProfile" + type="account:CustomerProfileData" /> + </xsd:sequence> + </xsd:complexType> + </xsd:element> + + <xsd:element name="withdraw"> + <xsd:complexType> + <xsd:sequence> + <xsd:element name="accountNumber" + type="xsd:string" /> + <xsd:element name="amount" type="xsd:float" /> + </xsd:sequence> + </xsd:complexType> + </xsd:element> + <xsd:element name="withdrawResponse"> + <xsd:complexType> + <xsd:sequence> + <xsd:element name="balance" type="xsd:float" /> + </xsd:sequence> + </xsd:complexType> + </xsd:element> + <!-- @start added fault --> + <xsd:element name="insufficientFundsFault"> + <xsd:complexType name="insufficientFundsFault"> + <xsd:sequence> + <xsd:element name="message" type="xsd:string"/> + </xsd:sequence> + </xsd:complexType> + </xsd:element> + <!-- @end added fault --> + + <xsd:element name="deposit"> + <xsd:complexType> + <xsd:sequence> + <xsd:element name="accountNumber" + type="xsd:string" /> + <xsd:element name="amount" type="xsd:float" /> + </xsd:sequence> + </xsd:complexType> + </xsd:element> + <xsd:element name="depositResponse"> + <xsd:complexType> + <xsd:sequence> + <xsd:element name="balance" type="xsd:float" /> + </xsd:sequence> + </xsd:complexType> + </xsd:element> + + <xsd:element name="purchaseStock"> + <xsd:complexType> + <xsd:sequence> + <xsd:element name="id" type="xsd:int" /> + <xsd:element name="stock" type="account:StockSummary" /> + </xsd:sequence> + </xsd:complexType> + </xsd:element> + + <xsd:element name="purchaseStockResponse"> + <xsd:complexType> + <xsd:sequence> + <xsd:element name="purchaseSummary" + type="account:StockSummary" /> + </xsd:sequence> + </xsd:complexType> + </xsd:element> + + + + <xsd:element name="sellStock"> + <xsd:complexType> + <xsd:sequence> + <xsd:element name="purchaseLotNumber" + type="xsd:int" /><!-- unique id for this purchase --> + <xsd:element name="quantity" type="xsd:int" /> + </xsd:sequence> + </xsd:complexType> + </xsd:element> + + <xsd:element name="createAccount"> + <xsd:complexType> + <xsd:sequence> + <xsd:element name="customerProfile" + type="account:CustomerProfileData" /> + <xsd:element name="createSavings" + type="xsd:boolean" /> + <xsd:element name="createCheckings" + type="xsd:boolean" /> + </xsd:sequence> + </xsd:complexType> + </xsd:element> + <xsd:element name="createAccountResponse"> + <xsd:complexType> + <xsd:sequence> + <xsd:element name="customerProfile" + type="account:CustomerProfileData" /> + </xsd:sequence> + </xsd:complexType> + + </xsd:element> + + <xsd:element name="getAccountLog"> + <xsd:complexType> + <xsd:sequence> + <xsd:element name="customerID" + type="xsd:int" /> + </xsd:sequence> + </xsd:complexType> + </xsd:element> + <xsd:element name="getAccountLogResponse"> + <xsd:complexType> + <xsd:sequence> + <xsd:element name="accountLog" + type="account:AccountLog" /> + </xsd:sequence> + </xsd:complexType> + </xsd:element> + + <xsd:complexType name="AccountLog"> + <xsd:sequence> + <xsd:element name="accountLogEntries" + type="account:AccountLogEntry" maxOccurs="unbounded" /> + <xsd:element name="stockLogEntries" + type="account:StockLogEntry" maxOccurs="unbounded" /> + + </xsd:sequence> + </xsd:complexType> + + <xsd:complexType name="AccountLogEntry"> + <xsd:attribute name="logSeqNo" type="xsd:int" /> + <xsd:attribute name="id" type="xsd:int" /> + <xsd:attribute name="accountNumber" type="xsd:string" /> + <xsd:attribute name="actionType" type="xsd:string" /> + <xsd:attribute name="amount" type="xsd:float" /> + </xsd:complexType> + + <xsd:complexType name="StockLogEntry"> + <xsd:attribute name="logSeqNo" type="xsd:int" /> + <xsd:attribute name="id" type="xsd:int" /> + <xsd:attribute name="symbol" type="xsd:string" /> + <xsd:attribute name="quantity" type="xsd:int" /> + <xsd:attribute name="actionType" type="xsd:string" /> + <xsd:attribute name="purchaseLotNumber" type="xsd:int" /> + </xsd:complexType> + + </xsd:schema> + </wsdl:types> + <wsdl:message name="getAccountReportRequest"> + <wsdl:part element="account:getAccountReport" + name="getAccountReportRequest" /> + </wsdl:message> + <wsdl:message name="getAccountReportResponse"> + <wsdl:part element="account:getAccountReportResponse" + name="getAccountReportResponse" /> + </wsdl:message> + + <wsdl:message name="getCustomerProfileRequest"> + <wsdl:part element="account:getCustomerProfile" + name="getCustomerProfile" /> + </wsdl:message> + <wsdl:message name="getCustomerProfileResponse"> + <wsdl:part element="account:getCustomerProfileResponse" + name="getCustomerProfileResponse" /> + </wsdl:message> + + <wsdl:message name="withdrawRequest"> + <wsdl:part element="account:withdraw" name="withdrawRequest" /> + </wsdl:message> + + <wsdl:message name="withdrawResponse"> + <wsdl:part element="account:withdrawResponse" + name="withdrawResponse" /> + </wsdl:message> + + <!-- @start added fault --> + <wsdl:message name="insufficientFundsFault"> + <wsdl:part element="account:insufficientFundsFault" name="insufficientFundsFault" /> + </wsdl:message> + <!-- @end added fault --> + + <wsdl:message name="depositRequest"> + <wsdl:part element="account:deposit" name="depositRequest" /> + </wsdl:message> + + <wsdl:message name="depositResponse"> + <wsdl:part element="account:depositResponse" + name="depositResponse" /> + </wsdl:message> + + <wsdl:message name="purchaseStockRequest"> + <wsdl:part element="account:purchaseStock" + name="purchaseStockRequest" /> + </wsdl:message> + + <wsdl:message name="purchaseStockResponse"> + <wsdl:part element="account:purchaseStockResponse" + name="purchaseStockResponse" /> + </wsdl:message> + + <wsdl:message name="sellStockRequest"> + <wsdl:part element="account:sellStock" name="sellStockRequest" /> + </wsdl:message> + + <wsdl:message name="createAccountRequest"> + <wsdl:part element="account:createAccount" name="createAccountRequest" /> + </wsdl:message> + + <wsdl:message name="createAccountResponse"> + <wsdl:part element="account:createAccountResponse" name="createAccountResponse" /> + </wsdl:message> + + <wsdl:message name="getAccountLogRequest"> + <wsdl:part element="account:getAccountLog" + name="getAccountLogRequest" /> + </wsdl:message> + + <wsdl:message name="getAccountLogResponse"> + <wsdl:part element="account:getAccountLogResponse" + name="getAccountLogResponse" /> + </wsdl:message> + + <wsdl:portType name="AccountServiceWithFault"> + <wsdl:operation name="getAccountReport"> + <wsdl:input message="account:getAccountReportRequest" /> + <wsdl:output message="account:getAccountReportResponse" /> + </wsdl:operation> + + <wsdl:operation name="getCustomerProfile"> + <wsdl:input message="account:getCustomerProfileRequest" /> + <wsdl:output message="account:getCustomerProfileResponse" /> + </wsdl:operation> + + <wsdl:operation name="withdraw"> + <wsdl:input message="account:withdrawRequest" /> + <wsdl:output message="account:withdrawResponse" /> + <!-- @start added fault --> + <wsdl:fault message="account:insufficientFundsFault" name="insufficientFundsFault"/> + <!-- @end added fault --> + </wsdl:operation> + + <wsdl:operation name="deposit"> + <wsdl:input message="account:depositRequest" /> + <wsdl:output message="account:depositResponse" /> + </wsdl:operation> + + <wsdl:operation name="purchaseStock"> + <wsdl:input message="account:purchaseStockRequest" /> + <wsdl:output message="account:purchaseStockResponse" /> + </wsdl:operation> + + <wsdl:operation name="sellStock"> + <wsdl:input message="account:sellStockRequest" /> + <wsdl:output message="account:purchaseStockResponse" /> + </wsdl:operation> + + + <wsdl:operation name="createAccount"> + <wsdl:input message="account:createAccountRequest" /> + <wsdl:output message="account:createAccountResponse" /> + </wsdl:operation> + + <wsdl:operation name="getAccountLog"> + <wsdl:input message="account:getAccountLogRequest" /> + <wsdl:output message="account:getAccountLogResponse" /> + </wsdl:operation> + + </wsdl:portType> + + + + <wsdl:binding name="AccountServiceWithFaultSOAP" type="account:AccountServiceWithFault"> + <soap:binding style="document" + transport="http://schemas.xmlsoap.org/soap/http" /> + <wsdl:operation name="getAccountReport"> + <soap:operation + soapAction="http://www.bigbank.com/account/getAccountReport" /> + <wsdl:input> + <soap:body use="literal" /> + </wsdl:input> + <wsdl:output> + <soap:body use="literal" /> + </wsdl:output> + </wsdl:operation> + <wsdl:operation name="getCustomerProfile"> + <soap:operation + soapAction="http://www.bigbank.com/account/getCustomerProfile" /> + <wsdl:input> + <soap:body use="literal" /> + </wsdl:input> + <wsdl:output> + <soap:body use="literal" /> + </wsdl:output> + </wsdl:operation> + + <wsdl:operation name="withdraw"> + <soap:operation + soapAction="http://www.bigbank.com/account/withdraw" /> + <wsdl:input> + <soap:body use="literal" /> + </wsdl:input> + <wsdl:output> + <soap:body use="literal" /> + </wsdl:output> + <!-- @start added fault --> + <wsdl:fault name="insufficientFundsFault"> + <soap:fault name="insufficientFundsFault" use="literal"/> + </wsdl:fault> + <!-- @end added fault --> + </wsdl:operation> + + <wsdl:operation name="deposit"> + <soap:operation + soapAction="http://www.bigbank.com/account/deposit" /> + <wsdl:input> + <soap:body use="literal" /> + </wsdl:input> + <wsdl:output> + <soap:body use="literal" /> + </wsdl:output> + </wsdl:operation> + + <wsdl:operation name="purchaseStock"> + <soap:operation + soapAction="http://www.bigbank.com/account/purchaseStock" /> + <wsdl:input> + <soap:body use="literal" /> + </wsdl:input> + <wsdl:output> + <soap:body use="literal" /> + </wsdl:output> + </wsdl:operation> + + <wsdl:operation name="sellStock"> + <soap:operation + soapAction="http://www.bigbank.com/account/sellStock" /> + <wsdl:input> + <soap:body use="literal" /> + </wsdl:input> + <wsdl:output> + <soap:body use="literal" /> + </wsdl:output> + </wsdl:operation> + + <wsdl:operation name="createAccount"> + <soap:operation + soapAction="http://www.bigbank.com/account/createAccount" /> + <wsdl:input> + <soap:body use="literal" /> + </wsdl:input> + <wsdl:output> + <soap:body use="literal" /> + </wsdl:output> + </wsdl:operation> + + <wsdl:operation name="getAccountLog"> + <soap:operation + soapAction="http://www.bigbank.com/account/getAccountLog" /> + <wsdl:input> + <soap:body use="literal" /> + </wsdl:input> + <wsdl:output> + <soap:body use="literal" /> + </wsdl:output> + </wsdl:operation> + + </wsdl:binding> + <wsdl:service name="AccountServiceWithFault"> + <wsdl:port binding="account:AccountServiceWithFaultSOAP" + name="AccountServiceSOAP"> + <soap:address + location="http://localhost:8080/sample-bigbank-account/services/AccountServiceWithFault" /> + </wsdl:port> + </wsdl:service> +</wsdl:definitions> diff --git a/sca-java-1.x/branches/sca-java-1.6.2/tools/wsdl2java/src/test/resources/CreditScoreDocLit.wsdl b/sca-java-1.x/branches/sca-java-1.6.2/tools/wsdl2java/src/test/resources/CreditScoreDocLit.wsdl new file mode 100644 index 0000000000..09d1a58589 --- /dev/null +++ b/sca-java-1.x/branches/sca-java-1.6.2/tools/wsdl2java/src/test/resources/CreditScoreDocLit.wsdl @@ -0,0 +1,76 @@ +<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ Copyright (c) 2005 The Apache Software Foundation or its licensors, as applicable.
+
+ 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.
+ -->
+<wsdl:definitions xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
+ xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
+ xmlns:tns="http://www.example.org/creditscore/doclit/"
+ xmlns:xsd="http://www.w3.org/2001/XMLSchema" name="CreditScore"
+ targetNamespace="http://www.example.org/creditscore/doclit/">
+ <wsdl:types>
+ <xsd:schema
+ targetNamespace="http://www.example.org/creditscore/doclit/"
+ xmlns:xsd="http://www.w3.org/2001/XMLSchema">
+ <xsd:element name="getCreditScoreRequest" type="tns:Customer" />
+ <xsd:complexType name="Customer">
+ <xsd:sequence>
+ <xsd:element name="ssn" type="xsd:string" />
+ <xsd:element name="firstName" type="xsd:string" />
+ <xsd:element name="lastName" type="xsd:string" />
+ </xsd:sequence>
+ </xsd:complexType>
+ <xsd:element name="getCreditScoreResponse" type="tns:CreditReport"/>
+ <xsd:complexType name="CreditReport">
+ <xsd:sequence>
+ <xsd:element name="score" type="xsd:int"/>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:schema>
+ </wsdl:types>
+ <wsdl:message name="getCreditScoreResponse">
+ <wsdl:part element="tns:getCreditScoreResponse"
+ name="getCreditScoreResponse" />
+ </wsdl:message>
+ <wsdl:message name="getCreditScoreRequest">
+ <wsdl:part element="tns:getCreditScoreRequest"
+ name="getCreditScoreRequest" />
+ </wsdl:message>
+ <wsdl:portType name="CreditScoreDocLit">
+ <wsdl:operation name="getCreditScore">
+ <wsdl:input message="tns:getCreditScoreRequest" />
+ <wsdl:output message="tns:getCreditScoreResponse" />
+ </wsdl:operation>
+ </wsdl:portType>
+ <wsdl:binding name="CreditScoreDocLitSOAP" type="tns:CreditScoreDocLit">
+ <soap:binding style="document"
+ transport="http://schemas.xmlsoap.org/soap/http" />
+ <wsdl:operation name="getCreditScore">
+ <soap:operation
+ soapAction="http://www.example.org/creditscore/doclit/getCreditScore" />
+ <wsdl:input>
+ <soap:body parts="getCreditScoreRequest" use="literal" />
+ </wsdl:input>
+ <wsdl:output>
+ <soap:body parts="getCreditScoreResponse" use="literal" />
+ </wsdl:output>
+ </wsdl:operation>
+ </wsdl:binding>
+ <wsdl:service name="CreditScore">
+ <wsdl:port binding="tns:CreditScoreDocLitSOAP"
+ name="CreditScoreDocLitSOAP">
+ <soap:address location="http://www.example.org/" />
+ </wsdl:port>
+ </wsdl:service>
+</wsdl:definitions>
diff --git a/sca-java-1.x/branches/sca-java-1.6.2/tools/wsdl2java/src/test/resources/helloworld.wsdl b/sca-java-1.x/branches/sca-java-1.6.2/tools/wsdl2java/src/test/resources/helloworld.wsdl new file mode 100644 index 0000000000..051f604bb2 --- /dev/null +++ b/sca-java-1.x/branches/sca-java-1.6.2/tools/wsdl2java/src/test/resources/helloworld.wsdl @@ -0,0 +1,121 @@ +<?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://helloworldaxis.samples.tuscany.apache.org" xmlns:apachesoap="http://xml.apache.org/xml-soap" xmlns:impl="http://helloworldaxis.samples.tuscany.apache.org" xmlns:intf="http://helloworldaxis.samples.tuscany.apache.org" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:wsdlsoap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" name="stockquote"> + <!--WSDL created by Apache Axis version: 1.2.1 +Built on Jun 14, 2005 (09:15:57 EDT)--> + <wsdl:types> + <schema elementFormDefault="qualified" + xmlns:hello="http://helloworldaxis.samples.tuscany.apache.org" + xmlns:xsd="http://www.w3.org/2001/XMLSchema" + targetNamespace="http://helloworldaxis.samples.tuscany.apache.org" xmlns="http://www.w3.org/2001/XMLSchema"> + <complexType name="ComplexGreetings"> + <sequence> + <element name="greet1" type="xsd:string"/> + <element name="greet2" type="xsd:double"/> + </sequence> + </complexType> + <element name="getGreetings"> + <complexType> + <sequence> + <element name="in0" type="xsd:string"/> + <element name="in1" type="xsd:double"/> + <element name="in2" type="hello:ComplexGreetings"/> + </sequence> + <xsd:attribute name="language" type="xsd:string"/> + </complexType> + </element> + <element name="getGreetingsResponse"> + <complexType> + <sequence> + <element name="getGreetingsReturn" type="xsd:string"/> + </sequence> + </complexType> + </element> + </schema> + </wsdl:types> + + <wsdl:message name="getGreetingsRequest"> + + <wsdl:part element="impl:getGreetings" name="parameters"/> + + </wsdl:message> + + <wsdl:message name="getGreetingsResponse"> + + <wsdl:part element="impl:getGreetingsResponse" name="parameters"/> + + </wsdl:message> + + <wsdl:portType name="HelloWorldServiceImpl"> + + <wsdl:operation name="getGreetings"> + + <wsdl:input message="impl:getGreetingsRequest" name="getGreetingsRequest"/> + + <wsdl:output message="impl:getGreetingsResponse" name="getGreetingsResponse"/> + + </wsdl:operation> + + </wsdl:portType> + + <wsdl:binding name="helloworldSoapBinding" type="impl:HelloWorldServiceImpl"> + + <wsdlsoap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/> + + <wsdl:operation name="getGreetings"> + + <wsdlsoap:operation soapAction=""/> + + <wsdl:input name="getGreetingsRequest"> + + <wsdlsoap:body use="literal"/> + + </wsdl:input> + + <wsdl:output name="getGreetingsResponse"> + + <wsdlsoap:body use="literal"/> + + </wsdl:output> + + </wsdl:operation> + + </wsdl:binding> + + <wsdl:service name="HelloWorldServiceImplService"> + + <wsdl:port binding="impl:helloworldSoapBinding" name="helloworld"> + + <!-- Tuscany SCA Service --> +<!-- + <wsdlsoap:address location="http://localhost:8080/tuscany-samples-helloworldws-service/services/HelloWorldService"/> +--> + <wsdlsoap:address location="http://localhost:9876/tuscany-samples-helloworldws-service/services/HelloWorldService"/> + + <!-- Axis Web Service --> + <!-- + <wsdlsoap:address location="http://localhost:8081/helloworldaxissvc-incubating-M1/services/helloworld"/> + --> + + </wsdl:port> + + </wsdl:service> + +</wsdl:definitions> diff --git a/sca-java-1.x/branches/sca-java-1.6.2/tools/wsdl2java/src/test/resources/interopdoc.wsdl b/sca-java-1.x/branches/sca-java-1.6.2/tools/wsdl2java/src/test/resources/interopdoc.wsdl new file mode 100644 index 0000000000..820c26ca34 --- /dev/null +++ b/sca-java-1.x/branches/sca-java-1.6.2/tools/wsdl2java/src/test/resources/interopdoc.wsdl @@ -0,0 +1,180 @@ +<?xml version="1.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. + --> +<definitions name="InteropTestDoc" targetNamespace="http://soapinterop.org/" + xmlns="http://schemas.xmlsoap.org/wsdl/" + xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" + xmlns:xsd="http://www.w3.org/2001/XMLSchema" + xmlns:tns="http://soapinterop.org/" + xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"> + + <types> + + <xsd:schema elementFormDefault="qualified" targetNamespace="http://soapinterop.org/" xmlns:interop="http://soapinterop.org/"> + + <xsd:element name="SingleTag"> + <xsd:complexType> + <xsd:sequence> + <xsd:element minOccurs="0" maxOccurs="1" name="SingleTag" type="interop:SingleTag"/> + </xsd:sequence> + </xsd:complexType> + </xsd:element> + + <xsd:complexType name="SingleTag"/> + <xsd:element name="SingleTagResponse"> + <xsd:complexType> + <xsd:sequence> + <xsd:element minOccurs="0" maxOccurs="1" name="SingleTag" type="interop:SingleTag"/> + </xsd:sequence> + </xsd:complexType> + </xsd:element> + <xsd:element name="SimpleDocument"> + <xsd:complexType> + <xsd:sequence> + <xsd:element minOccurs="0" maxOccurs="1" name="SimpleDocument" type="interop:SimpleDocument"/> + </xsd:sequence> + </xsd:complexType> + </xsd:element> + <xsd:complexType name="SimpleDocument"> + <xsd:simpleContent> + <xsd:extension base="xsd:string"/> + </xsd:simpleContent> + </xsd:complexType> + <xsd:element name="SimpleDocumentResponse"> + <xsd:complexType> + <xsd:sequence> + <xsd:element minOccurs="0" maxOccurs="1" name="SimpleDocument" type="interop:SimpleDocument"/> + </xsd:sequence> + </xsd:complexType> + </xsd:element> + <xsd:element name="ComplexDocument"> + <xsd:complexType> + <xsd:sequence> + <xsd:element minOccurs="0" maxOccurs="1" name="ComplexDocument" type="interop:ComplexDocument"/> + </xsd:sequence> + </xsd:complexType> + </xsd:element> + <xsd:complexType name="ComplexDocument"> + <xsd:sequence> + <xsd:element minOccurs="0" maxOccurs="1" name="simpleDoc" type="interop:ArrayOfSimpleDocument"/> + <xsd:element minOccurs="0" maxOccurs="1" name="child" type="interop:ChildDocument"/> + </xsd:sequence> + <xsd:attribute name="AnAttribute" type="xsd:string"/> + </xsd:complexType> + <xsd:complexType name="ArrayOfSimpleDocument"> + <xsd:sequence> + <xsd:element minOccurs="0" maxOccurs="unbounded" name="SimpleDocument" nillable="true" type="interop:SimpleDocument"/> + </xsd:sequence> + </xsd:complexType> + <xsd:complexType name="ChildDocument"> + <xsd:sequence> + <xsd:element minOccurs="0" maxOccurs="1" name="childSimpleDoc" type="interop:ArrayOfSimpleDocument"/> + </xsd:sequence> + </xsd:complexType> + <xsd:element name="ComplexDocumentResponse"> + <xsd:complexType> + <xsd:sequence> + <xsd:element minOccurs="0" maxOccurs="1" name="ComplexDocument" type="interop:ComplexDocument"/> + </xsd:sequence> + </xsd:complexType> + </xsd:element> + + </xsd:schema> + + </types> + + <message name="SingleTagSoapIn"> + <part name="parameters" element="tns:SingleTag"/> + </message> + <message name="SingleTagSoapOut"> + <part name="outputDoc" element="tns:SingleTagResponse"/> + </message> + <message name="SimpleDocumentSoapIn"> + <part name="parameters" element="tns:SimpleDocument"/> + </message> + <message name="SimpleDocumentSoapOut"> + <part name="outputDoc" element="tns:SimpleDocumentResponse"/> + </message> + <message name="ComplexDocumentSoapIn"> + <part name="parameters" element="tns:ComplexDocument"/> + </message> + <message name="ComplexDocumentSoapOut"> + <part name="outputDoc" element="tns:ComplexDocumentResponse"/> + </message> + + <portType name="DocTestPortType"> + + <operation name="SingleTag"> + <input message="tns:SingleTagSoapIn"/> + <output message="tns:SingleTagSoapOut"/> + </operation> + <operation name="SimpleDocument"> + <input message="tns:SimpleDocumentSoapIn"/> + <output message="tns:SimpleDocumentSoapOut"/> + </operation> + <operation name="ComplexDocument"> + <input message="tns:ComplexDocumentSoapIn"/> + <output message="tns:ComplexDocumentSoapOut"/> + </operation> + + </portType> + + <binding name="doc_test_binding" type="tns:DocTestPortType"> + <soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/> + + <operation name="SingleTag"> + <soap:operation soapAction="http://soapinterop.org/SingleTag"/> + <input> + <soap:body use="literal"/> + </input> + <output> + <soap:body use="literal"/> + </output> + </operation> + + <operation name="SimpleDocument"> + <soap:operation soapAction="http://soapinterop.org/SimpleDocument"/> + <input> + <soap:body use="literal"/> + </input> + <output> + <soap:body use="literal"/> + </output> + </operation> + + <operation name="ComplexDocument"> + <soap:operation soapAction="http://soapinterop.org/ComplexDocument"/> + <input> + <soap:body use="literal"/> + </input> + <output> + <soap:body use="literal"/> + </output> + </operation> + </binding> + + <service name="interopDocSvc"> + + <port name="interopDocPort" binding="tns:doc_test_binding"> + <soap:address location="http://www.whitemesa.net/interopdoc"/> + </port> + + </service> + +</definitions> diff --git a/sca-java-1.x/branches/sca-java-1.6.2/tools/wsdl2java/src/test/resources/sequences.xsd b/sca-java-1.x/branches/sca-java-1.6.2/tools/wsdl2java/src/test/resources/sequences.xsd new file mode 100644 index 0000000000..a565f3fa65 --- /dev/null +++ b/sca-java-1.x/branches/sca-java-1.6.2/tools/wsdl2java/src/test/resources/sequences.xsd @@ -0,0 +1,100 @@ +<?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. + --> +<xsd:schema xmlns:seq="http://www.example.com/sequences" + xmlns:xsd="http://www.w3.org/2001/XMLSchema" + targetNamespace="http://www.example.com/sequences"> + + <xsd:element name="mixedStockQuote" type="seq:MixedQuote" /> + <xsd:element name="rc" type="seq:RepeatingChoice" /> + <xsd:element name="mrc" type="seq:MixedRepeatingChoice" /> + <xsd:element name="rc2" type="seq:TwoRCs" /> + <xsd:element name="mrc2" type="seq:TwoRCsMixed" /> + + + + <xsd:complexType mixed="true" name="MixedQuote"> + <xsd:sequence> + <xsd:element name="symbol" type="xsd:string" /> + <xsd:element name="companyName" type="xsd:string" /> + <xsd:element name="price" type="xsd:decimal" /> + <xsd:element name="open1" type="xsd:decimal" /> + <xsd:element name="high" type="xsd:decimal" /> + <xsd:element name="low" type="xsd:decimal" /> + <xsd:element name="volume" type="xsd:double" /> + <xsd:element name="change1" type="xsd:double" /> + <xsd:element maxOccurs="unbounded" minOccurs="0" + name="quotes" type="seq:MixedQuote" /> + </xsd:sequence> + </xsd:complexType> + + + <xsd:complexType name="RepeatingChoice"> + <xsd:choice maxOccurs="unbounded" minOccurs="0"> + <xsd:element name="a" type="xsd:string" /> + <xsd:element name="b" type="xsd:int" /> + </xsd:choice> + </xsd:complexType> + + + <xsd:complexType mixed="true" name="MixedRepeatingChoice"> + <xsd:choice maxOccurs="unbounded" minOccurs="0"> + <xsd:element name="a" type="xsd:string" /> + <xsd:element name="b" type="xsd:int" /> + </xsd:choice> + </xsd:complexType> + + + <xsd:complexType name="TwoRCs"> + <xsd:sequence> + + <xsd:choice maxOccurs="unbounded" minOccurs="0"> + <xsd:element name="a" type="xsd:string" /> + <xsd:element name="b" type="xsd:int" /> + </xsd:choice> + + <xsd:element name="split" type="xsd:string" /> + + <xsd:choice maxOccurs="unbounded" minOccurs="0"> + <xsd:element name="y" type="xsd:string" /> + <xsd:element name="z" type="xsd:int" /> + </xsd:choice> + + </xsd:sequence> + </xsd:complexType> + + <xsd:complexType mixed="true" name="TwoRCsMixed"> + <xsd:sequence> + + <xsd:choice maxOccurs="unbounded" minOccurs="0"> + <xsd:element name="a" type="xsd:string" /> + <xsd:element name="b" type="xsd:int" /> + </xsd:choice> + + <xsd:element name="split" type="xsd:string" /> + + <xsd:choice maxOccurs="unbounded" minOccurs="0"> + <xsd:element name="y" type="xsd:string" /> + <xsd:element name="z" type="xsd:int" /> + </xsd:choice> + + </xsd:sequence> + </xsd:complexType> + +</xsd:schema> |