From bdd0a41aed7edf21ec2a65cfa17a86af2ef8c48a Mon Sep 17 00:00:00 2001 From: dims Date: Tue, 17 Jun 2008 00:23:01 +0000 Subject: Move Tuscany from Incubator to top level. git-svn-id: http://svn.us.apache.org/repos/asf/tuscany@668359 13f79535-47bb-0310-9956-ffa450edef68 --- sandbox/ant/tuscany-container-rhino/LICENSE.txt | 777 +++++++++++++++++++++ sandbox/ant/tuscany-container-rhino/README.txt | 35 + sandbox/ant/tuscany-container-rhino/pom.xml | 68 ++ .../rhino/assembly/JavaScriptImplementation.java | 74 ++ .../builder/JavaScriptContextFactoryBuilder.java | 62 ++ .../rhino/builder/JavaScriptTargetWireBuilder.java | 40 ++ .../rhino/config/JavaScriptContextFactory.java | 111 +++ .../context/CopyOfJavaScriptComponentContext.java | 165 +++++ .../rhino/context/JavaScriptComponentContext.java | 144 ++++ .../container/rhino/e4x/E4XInterceptor.java | 65 ++ .../container/rhino/e4x/E4XPolicyBuilder.java | 117 ++++ .../loader/JavaScriptImplementationLoader.java | 169 +++++ .../rhino/rhino/RhinoFunctionInvoker.java | 79 +++ .../tuscany/container/rhino/rhino/RhinoScript.java | 194 +++++ .../container/rhino/rhino/RhinoScriptInstance.java | 82 +++ .../src/main/resources/system.fragment | 37 + .../JavaScriptContextFactoryBuilderTestCase.java | 121 ++++ .../rhino/e4x/E4XInterceptorTestCase.java | 131 ++++ .../rhino/e4x/E4XPolicyBuilderTestCase.java | 325 +++++++++ .../integration/AbstractJavaScriptTestCase.java | 46 ++ .../container/rhino/integration/BasicTestCase.java | 27 + .../rhino/integration/E4XServiceRefsTestCase.java | 31 + .../container/rhino/integration/E4XTestCase.java | 29 + .../container/rhino/integration/HelloWorld.java | 26 + .../rhino/integration/InitializationTestCase.java | 33 + .../rhino/integration/PropertiesTestCase.java | 33 + .../rhino/integration/ServiceRefsTestCase.java | 27 + .../container/rhino/integration/TestMethods.java | 30 + .../apache/tuscany/container/rhino/rhino/Foo.java | 16 + .../rhino/rhino/RhinoFunctionInvokerTestCase.java | 173 +++++ .../rhino/rhino/RhinoScriptInstanceTestCase.java | 47 ++ .../container/rhino/rhino/RhinoScriptTestCase.java | 80 +++ .../tuscany/container/rhino/e4x/helloworld.wsdl | 97 +++ .../src/test/resources/sca.module | 66 ++ .../tests/HelloWorldE4XProxyImpl.componentType | 13 + .../test/resources/tests/HelloWorldE4XProxyImpl.js | 28 + .../resources/tests/HelloWorldImpl1.componentType | 9 + .../src/test/resources/tests/HelloWorldImpl1.js | 20 + .../resources/tests/HelloWorldImpl2.componentType | 11 + .../src/test/resources/tests/HelloWorldImpl2.js | 20 + .../resources/tests/HelloWorldImpl4.componentType | 9 + .../src/test/resources/tests/HelloWorldImpl4.js | 26 + .../resources/tests/HelloWorldImpl5.componentType | 9 + .../src/test/resources/tests/HelloWorldImpl5.js | 29 + .../tests/HelloWorldProxyImpl.componentType | 13 + .../test/resources/tests/HelloWorldProxyImpl.js | 20 + .../src/test/resources/tests/e4x.componentType | 9 + .../src/test/resources/tests/e4x.js | 28 + .../src/test/resources/wsdl/helloworld.wsdl | 97 +++ 49 files changed, 3898 insertions(+) create mode 100644 sandbox/ant/tuscany-container-rhino/LICENSE.txt create mode 100644 sandbox/ant/tuscany-container-rhino/README.txt create mode 100644 sandbox/ant/tuscany-container-rhino/pom.xml create mode 100644 sandbox/ant/tuscany-container-rhino/src/main/java/org/apache/tuscany/container/rhino/assembly/JavaScriptImplementation.java create mode 100644 sandbox/ant/tuscany-container-rhino/src/main/java/org/apache/tuscany/container/rhino/builder/JavaScriptContextFactoryBuilder.java create mode 100644 sandbox/ant/tuscany-container-rhino/src/main/java/org/apache/tuscany/container/rhino/builder/JavaScriptTargetWireBuilder.java create mode 100644 sandbox/ant/tuscany-container-rhino/src/main/java/org/apache/tuscany/container/rhino/config/JavaScriptContextFactory.java create mode 100644 sandbox/ant/tuscany-container-rhino/src/main/java/org/apache/tuscany/container/rhino/context/CopyOfJavaScriptComponentContext.java create mode 100644 sandbox/ant/tuscany-container-rhino/src/main/java/org/apache/tuscany/container/rhino/context/JavaScriptComponentContext.java create mode 100644 sandbox/ant/tuscany-container-rhino/src/main/java/org/apache/tuscany/container/rhino/e4x/E4XInterceptor.java create mode 100644 sandbox/ant/tuscany-container-rhino/src/main/java/org/apache/tuscany/container/rhino/e4x/E4XPolicyBuilder.java create mode 100644 sandbox/ant/tuscany-container-rhino/src/main/java/org/apache/tuscany/container/rhino/loader/JavaScriptImplementationLoader.java create mode 100644 sandbox/ant/tuscany-container-rhino/src/main/java/org/apache/tuscany/container/rhino/rhino/RhinoFunctionInvoker.java create mode 100644 sandbox/ant/tuscany-container-rhino/src/main/java/org/apache/tuscany/container/rhino/rhino/RhinoScript.java create mode 100644 sandbox/ant/tuscany-container-rhino/src/main/java/org/apache/tuscany/container/rhino/rhino/RhinoScriptInstance.java create mode 100644 sandbox/ant/tuscany-container-rhino/src/main/resources/system.fragment create mode 100644 sandbox/ant/tuscany-container-rhino/src/test/java/org/apache/tuscany/container/rhino/builder/JavaScriptContextFactoryBuilderTestCase.java create mode 100644 sandbox/ant/tuscany-container-rhino/src/test/java/org/apache/tuscany/container/rhino/e4x/E4XInterceptorTestCase.java create mode 100644 sandbox/ant/tuscany-container-rhino/src/test/java/org/apache/tuscany/container/rhino/e4x/E4XPolicyBuilderTestCase.java create mode 100644 sandbox/ant/tuscany-container-rhino/src/test/java/org/apache/tuscany/container/rhino/integration/AbstractJavaScriptTestCase.java create mode 100644 sandbox/ant/tuscany-container-rhino/src/test/java/org/apache/tuscany/container/rhino/integration/BasicTestCase.java create mode 100644 sandbox/ant/tuscany-container-rhino/src/test/java/org/apache/tuscany/container/rhino/integration/E4XServiceRefsTestCase.java create mode 100644 sandbox/ant/tuscany-container-rhino/src/test/java/org/apache/tuscany/container/rhino/integration/E4XTestCase.java create mode 100644 sandbox/ant/tuscany-container-rhino/src/test/java/org/apache/tuscany/container/rhino/integration/HelloWorld.java create mode 100644 sandbox/ant/tuscany-container-rhino/src/test/java/org/apache/tuscany/container/rhino/integration/InitializationTestCase.java create mode 100644 sandbox/ant/tuscany-container-rhino/src/test/java/org/apache/tuscany/container/rhino/integration/PropertiesTestCase.java create mode 100644 sandbox/ant/tuscany-container-rhino/src/test/java/org/apache/tuscany/container/rhino/integration/ServiceRefsTestCase.java create mode 100644 sandbox/ant/tuscany-container-rhino/src/test/java/org/apache/tuscany/container/rhino/integration/TestMethods.java create mode 100644 sandbox/ant/tuscany-container-rhino/src/test/java/org/apache/tuscany/container/rhino/rhino/Foo.java create mode 100644 sandbox/ant/tuscany-container-rhino/src/test/java/org/apache/tuscany/container/rhino/rhino/RhinoFunctionInvokerTestCase.java create mode 100644 sandbox/ant/tuscany-container-rhino/src/test/java/org/apache/tuscany/container/rhino/rhino/RhinoScriptInstanceTestCase.java create mode 100644 sandbox/ant/tuscany-container-rhino/src/test/java/org/apache/tuscany/container/rhino/rhino/RhinoScriptTestCase.java create mode 100644 sandbox/ant/tuscany-container-rhino/src/test/resources/org/apache/tuscany/container/rhino/e4x/helloworld.wsdl create mode 100644 sandbox/ant/tuscany-container-rhino/src/test/resources/sca.module create mode 100644 sandbox/ant/tuscany-container-rhino/src/test/resources/tests/HelloWorldE4XProxyImpl.componentType create mode 100644 sandbox/ant/tuscany-container-rhino/src/test/resources/tests/HelloWorldE4XProxyImpl.js create mode 100644 sandbox/ant/tuscany-container-rhino/src/test/resources/tests/HelloWorldImpl1.componentType create mode 100644 sandbox/ant/tuscany-container-rhino/src/test/resources/tests/HelloWorldImpl1.js create mode 100644 sandbox/ant/tuscany-container-rhino/src/test/resources/tests/HelloWorldImpl2.componentType create mode 100644 sandbox/ant/tuscany-container-rhino/src/test/resources/tests/HelloWorldImpl2.js create mode 100644 sandbox/ant/tuscany-container-rhino/src/test/resources/tests/HelloWorldImpl4.componentType create mode 100644 sandbox/ant/tuscany-container-rhino/src/test/resources/tests/HelloWorldImpl4.js create mode 100644 sandbox/ant/tuscany-container-rhino/src/test/resources/tests/HelloWorldImpl5.componentType create mode 100644 sandbox/ant/tuscany-container-rhino/src/test/resources/tests/HelloWorldImpl5.js create mode 100644 sandbox/ant/tuscany-container-rhino/src/test/resources/tests/HelloWorldProxyImpl.componentType create mode 100644 sandbox/ant/tuscany-container-rhino/src/test/resources/tests/HelloWorldProxyImpl.js create mode 100644 sandbox/ant/tuscany-container-rhino/src/test/resources/tests/e4x.componentType create mode 100644 sandbox/ant/tuscany-container-rhino/src/test/resources/tests/e4x.js create mode 100644 sandbox/ant/tuscany-container-rhino/src/test/resources/wsdl/helloworld.wsdl (limited to 'sandbox/ant/tuscany-container-rhino') diff --git a/sandbox/ant/tuscany-container-rhino/LICENSE.txt b/sandbox/ant/tuscany-container-rhino/LICENSE.txt new file mode 100644 index 0000000000..d8a0663857 --- /dev/null +++ b/sandbox/ant/tuscany-container-rhino/LICENSE.txt @@ -0,0 +1,777 @@ + + 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. + +=============================================================================== + +For the Rhino JavaScript project: + +Netscape Public License V1.1 + + AMENDMENTS + + The Netscape Public License Version 1.1 ("NPL") consists of the + Mozilla Public License Version 1.1 with the following Amendments, + including Exhibit A-Netscape Public License. Files identified with + "Exhibit A-Netscape Public License" are governed by the Netscape + Public License Version 1.1. + + Additional Terms applicable to the Netscape Public License. + I. Effect. + These additional terms described in this Netscape Public + License -- Amendments shall apply to the Mozilla Communicator + client code and to all Covered Code under this License. + + II. "Netscape's Branded Code" means Covered Code that Netscape + distributes and/or permits others to distribute under one or more + trademark(s) which are controlled by Netscape but which are not + licensed for use under this License. + + III. Netscape and logo. + This License does not grant any rights to use the trademarks + "Netscape", the "Netscape N and horizon" logo or the "Netscape + lighthouse" logo, "Netcenter", "Gecko", "Java" or "JavaScript", + "Smart Browsing" even if such marks are included in the Original + Code or Modifications. + + IV. Inability to Comply Due to Contractual Obligation. + Prior to licensing the Original Code under this License, Netscape + has licensed third party code for use in Netscape's Branded Code. + To the extent that Netscape is limited contractually from making + such third party code available under this License, Netscape may + choose to reintegrate such code into Covered Code without being + required to distribute such code in Source Code form, even if + such code would otherwise be considered "Modifications" under + this License. + + V. Use of Modifications and Covered Code by Initial Developer. + V.1. In General. + The obligations of Section 3 apply to Netscape, except to + the extent specified in this Amendment, Section V.2 and V.3. + + V.2. Other Products. + Netscape may include Covered Code in products other than the + Netscape's Branded Code which are released by Netscape + during the two (2) years following the release date of the + Original Code, without such additional products becoming + subject to the terms of this License, and may license such + additional products on different terms from those contained + in this License. + + V.3. Alternative Licensing. + Netscape may license the Source Code of Netscape's Branded + Code, including Modifications incorporated therein, without + such Netscape Branded Code becoming subject to the terms of + this License, and may license such Netscape Branded Code on + different terms from those contained in this License. + + VI. Litigation. + Notwithstanding the limitations of Section 11 above, the + provisions regarding litigation in Section 11(a), (b) and (c) of + the License shall apply to all disputes relating to this License. + + EXHIBIT A-Netscape Public License. + + "The contents of this file are subject to the Netscape Public + License Version 1.1 (the "License"); you may not use this file + except in compliance with the License. You may obtain a copy of + the License at http://www.mozilla.org/NPL/ + + Software distributed under the License is distributed on an "AS + IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or + implied. See the License for the specific language governing + rights and limitations under the License. + + The Original Code is Mozilla Communicator client code, released + March 31, 1998. + + The Initial Developer of the Original Code is Netscape + Communications Corporation. Portions created by Netscape are + Copyright (C) 1998-1999 Netscape Communications Corporation. All + Rights Reserved. + + Contributor(s): ______________________________________. + + Alternatively, the contents of this file may be used under the + terms of the _____ license (the "[___] License"), in which case + the provisions of [______] License are applicable instead of + those above. If you wish to allow use of your version of this + file only under the terms of the [____] License and not to allow + others to use your version of this file under the NPL, indicate + your decision by deleting the provisions above and replace them + with the notice and other provisions required by the [___] + License. If you do not delete the provisions above, a recipient + may use your version of this file under either the NPL or the + [___] License." + + ---------------------------------------------------------------------- + + MOZILLA PUBLIC LICENSE + Version 1.1 + + --------------- + +1. Definitions. + + 1.0.1. "Commercial Use" means distribution or otherwise making the + Covered Code available to a third party. + + 1.1. "Contributor" means each entity that creates or contributes to + the creation of Modifications. + + 1.2. "Contributor Version" means the combination of the Original + Code, prior Modifications used by a Contributor, and the Modifications + made by that particular Contributor. + + 1.3. "Covered Code" means the Original Code or Modifications or the + combination of the Original Code and Modifications, in each case + including portions thereof. + + 1.4. "Electronic Distribution Mechanism" means a mechanism generally + accepted in the software development community for the electronic + transfer of data. + + 1.5. "Executable" means Covered Code in any form other than Source + Code. + + 1.6. "Initial Developer" means the individual or entity identified + as the Initial Developer in the Source Code notice required by Exhibit + A. + + 1.7. "Larger Work" means a work which combines Covered Code or + portions thereof with code not governed by the terms of this License. + + 1.8. "License" means this document. + + 1.8.1. "Licensable" means having the right to grant, to the maximum + extent possible, whether at the time of the initial grant or + subsequently acquired, any and all of the rights conveyed herein. + + 1.9. "Modifications" means any addition to or deletion from the + substance or structure of either the Original Code or any previous + Modifications. When Covered Code is released as a series of files, a + Modification is: + A. Any addition to or deletion from the contents of a file + containing Original Code or previous Modifications. + + B. Any new file that contains any part of the Original Code or + previous Modifications. + + 1.10. "Original Code" means Source Code of computer software code + which is described in the Source Code notice required by Exhibit A as + Original Code, and which, at the time of its release under this + License is not already Covered Code governed by this License. + + 1.10.1. "Patent Claims" means any patent claim(s), now owned or + hereafter acquired, including without limitation, method, process, + and apparatus claims, in any patent Licensable by grantor. + + 1.11. "Source Code" means the preferred form of the Covered Code for + making modifications to it, including all modules it contains, plus + any associated interface definition files, scripts used to control + compilation and installation of an Executable, or source code + differential comparisons against either the Original Code or another + well known, available Covered Code of the Contributor's choice. The + Source Code can be in a compressed or archival form, provided the + appropriate decompression or de-archiving software is widely available + for no charge. + + 1.12. "You" (or "Your") means an individual or a legal entity + exercising rights under, and complying with all of the terms of, this + License or a future version of this License issued under Section 6.1. + For legal entities, "You" includes any entity which controls, is + controlled by, or is under common control with You. For purposes of + this definition, "control" means (a) the power, direct or indirect, + to cause the direction or management of such entity, whether by + contract or otherwise, or (b) ownership of more than fifty percent + (50%) of the outstanding shares or beneficial ownership of such + entity. + +2. Source Code License. + + 2.1. The Initial Developer Grant. + The Initial Developer hereby grants You a world-wide, royalty-free, + non-exclusive license, subject to third party intellectual property + claims: + (a) under intellectual property rights (other than patent or + trademark) Licensable by Initial Developer to use, reproduce, + modify, display, perform, sublicense and distribute the Original + Code (or portions thereof) with or without Modifications, and/or + as part of a Larger Work; and + + (b) under Patents Claims infringed by the making, using or + selling of Original Code, to make, have made, use, practice, + sell, and offer for sale, and/or otherwise dispose of the + Original Code (or portions thereof). + + (c) the licenses granted in this Section 2.1(a) and (b) are + effective on the date Initial Developer first distributes + Original Code under the terms of this License. + + (d) Notwithstanding Section 2.1(b) above, no patent license is + granted: 1) for code that You delete from the Original Code; 2) + separate from the Original Code; or 3) for infringements caused + by: i) the modification of the Original Code or ii) the + combination of the Original Code with other software or devices. + + 2.2. Contributor Grant. + Subject to third party intellectual property claims, each Contributor + hereby grants You a world-wide, royalty-free, non-exclusive license + + (a) under intellectual property rights (other than patent or + trademark) Licensable by Contributor, to use, reproduce, modify, + display, perform, sublicense and distribute the Modifications + created by such Contributor (or portions thereof) either on an + unmodified basis, with other Modifications, as Covered Code + and/or as part of a Larger Work; and + + (b) under Patent Claims infringed by the making, using, or + selling of Modifications made by that Contributor either alone + and/or in combination with its Contributor Version (or portions + of such combination), to make, use, sell, offer for sale, have + made, and/or otherwise dispose of: 1) Modifications made by that + Contributor (or portions thereof); and 2) the combination of + Modifications made by that Contributor with its Contributor + Version (or portions of such combination). + + (c) the licenses granted in Sections 2.2(a) and 2.2(b) are + effective on the date Contributor first makes Commercial Use of + the Covered Code. + + (d) Notwithstanding Section 2.2(b) above, no patent license is + granted: 1) for any code that Contributor has deleted from the + Contributor Version; 2) separate from the Contributor Version; + 3) for infringements caused by: i) third party modifications of + Contributor Version or ii) the combination of Modifications made + by that Contributor with other software (except as part of the + Contributor Version) or other devices; or 4) under Patent Claims + infringed by Covered Code in the absence of Modifications made by + that Contributor. + +3. Distribution Obligations. + + 3.1. Application of License. + The Modifications which You create or to which You contribute are + governed by the terms of this License, including without limitation + Section 2.2. The Source Code version of Covered Code may be + distributed only under the terms of this License or a future version + of this License released under Section 6.1, and You must include a + copy of this License with every copy of the Source Code You + distribute. You may not offer or impose any terms on any Source Code + version that alters or restricts the applicable version of this + License or the recipients' rights hereunder. However, You may include + an additional document offering the additional rights described in + Section 3.5. + + 3.2. Availability of Source Code. + Any Modification which You create or to which You contribute must be + made available in Source Code form under the terms of this License + either on the same media as an Executable version or via an accepted + Electronic Distribution Mechanism to anyone to whom you made an + Executable version available; and if made available via Electronic + Distribution Mechanism, must remain available for at least twelve (12) + months after the date it initially became available, or at least six + (6) months after a subsequent version of that particular Modification + has been made available to such recipients. You are responsible for + ensuring that the Source Code version remains available even if the + Electronic Distribution Mechanism is maintained by a third party. + + 3.3. Description of Modifications. + You must cause all Covered Code to which You contribute to contain a + file documenting the changes You made to create that Covered Code and + the date of any change. You must include a prominent statement that + the Modification is derived, directly or indirectly, from Original + Code provided by the Initial Developer and including the name of the + Initial Developer in (a) the Source Code, and (b) in any notice in an + Executable version or related documentation in which You describe the + origin or ownership of the Covered Code. + + 3.4. Intellectual Property Matters + (a) Third Party Claims. + If Contributor has knowledge that a license under a third party's + intellectual property rights is required to exercise the rights + granted by such Contributor under Sections 2.1 or 2.2, + Contributor must include a text file with the Source Code + distribution titled "LEGAL" which describes the claim and the + party making the claim in sufficient detail that a recipient will + know whom to contact. If Contributor obtains such knowledge after + the Modification is made available as described in Section 3.2, + Contributor shall promptly modify the LEGAL file in all copies + Contributor makes available thereafter and shall take other steps + (such as notifying appropriate mailing lists or newsgroups) + reasonably calculated to inform those who received the Covered + Code that new knowledge has been obtained. + + (b) Contributor APIs. + If Contributor's Modifications include an application programming + interface and Contributor has knowledge of patent licenses which + are reasonably necessary to implement that API, Contributor must + also include this information in the LEGAL file. + + (c) Representations. + Contributor represents that, except as disclosed pursuant to + Section 3.4(a) above, Contributor believes that Contributor's + Modifications are Contributor's original creation(s) and/or + Contributor has sufficient rights to grant the rights conveyed by + this License. + + 3.5. Required Notices. + You must duplicate the notice in Exhibit A in each file of the Source + Code. If it is not possible to put such notice in a particular Source + Code file due to its structure, then You must include such notice in a + location (such as a relevant directory) where a user would be likely + to look for such a notice. If You created one or more Modification(s) + You may add your name as a Contributor to the notice described in + Exhibit A. You must also duplicate this License in any documentation + for the Source Code where You describe recipients' rights or ownership + rights relating to Covered Code. You may choose to offer, and to + charge a fee for, warranty, support, indemnity or liability + obligations to one or more recipients of Covered Code. However, You + may do so only on Your own behalf, and not on behalf of the Initial + Developer or any Contributor. You must make it absolutely clear than + any such warranty, support, indemnity or liability obligation is + offered by You alone, and You hereby agree to indemnify the Initial + Developer and every Contributor for any liability incurred by the + Initial Developer or such Contributor as a result of warranty, + support, indemnity or liability terms You offer. + + 3.6. Distribution of Executable Versions. + You may distribute Covered Code in Executable form only if the + requirements of Section 3.1-3.5 have been met for that Covered Code, + and if You include a notice stating that the Source Code version of + the Covered Code is available under the terms of this License, + including a description of how and where You have fulfilled the + obligations of Section 3.2. The notice must be conspicuously included + in any notice in an Executable version, related documentation or + collateral in which You describe recipients' rights relating to the + Covered Code. You may distribute the Executable version of Covered + Code or ownership rights under a license of Your choice, which may + contain terms different from this License, provided that You are in + compliance with the terms of this License and that the license for the + Executable version does not attempt to limit or alter the recipient's + rights in the Source Code version from the rights set forth in this + License. If You distribute the Executable version under a different + license You must make it absolutely clear that any terms which differ + from this License are offered by You alone, not by the Initial + Developer or any Contributor. You hereby agree to indemnify the + Initial Developer and every Contributor for any liability incurred by + the Initial Developer or such Contributor as a result of any such + terms You offer. + + 3.7. Larger Works. + You may create a Larger Work by combining Covered Code with other code + not governed by the terms of this License and distribute the Larger + Work as a single product. In such a case, You must make sure the + requirements of this License are fulfilled for the Covered Code. + +4. Inability to Comply Due to Statute or Regulation. + + If it is impossible for You to comply with any of the terms of this + License with respect to some or all of the Covered Code due to + statute, judicial order, or regulation then You must: (a) comply with + the terms of this License to the maximum extent possible; and (b) + describe the limitations and the code they affect. Such description + must be included in the LEGAL file described in Section 3.4 and must + be included with all distributions of the Source Code. Except to the + extent prohibited by statute or regulation, such description must be + sufficiently detailed for a recipient of ordinary skill to be able to + understand it. + +5. Application of this License. + + This License applies to code to which the Initial Developer has + attached the notice in Exhibit A and to related Covered Code. + +6. Versions of the License. + + 6.1. New Versions. + Netscape Communications Corporation ("Netscape") may publish revised + and/or new versions of the License from time to time. Each version + will be given a distinguishing version number. + + 6.2. Effect of New Versions. + Once Covered Code has been published under a particular version of the + License, You may always continue to use it under the terms of that + version. You may also choose to use such Covered Code under the terms + of any subsequent version of the License published by Netscape. No one + other than Netscape has the right to modify the terms applicable to + Covered Code created under this License. + + 6.3. Derivative Works. + If You create or use a modified version of this License (which you may + only do in order to apply it to code which is not already Covered Code + governed by this License), You must (a) rename Your license so that + the phrases "Mozilla", "MOZILLAPL", "MOZPL", "Netscape", + "MPL", "NPL" or any confusingly similar phrase do not appear in your + license (except to note that your license differs from this License) + and (b) otherwise make it clear that Your version of the license + contains terms which differ from the Mozilla Public License and + Netscape Public License. (Filling in the name of the Initial + Developer, Original Code or Contributor in the notice described in + Exhibit A shall not of themselves be deemed to be modifications of + this License.) + +7. DISCLAIMER OF WARRANTY. + + COVERED CODE IS PROVIDED UNDER THIS LICENSE ON AN "AS IS" BASIS, + WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + WITHOUT LIMITATION, WARRANTIES THAT THE COVERED CODE IS FREE OF + DEFECTS, MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE OR NON-INFRINGING. + THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE COVERED CODE + IS WITH YOU. SHOULD ANY COVERED CODE PROVE DEFECTIVE IN ANY RESPECT, + YOU (NOT THE INITIAL DEVELOPER OR ANY OTHER CONTRIBUTOR) ASSUME THE + COST OF ANY NECESSARY SERVICING, REPAIR OR CORRECTION. THIS DISCLAIMER + OF WARRANTY CONSTITUTES AN ESSENTIAL PART OF THIS LICENSE. NO USE OF + ANY COVERED CODE IS AUTHORIZED HEREUNDER EXCEPT UNDER THIS DISCLAIMER. + +8. TERMINATION. + + 8.1. This License and the rights granted hereunder will terminate + automatically if You fail to comply with terms herein and fail to cure + such breach within 30 days of becoming aware of the breach. All + sublicenses to the Covered Code which are properly granted shall + survive any termination of this License. Provisions which, by their + nature, must remain in effect beyond the termination of this License + shall survive. + + 8.2. If You initiate litigation by asserting a patent infringement + claim (excluding declatory judgment actions) against Initial Developer + or a Contributor (the Initial Developer or Contributor against whom + You file such action is referred to as "Participant") alleging that: + + (a) such Participant's Contributor Version directly or indirectly + infringes any patent, then any and all rights granted by such + Participant to You under Sections 2.1 and/or 2.2 of this License + shall, upon 60 days notice from Participant terminate prospectively, + unless if within 60 days after receipt of notice You either: (i) + agree in writing to pay Participant a mutually agreeable reasonable + royalty for Your past and future use of Modifications made by such + Participant, or (ii) withdraw Your litigation claim with respect to + the Contributor Version against such Participant. If within 60 days + of notice, a reasonable royalty and payment arrangement are not + mutually agreed upon in writing by the parties or the litigation claim + is not withdrawn, the rights granted by Participant to You under + Sections 2.1 and/or 2.2 automatically terminate at the expiration of + the 60 day notice period specified above. + + (b) any software, hardware, or device, other than such Participant's + Contributor Version, directly or indirectly infringes any patent, then + any rights granted to You by such Participant under Sections 2.1(b) + and 2.2(b) are revoked effective as of the date You first made, used, + sold, distributed, or had made, Modifications made by that + Participant. + + 8.3. If You assert a patent infringement claim against Participant + alleging that such Participant's Contributor Version directly or + indirectly infringes any patent where such claim is resolved (such as + by license or settlement) prior to the initiation of patent + infringement litigation, then the reasonable value of the licenses + granted by such Participant under Sections 2.1 or 2.2 shall be taken + into account in determining the amount or value of any payment or + license. + + 8.4. In the event of termination under Sections 8.1 or 8.2 above, + all end user license agreements (excluding distributors and resellers) + which have been validly granted by You or any distributor hereunder + prior to termination shall survive termination. + +9. LIMITATION OF LIABILITY. + + UNDER NO CIRCUMSTANCES AND UNDER NO LEGAL THEORY, WHETHER TORT + (INCLUDING NEGLIGENCE), CONTRACT, OR OTHERWISE, SHALL YOU, THE INITIAL + DEVELOPER, ANY OTHER CONTRIBUTOR, OR ANY DISTRIBUTOR OF COVERED CODE, + OR ANY SUPPLIER OF ANY OF SUCH PARTIES, BE LIABLE TO ANY PERSON FOR + ANY INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES OF ANY + CHARACTER INCLUDING, WITHOUT LIMITATION, DAMAGES FOR LOSS OF GOODWILL, + WORK STOPPAGE, COMPUTER FAILURE OR MALFUNCTION, OR ANY AND ALL OTHER + COMMERCIAL DAMAGES OR LOSSES, EVEN IF SUCH PARTY SHALL HAVE BEEN + INFORMED OF THE POSSIBILITY OF SUCH DAMAGES. THIS LIMITATION OF + LIABILITY SHALL NOT APPLY TO LIABILITY FOR DEATH OR PERSONAL INJURY + RESULTING FROM SUCH PARTY'S NEGLIGENCE TO THE EXTENT APPLICABLE LAW + PROHIBITS SUCH LIMITATION. SOME JURISDICTIONS DO NOT ALLOW THE + EXCLUSION OR LIMITATION OF INCIDENTAL OR CONSEQUENTIAL DAMAGES, SO + THIS EXCLUSION AND LIMITATION MAY NOT APPLY TO YOU. + +10. U.S. GOVERNMENT END USERS. + + The Covered Code is a "commercial item," as that term is defined in + 48 C.F.R. 2.101 (Oct. 1995), consisting of "commercial computer + software" and "commercial computer software documentation," as such + terms are used in 48 C.F.R. 12.212 (Sept. 1995). Consistent with 48 + C.F.R. 12.212 and 48 C.F.R. 227.7202-1 through 227.7202-4 (June 1995), + all U.S. Government End Users acquire Covered Code with only those + rights set forth herein. + +11. MISCELLANEOUS. + + This License represents the complete agreement concerning subject + matter hereof. If any provision of this License is held to be + unenforceable, such provision shall be reformed only to the extent + necessary to make it enforceable. This License shall be governed by + California law provisions (except to the extent applicable law, if + any, provides otherwise), excluding its conflict-of-law provisions. + With respect to disputes in which at least one party is a citizen of, + or an entity chartered or registered to do business in the United + States of America, any litigation relating to this License shall be + subject to the jurisdiction of the Federal Courts of the Northern + District of California, with venue lying in Santa Clara County, + California, with the losing party responsible for costs, including + without limitation, court costs and reasonable attorneys' fees and + expenses. The application of the United Nations Convention on + Contracts for the International Sale of Goods is expressly excluded. + Any law or regulation which provides that the language of a contract + shall be construed against the drafter shall not apply to this + License. + +12. RESPONSIBILITY FOR CLAIMS. + + As between Initial Developer and the Contributors, each party is + responsible for claims and damages arising, directly or indirectly, + out of its utilization of rights under this License and You agree to + work with Initial Developer and Contributors to distribute such + responsibility on an equitable basis. Nothing herein is intended or + shall be deemed to constitute any admission of liability. + +13. MULTIPLE-LICENSED CODE. + + Initial Developer may designate portions of the Covered Code as + "Multiple-Licensed". "Multiple-Licensed" means that the Initial + Developer permits you to utilize portions of the Covered Code under + Your choice of the NPL or the alternative licenses, if any, specified + by the Initial Developer in the file described in Exhibit A. + +EXHIBIT A -Mozilla Public License. + + ``The contents of this file are subject to the Mozilla Public License + Version 1.1 (the "License"); you may not use this file except in + compliance with the License. You may obtain a copy of the License at + http://www.mozilla.org/MPL/ + + Software distributed under the License is distributed on an "AS IS" + basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the + License for the specific language governing rights and limitations + under the License. + + The Original Code is ______________________________________. + + The Initial Developer of the Original Code is ________________________. + Portions created by ______________________ are Copyright (C) ______ + _______________________. All Rights Reserved. + + Contributor(s): ______________________________________. + + Alternatively, the contents of this file may be used under the terms + of the _____ license (the "[___] License"), in which case the + provisions of [______] License are applicable instead of those + above. If you wish to allow use of your version of this file only + under the terms of the [____] License and not to allow others to use + your version of this file under the MPL, indicate your decision by + deleting the provisions above and replace them with the notice and + other provisions required by the [___] License. If you do not delete + the provisions above, a recipient may use your version of this file + under either the MPL or the [___] License." + + [NOTE: The text of this Exhibit A may differ slightly from the text of + the notices in the Source Code files of the Original Code. You should + use the text of this Exhibit A rather than the text found in the + Original Code Source Code for Your Modifications.] + diff --git a/sandbox/ant/tuscany-container-rhino/README.txt b/sandbox/ant/tuscany-container-rhino/README.txt new file mode 100644 index 0000000000..723f3fd3ab --- /dev/null +++ b/sandbox/ant/tuscany-container-rhino/README.txt @@ -0,0 +1,35 @@ +Apache Tuscany M1 build (May, 2006) +=================================== + +http://incubator.apache.org/tuscany/ + +Tuscany is an effort undergoing incubation at the Apache Software Foundation +(ASF), sponsored by the Web Services PMC. + +Incubation is required of all newly accepted projects until a further review +indicates that the infrastructure, communications, and decision making process +have stabilized in a manner consistent with other successful ASF projects. + +While incubation status is not necessarily a reflection of the completeness or +stability of the code, it does indicate that the project has yet to be fully +endorsed by the ASF. + + +Support +------- + +Any problem with this release can be reported to the Tuscany mailing list +or in the JIRA issue tracker. + +Mailing list subscription: + tuscany-dev-subscribe@ws.apache.org + +Jira: + http://issues.apache.org/jira/browse/Tuscany + + +Thank you for using Tuscany! + + +The Tuscany Team. + diff --git a/sandbox/ant/tuscany-container-rhino/pom.xml b/sandbox/ant/tuscany-container-rhino/pom.xml new file mode 100644 index 0000000000..5596f680fe --- /dev/null +++ b/sandbox/ant/tuscany-container-rhino/pom.xml @@ -0,0 +1,68 @@ + + + + + + org.apache.tuscany.sca.containers + tuscany-sca-containers + incubating-M1 + + + 4.0.0 + tuscany-container-rhino + Tuscany Rhino JavaScript Container + Tuscany Rhino JavaScript Container + incubating-M1 + + + + org.apache.tuscany + tuscany-core + ${pom.version} + compile + + + + rhino + js + 1.6R2 + compile + + + + org.apache.tuscany.databinding + tuscany-databinding-sdo + ${pom.version} + compile + + + + xmlbeans + xbean + 2.1.0 + compile + + + + junit + junit + 3.8.1 + test + + + + diff --git a/sandbox/ant/tuscany-container-rhino/src/main/java/org/apache/tuscany/container/rhino/assembly/JavaScriptImplementation.java b/sandbox/ant/tuscany-container-rhino/src/main/java/org/apache/tuscany/container/rhino/assembly/JavaScriptImplementation.java new file mode 100644 index 0000000000..5b570d5d41 --- /dev/null +++ b/sandbox/ant/tuscany-container-rhino/src/main/java/org/apache/tuscany/container/rhino/assembly/JavaScriptImplementation.java @@ -0,0 +1,74 @@ +/** + * + * Copyright 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. + */ +package org.apache.tuscany.container.rhino.assembly; + +import org.apache.tuscany.common.resource.ResourceLoader; +import org.apache.tuscany.model.assembly.impl.AtomicImplementationImpl; + +import commonj.sdo.helper.TypeHelper; + +/** + * Default implementation of a JavScript component implementation type + * + * @version $Rev$ $Date$ + */ +public class JavaScriptImplementation extends AtomicImplementationImpl { + + private String scriptFile; + + private String script; + + private ResourceLoader resourceLoader; + + private TypeHelper typeHelper; + + public JavaScriptImplementation() { + super(); + } + + public void setResourceLoader(ResourceLoader resourceLoader) { + this.resourceLoader = resourceLoader; + } + + public ResourceLoader getResourceLoader() { + return resourceLoader; + } + + public TypeHelper getTypeHelper() { + return typeHelper; + } + + public void setTypeHelper(TypeHelper typeHelper) { + this.typeHelper = typeHelper; + } + + public String getScriptFile() { + return scriptFile; + } + + public void setScriptFile(String fn) { + scriptFile = fn; + } + + public String getScript() { + return script; + } + + public void setScript(String script) { + this.script = script; + } +} diff --git a/sandbox/ant/tuscany-container-rhino/src/main/java/org/apache/tuscany/container/rhino/builder/JavaScriptContextFactoryBuilder.java b/sandbox/ant/tuscany-container-rhino/src/main/java/org/apache/tuscany/container/rhino/builder/JavaScriptContextFactoryBuilder.java new file mode 100644 index 0000000000..4f58758a7e --- /dev/null +++ b/sandbox/ant/tuscany-container-rhino/src/main/java/org/apache/tuscany/container/rhino/builder/JavaScriptContextFactoryBuilder.java @@ -0,0 +1,62 @@ +/** + * + * Copyright 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. + */ +package org.apache.tuscany.container.rhino.builder; + +import java.lang.reflect.Method; +import java.util.HashMap; +import java.util.Map; + +import org.apache.tuscany.container.rhino.assembly.JavaScriptImplementation; +import org.apache.tuscany.container.rhino.config.JavaScriptContextFactory; +import org.apache.tuscany.container.rhino.rhino.RhinoScript; +import org.apache.tuscany.core.builder.ContextFactory; +import org.apache.tuscany.core.extension.ContextFactoryBuilderSupport; +import org.apache.tuscany.model.assembly.Scope; +import org.apache.tuscany.model.assembly.Service; + +/** + * Builds {@link org.apache.tuscany.container.rhino.config.JavaScriptContextFactory}s from a JavaScript component type + * + * @version $Rev$ $Date$ + */ +@org.osoa.sca.annotations.Scope("MODULE") +public class JavaScriptContextFactoryBuilder extends ContextFactoryBuilderSupport { + + @Override + protected ContextFactory createContextFactory(String componentName, JavaScriptImplementation jsImplementation, Scope scope) { + + String script = jsImplementation.getScript(); + + Map defaultProperties = new HashMap(); + for (org.apache.tuscany.model.assembly.Property property : jsImplementation.getComponentType().getProperties()) { + defaultProperties.put(property.getName(), property.getDefaultValue()); + } + + ClassLoader cl = jsImplementation.getResourceLoader().getClassLoader(); + + RhinoScript rhinoScript = new RhinoScript(componentName, script, defaultProperties, cl); + + for (Service service : jsImplementation.getComponentType().getServices()) { + for (Method serviceMethod : service.getServiceContract().getInterface().getMethods()) { + rhinoScript.setResponseClass(serviceMethod.getName(), serviceMethod.getReturnType()); + } + } + + return new JavaScriptContextFactory(componentName, scope, rhinoScript); + } + +} diff --git a/sandbox/ant/tuscany-container-rhino/src/main/java/org/apache/tuscany/container/rhino/builder/JavaScriptTargetWireBuilder.java b/sandbox/ant/tuscany-container-rhino/src/main/java/org/apache/tuscany/container/rhino/builder/JavaScriptTargetWireBuilder.java new file mode 100644 index 0000000000..0c45aee35e --- /dev/null +++ b/sandbox/ant/tuscany-container-rhino/src/main/java/org/apache/tuscany/container/rhino/builder/JavaScriptTargetWireBuilder.java @@ -0,0 +1,40 @@ +/** + * + * Copyright 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. + */ +package org.apache.tuscany.container.rhino.builder; + +import java.lang.reflect.Method; + +import org.apache.tuscany.container.rhino.config.JavaScriptContextFactory; +import org.apache.tuscany.core.context.QualifiedName; +import org.apache.tuscany.core.context.ScopeContext; +import org.apache.tuscany.core.extension.ComponentTargetInvoker; +import org.apache.tuscany.core.extension.WireBuilderSupport; +import org.apache.tuscany.core.wire.TargetInvoker; +import org.osoa.sca.annotations.Scope; + +/** + * Responsible for bridging source- and target-side invocations chains when the target type is a JavaScript implementation + * + * @version $Rev$ $Date$ + */ +@Scope("MODULE") +public class JavaScriptTargetWireBuilder extends WireBuilderSupport { + + protected TargetInvoker createInvoker(QualifiedName targetName, Method operation, ScopeContext context, boolean downScope) { + return new ComponentTargetInvoker(targetName, operation, context); + } +} diff --git a/sandbox/ant/tuscany-container-rhino/src/main/java/org/apache/tuscany/container/rhino/config/JavaScriptContextFactory.java b/sandbox/ant/tuscany-container-rhino/src/main/java/org/apache/tuscany/container/rhino/config/JavaScriptContextFactory.java new file mode 100644 index 0000000000..7ea35075fc --- /dev/null +++ b/sandbox/ant/tuscany-container-rhino/src/main/java/org/apache/tuscany/container/rhino/config/JavaScriptContextFactory.java @@ -0,0 +1,111 @@ +/** + * + * Copyright 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. + */ +package org.apache.tuscany.container.rhino.config; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import org.apache.tuscany.container.rhino.context.JavaScriptComponentContext; +import org.apache.tuscany.container.rhino.rhino.RhinoScript; +import org.apache.tuscany.core.builder.ContextCreationException; +import org.apache.tuscany.core.builder.ContextFactory; +import org.apache.tuscany.core.builder.ContextResolver; +import org.apache.tuscany.core.context.AtomicContext; +import org.apache.tuscany.core.context.CompositeContext; +import org.apache.tuscany.core.wire.SourceWireFactory; +import org.apache.tuscany.core.wire.TargetWireFactory; +import org.apache.tuscany.model.assembly.Scope; + +/** + * Creates instance contexts for JavaScript component types + * + * @version $Rev$ $Date$ + */ +public class JavaScriptContextFactory implements ContextFactory, ContextResolver { + + private Scope scope; + + private String name; + + private Map targetProxyFactories = new HashMap(); + + private List sourceProxyFactories = new ArrayList(); + + private Map properties; + + private RhinoScript rhinoScript; + + private CompositeContext parentContext; + + public JavaScriptContextFactory(String name, Scope scope, RhinoScript rhinoScript) { + this.name = name; + this.scope = scope; + this.rhinoScript = rhinoScript; + this.properties = new HashMap(); + } + + public AtomicContext createContext() throws ContextCreationException { + return new JavaScriptComponentContext(name, properties, sourceProxyFactories, targetProxyFactories, rhinoScript); + } + + public Scope getScope() { + return scope; + } + + public String getName() { + return name; + } + + public void addProperty(String propertyName, Object value) { + properties.put(propertyName, value); + } + + public void addTargetWireFactory(String serviceName, TargetWireFactory factory) { + targetProxyFactories.put(serviceName, factory); + } + + public TargetWireFactory getTargetWireFactory(String serviceName) { + return targetProxyFactories.get(serviceName); + } + + public Map getTargetWireFactories() { + return targetProxyFactories; + } + + public void addSourceWireFactory(String referenceName, SourceWireFactory factory) { + sourceProxyFactories.add(factory); + } + + public void addSourceWireFactories(String referenceName, Class referenceInterface, List factories, boolean multiplicity) { + sourceProxyFactories.addAll(factories); + } + + public List getSourceWireFactories() { + return sourceProxyFactories; + } + + public void prepare(CompositeContext parent) { + parentContext = parent; + } + + public CompositeContext getCurrentContext() { + return parentContext; + } + +} diff --git a/sandbox/ant/tuscany-container-rhino/src/main/java/org/apache/tuscany/container/rhino/context/CopyOfJavaScriptComponentContext.java b/sandbox/ant/tuscany-container-rhino/src/main/java/org/apache/tuscany/container/rhino/context/CopyOfJavaScriptComponentContext.java new file mode 100644 index 0000000000..c4690e2170 --- /dev/null +++ b/sandbox/ant/tuscany-container-rhino/src/main/java/org/apache/tuscany/container/rhino/context/CopyOfJavaScriptComponentContext.java @@ -0,0 +1,165 @@ +/** + * + * Copyright 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. + */ +package org.apache.tuscany.container.rhino.context; + +import java.lang.reflect.InvocationHandler; +import java.lang.reflect.Proxy; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import org.apache.tuscany.container.rhino.rhino.RhinoScript; +import org.apache.tuscany.container.rhino.rhino.RhinoScriptInstance; +import org.apache.tuscany.core.context.AtomicContext; +import org.apache.tuscany.core.context.CoreRuntimeException; +import org.apache.tuscany.core.context.QualifiedName; +import org.apache.tuscany.core.context.TargetException; +import org.apache.tuscany.core.context.event.InstanceCreated; +import org.apache.tuscany.core.context.impl.AbstractContext; +import org.apache.tuscany.core.extension.ExternalServiceInvoker; +import org.apache.tuscany.core.wire.ProxyCreationException; +import org.apache.tuscany.core.wire.SourceWireFactory; +import org.apache.tuscany.core.wire.TargetWireFactory; +import org.apache.tuscany.core.wire.WireFactory; +import org.osoa.sca.ServiceRuntimeException; + +public class CopyOfJavaScriptComponentContext extends AbstractContext implements AtomicContext { + + private RhinoScript rhinoScript; + + private Map properties; + + private List sourceProxyFactories; + + private Map targetProxyFactories; + + public CopyOfJavaScriptComponentContext(String name, Map properties, List sourceProxyFactories, + Map targetProxyFactories, RhinoScript rhinoScript) { + super(name); + this.properties = properties; + this.rhinoScript = rhinoScript; + this.sourceProxyFactories = sourceProxyFactories; + this.targetProxyFactories = targetProxyFactories; + } + + public Object getInstance(QualifiedName qName) throws TargetException { + return getInstance(qName, true); + } + + public void init() throws TargetException { + getInstance(null, false); + } + + public void destroy() throws TargetException { + + } + + private synchronized Object getInstance(QualifiedName qName, boolean notify) throws TargetException { + String portName = qName.getPortName(); + WireFactory targetFactory; + if (portName != null) { + targetFactory = targetProxyFactories.get(portName); + } else { + // FIXME The port name is null here, either locateService needs more information (the expected interface) to + // select the correct port, or we need to return a factory that matches the whole set of services exposed by + // the component. + targetFactory = targetProxyFactories.values().iterator().next(); + } + if (targetFactory == null) { + TargetException e = new TargetException("Target service not found"); + e.setIdentifier(qName.getPortName()); + e.addContextName(getName()); + throw e; + } + try { + Object proxy = targetFactory.createProxy(); // createProxy(new Class[] { iface }); + if (notify) { + publish(new InstanceCreated(this)); + } + return proxy; + } catch (ProxyCreationException e) { + TargetException te = new TargetException("Error returning target", e); + e.setIdentifier(qName.getPortName()); + e.addContextName(getName()); + throw te; + } + } + + public Object getTargetInstance() throws TargetException { + Map contexts = createServiceReferences(); + contexts.putAll(properties); + + final RhinoScriptInstance rhinoScriptInstance = rhinoScript.createRhinoScriptInstance(contexts); + + ExternalServiceInvoker esi = new ExternalServiceInvoker() { + public Object invoke(String methodName, Object[] args) { + return rhinoScriptInstance.invokeFunction(methodName, args); + } + }; + + return esi; + } + + /** + * Creates a map containing any ServiceReferences + */ + private Map createServiceReferences() { + try { + Map context = new HashMap(); + for (SourceWireFactory proxyFactory : sourceProxyFactories) { + Object referenceProxy = createReferenceProxy(proxyFactory); + context.put(proxyFactory.getConfiguration().getReferenceName(), referenceProxy); + } + return context; + } catch (ProxyCreationException e) { + throw new ServiceRuntimeException(e); + } + } + + private Object createReferenceProxy(SourceWireFactory proxyFactory) throws ProxyCreationException { + Object proxy = proxyFactory.createProxy(); + Class proxyClass = proxy.getClass(); + if (Proxy.isProxyClass(proxyClass)) { + Class[] ifaces = proxyClass.getInterfaces(); + Class[] newIfaces = new Class[ifaces.length+1]; + System.arraycopy(ifaces,0,newIfaces,0,ifaces.length); + newIfaces[ifaces.length] = E4XReference.class; + InvocationHandler ih = Proxy.getInvocationHandler(proxy); + proxy = Proxy.newProxyInstance(proxyClass.getClassLoader(), newIfaces, ih); + } + return proxy; + } + + interface E4XReference { + public Object process(Object xml); + } + + public boolean isEagerInit() { + return false; + } + + public boolean isDestroyable() { + return false; + } + + public void start() throws CoreRuntimeException { + } + + public void stop() throws CoreRuntimeException { + } + +} diff --git a/sandbox/ant/tuscany-container-rhino/src/main/java/org/apache/tuscany/container/rhino/context/JavaScriptComponentContext.java b/sandbox/ant/tuscany-container-rhino/src/main/java/org/apache/tuscany/container/rhino/context/JavaScriptComponentContext.java new file mode 100644 index 0000000000..74c3bea5eb --- /dev/null +++ b/sandbox/ant/tuscany-container-rhino/src/main/java/org/apache/tuscany/container/rhino/context/JavaScriptComponentContext.java @@ -0,0 +1,144 @@ +/** + * + * Copyright 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. + */ +package org.apache.tuscany.container.rhino.context; + +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import org.apache.tuscany.container.rhino.rhino.RhinoScript; +import org.apache.tuscany.container.rhino.rhino.RhinoScriptInstance; +import org.apache.tuscany.core.context.AtomicContext; +import org.apache.tuscany.core.context.CoreRuntimeException; +import org.apache.tuscany.core.context.QualifiedName; +import org.apache.tuscany.core.context.TargetException; +import org.apache.tuscany.core.context.event.InstanceCreated; +import org.apache.tuscany.core.context.impl.AbstractContext; +import org.apache.tuscany.core.extension.ExternalServiceInvoker; +import org.apache.tuscany.core.wire.ProxyCreationException; +import org.apache.tuscany.core.wire.SourceWireFactory; +import org.apache.tuscany.core.wire.TargetWireFactory; +import org.apache.tuscany.core.wire.WireFactory; +import org.osoa.sca.ServiceRuntimeException; + +public class JavaScriptComponentContext extends AbstractContext implements AtomicContext { + + private RhinoScript rhinoScript; + + private Map properties; + + private List sourceProxyFactories; + + private Map targetProxyFactories; + + public JavaScriptComponentContext(String name, Map properties, List sourceProxyFactories, + Map targetProxyFactories, RhinoScript rhinoScript) { + super(name); + this.properties = properties; + this.rhinoScript = rhinoScript; + this.sourceProxyFactories = sourceProxyFactories; + this.targetProxyFactories = targetProxyFactories; + } + + public Object getInstance(QualifiedName qName) throws TargetException { + return getInstance(qName, true); + } + + public void init() throws TargetException { + getInstance(null, false); + } + + public void destroy() throws TargetException { + + } + + private synchronized Object getInstance(QualifiedName qName, boolean notify) throws TargetException { + String portName = qName.getPortName(); + WireFactory targetFactory; + if (portName != null) { + targetFactory = targetProxyFactories.get(portName); + } else { + // FIXME The port name is null here, either locateService needs more information (the expected interface) to + // select the correct port, or we need to return a factory that matches the whole set of services exposed by + // the component. + targetFactory = targetProxyFactories.values().iterator().next(); + } + if (targetFactory == null) { + TargetException e = new TargetException("Target service not found"); + e.setIdentifier(qName.getPortName()); + e.addContextName(getName()); + throw e; + } + try { + Object proxy = targetFactory.createProxy(); // createProxy(new Class[] { iface }); + if (notify) { + publish(new InstanceCreated(this)); + } + return proxy; + } catch (ProxyCreationException e) { + TargetException te = new TargetException("Error returning target", e); + e.setIdentifier(qName.getPortName()); + e.addContextName(getName()); + throw te; + } + } + + public Object getTargetInstance() throws TargetException { + Map contexts = createServiceReferences(); + contexts.putAll(properties); + + final RhinoScriptInstance rhinoScriptInstance = rhinoScript.createRhinoScriptInstance(contexts); + + ExternalServiceInvoker esi = new ExternalServiceInvoker() { + public Object invoke(String methodName, Object[] args) { + return rhinoScriptInstance.invokeFunction(methodName, args); + } + }; + + return esi; + } + + /** + * Creates a map containing any ServiceReferences + */ + private Map createServiceReferences() { + try { + Map context = new HashMap(); + for (SourceWireFactory proxyFactory : sourceProxyFactories) { + context.put(proxyFactory.getConfiguration().getReferenceName(), proxyFactory.createProxy()); + } + return context; + } catch (ProxyCreationException e) { + throw new ServiceRuntimeException(e); + } + } + + public boolean isEagerInit() { + return false; + } + + public boolean isDestroyable() { + return false; + } + + public void start() throws CoreRuntimeException { + } + + public void stop() throws CoreRuntimeException { + } + +} diff --git a/sandbox/ant/tuscany-container-rhino/src/main/java/org/apache/tuscany/container/rhino/e4x/E4XInterceptor.java b/sandbox/ant/tuscany-container-rhino/src/main/java/org/apache/tuscany/container/rhino/e4x/E4XInterceptor.java new file mode 100644 index 0000000000..1031a2577c --- /dev/null +++ b/sandbox/ant/tuscany-container-rhino/src/main/java/org/apache/tuscany/container/rhino/e4x/E4XInterceptor.java @@ -0,0 +1,65 @@ +package org.apache.tuscany.container.rhino.e4x; + +import java.io.ByteArrayInputStream; + +import javax.xml.namespace.QName; + +import org.apache.tuscany.core.message.Message; +import org.apache.tuscany.core.wire.Interceptor; +import org.apache.tuscany.core.wire.InvocationRuntimeException; +import org.apache.tuscany.databinding.sdo.SDOXMLHelper; +import org.apache.xmlbeans.XmlObject; + +import commonj.sdo.helper.TypeHelper; + +public class E4XInterceptor implements Interceptor { + + private Interceptor next; + + private QName elementQN; + + private TypeHelper typeHelper; + + private ClassLoader classLoader; + + E4XInterceptor(QName elementQN, TypeHelper typeHelper, ClassLoader classLoader) { + this.elementQN = elementQN; + this.typeHelper = typeHelper; + this.classLoader = classLoader; + } + + public Message invoke(Message message) { + toXmlObject(message); + Message responseMessage = next.invoke(message); + fromXmlObject(responseMessage); + return responseMessage; + } + + protected void toXmlObject(Message message) { + Object[] body = (Object[]) message.getBody(); + byte[] xmlBytes = SDOXMLHelper.toXMLBytes(classLoader, typeHelper, body, elementQN, true); + try { + message.setBody(new Object[] { XmlObject.Factory.parse(new ByteArrayInputStream(xmlBytes)) }); + } catch (Exception e) { + throw new InvocationRuntimeException(e); + } + } + + protected void fromXmlObject(Message message) { + Object body = message.getBody(); + if (body instanceof XmlObject) { + byte[] xmlBytes = ((XmlObject) body).toString().getBytes(); + Object[] os = SDOXMLHelper.toObjects(classLoader, typeHelper, xmlBytes, true); + if (os == null || os.length < 1) { + message.setBody(os); + } else { + message.setBody(os[0]); + } + } + } + + public void setNext(Interceptor next) { + this.next = next; + } + +} diff --git a/sandbox/ant/tuscany-container-rhino/src/main/java/org/apache/tuscany/container/rhino/e4x/E4XPolicyBuilder.java b/sandbox/ant/tuscany-container-rhino/src/main/java/org/apache/tuscany/container/rhino/e4x/E4XPolicyBuilder.java new file mode 100644 index 0000000000..985a0efcc8 --- /dev/null +++ b/sandbox/ant/tuscany-container-rhino/src/main/java/org/apache/tuscany/container/rhino/e4x/E4XPolicyBuilder.java @@ -0,0 +1,117 @@ +/** + * + * Copyright 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. + */ +package org.apache.tuscany.container.rhino.e4x; + +import java.util.List; + +import javax.wsdl.Input; +import javax.wsdl.Message; +import javax.wsdl.Operation; +import javax.wsdl.PortType; +import javax.xml.namespace.QName; + +import org.apache.tuscany.container.rhino.assembly.JavaScriptImplementation; +import org.apache.tuscany.core.builder.BuilderException; +import org.apache.tuscany.core.builder.SourcePolicyBuilder; +import org.apache.tuscany.core.builder.TargetPolicyBuilder; +import org.apache.tuscany.core.builder.system.PolicyBuilderRegistry; +import org.apache.tuscany.core.system.annotation.Autowire; +import org.apache.tuscany.core.wire.TargetInvocationConfiguration; +import org.apache.tuscany.core.wire.WireSourceConfiguration; +import org.apache.tuscany.core.wire.WireTargetConfiguration; +import org.apache.tuscany.model.assembly.AtomicComponent; +import org.apache.tuscany.model.assembly.AtomicImplementation; +import org.apache.tuscany.model.assembly.ConfiguredReference; +import org.apache.tuscany.model.assembly.ConfiguredService; +import org.apache.tuscany.model.assembly.Part; +import org.apache.tuscany.model.assembly.Service; +import org.apache.tuscany.model.assembly.ServiceContract; +import org.apache.tuscany.model.types.wsdl.WSDLServiceContract; +import org.osoa.sca.annotations.Init; + +import commonj.sdo.helper.TypeHelper; + +/** + */ +@org.osoa.sca.annotations.Scope("MODULE") +public class E4XPolicyBuilder implements SourcePolicyBuilder, TargetPolicyBuilder { + + private PolicyBuilderRegistry builderRegistry; + + public E4XPolicyBuilder() { + } + + @Init(eager = true) + public void init() { + builderRegistry.registerSourceBuilder(this); + builderRegistry.registerTargetBuilder(this); + } + + @Autowire + public void setBuilderRegistry(PolicyBuilderRegistry builderRegistry) { + this.builderRegistry = builderRegistry; + } + + public void build(ConfiguredReference service, List wireSourceConfigurations) throws BuilderException { + } + + public void build(ConfiguredService service, WireTargetConfiguration wireTargetConfiguration) throws BuilderException { + Part part = service.getPart(); + if (part instanceof AtomicComponent) { + AtomicImplementation implementation = ((AtomicComponent) part).getImplementation(); + if (implementation instanceof JavaScriptImplementation) { + JavaScriptImplementation javaScriptImplementation = (JavaScriptImplementation) implementation; + for (TargetInvocationConfiguration configuration : wireTargetConfiguration.getInvocationConfigurations().values()) { + TypeHelper typeHelper = javaScriptImplementation.getTypeHelper(); + ClassLoader classLoader = javaScriptImplementation.getResourceLoader().getClassLoader(); + String methodName = configuration.getMethod().getName(); + QName responseQN = getElementQName(javaScriptImplementation, methodName); + if (responseQN != null) { + configuration.addInterceptor(new E4XInterceptor(responseQN, typeHelper, classLoader)); + } + } + } + } + } + + protected QName getElementQName(JavaScriptImplementation javaScriptImplementation, String methodName) { + for (Service service : javaScriptImplementation.getComponentType().getServices()) { + ServiceContract sc = service.getServiceContract(); + if (sc instanceof WSDLServiceContract) { + PortType pt = ((WSDLServiceContract) sc).getPortType(); + for (Object o : pt.getOperations()) { + Operation operation = (Operation) o; + if (methodName.equals(operation.getName())) { + Input input = operation.getInput(); + if (input != null) { + Message message = input.getMessage(); + if (message != null) { + List parts = message.getOrderedParts(null); + if (parts != null && parts.size() > 0) { + javax.wsdl.Part part = (javax.wsdl.Part) parts.get(0); + return part.getElementName(); + } + } + } + } + } + } + } + return null; + } + +} diff --git a/sandbox/ant/tuscany-container-rhino/src/main/java/org/apache/tuscany/container/rhino/loader/JavaScriptImplementationLoader.java b/sandbox/ant/tuscany-container-rhino/src/main/java/org/apache/tuscany/container/rhino/loader/JavaScriptImplementationLoader.java new file mode 100644 index 0000000000..a39537b789 --- /dev/null +++ b/sandbox/ant/tuscany-container-rhino/src/main/java/org/apache/tuscany/container/rhino/loader/JavaScriptImplementationLoader.java @@ -0,0 +1,169 @@ +/** + * + * Copyright 2005 The Apache Software Foundation + * + * 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. + */ +package org.apache.tuscany.container.rhino.loader; + +import java.io.IOException; +import java.io.InputStream; +import java.net.URL; + +import javax.xml.namespace.QName; +import javax.xml.stream.XMLInputFactory; +import javax.xml.stream.XMLStreamException; +import javax.xml.stream.XMLStreamReader; + +import org.apache.tuscany.common.resource.ResourceLoader; +import org.apache.tuscany.container.rhino.assembly.JavaScriptImplementation; +import org.apache.tuscany.core.config.ConfigurationLoadException; +import org.apache.tuscany.core.config.InvalidRootElementException; +import org.apache.tuscany.core.config.MissingResourceException; +import org.apache.tuscany.core.config.SidefileLoadException; +import org.apache.tuscany.core.loader.LoaderContext; +import org.apache.tuscany.core.loader.StAXElementLoader; +import org.apache.tuscany.core.loader.StAXLoaderRegistry; +import org.apache.tuscany.core.loader.assembly.AssemblyConstants; +import org.apache.tuscany.core.system.annotation.Autowire; +import org.apache.tuscany.model.assembly.ComponentType; +import org.osoa.sca.annotations.Destroy; +import org.osoa.sca.annotations.Init; +import org.osoa.sca.annotations.Scope; + +/** + * @version $Rev$ $Date$ + */ +@Scope("MODULE") +public class JavaScriptImplementationLoader implements StAXElementLoader { + + public static final QName IMPLEMENTATION_JS = new QName("http://org.apache.tuscany/xmlns/js/0.9", "implementation.js"); + + protected StAXLoaderRegistry registry; + + private XMLInputFactory xmlFactory; + + public JavaScriptImplementationLoader() { + // todo make this a reference to a system service + xmlFactory = XMLInputFactory.newInstance(); + } + + @Autowire + public void setRegistry(StAXLoaderRegistry registry) { + this.registry = registry; + } + + @Init(eager = true) + public void start() { + registry.registerLoader(IMPLEMENTATION_JS, this); + } + + @Destroy + public void stop() { + registry.unregisterLoader(IMPLEMENTATION_JS, this); + } + + @SuppressWarnings("deprecation") + public JavaScriptImplementation load(XMLStreamReader reader, LoaderContext loaderContext) throws XMLStreamException, ConfigurationLoadException { + String scriptFile = reader.getAttributeValue(null, "scriptFile"); + String script = loadScript(scriptFile, loaderContext.getResourceLoader()); + ComponentType componentType = loadComponentType(scriptFile, loaderContext); + + JavaScriptImplementation jsImpl = new JavaScriptImplementation(); + jsImpl.setComponentType(componentType); + jsImpl.setScriptFile(scriptFile); + jsImpl.setScript(script); + jsImpl.setResourceLoader(loaderContext.getResourceLoader()); + jsImpl.setTypeHelper(registry.getContext().getTypeHelper()); + return jsImpl; + } + + protected String loadScript(String scriptFile, ResourceLoader resourceLoader) throws ConfigurationLoadException { + URL url = resourceLoader.getResource(scriptFile); + if (url == null) { + throw new ConfigurationLoadException(scriptFile); + } + InputStream inputStream; + try { + inputStream = url.openStream(); + } catch (IOException e) { + throw new ConfigurationLoadException(scriptFile, e); + } + try { + StringBuilder sb = new StringBuilder(1024); + int n; + while ((n = inputStream.read()) != -1) { + sb.append((char) n); + } + return sb.toString(); + } catch (IOException e) { + throw new ConfigurationLoadException(scriptFile, e); + } finally { + try { + inputStream.close(); + } catch (IOException e) { + // ignore + } + } + } + + protected ComponentType loadComponentType(String scriptFile, LoaderContext loaderContext) throws SidefileLoadException, MissingResourceException{ + String sidefile = scriptFile.substring(0, scriptFile.lastIndexOf('.')) + ".componentType"; + URL componentTypeFile = loaderContext.getResourceLoader().getResource(sidefile); + if (componentTypeFile == null) { + throw new MissingResourceException(sidefile); + } + + try { + XMLStreamReader reader; + InputStream is; + is = componentTypeFile.openStream(); + try { + reader = xmlFactory.createXMLStreamReader(is); + try { + reader.nextTag(); + if (!AssemblyConstants.COMPONENT_TYPE.equals(reader.getName())) { + InvalidRootElementException e = new InvalidRootElementException(AssemblyConstants.COMPONENT_TYPE, reader.getName()); + e.setResourceURI(componentTypeFile.toString()); + throw e; + } + return (ComponentType) registry.load(reader, loaderContext); + } finally { + try { + reader.close(); + } catch (XMLStreamException e) { + // ignore + } + } + } finally { + try { + is.close(); + } catch (IOException e) { + // ignore + } + } + } catch (IOException e) { + SidefileLoadException sfe = new SidefileLoadException(e.getMessage()); + sfe.setResourceURI(componentTypeFile.toString()); + throw sfe; + } catch (XMLStreamException e) { + SidefileLoadException sfe = new SidefileLoadException(e.getMessage()); + sfe.setResourceURI(componentTypeFile.toString()); + throw sfe; + } catch (ConfigurationLoadException e) { + SidefileLoadException sfe = new SidefileLoadException(e.getMessage()); + sfe.setResourceURI(componentTypeFile.toString()); + throw sfe; + } + } +} diff --git a/sandbox/ant/tuscany-container-rhino/src/main/java/org/apache/tuscany/container/rhino/rhino/RhinoFunctionInvoker.java b/sandbox/ant/tuscany-container-rhino/src/main/java/org/apache/tuscany/container/rhino/rhino/RhinoFunctionInvoker.java new file mode 100644 index 0000000000..1f0321f60c --- /dev/null +++ b/sandbox/ant/tuscany-container-rhino/src/main/java/org/apache/tuscany/container/rhino/rhino/RhinoFunctionInvoker.java @@ -0,0 +1,79 @@ +package org.apache.tuscany.container.rhino.rhino; + +import org.apache.xmlbeans.XmlObject; +import org.mozilla.javascript.Context; +import org.mozilla.javascript.Function; +import org.mozilla.javascript.Scriptable; +import org.mozilla.javascript.ScriptableObject; +import org.mozilla.javascript.Wrapper; +import org.mozilla.javascript.xml.XMLObject; + +/** + * An invoker for a specific function in a JavaScript script + */ +public class RhinoFunctionInvoker { + + private Scriptable instanceScope; + + private Function function; + + private Class responseClass; + + public RhinoFunctionInvoker(Scriptable instanceScope, Function function, Class responseClass) { + this.instanceScope = instanceScope; + this.function = function; + this.responseClass = responseClass; + } + + public Object invoke(Object[] args) { + Context cx = Context.enter(); + try { + + Object[] jsArgs = toJavaScript(args, instanceScope, cx); + Object jsResponse = function.call(cx, instanceScope, instanceScope, jsArgs); + Object response = fromJavaScript(jsResponse); + return response; + + } finally { + Context.exit(); + } + } + + protected Object[] toJavaScript(Object[] arg, Scriptable scope, Context cx) { + Object[] jsArgs; + if (arg == null) { + jsArgs = new Object[0]; + } else if (arg.length == 1 && arg[0] instanceof XmlObject) { + Object jsXML = cx.getWrapFactory().wrap(cx, scope, (XmlObject) arg[0], XmlObject.class); + jsArgs = new Object[] { cx.newObject(scope, "XML", new Object[] { jsXML }) }; + } else { + jsArgs = (Object[]) arg; + for (int i = 0; i < jsArgs.length; i++) { + jsArgs[i] = Context.toObject(jsArgs[i], scope); + } + } + return jsArgs; + } + + protected Object fromJavaScript(Object o) { + Object response; + if (Context.getUndefinedValue().equals(o)) { + response = null; + } else if (o instanceof XMLObject) { + // TODO: E4X Bug? Shouldn't need this copy, but without it the outer element gets lost??? + Scriptable jsXML = (Scriptable) ScriptableObject.callMethod((Scriptable) o, "copy", new Object[0]); + Wrapper wrapper = (Wrapper) ScriptableObject.callMethod(jsXML, "getXmlObject", new Object[0]); + response = wrapper.unwrap(); + } else if (o instanceof Wrapper) { + response = ((Wrapper) o).unwrap(); + } else { + if (responseClass != null) { + response = Context.jsToJava(o, responseClass); + } else { + response = Context.jsToJava(o, String.class); + } + } + return response; + } + +} diff --git a/sandbox/ant/tuscany-container-rhino/src/main/java/org/apache/tuscany/container/rhino/rhino/RhinoScript.java b/sandbox/ant/tuscany-container-rhino/src/main/java/org/apache/tuscany/container/rhino/rhino/RhinoScript.java new file mode 100644 index 0000000000..dafc8b585f --- /dev/null +++ b/sandbox/ant/tuscany-container-rhino/src/main/java/org/apache/tuscany/container/rhino/rhino/RhinoScript.java @@ -0,0 +1,194 @@ +/** + * + * Copyright 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. + */ +package org.apache.tuscany.container.rhino.rhino; + +import java.util.HashMap; +import java.util.Iterator; +import java.util.Map; + +import org.mozilla.javascript.Context; +import org.mozilla.javascript.ContextFactory; +import org.mozilla.javascript.ImporterTopLevel; +import org.mozilla.javascript.Script; +import org.mozilla.javascript.Scriptable; + +/** + * A RhinoScript represents a compiled JavaScript script + */ +public class RhinoScript { + + protected String scriptName; + + protected String script; + + protected Scriptable scriptScope; + + protected Map responseClasses; + + /* + * Enable dynamic scopes so a script can be used concurrently with a global shared scope and individual execution scopes. See + * http://www.mozilla.org/rhino/scopes.html + */ + private static class MyFactory extends ContextFactory { + protected boolean hasFeature(Context cx, int featureIndex) { + if (featureIndex == Context.FEATURE_DYNAMIC_SCOPE) { + return true; + } + return super.hasFeature(cx, featureIndex); + } + } + + static { + ContextFactory.initGlobal(new MyFactory()); + } + + /** + * Create a new RhinoScript. + * + * @param scriptName + * the name of the script. Can be anything, only used in messages to identify the script + * @param script + * the complete script + */ + public RhinoScript(String scriptName, String script) { + this(scriptName, script, (Map) null, null); + } + + /** + * Create a new RhinoInvoker. + * + * @param scriptName + * the name of the script. Can be anything, only used in messages to identify the script + * @param script + * the complete script + * @param context + * name-value pairs that are added in to the scope where the script is compiled. May be null. The value objects are made available to + * the script by using a variable with the name. + * @param classLoader + * the ClassLoader Rhino should use to locate any user Java classes used in the script + */ + public RhinoScript(String scriptName, String script, Map context, ClassLoader cl) { + this.scriptName = scriptName; + this.script = script; + this.responseClasses = new HashMap(); + initScriptScope(scriptName, script, context, cl); + } + + /** + * Create a new invokeable instance of the script + * + * @return a RhinoScriptInstance + */ + public RhinoScriptInstance createRhinoScriptInstance() { + return createRhinoScriptInstance(null); + } + + /** + * Create a new invokeable instance of the script + * + * @param context + * objects to add to scope of the script instance + * @return a RhinoScriptInstance + */ + public RhinoScriptInstance createRhinoScriptInstance(Map context) { + Scriptable instanceScope = createInstanceScope(context); + RhinoScriptInstance rsi = new RhinoScriptInstance(scriptScope, instanceScope, context, responseClasses); + return rsi; + } + + /** + * Initialize the Rhino Scope for this script instance + */ + protected Scriptable createInstanceScope(Map context) { + Context cx = Context.enter(); + try { + + Scriptable instanceScope = cx.newObject(scriptScope); + instanceScope.setPrototype(scriptScope); + instanceScope.setParentScope(null); + + addContexts(instanceScope, context); + + return instanceScope; + + } finally { + Context.exit(); + } + } + + /** + * Create a Rhino scope and compile the script into it + */ + protected void initScriptScope(String fileName, String scriptCode, Map context, ClassLoader cl) { + Context cx = Context.enter(); + try { + if (cl != null) { + cx.setApplicationClassLoader(cl); + } + this.scriptScope = new ImporterTopLevel(cx, true); + Script compiledScript = cx.compileString(scriptCode, fileName, 1, null); + compiledScript.exec(cx, scriptScope); + addContexts(scriptScope, context); + + } finally { + Context.exit(); + } + } + + /** + * Add the context to the scope. This will make the objects available to a script by using the name it was added with. + */ + protected void addContexts(Scriptable scope, Map contexts) { + if (contexts != null) { + for (Iterator i = contexts.keySet().iterator(); i.hasNext();) { + String name = (String) i.next(); + Object value = contexts.get(name); + if (value != null) { + scope.put(name, scope, Context.toObject(value, scope)); + } + } + } + } + + public String getScript() { + return script; + } + + public String getScriptName() { + return scriptName; + } + + public Scriptable getScriptScope() { + return scriptScope; + } + + public Map getResponseClasses() { + return responseClasses; + } + + /** + * Set the Java type of a response value. JavaScript is dynamically typed so Rhino + * cannot always work out what the intended Java type of a response should be, for + * example should the statement "return 42" be a Java int, or Integer or Double etc. + * When Rhino can't determine the type it will default to returning a String, using + * this method enables overriding the Rhino default to use a specific Java type. + */ + public void setResponseClass(String functionName, Class responseClasses) { + this.responseClasses.put(functionName, responseClasses); + } + +} \ No newline at end of file diff --git a/sandbox/ant/tuscany-container-rhino/src/main/java/org/apache/tuscany/container/rhino/rhino/RhinoScriptInstance.java b/sandbox/ant/tuscany-container-rhino/src/main/java/org/apache/tuscany/container/rhino/rhino/RhinoScriptInstance.java new file mode 100644 index 0000000000..8f22ae30f2 --- /dev/null +++ b/sandbox/ant/tuscany-container-rhino/src/main/java/org/apache/tuscany/container/rhino/rhino/RhinoScriptInstance.java @@ -0,0 +1,82 @@ +package org.apache.tuscany.container.rhino.rhino; + +import java.util.HashMap; +import java.util.Iterator; +import java.util.Map; + +import org.mozilla.javascript.Context; +import org.mozilla.javascript.Function; +import org.mozilla.javascript.Scriptable; +import org.mozilla.javascript.UniqueTag; + +/** + * An invokeable instance of a JavaScript script. + */ +public class RhinoScriptInstance { + + private Scriptable scriptScope; + + private Scriptable instanceScope; + + private Map responseClasses; + + public RhinoScriptInstance(Scriptable scriptScope, Scriptable instanceScope, Map context, Map responseClasses) { + this.scriptScope = scriptScope; + this.instanceScope = instanceScope; + this.responseClasses = responseClasses; + if (this.responseClasses == null) { + this.responseClasses = new HashMap(); + } + addContexts(instanceScope, context); + } + + public Object invokeFunction(String functionName, Object[] args) { + RhinoFunctionInvoker invoker = createRhinoFunctionInvoker(functionName); + return invoker.invoke(args); + } + + public RhinoFunctionInvoker createRhinoFunctionInvoker(String functionName) { + Function function = getFunction(functionName); + Class responseClass = responseClasses.get(functionName); + RhinoFunctionInvoker invoker = new RhinoFunctionInvoker(instanceScope, function, responseClass); + return invoker; + } + + /** + * Add the context to the scope. This will make the objects available to a script by using the name it was added with. + */ + protected void addContexts(Scriptable scope, Map contexts) { + if (contexts != null) { + Context.enter(); + try { + for (Iterator i = contexts.keySet().iterator(); i.hasNext();) { + String name = (String) i.next(); + Object value = contexts.get(name); + if (value != null) { + scope.put(name, scope, Context.toObject(value, scope)); + } + } + } finally { + Context.exit(); + } + } + } + + /** + * Get the Rhino Function object for the named script function + */ + protected Function getFunction(String functionName) { + + Object handleObj = scriptScope.get(functionName, instanceScope); + if (UniqueTag.NOT_FOUND.equals(handleObj)) { + // Bit of a hack so E4X scripts don't need to define a function for every operation + handleObj = scriptScope.get("process", instanceScope); + } + if (!(handleObj instanceof Function)) { + throw new RuntimeException("script function '" + functionName + "' is undefined or not a function"); + } + + return (Function) handleObj; + } + +} diff --git a/sandbox/ant/tuscany-container-rhino/src/main/resources/system.fragment b/sandbox/ant/tuscany-container-rhino/src/main/resources/system.fragment new file mode 100644 index 0000000000..928e637481 --- /dev/null +++ b/sandbox/ant/tuscany-container-rhino/src/main/resources/system.fragment @@ -0,0 +1,37 @@ + + + + + + + + + + + + + + + + + + + + + diff --git a/sandbox/ant/tuscany-container-rhino/src/test/java/org/apache/tuscany/container/rhino/builder/JavaScriptContextFactoryBuilderTestCase.java b/sandbox/ant/tuscany-container-rhino/src/test/java/org/apache/tuscany/container/rhino/builder/JavaScriptContextFactoryBuilderTestCase.java new file mode 100644 index 0000000000..8d25183386 --- /dev/null +++ b/sandbox/ant/tuscany-container-rhino/src/test/java/org/apache/tuscany/container/rhino/builder/JavaScriptContextFactoryBuilderTestCase.java @@ -0,0 +1,121 @@ +/* + * Copyright 2004,2005 The Apache Software Foundation. + * + * 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. + */ +package org.apache.tuscany.container.rhino.builder; + +import java.util.ArrayList; +import java.util.List; + +import junit.framework.TestCase; + +import org.apache.tuscany.common.resource.impl.ResourceLoaderImpl; +import org.apache.tuscany.container.rhino.assembly.JavaScriptImplementation; +import org.apache.tuscany.container.rhino.context.JavaScriptComponentContext; +import org.apache.tuscany.core.builder.ContextFactory; +import org.apache.tuscany.core.extension.ExternalServiceInvoker; +import org.apache.tuscany.model.assembly.AssemblyContext; +import org.apache.tuscany.model.assembly.AssemblyInitializationException; +import org.apache.tuscany.model.assembly.AssemblyVisitor; +import org.apache.tuscany.model.assembly.ComponentType; +import org.apache.tuscany.model.assembly.Property; +import org.apache.tuscany.model.assembly.Reference; +import org.apache.tuscany.model.assembly.Service; + +/** + * Tests for the RhinoScript + */ +public class JavaScriptContextFactoryBuilderTestCase extends TestCase { + + public JavaScriptContextFactoryBuilderTestCase() { + + } + + protected void setUp() throws Exception { + super.setUp(); + } + + @SuppressWarnings("unchecked") + public void testSimpleConstructor() { + JavaScriptContextFactoryBuilder builder = new JavaScriptContextFactoryBuilder(); + JavaScriptImplementation jsImpl = createMockJSImpl(); + jsImpl.setScript("function foo() { return 'petra';}"); + + ContextFactory cf = builder.createContextFactory("foo", jsImpl, null); + assertNotNull(cf); + + JavaScriptComponentContext context = (JavaScriptComponentContext) cf.createContext(); + assertNotNull(context); + + ExternalServiceInvoker invoker = (ExternalServiceInvoker) context.getTargetInstance(); + assertNotNull(invoker); + + Object response = invoker.invoke("foo", new Object[0]); + assertEquals("petra", response); + } + + private JavaScriptImplementation createMockJSImpl() { + JavaScriptImplementation jsImpl = new JavaScriptImplementation(); + + jsImpl.setComponentType(new ComponentType() { + + public List getServices() { + return new ArrayList(); + } + + public Service getService(String name) { + return null; + } + + public List getReferences() { + return null; + } + + public Reference getReference(String name) { + return null; + } + + public List getProperties() { + return new ArrayList(); + } + + public Property getProperty(String name) { + return null; + } + + public List getExtensibilityElements() { + return null; + } + + public List getExtensibilityAttributes() { + return null; + } + + public void initialize(AssemblyContext modelContext) throws AssemblyInitializationException { + } + + public void freeze() { + } + + public boolean accept(AssemblyVisitor visitor) { + return false; + } + }); + + jsImpl.setResourceLoader(new ResourceLoaderImpl(getClass().getClassLoader())); + + return jsImpl; + } + +} \ No newline at end of file diff --git a/sandbox/ant/tuscany-container-rhino/src/test/java/org/apache/tuscany/container/rhino/e4x/E4XInterceptorTestCase.java b/sandbox/ant/tuscany-container-rhino/src/test/java/org/apache/tuscany/container/rhino/e4x/E4XInterceptorTestCase.java new file mode 100644 index 0000000000..a5c778acf2 --- /dev/null +++ b/sandbox/ant/tuscany-container-rhino/src/test/java/org/apache/tuscany/container/rhino/e4x/E4XInterceptorTestCase.java @@ -0,0 +1,131 @@ +/* + * Copyright 2004,2005 The Apache Software Foundation. + * + * 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. + */ +package org.apache.tuscany.container.rhino.e4x; + +import java.net.URL; + +import javax.xml.namespace.QName; + +import junit.framework.TestCase; + +import org.apache.tuscany.core.message.Message; +import org.apache.tuscany.core.wire.Interceptor; +import org.apache.tuscany.core.wire.MessageChannel; +import org.apache.tuscany.core.wire.TargetInvoker; +import org.apache.tuscany.sdo.util.DataObjectUtil; +import org.apache.tuscany.sdo.util.SDOUtil; +import org.apache.xmlbeans.XmlObject; + +import commonj.sdo.helper.TypeHelper; +import commonj.sdo.helper.XSDHelper; + +/** + * Tests for the E4XInterceptor + */ +public class E4XInterceptorTestCase extends TestCase { + + private E4XInterceptor interceptor; + + private Message msg; + + public E4XInterceptorTestCase() { + } + + public void testFromXmlObject() { + msg.setBody(new Object[] { "petra" }); + + interceptor.toXmlObject(msg); + assertTrue(((Object[])msg.getBody())[0] instanceof XmlObject); + + msg.setBody(((Object[])msg.getBody())[0]); + interceptor.fromXmlObject(msg); + assertEquals("petra", msg.getBody()); + } + + public void testToXmlObject() { + msg.setBody(new Object[] { "petra" }); + interceptor.toXmlObject(msg); + assertTrue(((Object[])msg.getBody())[0] instanceof XmlObject); + } + + public void testInvoke() { + msg.setBody(new Object[] { "petra" }); + interceptor.invoke(msg); + assertEquals("petra", msg.getBody()); + } + + protected void setUp() throws Exception { + super.setUp(); + DataObjectUtil.initRuntime(); + ClassLoader cl = Thread.currentThread().getContextClassLoader(); + try { + Thread.currentThread().setContextClassLoader(getClass().getClassLoader()); + + TypeHelper typeHelper = SDOUtil.createTypeHelper(); + XSDHelper xsdHelper = SDOUtil.createXSDHelper(typeHelper); + + URL url = getClass().getResource("helloworld.wsdl"); + xsdHelper.define(url.openStream(), null); + + QName qn = new QName("http://integration.rhino.container.tuscany.apache.org", "getGreetings"); + this.interceptor = new E4XInterceptor(qn, typeHelper, getClass().getClassLoader()); + interceptor.setNext(new Interceptor() { + public Message invoke(Message msg) { + msg.setBody(((Object[])msg.getBody())[0]); + return msg; + } + public void setNext(Interceptor next) { + }}); + + this.msg = createMessage(); + + } finally { + Thread.currentThread().setContextClassLoader(cl); + } + } + + private Message createMessage() { + Message msg = new Message() { + + Object body; + + public Object getBody() { + return body; + } + + public void setBody(Object body) { + this.body = body; + } + + public void setTargetInvoker(TargetInvoker invoker) { + } + + public TargetInvoker getTargetInvoker() { + return null; + } + + public MessageChannel getCallbackChannel() { + return null; + } + + public Message getRelatedCallbackMessage() { + return null; + } + }; + return msg; + } + +} \ No newline at end of file diff --git a/sandbox/ant/tuscany-container-rhino/src/test/java/org/apache/tuscany/container/rhino/e4x/E4XPolicyBuilderTestCase.java b/sandbox/ant/tuscany-container-rhino/src/test/java/org/apache/tuscany/container/rhino/e4x/E4XPolicyBuilderTestCase.java new file mode 100644 index 0000000000..09638e7eae --- /dev/null +++ b/sandbox/ant/tuscany-container-rhino/src/test/java/org/apache/tuscany/container/rhino/e4x/E4XPolicyBuilderTestCase.java @@ -0,0 +1,325 @@ +/* + * Copyright 2004,2005 The Apache Software Foundation. + * + * 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. + */ +package org.apache.tuscany.container.rhino.e4x; + +import java.lang.reflect.Method; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import javax.wsdl.Input; +import javax.wsdl.Message; +import javax.wsdl.Operation; +import javax.wsdl.Part; +import javax.wsdl.PortType; +import javax.xml.namespace.QName; + +import junit.framework.TestCase; + +import org.apache.tuscany.common.resource.impl.ResourceLoaderImpl; +import org.apache.tuscany.container.rhino.assembly.JavaScriptImplementation; +import org.apache.tuscany.core.wire.Interceptor; +import org.apache.tuscany.core.wire.TargetInvocationConfiguration; +import org.apache.tuscany.core.wire.WireTargetConfiguration; +import org.apache.tuscany.model.assembly.AssemblyContext; +import org.apache.tuscany.model.assembly.AssemblyInitializationException; +import org.apache.tuscany.model.assembly.AssemblyVisitor; +import org.apache.tuscany.model.assembly.AtomicComponent; +import org.apache.tuscany.model.assembly.AtomicImplementation; +import org.apache.tuscany.model.assembly.ComponentType; +import org.apache.tuscany.model.assembly.Composite; +import org.apache.tuscany.model.assembly.ConfiguredProperty; +import org.apache.tuscany.model.assembly.ConfiguredReference; +import org.apache.tuscany.model.assembly.ConfiguredService; +import org.apache.tuscany.model.assembly.Property; +import org.apache.tuscany.model.assembly.Reference; +import org.apache.tuscany.model.assembly.Service; +import org.apache.tuscany.model.assembly.ServiceContract; +import org.apache.tuscany.model.types.wsdl.impl.WSDLServiceContractImpl; + +import com.ibm.wsdl.InputImpl; +import com.ibm.wsdl.MessageImpl; +import com.ibm.wsdl.OperationImpl; +import com.ibm.wsdl.PartImpl; +import com.ibm.wsdl.PortTypeImpl; + +/** + * Tests for the E4XPolicyBuilder + */ +public class E4XPolicyBuilderTestCase extends TestCase { + + public E4XPolicyBuilderTestCase() { + + } + + protected void setUp() throws Exception { + super.setUp(); + } + + public void testGetElementQName() { + E4XPolicyBuilder builder = new E4XPolicyBuilder(); + QName qn = new QName("foo"); + JavaScriptImplementation jsImpl = createMockJSImpl("foo", qn); + QName qn2 = builder.getElementQName(jsImpl, "foo"); + assertEquals(qn, qn2); + } + + public void testBuild() throws SecurityException, NoSuchMethodException { + E4XPolicyBuilder builder = new E4XPolicyBuilder(); + ConfiguredService service = createMockConfiguredService(); + WireTargetConfiguration config = createMockWireTargetConfiguration(); + builder.build(service, config); + Map configs = config.getInvocationConfigurations(); + assertNotNull(configs); + assertEquals(1, configs.size()); + TargetInvocationConfiguration tic = configs.values().iterator().next(); + Interceptor interceptor = tic.getHeadInterceptor(); + assertTrue(interceptor instanceof E4XInterceptor); + } + + private WireTargetConfiguration createMockWireTargetConfiguration() throws SecurityException, NoSuchMethodException { + Map configs = new HashMap(); + Method foo = Foo.class.getMethod("foo", new Class[0]); + TargetInvocationConfiguration config = new TargetInvocationConfiguration(foo); + configs.put(foo, config); + WireTargetConfiguration wtf = new WireTargetConfiguration(null, configs, null, null); + return wtf; + } + + interface Foo { + public void foo(); + } + + private ConfiguredService createMockConfiguredService() { + ConfiguredService service = new ConfiguredService() { + + public String getName() { + return null; + } + + public void setName(String name) { + } + + public Service getPort() { + return null; + } + + public void setPort(Service port) { + } + + public org.apache.tuscany.model.assembly.Part getPart() { + return createPart(); + } + + public void setPart(org.apache.tuscany.model.assembly.Part part) { + } + + public void initialize(AssemblyContext modelContext) throws AssemblyInitializationException { + } + + public void freeze() { + } + + public boolean accept(AssemblyVisitor visitor) { + return false; + } + + public void setProxyFactory(Object proxyFactory) { + } + + public Object getProxyFactory() { + return null; + } + }; + + return service; + } + + private org.apache.tuscany.model.assembly.Part createPart() { + org.apache.tuscany.model.assembly.Part part = new AtomicComponent() { + + public AtomicImplementation getImplementation() { + return createMockJSImpl("foo", new QName("foo")); + } + + public void setImplementation(AtomicImplementation value) { + } + + public List getConfiguredProperties() { + return null; + } + + public ConfiguredProperty getConfiguredProperty(String name) { + return null; + } + + public List getConfiguredReferences() { + return null; + } + + public ConfiguredReference getConfiguredReference(String name) { + return null; + } + + public List getConfiguredServices() { + return null; + } + + public ConfiguredService getConfiguredService(String name) { + return null; + } + + public String getName() { + return null; + } + + public void setName(String value) { + } + + public Composite getComposite() { + return null; + } + + public void setComposite(Composite composite) { + } + + public List getExtensibilityElements() { + return null; + } + + public List getExtensibilityAttributes() { + return null; + } + + public void initialize(AssemblyContext modelContext) throws AssemblyInitializationException { + } + + public void freeze() { + } + + public boolean accept(AssemblyVisitor visitor) { + return false; + } + + public void setContextFactory(Object contextFactory) { + } + + public Object getContextFactory() { + return null; + } + }; + return part; + } + + private JavaScriptImplementation createMockJSImpl(final String name, final QName qn) { + JavaScriptImplementation jsImpl = new JavaScriptImplementation(); + + jsImpl.setComponentType(new ComponentType() { + + public List getServices() { + return Arrays.asList(new Service[] { createMockService(name, qn) }); + } + + public Service getService(String name) { + return null; + } + + public List getReferences() { + return null; + } + + public Reference getReference(String name) { + return null; + } + + public List getProperties() { + return new ArrayList(); + } + + public Property getProperty(String name) { + return null; + } + + public List getExtensibilityElements() { + return null; + } + + public List getExtensibilityAttributes() { + return null; + } + + public void initialize(AssemblyContext modelContext) throws AssemblyInitializationException { + } + + public void freeze() { + } + + public boolean accept(AssemblyVisitor visitor) { + return false; + } + }); + + jsImpl.setResourceLoader(new ResourceLoaderImpl(getClass().getClassLoader())); + + return jsImpl; + } + + private Service createMockService(final String name, final QName qn) { + Service service = new Service() { + + public ServiceContract getServiceContract() { + WSDLServiceContractImpl sc = new WSDLServiceContractImpl(); + PortType pt = new PortTypeImpl(); + Operation op = new OperationImpl(); + op.setName(name); + Input input = new InputImpl(); + Message msg = new MessageImpl(); + Part p = new PartImpl(); + p.setElementName(qn); + msg.addPart(p); + input.setMessage(msg); + op.setInput(input); + pt.addOperation(op); + sc.setPortType(pt); + return sc; + } + + public void setServiceContract(ServiceContract contract) { + } + + public String getName() { + return null; + } + + public void setName(String name) { + } + + public void initialize(AssemblyContext modelContext) throws AssemblyInitializationException { + } + + public void freeze() { + } + + public boolean accept(AssemblyVisitor visitor) { + return false; + } + }; + return service; + } + +} \ No newline at end of file diff --git a/sandbox/ant/tuscany-container-rhino/src/test/java/org/apache/tuscany/container/rhino/integration/AbstractJavaScriptTestCase.java b/sandbox/ant/tuscany-container-rhino/src/test/java/org/apache/tuscany/container/rhino/integration/AbstractJavaScriptTestCase.java new file mode 100644 index 0000000000..ee6b533ddf --- /dev/null +++ b/sandbox/ant/tuscany-container-rhino/src/test/java/org/apache/tuscany/container/rhino/integration/AbstractJavaScriptTestCase.java @@ -0,0 +1,46 @@ +/** + * + * Copyright 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. + */ +package org.apache.tuscany.container.rhino.integration; + +import junit.framework.TestCase; + +import org.apache.tuscany.core.client.TuscanyRuntime; +import org.osoa.sca.CurrentModuleContext; +import org.osoa.sca.ModuleContext; + +/** + * Integration tests for JavaScript components + */ +public abstract class AbstractJavaScriptTestCase extends TestCase { + + protected TuscanyRuntime tuscany; + + protected ModuleContext moduleContext; + + @Override + protected void setUp() throws Exception { + super.setUp(); + + tuscany = new TuscanyRuntime("tests", null); + tuscany.start(); + moduleContext = CurrentModuleContext.getContext(); + + } + + @Override + protected void tearDown() throws Exception { + super.tearDown(); + tuscany.stop(); + } +} diff --git a/sandbox/ant/tuscany-container-rhino/src/test/java/org/apache/tuscany/container/rhino/integration/BasicTestCase.java b/sandbox/ant/tuscany-container-rhino/src/test/java/org/apache/tuscany/container/rhino/integration/BasicTestCase.java new file mode 100644 index 0000000000..f66f2e1079 --- /dev/null +++ b/sandbox/ant/tuscany-container-rhino/src/test/java/org/apache/tuscany/container/rhino/integration/BasicTestCase.java @@ -0,0 +1,27 @@ +/** + * + * Copyright 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. + */ +package org.apache.tuscany.container.rhino.integration; + +/** + * Integration tests for JavaScript components + */ +public class BasicTestCase extends AbstractJavaScriptTestCase { + + public void testBasicInvocation() throws Exception { + HelloWorld helloworldService = (HelloWorld) moduleContext.locateService("HelloWorldComponent1"); + String response = helloworldService.getGreetings("petra"); + assertEquals("jsHello petra", response); + } + +} diff --git a/sandbox/ant/tuscany-container-rhino/src/test/java/org/apache/tuscany/container/rhino/integration/E4XServiceRefsTestCase.java b/sandbox/ant/tuscany-container-rhino/src/test/java/org/apache/tuscany/container/rhino/integration/E4XServiceRefsTestCase.java new file mode 100644 index 0000000000..76908b48d1 --- /dev/null +++ b/sandbox/ant/tuscany-container-rhino/src/test/java/org/apache/tuscany/container/rhino/integration/E4XServiceRefsTestCase.java @@ -0,0 +1,31 @@ +/** + * + * Copyright 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. + */ +package org.apache.tuscany.container.rhino.integration; + + +/** + * Integration tests for JavaScript components and composite contexts + * + * @version $Rev$ $Date$ + */ +public class E4XServiceRefsTestCase extends AbstractJavaScriptTestCase { + + public void testE4X() throws Exception { + //TODO: E4X serviceRefs don't work yet +// HelloWorld helloworldService = (HelloWorld) moduleContext.locateService("HelloWorldComponentE4XProxy"); +// String response = helloworldService.getGreetings("petra"); +// assertEquals("e4xHello proxy:petra", response); + } + +} diff --git a/sandbox/ant/tuscany-container-rhino/src/test/java/org/apache/tuscany/container/rhino/integration/E4XTestCase.java b/sandbox/ant/tuscany-container-rhino/src/test/java/org/apache/tuscany/container/rhino/integration/E4XTestCase.java new file mode 100644 index 0000000000..d6060aea90 --- /dev/null +++ b/sandbox/ant/tuscany-container-rhino/src/test/java/org/apache/tuscany/container/rhino/integration/E4XTestCase.java @@ -0,0 +1,29 @@ +/** + * + * Copyright 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. + */ +package org.apache.tuscany.container.rhino.integration; + +/** + * Integration tests for JavaScript components and composite contexts + * + * @version $Rev$ $Date$ + */ +public class E4XTestCase extends AbstractJavaScriptTestCase { + + public void testE4X() throws Exception { + HelloWorld helloworldService = (HelloWorld) moduleContext.locateService("HelloWorldComponentE4X"); + String response = helloworldService.getGreetings("petra"); + assertEquals("e4xHello petra", response); + } + +} diff --git a/sandbox/ant/tuscany-container-rhino/src/test/java/org/apache/tuscany/container/rhino/integration/HelloWorld.java b/sandbox/ant/tuscany-container-rhino/src/test/java/org/apache/tuscany/container/rhino/integration/HelloWorld.java new file mode 100644 index 0000000000..3a90be0102 --- /dev/null +++ b/sandbox/ant/tuscany-container-rhino/src/test/java/org/apache/tuscany/container/rhino/integration/HelloWorld.java @@ -0,0 +1,26 @@ +/** + * + * Copyright 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. + */ +package org.apache.tuscany.container.rhino.integration; + +/** + * This is the business interface of the HelloWorld service component. + */ +public interface HelloWorld { + + public String getGreetings(String name); + +} diff --git a/sandbox/ant/tuscany-container-rhino/src/test/java/org/apache/tuscany/container/rhino/integration/InitializationTestCase.java b/sandbox/ant/tuscany-container-rhino/src/test/java/org/apache/tuscany/container/rhino/integration/InitializationTestCase.java new file mode 100644 index 0000000000..138d9a8452 --- /dev/null +++ b/sandbox/ant/tuscany-container-rhino/src/test/java/org/apache/tuscany/container/rhino/integration/InitializationTestCase.java @@ -0,0 +1,33 @@ +/** + * + * Copyright 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. + */ +package org.apache.tuscany.container.rhino.integration; + +/** + * Integration tests for JavaScript components + */ +public class InitializationTestCase extends AbstractJavaScriptTestCase { + + public void testInitialization() throws Exception { + HelloWorld helloworldService = (HelloWorld) moduleContext.locateService("HelloWorldComponent4"); + String response = helloworldService.getGreetings("petra"); + assertEquals("Bonjour petra", response); + } + + public void testImports1() throws Exception { + HelloWorld helloworldService = (HelloWorld) moduleContext.locateService("HelloWorldComponent5"); + String response = helloworldService.getGreetings("petra"); + assertEquals("Kia ora petra", response); + } + +} diff --git a/sandbox/ant/tuscany-container-rhino/src/test/java/org/apache/tuscany/container/rhino/integration/PropertiesTestCase.java b/sandbox/ant/tuscany-container-rhino/src/test/java/org/apache/tuscany/container/rhino/integration/PropertiesTestCase.java new file mode 100644 index 0000000000..7b14376dbe --- /dev/null +++ b/sandbox/ant/tuscany-container-rhino/src/test/java/org/apache/tuscany/container/rhino/integration/PropertiesTestCase.java @@ -0,0 +1,33 @@ +/** + * + * Copyright 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. + */ +package org.apache.tuscany.container.rhino.integration; + +/** + * Integration tests for JavaScript components + */ +public class PropertiesTestCase extends AbstractJavaScriptTestCase { + + public void testDefaultProperty() throws Exception { + HelloWorld helloworldService = (HelloWorld) moduleContext.locateService("HelloWorldComponent2a"); + String response = helloworldService.getGreetings("petra"); + assertEquals("Hi petra", response); + } + + public void testOverrideProperty() throws Exception { + HelloWorld helloworldService = (HelloWorld) moduleContext.locateService("HelloWorldComponent2b"); + String response = helloworldService.getGreetings("petra"); + assertEquals("Guten Tag petra", response); + } + +} diff --git a/sandbox/ant/tuscany-container-rhino/src/test/java/org/apache/tuscany/container/rhino/integration/ServiceRefsTestCase.java b/sandbox/ant/tuscany-container-rhino/src/test/java/org/apache/tuscany/container/rhino/integration/ServiceRefsTestCase.java new file mode 100644 index 0000000000..7a6ac040d1 --- /dev/null +++ b/sandbox/ant/tuscany-container-rhino/src/test/java/org/apache/tuscany/container/rhino/integration/ServiceRefsTestCase.java @@ -0,0 +1,27 @@ +/** + * + * Copyright 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. + */ +package org.apache.tuscany.container.rhino.integration; + +/** + * Integration tests for JavaScript components + */ +public class ServiceRefsTestCase extends AbstractJavaScriptTestCase { + + public void testServiceReference() throws Exception { + HelloWorld helloworldService = (HelloWorld) moduleContext.locateService("HelloWorldProxyComponent"); + String response = helloworldService.getGreetings("petra"); + assertEquals("Hi proxy:petra", response); + } + +} diff --git a/sandbox/ant/tuscany-container-rhino/src/test/java/org/apache/tuscany/container/rhino/integration/TestMethods.java b/sandbox/ant/tuscany-container-rhino/src/test/java/org/apache/tuscany/container/rhino/integration/TestMethods.java new file mode 100644 index 0000000000..327edd1cbb --- /dev/null +++ b/sandbox/ant/tuscany-container-rhino/src/test/java/org/apache/tuscany/container/rhino/integration/TestMethods.java @@ -0,0 +1,30 @@ +/** + * + * Copyright 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. + */ +package org.apache.tuscany.container.rhino.integration; + +public class TestMethods { + + private String salutation = "Kia ora"; + + public String getSalutation() { + return salutation; + } + + public void getSalutation(String s) { + salutation = s; + } +} diff --git a/sandbox/ant/tuscany-container-rhino/src/test/java/org/apache/tuscany/container/rhino/rhino/Foo.java b/sandbox/ant/tuscany-container-rhino/src/test/java/org/apache/tuscany/container/rhino/rhino/Foo.java new file mode 100644 index 0000000000..6bcad30c23 --- /dev/null +++ b/sandbox/ant/tuscany-container-rhino/src/test/java/org/apache/tuscany/container/rhino/rhino/Foo.java @@ -0,0 +1,16 @@ +package org.apache.tuscany.container.rhino.rhino; + +class Foo { + private String s; + + public Foo() { + } + + public String getS() { + return s; + } + + public void setS(String s) { + this.s = s; + } +} diff --git a/sandbox/ant/tuscany-container-rhino/src/test/java/org/apache/tuscany/container/rhino/rhino/RhinoFunctionInvokerTestCase.java b/sandbox/ant/tuscany-container-rhino/src/test/java/org/apache/tuscany/container/rhino/rhino/RhinoFunctionInvokerTestCase.java new file mode 100644 index 0000000000..38705841f6 --- /dev/null +++ b/sandbox/ant/tuscany-container-rhino/src/test/java/org/apache/tuscany/container/rhino/rhino/RhinoFunctionInvokerTestCase.java @@ -0,0 +1,173 @@ +/* + * Copyright 2004,2005 The Apache Software Foundation. + * + * 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. + */ +package org.apache.tuscany.container.rhino.rhino; + +import java.io.IOException; + +import junit.framework.TestCase; + +import org.apache.tuscany.container.rhino.rhino.RhinoFunctionInvoker; +import org.apache.tuscany.container.rhino.rhino.RhinoScript; +import org.apache.tuscany.container.rhino.rhino.RhinoScriptInstance; +import org.apache.xmlbeans.XmlException; +import org.apache.xmlbeans.XmlObject; + +/** + * Tests for the RhinoScript + */ +public class RhinoFunctionInvokerTestCase extends TestCase { + + public RhinoFunctionInvokerTestCase() { + } + + protected void setUp() throws Exception { + super.setUp(); + } + + public void testNoArgsInvoke() { + RhinoScript rhinoScript = new RhinoScript("foo", "function getPetra() {return 'petra';}"); + RhinoScriptInstance instance = rhinoScript.createRhinoScriptInstance(); + RhinoFunctionInvoker invoker = instance.createRhinoFunctionInvoker("getPetra"); + assertNotNull(invoker); + assertEquals("petra", invoker.invoke(null)); + } + + public void testOneArgInvoke() { + RhinoScript rhinoScript = new RhinoScript("foo", "function getS(s) {return s;}"); + RhinoScriptInstance instance = rhinoScript.createRhinoScriptInstance(); + RhinoFunctionInvoker invoker = instance.createRhinoFunctionInvoker("getS"); + assertNotNull(invoker); + assertEquals("petra", invoker.invoke(new Object[]{"petra"})); + } + + public void testMultiArgsInvoke() { + RhinoScript rhinoScript = new RhinoScript("foo", "function concat(x, y) {return x + y}"); + RhinoScriptInstance instance = rhinoScript.createRhinoScriptInstance(); + RhinoFunctionInvoker invoker = instance.createRhinoFunctionInvoker("concat"); + assertNotNull(invoker); + assertEquals("petrasue", invoker.invoke(new Object[] { "petra", "sue"})); + } + + public void testNoResponseInvoke() { + RhinoScript rhinoScript = new RhinoScript("foo", "function getNull() {}"); + RhinoScriptInstance instance = rhinoScript.createRhinoScriptInstance(); + RhinoFunctionInvoker invoker = instance.createRhinoFunctionInvoker("getNull"); + assertNotNull(invoker); + assertEquals(null, invoker.invoke(new Object[0])); + } + + public void testNullResponseInvoke() { + RhinoScript rhinoScript = new RhinoScript("foo", "function getNull() {return null;}"); + RhinoScriptInstance instance = rhinoScript.createRhinoScriptInstance(); + RhinoFunctionInvoker invoker = instance.createRhinoFunctionInvoker("getNull"); + assertNotNull(invoker); + assertEquals(null, invoker.invoke(new Object[0])); + } + + public void testResponseTypeDefaultString() { + RhinoScript rhinoScript = new RhinoScript("foo", "function getTrue() {return true;}"); + RhinoScriptInstance instance = rhinoScript.createRhinoScriptInstance(); + RhinoFunctionInvoker invoker = instance.createRhinoFunctionInvoker("getTrue"); + assertNotNull(invoker); + Object o = invoker.invoke(new Object[0]); + assertTrue(o instanceof String); + assertEquals( "true", o); + } + + public void testResponseTypeBoolean() { + RhinoScript rhinoScript = new RhinoScript("foo", "function getTrue() {return true;}"); + rhinoScript.setResponseClass("getTrue", Boolean.class); + RhinoScriptInstance instance = rhinoScript.createRhinoScriptInstance(); + RhinoFunctionInvoker invoker = instance.createRhinoFunctionInvoker("getTrue"); + assertNotNull(invoker); + assertTrue((Boolean)invoker.invoke(new Object[0])); + } + + public void testResponseTypeStringArray() { + RhinoScript rhinoScript = new RhinoScript("foo", "function getAs() {var as = new Array(1);as[0]='petra';return as;}"); + rhinoScript.setResponseClass("getAs", new String[0].getClass()); + RhinoScriptInstance instance = rhinoScript.createRhinoScriptInstance(); + RhinoFunctionInvoker invoker = instance.createRhinoFunctionInvoker("getAs"); + assertNotNull(invoker); + Object o = invoker.invoke(new Object[0]); + assertNotNull(o); + assertTrue(o.getClass().isArray()); + assertEquals("petra", ((Object[])o)[0]); + } + + + public void testResponseTypeBooleanArray() { + RhinoScript rhinoScript = new RhinoScript("foo", "function getBs() {var bs = new Array(1);bs[0]=true;return bs;}"); + rhinoScript.setResponseClass("getBs", new Boolean[0].getClass()); + RhinoScriptInstance instance = rhinoScript.createRhinoScriptInstance(); + RhinoFunctionInvoker invoker = instance.createRhinoFunctionInvoker("getBs"); + assertNotNull(invoker); + Object o = invoker.invoke(new Object[0]); + assertNotNull(o); + assertTrue(o.getClass().isArray()); + assertTrue(((Boolean[])o)[0]); + } + + public void testRequestCustomType() { + RhinoScript rhinoScript = new RhinoScript("foo", "function getFooS(foo) {return foo.getS();}"); + RhinoScriptInstance instance = rhinoScript.createRhinoScriptInstance(); + RhinoFunctionInvoker invoker = instance.createRhinoFunctionInvoker("getFooS"); + assertNotNull(invoker); + + Foo foo = new Foo(); + foo.setS("petra"); + Object o = invoker.invoke(new Object[] {foo}); + assertEquals(foo.getS(), o); + } + + public void testResponseCustomType() { + RhinoScript rhinoScript = new RhinoScript("foo", "importClass(Packages.org.apache.tuscany.container.rhino.rhino.Foo);function getFoo(s) {var foo = new Foo(); foo.setS(s);return foo;}"); + RhinoScriptInstance instance = rhinoScript.createRhinoScriptInstance(); + RhinoFunctionInvoker invoker = instance.createRhinoFunctionInvoker("getFoo"); + assertNotNull(invoker); + + Object o = invoker.invoke(new Object[] {"petra"}); + assertNotNull(o); + assertEquals("petra", ((Foo)o).getS()); + } + + public void testXMLRequest() throws XmlException, IOException { + RhinoScript rhinoScript = new RhinoScript("foo", "function isXML(x) {return 'xml' == (typeof x);}"); + rhinoScript.setResponseClass("isXML", Boolean.class); + RhinoScriptInstance instance = rhinoScript.createRhinoScriptInstance(); + RhinoFunctionInvoker invoker = instance.createRhinoFunctionInvoker("isXML"); + assertNotNull(invoker); + + Object xml = XmlObject.Factory.parse(""); + assertTrue((Boolean) invoker.invoke(new Object[]{xml})); + + Object notXML = "notXML"; + assertFalse((Boolean) invoker.invoke(new Object[]{notXML})); + } + + public void testXMLResponse() { + RhinoScript rhinoScript = new RhinoScript("foo", "function getXML(s) {return { s } ;}"); + RhinoScriptInstance instance = rhinoScript.createRhinoScriptInstance(); + RhinoFunctionInvoker invoker = instance.createRhinoFunctionInvoker("getXML"); + assertNotNull(invoker); + + Object xml = invoker.invoke(new Object[]{"petra"}); + assertNotNull(xml); + assertTrue(xml instanceof XmlObject); + assertEquals("petra",((XmlObject)xml).toString()); + } + +} diff --git a/sandbox/ant/tuscany-container-rhino/src/test/java/org/apache/tuscany/container/rhino/rhino/RhinoScriptInstanceTestCase.java b/sandbox/ant/tuscany-container-rhino/src/test/java/org/apache/tuscany/container/rhino/rhino/RhinoScriptInstanceTestCase.java new file mode 100644 index 0000000000..480bbfb2d8 --- /dev/null +++ b/sandbox/ant/tuscany-container-rhino/src/test/java/org/apache/tuscany/container/rhino/rhino/RhinoScriptInstanceTestCase.java @@ -0,0 +1,47 @@ +/* + * Copyright 2004,2005 The Apache Software Foundation. + * + * 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. + */ +package org.apache.tuscany.container.rhino.rhino; + +import junit.framework.TestCase; + +/** + * Tests for the RhinoScript + */ +public class RhinoScriptInstanceTestCase extends TestCase { + + public RhinoScriptInstanceTestCase() { + + } + + protected void setUp() throws Exception { + super.setUp(); + } + + public void testInvokeFunction() { + RhinoScript rhinoScript = new RhinoScript("foo", "function getPetra() {return 'petra';}"); + RhinoScriptInstance instance = rhinoScript.createRhinoScriptInstance(); + assertEquals("petra", instance.invokeFunction("getPetra", new Object[0])); + } + + public void testCreateRhinoFunctionInvoker() { + RhinoScript rhinoScript = new RhinoScript("foo", "function getPetra() {return 'petra';}"); + RhinoScriptInstance instance = rhinoScript.createRhinoScriptInstance(); + RhinoFunctionInvoker invoker = instance.createRhinoFunctionInvoker("getPetra"); + assertNotNull(invoker); + assertEquals("petra", invoker.invoke(new Object[0])); + } + +} \ No newline at end of file diff --git a/sandbox/ant/tuscany-container-rhino/src/test/java/org/apache/tuscany/container/rhino/rhino/RhinoScriptTestCase.java b/sandbox/ant/tuscany-container-rhino/src/test/java/org/apache/tuscany/container/rhino/rhino/RhinoScriptTestCase.java new file mode 100644 index 0000000000..05f5624e7c --- /dev/null +++ b/sandbox/ant/tuscany-container-rhino/src/test/java/org/apache/tuscany/container/rhino/rhino/RhinoScriptTestCase.java @@ -0,0 +1,80 @@ +/* + * Copyright 2004,2005 The Apache Software Foundation. + * + * 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. + */ +package org.apache.tuscany.container.rhino.rhino; + +import java.util.HashMap; +import java.util.Map; + +import junit.framework.TestCase; + +/** + * Tests for the RhinoScript + */ +public class RhinoScriptTestCase extends TestCase { + + public RhinoScriptTestCase() { + + } + + protected void setUp() throws Exception { + super.setUp(); + } + + public void testSimpleConstructor() { + RhinoScript rhinoScript = new RhinoScript("foo", "function getPetra() {return 'petra';}"); + RhinoScriptInstance instance = rhinoScript.createRhinoScriptInstance(); + assertEquals("petra", instance.invokeFunction("getPetra", new Object[0])); + } + + public void testFullConstructor() { + ClassLoader cl = getClass().getClassLoader(); + Map contexts = new HashMap(); + contexts.put("name", "petra"); + RhinoScript rhinoScript = new RhinoScript("foo", "function getName() {return name;}",contexts , cl); + RhinoScriptInstance instance = rhinoScript.createRhinoScriptInstance(); + assertEquals("petra", instance.invokeFunction("getName", new Object[0])); + } + + public void testCreateInstance() { + RhinoScript rhinoScript = new RhinoScript("foo", "function getPetra() {return 'petra';}"); + RhinoScriptInstance instance = rhinoScript.createRhinoScriptInstance(); + assertNotNull(instance); + } + + public void testCreateInstanceWithContext() { + RhinoScript rhinoScript = new RhinoScript("foo", "function getName() {return name;}"); + Map contexts = new HashMap(); + contexts.put("name", "petra"); + RhinoScriptInstance instance = rhinoScript.createRhinoScriptInstance(contexts); + assertEquals("petra", instance.invokeFunction("getName", new Object[0])); + } + + public void testDefaultResponseType() { + RhinoScript rhinoScript = new RhinoScript("foo", "function getX() {return 42;}"); + RhinoScriptInstance instance = rhinoScript.createRhinoScriptInstance(); + assertEquals("42", instance.invokeFunction("getX", new Object[0])); + } + + public void testSetResponseType() { + RhinoScript rhinoScript = new RhinoScript("foo", "function getX() {return 42;}"); + rhinoScript.setResponseClass("getX", Integer.class); + RhinoScriptInstance instance = rhinoScript.createRhinoScriptInstance(); + Object x = instance.invokeFunction("getX", new Object[0]); + assertTrue(x instanceof Integer); + assertEquals(new Integer(42), x); + } + +} \ No newline at end of file diff --git a/sandbox/ant/tuscany-container-rhino/src/test/resources/org/apache/tuscany/container/rhino/e4x/helloworld.wsdl b/sandbox/ant/tuscany-container-rhino/src/test/resources/org/apache/tuscany/container/rhino/e4x/helloworld.wsdl new file mode 100644 index 0000000000..7bcb48dcf2 --- /dev/null +++ b/sandbox/ant/tuscany-container-rhino/src/test/resources/org/apache/tuscany/container/rhino/e4x/helloworld.wsdl @@ -0,0 +1,97 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/sandbox/ant/tuscany-container-rhino/src/test/resources/sca.module b/sandbox/ant/tuscany-container-rhino/src/test/resources/sca.module new file mode 100644 index 0000000000..d25cc1304a --- /dev/null +++ b/sandbox/ant/tuscany-container-rhino/src/test/resources/sca.module @@ -0,0 +1,66 @@ + + + + + + + + + + + + + + + + Guten Tag + + + + + + + HelloWorldComponent2b + + + + + + + + + + + + + + + + + + + + + + HelloWorldComponentE4X + + + + diff --git a/sandbox/ant/tuscany-container-rhino/src/test/resources/tests/HelloWorldE4XProxyImpl.componentType b/sandbox/ant/tuscany-container-rhino/src/test/resources/tests/HelloWorldE4XProxyImpl.componentType new file mode 100644 index 0000000000..19e8708bf4 --- /dev/null +++ b/sandbox/ant/tuscany-container-rhino/src/test/resources/tests/HelloWorldE4XProxyImpl.componentType @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/sandbox/ant/tuscany-container-rhino/src/test/resources/tests/HelloWorldE4XProxyImpl.js b/sandbox/ant/tuscany-container-rhino/src/test/resources/tests/HelloWorldE4XProxyImpl.js new file mode 100644 index 0000000000..505ce33204 --- /dev/null +++ b/sandbox/ant/tuscany-container-rhino/src/test/resources/tests/HelloWorldE4XProxyImpl.js @@ -0,0 +1,28 @@ +/** + * + * Copyright 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. + */ + +function getGreetings(name) { + + var requestXML = + + { "proxy:" + name } + ; + + var responseXML = HelloWorldService.process(requestXML); + + return responseXML..*::getGreetingsReturn; +} diff --git a/sandbox/ant/tuscany-container-rhino/src/test/resources/tests/HelloWorldImpl1.componentType b/sandbox/ant/tuscany-container-rhino/src/test/resources/tests/HelloWorldImpl1.componentType new file mode 100644 index 0000000000..90b6c09015 --- /dev/null +++ b/sandbox/ant/tuscany-container-rhino/src/test/resources/tests/HelloWorldImpl1.componentType @@ -0,0 +1,9 @@ + + + + + + + + + \ No newline at end of file diff --git a/sandbox/ant/tuscany-container-rhino/src/test/resources/tests/HelloWorldImpl1.js b/sandbox/ant/tuscany-container-rhino/src/test/resources/tests/HelloWorldImpl1.js new file mode 100644 index 0000000000..b3104f78a5 --- /dev/null +++ b/sandbox/ant/tuscany-container-rhino/src/test/resources/tests/HelloWorldImpl1.js @@ -0,0 +1,20 @@ +/** + * + * Copyright 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. + */ + +function getGreetings(name) { + return "jsHello " + name; +} diff --git a/sandbox/ant/tuscany-container-rhino/src/test/resources/tests/HelloWorldImpl2.componentType b/sandbox/ant/tuscany-container-rhino/src/test/resources/tests/HelloWorldImpl2.componentType new file mode 100644 index 0000000000..33208811bf --- /dev/null +++ b/sandbox/ant/tuscany-container-rhino/src/test/resources/tests/HelloWorldImpl2.componentType @@ -0,0 +1,11 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/sandbox/ant/tuscany-container-rhino/src/test/resources/tests/HelloWorldImpl2.js b/sandbox/ant/tuscany-container-rhino/src/test/resources/tests/HelloWorldImpl2.js new file mode 100644 index 0000000000..4f91dba40e --- /dev/null +++ b/sandbox/ant/tuscany-container-rhino/src/test/resources/tests/HelloWorldImpl2.js @@ -0,0 +1,20 @@ +/** + * + * Copyright 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. + */ + +function getGreetings(name) { + return salutation + " " + name; +} diff --git a/sandbox/ant/tuscany-container-rhino/src/test/resources/tests/HelloWorldImpl4.componentType b/sandbox/ant/tuscany-container-rhino/src/test/resources/tests/HelloWorldImpl4.componentType new file mode 100644 index 0000000000..90b6c09015 --- /dev/null +++ b/sandbox/ant/tuscany-container-rhino/src/test/resources/tests/HelloWorldImpl4.componentType @@ -0,0 +1,9 @@ + + + + + + + + + \ No newline at end of file diff --git a/sandbox/ant/tuscany-container-rhino/src/test/resources/tests/HelloWorldImpl4.js b/sandbox/ant/tuscany-container-rhino/src/test/resources/tests/HelloWorldImpl4.js new file mode 100644 index 0000000000..338c3ac3cd --- /dev/null +++ b/sandbox/ant/tuscany-container-rhino/src/test/resources/tests/HelloWorldImpl4.js @@ -0,0 +1,26 @@ +/** + * + * Copyright 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. + */ + +initSalutation(); + +function getGreetings(name) { + return SALUTATION + name; +} + +function initSalutation() { + SALUTATION = "Bonjour "; +} diff --git a/sandbox/ant/tuscany-container-rhino/src/test/resources/tests/HelloWorldImpl5.componentType b/sandbox/ant/tuscany-container-rhino/src/test/resources/tests/HelloWorldImpl5.componentType new file mode 100644 index 0000000000..90b6c09015 --- /dev/null +++ b/sandbox/ant/tuscany-container-rhino/src/test/resources/tests/HelloWorldImpl5.componentType @@ -0,0 +1,9 @@ + + + + + + + + + \ No newline at end of file diff --git a/sandbox/ant/tuscany-container-rhino/src/test/resources/tests/HelloWorldImpl5.js b/sandbox/ant/tuscany-container-rhino/src/test/resources/tests/HelloWorldImpl5.js new file mode 100644 index 0000000000..f01cd1727f --- /dev/null +++ b/sandbox/ant/tuscany-container-rhino/src/test/resources/tests/HelloWorldImpl5.js @@ -0,0 +1,29 @@ +/** + * + * Copyright 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. + */ + +//importPackage(Packages.sample.utils); +importClass(Packages.org.apache.tuscany.container.rhino.integration.TestMethods); + +initSalutation(); + +function getGreetings(name) { + return SALUTATION.getSalutation() + " " + name; +} + +function initSalutation() { + SALUTATION = new TestMethods(); +} diff --git a/sandbox/ant/tuscany-container-rhino/src/test/resources/tests/HelloWorldProxyImpl.componentType b/sandbox/ant/tuscany-container-rhino/src/test/resources/tests/HelloWorldProxyImpl.componentType new file mode 100644 index 0000000000..18192988ee --- /dev/null +++ b/sandbox/ant/tuscany-container-rhino/src/test/resources/tests/HelloWorldProxyImpl.componentType @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/sandbox/ant/tuscany-container-rhino/src/test/resources/tests/HelloWorldProxyImpl.js b/sandbox/ant/tuscany-container-rhino/src/test/resources/tests/HelloWorldProxyImpl.js new file mode 100644 index 0000000000..ef1c176c76 --- /dev/null +++ b/sandbox/ant/tuscany-container-rhino/src/test/resources/tests/HelloWorldProxyImpl.js @@ -0,0 +1,20 @@ +/** + * + * Copyright 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. + */ + +function getGreetings(name) { + return HelloWorldService.getGreetings("proxy:" + name); +} diff --git a/sandbox/ant/tuscany-container-rhino/src/test/resources/tests/e4x.componentType b/sandbox/ant/tuscany-container-rhino/src/test/resources/tests/e4x.componentType new file mode 100644 index 0000000000..9eccef8ad6 --- /dev/null +++ b/sandbox/ant/tuscany-container-rhino/src/test/resources/tests/e4x.componentType @@ -0,0 +1,9 @@ + + + + + + + + + \ No newline at end of file diff --git a/sandbox/ant/tuscany-container-rhino/src/test/resources/tests/e4x.js b/sandbox/ant/tuscany-container-rhino/src/test/resources/tests/e4x.js new file mode 100644 index 0000000000..7fe882df55 --- /dev/null +++ b/sandbox/ant/tuscany-container-rhino/src/test/resources/tests/e4x.js @@ -0,0 +1,28 @@ +/** + * + * Copyright 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. + */ + +function process(xmlIn) { + + var greeting = "e4xHello " + xmlIn..*::in0; + + var xmlOut = + + { greeting } + ; + + return xmlOut; +} diff --git a/sandbox/ant/tuscany-container-rhino/src/test/resources/wsdl/helloworld.wsdl b/sandbox/ant/tuscany-container-rhino/src/test/resources/wsdl/helloworld.wsdl new file mode 100644 index 0000000000..7bcb48dcf2 --- /dev/null +++ b/sandbox/ant/tuscany-container-rhino/src/test/resources/wsdl/helloworld.wsdl @@ -0,0 +1,97 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + -- cgit v1.2.3