From 3d3b8834b93b98cc7d7534e693e937179067eb58 Mon Sep 17 00:00:00 2001 From: antelder Date: Sat, 16 May 2009 08:44:44 +0000 Subject: Delete previous 1.5 branch thats now old and unused and will be replaced with the current 1.x trunk git-svn-id: http://svn.us.apache.org/repos/asf/tuscany@775435 13f79535-47bb-0310-9956-ffa450edef68 --- .../sca-java-1.5/modules/databinding-jaxb/LICENSE | 205 ---------- .../sca-java-1.5/modules/databinding-jaxb/NOTICE | 6 - .../sca-java-1.5/modules/databinding-jaxb/pom.xml | 185 --------- .../sca/databinding/jaxb/AnyTypeXmlAdapter.java | 39 -- .../sca/databinding/jaxb/DOMElementXmlAdapter.java | 57 --- .../sca/databinding/jaxb/DataConverter.java | 378 ----------------- .../jaxb/DefaultXMLAdapterExtensionPoint.java | 60 --- .../tuscany/sca/databinding/jaxb/JAXB2Node.java | 75 ---- .../tuscany/sca/databinding/jaxb/JAXB2SAX.java | 70 ---- .../tuscany/sca/databinding/jaxb/JAXB2String.java | 77 ---- .../sca/databinding/jaxb/JAXBContextCache.java | 448 --------------------- .../sca/databinding/jaxb/JAXBContextHelper.java | 447 -------------------- .../sca/databinding/jaxb/JAXBDataBinding.java | 131 ------ .../databinding/jaxb/JAXBPropertyDescriptor.java | 302 -------------- .../sca/databinding/jaxb/JAXBTypeHelper.java | 245 ----------- .../sca/databinding/jaxb/JAXBWrapperException.java | 56 --- .../sca/databinding/jaxb/JAXBWrapperHandler.java | 153 ------- .../sca/databinding/jaxb/JAXBWrapperHelper.java | 166 -------- .../tuscany/sca/databinding/jaxb/Node2JAXB.java | 73 ---- .../tuscany/sca/databinding/jaxb/Reader2JAXB.java | 74 ---- .../tuscany/sca/databinding/jaxb/String2JAXB.java | 80 ---- .../databinding/jaxb/XMLAdapterExtensionPoint.java | 52 --- .../sca/databinding/jaxb/XMLRootElementUtil.java | 286 ------------- .../sca/databinding/jaxb/XMLStreamReader2JAXB.java | 77 ---- .../org.apache.tuscany.sca.databinding.DataBinding | 19 - ....apache.tuscany.sca.databinding.PullTransformer | 32 -- ...y.sca.databinding.jaxb.XMLAdapterExtensionPoint | 17 - .../java/com/example/stock/StockQuoteOffer.java | 45 --- .../databinding/jaxb/BeanXMLStreamReaderImpl.java | 324 --------------- .../sca/databinding/jaxb/JAXB2XMLStreamReader.java | 84 ---- .../databinding/jaxb/JAXBContextCacheTestCase.java | 123 ------ .../databinding/jaxb/JAXBDataBindingTestCase.java | 130 ------ .../databinding/jaxb/JAXBReflectionTestCase.java | 92 ----- .../tuscany/sca/databinding/jaxb/JAXBTestCase.java | 175 -------- .../jaxb/JAXBWrapperHandlerTestCase.java | 90 ----- .../tuscany/sca/databinding/jaxb/MyBean.java | 162 -------- .../tuscany/sca/databinding/jaxb/MyInterface.java | 29 -- .../sca/databinding/jaxb/MyInterfaceImpl.java | 67 --- .../tuscany/sca/databinding/jaxb/MyJaxbBean.java | 64 --- .../tuscany/sca/databinding/jaxb/MySubBean.java | 35 -- .../tuscany/sca/databinding/jaxb/POJOTestCase.java | 268 ------------ .../databinding-jaxb/src/test/resources/ipo.xsd | 136 ------- 42 files changed, 5634 deletions(-) delete mode 100644 branches/sca-java-1.5/modules/databinding-jaxb/LICENSE delete mode 100644 branches/sca-java-1.5/modules/databinding-jaxb/NOTICE delete mode 100644 branches/sca-java-1.5/modules/databinding-jaxb/pom.xml delete mode 100644 branches/sca-java-1.5/modules/databinding-jaxb/src/main/java/org/apache/tuscany/sca/databinding/jaxb/AnyTypeXmlAdapter.java delete mode 100644 branches/sca-java-1.5/modules/databinding-jaxb/src/main/java/org/apache/tuscany/sca/databinding/jaxb/DOMElementXmlAdapter.java delete mode 100644 branches/sca-java-1.5/modules/databinding-jaxb/src/main/java/org/apache/tuscany/sca/databinding/jaxb/DataConverter.java delete mode 100644 branches/sca-java-1.5/modules/databinding-jaxb/src/main/java/org/apache/tuscany/sca/databinding/jaxb/DefaultXMLAdapterExtensionPoint.java delete mode 100644 branches/sca-java-1.5/modules/databinding-jaxb/src/main/java/org/apache/tuscany/sca/databinding/jaxb/JAXB2Node.java delete mode 100644 branches/sca-java-1.5/modules/databinding-jaxb/src/main/java/org/apache/tuscany/sca/databinding/jaxb/JAXB2SAX.java delete mode 100644 branches/sca-java-1.5/modules/databinding-jaxb/src/main/java/org/apache/tuscany/sca/databinding/jaxb/JAXB2String.java delete mode 100644 branches/sca-java-1.5/modules/databinding-jaxb/src/main/java/org/apache/tuscany/sca/databinding/jaxb/JAXBContextCache.java delete mode 100644 branches/sca-java-1.5/modules/databinding-jaxb/src/main/java/org/apache/tuscany/sca/databinding/jaxb/JAXBContextHelper.java delete mode 100644 branches/sca-java-1.5/modules/databinding-jaxb/src/main/java/org/apache/tuscany/sca/databinding/jaxb/JAXBDataBinding.java delete mode 100644 branches/sca-java-1.5/modules/databinding-jaxb/src/main/java/org/apache/tuscany/sca/databinding/jaxb/JAXBPropertyDescriptor.java delete mode 100644 branches/sca-java-1.5/modules/databinding-jaxb/src/main/java/org/apache/tuscany/sca/databinding/jaxb/JAXBTypeHelper.java delete mode 100644 branches/sca-java-1.5/modules/databinding-jaxb/src/main/java/org/apache/tuscany/sca/databinding/jaxb/JAXBWrapperException.java delete mode 100644 branches/sca-java-1.5/modules/databinding-jaxb/src/main/java/org/apache/tuscany/sca/databinding/jaxb/JAXBWrapperHandler.java delete mode 100644 branches/sca-java-1.5/modules/databinding-jaxb/src/main/java/org/apache/tuscany/sca/databinding/jaxb/JAXBWrapperHelper.java delete mode 100644 branches/sca-java-1.5/modules/databinding-jaxb/src/main/java/org/apache/tuscany/sca/databinding/jaxb/Node2JAXB.java delete mode 100644 branches/sca-java-1.5/modules/databinding-jaxb/src/main/java/org/apache/tuscany/sca/databinding/jaxb/Reader2JAXB.java delete mode 100644 branches/sca-java-1.5/modules/databinding-jaxb/src/main/java/org/apache/tuscany/sca/databinding/jaxb/String2JAXB.java delete mode 100644 branches/sca-java-1.5/modules/databinding-jaxb/src/main/java/org/apache/tuscany/sca/databinding/jaxb/XMLAdapterExtensionPoint.java delete mode 100644 branches/sca-java-1.5/modules/databinding-jaxb/src/main/java/org/apache/tuscany/sca/databinding/jaxb/XMLRootElementUtil.java delete mode 100644 branches/sca-java-1.5/modules/databinding-jaxb/src/main/java/org/apache/tuscany/sca/databinding/jaxb/XMLStreamReader2JAXB.java delete mode 100644 branches/sca-java-1.5/modules/databinding-jaxb/src/main/resources/META-INF/services/org.apache.tuscany.sca.databinding.DataBinding delete mode 100644 branches/sca-java-1.5/modules/databinding-jaxb/src/main/resources/META-INF/services/org.apache.tuscany.sca.databinding.PullTransformer delete mode 100644 branches/sca-java-1.5/modules/databinding-jaxb/src/main/resources/META-INF/services/org.apache.tuscany.sca.databinding.jaxb.XMLAdapterExtensionPoint delete mode 100644 branches/sca-java-1.5/modules/databinding-jaxb/src/test/java/com/example/stock/StockQuoteOffer.java delete mode 100644 branches/sca-java-1.5/modules/databinding-jaxb/src/test/java/org/apache/tuscany/sca/databinding/jaxb/BeanXMLStreamReaderImpl.java delete mode 100644 branches/sca-java-1.5/modules/databinding-jaxb/src/test/java/org/apache/tuscany/sca/databinding/jaxb/JAXB2XMLStreamReader.java delete mode 100644 branches/sca-java-1.5/modules/databinding-jaxb/src/test/java/org/apache/tuscany/sca/databinding/jaxb/JAXBContextCacheTestCase.java delete mode 100644 branches/sca-java-1.5/modules/databinding-jaxb/src/test/java/org/apache/tuscany/sca/databinding/jaxb/JAXBDataBindingTestCase.java delete mode 100644 branches/sca-java-1.5/modules/databinding-jaxb/src/test/java/org/apache/tuscany/sca/databinding/jaxb/JAXBReflectionTestCase.java delete mode 100644 branches/sca-java-1.5/modules/databinding-jaxb/src/test/java/org/apache/tuscany/sca/databinding/jaxb/JAXBTestCase.java delete mode 100644 branches/sca-java-1.5/modules/databinding-jaxb/src/test/java/org/apache/tuscany/sca/databinding/jaxb/JAXBWrapperHandlerTestCase.java delete mode 100644 branches/sca-java-1.5/modules/databinding-jaxb/src/test/java/org/apache/tuscany/sca/databinding/jaxb/MyBean.java delete mode 100644 branches/sca-java-1.5/modules/databinding-jaxb/src/test/java/org/apache/tuscany/sca/databinding/jaxb/MyInterface.java delete mode 100644 branches/sca-java-1.5/modules/databinding-jaxb/src/test/java/org/apache/tuscany/sca/databinding/jaxb/MyInterfaceImpl.java delete mode 100644 branches/sca-java-1.5/modules/databinding-jaxb/src/test/java/org/apache/tuscany/sca/databinding/jaxb/MyJaxbBean.java delete mode 100644 branches/sca-java-1.5/modules/databinding-jaxb/src/test/java/org/apache/tuscany/sca/databinding/jaxb/MySubBean.java delete mode 100644 branches/sca-java-1.5/modules/databinding-jaxb/src/test/java/org/apache/tuscany/sca/databinding/jaxb/POJOTestCase.java delete mode 100755 branches/sca-java-1.5/modules/databinding-jaxb/src/test/resources/ipo.xsd (limited to 'branches/sca-java-1.5/modules/databinding-jaxb') diff --git a/branches/sca-java-1.5/modules/databinding-jaxb/LICENSE b/branches/sca-java-1.5/modules/databinding-jaxb/LICENSE deleted file mode 100644 index 8aa906c321..0000000000 --- a/branches/sca-java-1.5/modules/databinding-jaxb/LICENSE +++ /dev/null @@ -1,205 +0,0 @@ - - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright [yyyy] [name of copyright owner] - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - - - diff --git a/branches/sca-java-1.5/modules/databinding-jaxb/NOTICE b/branches/sca-java-1.5/modules/databinding-jaxb/NOTICE deleted file mode 100644 index fdfa0e9faa..0000000000 --- a/branches/sca-java-1.5/modules/databinding-jaxb/NOTICE +++ /dev/null @@ -1,6 +0,0 @@ -${pom.name} -Copyright (c) 2005 - 2008 The Apache Software Foundation - -This product includes software developed by -The Apache Software Foundation (http://www.apache.org/). - diff --git a/branches/sca-java-1.5/modules/databinding-jaxb/pom.xml b/branches/sca-java-1.5/modules/databinding-jaxb/pom.xml deleted file mode 100644 index ed5712038a..0000000000 --- a/branches/sca-java-1.5/modules/databinding-jaxb/pom.xml +++ /dev/null @@ -1,185 +0,0 @@ - - - - 4.0.0 - - org.apache.tuscany.sca - tuscany-modules - 1.5-SNAPSHOT - ../pom.xml - - tuscany-databinding-jaxb - Apache Tuscany SCA Data Binding for JAXB - - - - org.apache.tuscany.sca - tuscany-core-spi - 1.5-SNAPSHOT - - - org.apache.tuscany.sca - tuscany-databinding - 1.5-SNAPSHOT - - - - javax.xml.bind - jaxb-api - 2.1 - - - - com.sun.xml.bind - jaxb-impl - 2.1.7 - runtime - - - - org.jvnet.jaxb.reflection - jaxb2-reflection - 2.1.4 - test - - - - - - - true - - java.net - java.net Maven 1.x Repository - http://download.java.net/maven/1 - legacy - - - - - - java.net2 - java.net Maven 2.x Repository - http://download.java.net/maven/2 - - - - - - - org.apache.maven.plugins - maven-dependency-plugin - - - copy - generate-sources - - copy - - - - - javax.xml.bind - jaxb-api - 2.1 - jar - - - ${project.build.directory}/endorsed - false - true - - - - - - org.apache.maven.plugins - maven-surefire-plugin - - -Djava.endorsed.dirs=target/endorsed - - - - org.codehaus.mojo - build-helper-maven-plugin - 1.0 - - - add-test-source - generate-sources - - add-test-source - - - - target/jaxb-source - - - - - - - - org.jvnet.jaxb2.maven2 - maven-jaxb2-plugin - 0.5 - - - generate-jaxb - generate-test-sources - - generate - - - - - com.example.ipo.jaxb - ${project.build.directory}/jaxb-source - ${basedir}/src/test/resources - - ipo.xsd - - - - - - org.apache.felix - maven-bundle-plugin - - - - ${tuscany.version} - org.apache.tuscany.sca.databinding.jaxb - ${pom.name} - org.apache.tuscany.sca.databinding.jaxb* - - - - - - - - diff --git a/branches/sca-java-1.5/modules/databinding-jaxb/src/main/java/org/apache/tuscany/sca/databinding/jaxb/AnyTypeXmlAdapter.java b/branches/sca-java-1.5/modules/databinding-jaxb/src/main/java/org/apache/tuscany/sca/databinding/jaxb/AnyTypeXmlAdapter.java deleted file mode 100644 index 57922e1c89..0000000000 --- a/branches/sca-java-1.5/modules/databinding-jaxb/src/main/java/org/apache/tuscany/sca/databinding/jaxb/AnyTypeXmlAdapter.java +++ /dev/null @@ -1,39 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -package org.apache.tuscany.sca.databinding.jaxb; - -import javax.xml.bind.annotation.adapters.XmlAdapter; - -/** - * This special XmlAdapter can be used by JAXB classes to annotate the references to java interfaces - */ -public class AnyTypeXmlAdapter extends XmlAdapter { - - @Override - public Object marshal(Object v) throws Exception { - return v; - } - - @Override - public Object unmarshal(Object v) throws Exception { - return v; - } - -} diff --git a/branches/sca-java-1.5/modules/databinding-jaxb/src/main/java/org/apache/tuscany/sca/databinding/jaxb/DOMElementXmlAdapter.java b/branches/sca-java-1.5/modules/databinding-jaxb/src/main/java/org/apache/tuscany/sca/databinding/jaxb/DOMElementXmlAdapter.java deleted file mode 100644 index 91cb39b0f2..0000000000 --- a/branches/sca-java-1.5/modules/databinding-jaxb/src/main/java/org/apache/tuscany/sca/databinding/jaxb/DOMElementXmlAdapter.java +++ /dev/null @@ -1,57 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -package org.apache.tuscany.sca.databinding.jaxb; - -import javax.xml.bind.annotation.adapters.XmlAdapter; - -import org.apache.tuscany.sca.databinding.Mediator; -import org.apache.tuscany.sca.databinding.xml.DOMDataBinding; -import org.apache.tuscany.sca.interfacedef.DataType; -import org.apache.tuscany.sca.interfacedef.impl.DataTypeImpl; -import org.w3c.dom.Element; - -/** - * A generic XmlAdapter for JAXB to marshal/unmarshal between the java objects and DOM elements - */ -public class DOMElementXmlAdapter extends XmlAdapter { - private Mediator mediator; - private DataType dataType; - private DataType domType; - - public DOMElementXmlAdapter(Mediator mediator, DataType dataType) { - this.mediator = mediator; - this.dataType = dataType; - this.domType = new DataTypeImpl(DOMDataBinding.NAME, Element.class, dataType.getLogical()); - } - - @Override - public Element marshal(Object value) throws Exception { - return (Element) mediator.mediate(value, dataType, domType, null); - } - - @Override - public Object unmarshal(Element element) throws Exception { - return mediator.mediate(element, domType, dataType, null); - } - - public void setMediator(Mediator mediator) { - this.mediator = mediator; - } -} diff --git a/branches/sca-java-1.5/modules/databinding-jaxb/src/main/java/org/apache/tuscany/sca/databinding/jaxb/DataConverter.java b/branches/sca-java-1.5/modules/databinding-jaxb/src/main/java/org/apache/tuscany/sca/databinding/jaxb/DataConverter.java deleted file mode 100644 index 003b4fb992..0000000000 --- a/branches/sca-java-1.5/modules/databinding-jaxb/src/main/java/org/apache/tuscany/sca/databinding/jaxb/DataConverter.java +++ /dev/null @@ -1,378 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -package org.apache.tuscany.sca.databinding.jaxb; - -import java.awt.Image; -import java.io.ByteArrayOutputStream; -import java.io.IOException; -import java.io.InputStream; -import java.lang.reflect.Array; -import java.util.ArrayList; -import java.util.Calendar; -import java.util.Collection; -import java.util.Date; -import java.util.HashMap; -import java.util.HashSet; -import java.util.Hashtable; -import java.util.Iterator; -import java.util.List; -import java.util.Set; - -import javax.activation.DataHandler; -import javax.imageio.ImageIO; -import javax.xml.transform.Result; -import javax.xml.transform.Source; -import javax.xml.transform.Transformer; -import javax.xml.transform.TransformerFactory; -import javax.xml.transform.stream.StreamResult; -import javax.xml.transform.stream.StreamSource; - -import org.osoa.sca.ServiceRuntimeException; - -/** - * Provides utilities to convert an object into a different kind of Object. For example, convert a - * String[] into a List - */ -public class DataConverter { - - /** - * This method should return true if the convert method will succeed. - *

- * Note that any changes to isConvertable() must also be accompanied by similar changes to - * convert() - * - * @param obj source object or class - * @param dest destination class - * @return boolean true if convert(..) can convert obj to the destination class - */ - public static boolean isConvertable(Object obj, Class dest) { - Class src = null; - - if (obj != null) { - if (obj instanceof Class) { - src = (Class)obj; - } else { - src = obj.getClass(); - } - } - - if (dest == null) { - return false; - } - - if (src == null) { - return true; - } - - // If we're directly assignable, we're good. - if (dest.isAssignableFrom(src)) { - return true; - } - - // If it's a wrapping conversion, we're good. - if (getWrapperClass(src) == dest) { - return true; - } - if (getWrapperClass(dest) == src) { - return true; - } - - // If it's List -> Array or vice versa, we're good. - if ((Collection.class.isAssignableFrom(src) || src.isArray()) && (Collection.class.isAssignableFrom(dest) || dest - .isArray())) { - - // TODO this should consider the component types instead of returning true. - return true; - } - - // Allow mapping of HashMaps to Hashtables - if (src == HashMap.class && dest == Hashtable.class) - return true; - - // Allow mapping of Calendar to Date - if (Calendar.class.isAssignableFrom(src) && dest == Date.class) { - return true; - } - - if (src.isPrimitive()) { - return isConvertable(getWrapperClass(src), dest); - } - - if (InputStream.class.isAssignableFrom(src) && dest == byte[].class) { - return true; - } - - if (Source.class.isAssignableFrom(src) && dest == byte[].class) { - return true; - } - - if (DataHandler.class.isAssignableFrom(src) && isConvertable(byte[].class, dest)) { - return true; - } - - if (DataHandler.class.isAssignableFrom(src) && dest == Image.class) { - return true; - } - - if (DataHandler.class.isAssignableFrom(src) && dest == Source.class) { - return true; - } - - if (byte[].class.isAssignableFrom(src) && dest == String.class) { - return true; - } - - // If it's a MIME type mapping and we want a DataHandler, - // then we're good. - // REVIEW Do we want to support this - /* - if (dest.getName().equals("javax.activation.DataHandler")) { - String name = src.getName(); - if (src == String.class - || src == java.awt.Image.class - || name.equals("javax.mail.internet.MimeMultipart") - || name.equals("javax.xml.transform.Source")) - return true; - } - */ - - return false; - } - - /** - * Utility function to convert an Object to some desired Class. - *

- * Normally this is used for T[] to List processing. Other conversions are also done (i.e. - * HashMap <->Hashtable, etc.) - *

- * Use the isConvertable() method to determine if conversion is possible. Note that any changes - * to convert() must also be accompanied by similar changes to isConvertable() - * - * @param arg the array to convert - * @param destClass the actual class we want - * @return object of destClass if conversion possible, otherwise returns arg - */ - public static Object convert(Object arg, Class destClass) { - if (destClass == null) { - return arg; - } - - if (arg != null && destClass.isAssignableFrom(arg.getClass())) { - return arg; - } - - // Convert between Calendar and Date - if (arg instanceof Calendar && destClass == Date.class) { - return ((Calendar)arg).getTime(); - } - - // Convert between HashMap and Hashtable - if (arg instanceof HashMap && destClass == Hashtable.class) { - return new Hashtable((HashMap)arg); - } - - if (arg instanceof InputStream && destClass == byte[].class) { - - try { - InputStream is = (InputStream)arg; - return getBytesFromStream(is); - } catch (IOException e) { - throw new ServiceRuntimeException(e); - } - } - - if (arg instanceof Source && destClass == byte[].class) { - try { - if (arg instanceof StreamSource) { - InputStream is = ((StreamSource)arg).getInputStream(); - if (is != null) { - return getBytesFromStream(is); - } - } - ByteArrayOutputStream out = new ByteArrayOutputStream(); - Result result = new StreamResult(out); - Transformer transformer = TransformerFactory.newInstance().newTransformer(); - transformer.transform((Source)arg, result); - byte[] bytes = out.toByteArray(); - return bytes; - - } catch (Exception e) { - throw new ServiceRuntimeException(e); - } - } - - if (arg instanceof DataHandler) { - try { - InputStream is = ((DataHandler)arg).getInputStream(); - if (destClass == Image.class) { - return ImageIO.read(is); - } else if (destClass == Source.class) { - return new StreamSource(is); - } - byte[] bytes = getBytesFromStream(is); - return convert(bytes, destClass); - } catch (Exception e) { - throw new ServiceRuntimeException(e); - } - } - - if (arg instanceof byte[] && destClass == String.class) { - return new String((byte[])arg); - } - - // If the destination is an array and the source - // is a suitable component, return an array with - // the single item. - /* REVIEW do we need to support atomic to array conversion ? - if (arg != null && - destClass.isArray() && - !destClass.getComponentType().equals(Object.class) && - destClass.getComponentType().isAssignableFrom(arg.getClass())) { - Object array = - Array.newInstance(destClass.getComponentType(), 1); - Array.set(array, 0, arg); - return array; - } - */ - - // Return if no conversion is available - if (!(arg instanceof Collection || (arg != null && arg.getClass().isArray()))) { - return arg; - } - - if (arg == null) { - return null; - } - - // The arg may be an array or List - Object destValue = null; - int length = 0; - if (arg.getClass().isArray()) { - length = Array.getLength(arg); - } else { - length = ((Collection)arg).size(); - } - - try { - if (destClass.isArray()) { - if (destClass.getComponentType().isPrimitive()) { - - Object array = Array.newInstance(destClass.getComponentType(), length); - // Assign array elements - if (arg.getClass().isArray()) { - for (int i = 0; i < length; i++) { - Array.set(array, i, Array.get(arg, i)); - } - } else { - int idx = 0; - for (Iterator i = ((Collection)arg).iterator(); i.hasNext();) { - Array.set(array, idx++, i.next()); - } - } - destValue = array; - - } else { - Object[] array; - try { - array = (Object[])Array.newInstance(destClass.getComponentType(), length); - } catch (Exception e) { - return arg; - } - - // Use convert to assign array elements. - if (arg.getClass().isArray()) { - for (int i = 0; i < length; i++) { - array[i] = convert(Array.get(arg, i), destClass.getComponentType()); - } - } else { - int idx = 0; - for (Iterator i = ((Collection)arg).iterator(); i.hasNext();) { - array[idx++] = convert(i.next(), destClass.getComponentType()); - } - } - destValue = array; - } - } else if (Collection.class.isAssignableFrom(destClass)) { - Collection newList = null; - try { - // if we are trying to create an interface, build something - // that implements the interface - if (destClass == Collection.class || destClass == List.class) { - newList = new ArrayList(); - } else if (destClass == Set.class) { - newList = new HashSet(); - } else { - newList = (Collection)destClass.newInstance(); - } - } catch (Exception e) { - // No FFDC code needed - // Couldn't build one for some reason... so forget it. - return arg; - } - - if (arg.getClass().isArray()) { - for (int j = 0; j < length; j++) { - newList.add(Array.get(arg, j)); - } - } else { - for (Iterator j = ((Collection)arg).iterator(); j.hasNext();) { - newList.add(j.next()); - } - } - destValue = newList; - } else { - destValue = arg; - } - } catch (Throwable t) { - throw new ServiceRuntimeException(t); - } - - return destValue; - } - - private static byte[] getBytesFromStream(InputStream is) throws IOException { - // TODO This code assumes that available is the length of the stream. - byte[] bytes = new byte[is.available()]; - is.read(bytes); - return bytes; - } - - public static Class getWrapperClass(Class primitive) { - if (primitive == int.class) { - return java.lang.Integer.class; - } else if (primitive == short.class) { - return java.lang.Short.class; - } else if (primitive == boolean.class) { - return java.lang.Boolean.class; - } else if (primitive == byte.class) { - return java.lang.Byte.class; - } else if (primitive == long.class) { - return java.lang.Long.class; - } else if (primitive == double.class) { - return java.lang.Double.class; - } else if (primitive == float.class) { - return java.lang.Float.class; - } else if (primitive == char.class) { - return java.lang.Character.class; - } - - return null; - } -} diff --git a/branches/sca-java-1.5/modules/databinding-jaxb/src/main/java/org/apache/tuscany/sca/databinding/jaxb/DefaultXMLAdapterExtensionPoint.java b/branches/sca-java-1.5/modules/databinding-jaxb/src/main/java/org/apache/tuscany/sca/databinding/jaxb/DefaultXMLAdapterExtensionPoint.java deleted file mode 100644 index 062da48206..0000000000 --- a/branches/sca-java-1.5/modules/databinding-jaxb/src/main/java/org/apache/tuscany/sca/databinding/jaxb/DefaultXMLAdapterExtensionPoint.java +++ /dev/null @@ -1,60 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -package org.apache.tuscany.sca.databinding.jaxb; - -import java.util.Map; -import java.util.concurrent.ConcurrentHashMap; - -import javax.xml.bind.annotation.adapters.XmlAdapter; - -/** - * @version $Rev$ $Date$ - */ -public class DefaultXMLAdapterExtensionPoint implements XMLAdapterExtensionPoint { - private Map, Class> adapters = - new ConcurrentHashMap, Class>(); - - public void addAdapter(Class boundType, Class adapter) { - adapters.put(boundType, adapter); - } - - public Class getAdapter(Class boundType) { - Class cls = adapters.get(boundType); - if (cls != null) { - return cls; - } - for (Map.Entry, Class> e : adapters.entrySet()) { - if (e.getKey().isAssignableFrom(boundType)) { - return e.getValue(); - } - } - return null; - } - - @SuppressWarnings("unchecked") - public Class removeAdapter(Class boundType) { - return adapters.remove(boundType); - } - - public Map, Class> getAdapters() { - return adapters; - } - -} diff --git a/branches/sca-java-1.5/modules/databinding-jaxb/src/main/java/org/apache/tuscany/sca/databinding/jaxb/JAXB2Node.java b/branches/sca-java-1.5/modules/databinding-jaxb/src/main/java/org/apache/tuscany/sca/databinding/jaxb/JAXB2Node.java deleted file mode 100644 index 3e262c7d12..0000000000 --- a/branches/sca-java-1.5/modules/databinding-jaxb/src/main/java/org/apache/tuscany/sca/databinding/jaxb/JAXB2Node.java +++ /dev/null @@ -1,75 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ -package org.apache.tuscany.sca.databinding.jaxb; - -import javax.xml.bind.JAXBContext; -import javax.xml.bind.Marshaller; - -import org.apache.tuscany.sca.databinding.PullTransformer; -import org.apache.tuscany.sca.databinding.TransformationContext; -import org.apache.tuscany.sca.databinding.TransformationException; -import org.apache.tuscany.sca.databinding.impl.BaseTransformer; -import org.apache.tuscany.sca.databinding.impl.DOMHelper; -import org.w3c.dom.Document; -import org.w3c.dom.Node; - -/** - * - * @version $Rev$ $Date$ - */ -public class JAXB2Node extends BaseTransformer implements PullTransformer { - - public Node transform(Object source, TransformationContext tContext) { -// if (source == null) { -// return null; -// } - try { - JAXBContext context = JAXBContextHelper.createJAXBContext(tContext, true); - Marshaller marshaller = context.createMarshaller(); - // FIXME: The default Marshaller doesn't support - // marshaller.getNode() - Document document = DOMHelper.newDocument(); - Object jaxbElement = JAXBContextHelper.createJAXBElement(context, tContext.getSourceDataType(), source); - marshaller.marshal(jaxbElement, document); - return DOMHelper.adjustElementName(tContext, document.getDocumentElement()); - } catch (Exception e) { - throw new TransformationException(e); - } - } - - @Override - protected Class getSourceType() { - return Object.class; - } - - @Override - protected Class getTargetType() { - return Node.class; - } - - @Override - public int getWeight() { - return 30; - } - - @Override - public String getSourceDataBinding() { - return JAXBDataBinding.NAME; - } -} diff --git a/branches/sca-java-1.5/modules/databinding-jaxb/src/main/java/org/apache/tuscany/sca/databinding/jaxb/JAXB2SAX.java b/branches/sca-java-1.5/modules/databinding-jaxb/src/main/java/org/apache/tuscany/sca/databinding/jaxb/JAXB2SAX.java deleted file mode 100644 index eee5c77285..0000000000 --- a/branches/sca-java-1.5/modules/databinding-jaxb/src/main/java/org/apache/tuscany/sca/databinding/jaxb/JAXB2SAX.java +++ /dev/null @@ -1,70 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -package org.apache.tuscany.sca.databinding.jaxb; - -import javax.xml.bind.JAXBContext; -import javax.xml.bind.Marshaller; - -import org.apache.tuscany.sca.databinding.PushTransformer; -import org.apache.tuscany.sca.databinding.TransformationContext; -import org.apache.tuscany.sca.databinding.TransformationException; -import org.apache.tuscany.sca.databinding.impl.BaseTransformer; -import org.xml.sax.ContentHandler; - -/** - * @version $Rev$ $Date$ - */ -public class JAXB2SAX extends BaseTransformer implements - PushTransformer { - - @Override - protected Class getSourceType() { - return Object.class; - } - - @Override - protected Class getTargetType() { - return ContentHandler.class; - } - - /** - * @see org.apache.tuscany.sca.databinding.PushTransformer#transform(java.lang.Object, java.lang.Object, org.apache.tuscany.sca.databinding.TransformationContext) - */ - public void transform(Object source, ContentHandler target, TransformationContext tContext) { - try { - JAXBContext context = JAXBContextHelper.createJAXBContext(tContext, true); - Marshaller marshaller = context.createMarshaller(); - Object jaxbElement = JAXBContextHelper.createJAXBElement(context, tContext.getSourceDataType(), source); - marshaller.marshal(jaxbElement, target); - } catch (Exception e) { - throw new TransformationException(e); - } - } - - @Override - public int getWeight() { - return 20; - } - - @Override - public String getSourceDataBinding() { - return JAXBDataBinding.NAME; - } -} diff --git a/branches/sca-java-1.5/modules/databinding-jaxb/src/main/java/org/apache/tuscany/sca/databinding/jaxb/JAXB2String.java b/branches/sca-java-1.5/modules/databinding-jaxb/src/main/java/org/apache/tuscany/sca/databinding/jaxb/JAXB2String.java deleted file mode 100644 index 29951a5e16..0000000000 --- a/branches/sca-java-1.5/modules/databinding-jaxb/src/main/java/org/apache/tuscany/sca/databinding/jaxb/JAXB2String.java +++ /dev/null @@ -1,77 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ -package org.apache.tuscany.sca.databinding.jaxb; - -import java.io.StringWriter; - -import javax.xml.bind.JAXBContext; -import javax.xml.bind.Marshaller; -import javax.xml.transform.stream.StreamResult; - -import org.apache.tuscany.sca.databinding.PullTransformer; -import org.apache.tuscany.sca.databinding.TransformationContext; -import org.apache.tuscany.sca.databinding.TransformationException; -import org.apache.tuscany.sca.databinding.impl.BaseTransformer; -import org.apache.tuscany.sca.databinding.xml.XMLStringDataBinding; - -/** - * - * @version $Rev$ $Date$ - */ -public class JAXB2String extends BaseTransformer implements PullTransformer { - - public String transform(Object source, TransformationContext tContext) { - try { - JAXBContext context = JAXBContextHelper.createJAXBContext(tContext, true); - Marshaller marshaller = context.createMarshaller(); - StringWriter writer = new StringWriter(); - StreamResult result = new StreamResult(writer); - Object jaxbElement = JAXBContextHelper.createJAXBElement(context, tContext.getSourceDataType(), source); - marshaller.marshal(jaxbElement, result); - return writer.toString(); - } catch (Exception e) { - throw new TransformationException(e); - } - } - - @Override - protected Class getSourceType() { - return Object.class; - } - - @Override - protected Class getTargetType() { - return String.class; - } - - @Override - public int getWeight() { - return 30; - } - - @Override - public String getSourceDataBinding() { - return JAXBDataBinding.NAME; - } - - @Override - public String getTargetDataBinding() { - return XMLStringDataBinding.NAME; - } -} diff --git a/branches/sca-java-1.5/modules/databinding-jaxb/src/main/java/org/apache/tuscany/sca/databinding/jaxb/JAXBContextCache.java b/branches/sca-java-1.5/modules/databinding-jaxb/src/main/java/org/apache/tuscany/sca/databinding/jaxb/JAXBContextCache.java deleted file mode 100644 index d616b9328e..0000000000 --- a/branches/sca-java-1.5/modules/databinding-jaxb/src/main/java/org/apache/tuscany/sca/databinding/jaxb/JAXBContextCache.java +++ /dev/null @@ -1,448 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ -package org.apache.tuscany.sca.databinding.jaxb; - -import java.awt.Image; -import java.lang.ref.SoftReference; -import java.net.URI; -import java.security.AccessController; -import java.security.PrivilegedActionException; -import java.security.PrivilegedExceptionAction; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.Calendar; -import java.util.Date; -import java.util.HashMap; -import java.util.HashSet; -import java.util.Iterator; -import java.util.List; -import java.util.Map; -import java.util.Set; -import java.util.UUID; -import java.util.concurrent.ConcurrentHashMap; - -import javax.activation.DataHandler; -import javax.xml.bind.JAXBContext; -import javax.xml.bind.JAXBException; -import javax.xml.bind.Marshaller; -import javax.xml.bind.Unmarshaller; -import javax.xml.transform.Source; - -import org.apache.tuscany.sca.databinding.util.LRUCache; - -/** - * @version $Rev$ $Date$ - */ -public class JAXBContextCache { - private static final int CACHE_SIZE = 128; - - private static HashMap> loadClassMap = new HashMap>(); - - static { - loadClassMap.put("byte", byte.class); - loadClassMap.put("int", int.class); - loadClassMap.put("short", short.class); - loadClassMap.put("long", long.class); - loadClassMap.put("float", float.class); - loadClassMap.put("double", double.class); - loadClassMap.put("boolean", boolean.class); - loadClassMap.put("char", char.class); - loadClassMap.put("void", void.class); - } - - protected static Class[] JAXB_BUILTIN_CLASSES = - {byte[].class, boolean.class, byte.class, char.class, double.class, float.class, int.class, long.class, - short.class, void.class, java.awt.Image.class, java.io.File.class, java.lang.Boolean.class, - java.lang.Byte.class, java.lang.Character.class, java.lang.Class.class, java.lang.Double.class, - java.lang.Float.class, java.lang.Integer.class, java.lang.Long.class, java.lang.Object.class, - java.lang.Short.class, java.lang.String.class, java.lang.Void.class, java.math.BigDecimal.class, - java.math.BigInteger.class, java.net.URI.class, java.net.URL.class, java.util.Calendar.class, - java.util.Date.class, java.util.GregorianCalendar.class, java.util.UUID.class, - javax.activation.DataHandler.class, javax.xml.bind.JAXBElement.class, javax.xml.datatype.Duration.class, - javax.xml.datatype.XMLGregorianCalendar.class, javax.xml.namespace.QName.class, - javax.xml.transform.Source.class}; - - protected static final Set> BUILTIN_CLASSES_SET = new HashSet>(Arrays.asList(JAXB_BUILTIN_CLASSES)); - - /* - protected static Class[] COMMON_ARRAY_CLASSES = - new Class[] {char[].class, short[].class, int[].class, long[].class, float[].class, double[].class, - String[].class - }; - - protected static final Set> COMMON_CLASSES_SET = new HashSet>(Arrays.asList(COMMON_ARRAY_CLASSES)); - */ - - protected LRUCache cache; - protected Pool mpool; - protected Pool upool; - - // protected JAXBContext commonContext; - protected JAXBContext defaultContext; - - public JAXBContextCache() { - this(CACHE_SIZE, CACHE_SIZE, CACHE_SIZE); - } - - public JAXBContextCache(int contextSize, int marshallerSize, int unmarshallerSize) { - cache = new LRUCache(contextSize); - mpool = new Pool(); - upool = new Pool(); - defaultContext = getDefaultJAXBContext(); - } - - private static JAXBContext newJAXBContext(final Class... classesToBeBound) throws JAXBException { - try { - return AccessController.doPrivileged(new PrivilegedExceptionAction() { - public JAXBContext run() throws JAXBException { - return JAXBContext.newInstance(classesToBeBound); - } - }); - } catch (PrivilegedActionException e) { - throw (JAXBException)e.getException(); - } - } - - private static JAXBContext newJAXBContext(final String contextPath, final ClassLoader classLoader) - throws JAXBException { - try { - return AccessController.doPrivileged(new PrivilegedExceptionAction() { - public JAXBContext run() throws JAXBException { - return JAXBContext.newInstance(contextPath, classLoader); - } - }); - } catch (PrivilegedActionException e) { - throw (JAXBException)e.getException(); - } - } - - public static JAXBContext getDefaultJAXBContext() { - try { - return newJAXBContext(); - } catch (JAXBException e) { - throw new IllegalArgumentException(e); - } - } - - /** - * @param name of primitive type - * @return primitive Class or null - */ - public static Class getPrimitiveClass(String text) { - return loadClassMap.get(text); - } - - /** - * Return the class for this name - * - * @return Class - */ - private static Class forName(final String className, final boolean initialize, final ClassLoader classloader) - throws ClassNotFoundException { - // NOTE: This method must remain private because it uses AccessController - Class cl = null; - try { - cl = AccessController.doPrivileged(new PrivilegedExceptionAction>() { - public Class run() throws ClassNotFoundException { - // Class.forName does not support primitives - Class cls = getPrimitiveClass(className); - if (cls == null) { - cls = Class.forName(className, initialize, classloader); - } - return cls; - } - }); - } catch (PrivilegedActionException e) { - throw (ClassNotFoundException)e.getException(); - } - - return cl; - } - - /** - * @param p Package - * @param cl - * @return true if each package has a ObjectFactory class or package-info - */ - public static boolean checkPackage(String p, ClassLoader cl) { - - // Each package must have an ObjectFactory - try { - Class cls = forName(p + ".ObjectFactory", false, cl); - if (cls != null) { - return true; - } - //Catch Throwable as ClassLoader can throw an NoClassDefFoundError that - //does not extend Exception. So we will absorb any Throwable exception here. - } catch (Throwable e) { - // Ignore - } - - // [rfeng] If no ObjectFactory or jaxb.index is present, JAXBContext.newInstance(contextPath, classloader) - // will fail - /* - try { - Class cls = forName(p + ".package-info", false, cl); - if (cls != null) { - return cls.isAnnotationPresent(XmlSchema.class); - } - //Catch Throwable as ClassLoader can throw an NoClassDefFoundError that - //does not extend Exception. So we will absorb any Throwable exception here. - } catch (Throwable e) { - // Ignore - } - */ - - return false; - } - - public Marshaller getMarshaller(JAXBContext context) throws JAXBException { - Marshaller marshaller = mpool.get(context); - if (marshaller == null) { - marshaller = context.createMarshaller(); - } - marshaller.setProperty(Marshaller.JAXB_FRAGMENT, Boolean.TRUE); - return marshaller; - } - - public void releaseJAXBMarshaller(JAXBContext context, Marshaller marshaller) { - if (marshaller != null) { - marshaller.setAttachmentMarshaller(null); - mpool.put(context, marshaller); - // No point unsetting marshaller's JAXB_FRAGMENT property, since we'll just reset it when - // doing the next get. - } - } - - public Unmarshaller getUnmarshaller(JAXBContext context) throws JAXBException { - Unmarshaller unmarshaller = upool.get(context); - if (unmarshaller == null) { - unmarshaller = context.createUnmarshaller(); - } - return unmarshaller; - } - - public void releaseJAXBUnmarshaller(JAXBContext context, Unmarshaller unmarshaller) { - if (unmarshaller != null) { - unmarshaller.setAttachmentUnmarshaller(null); - upool.put(context, unmarshaller); - } - } - - public LRUCache getCache() { - return cache; - } - - public JAXBContext getJAXBContext(Class cls) throws JAXBException { - if (BUILTIN_CLASSES_SET.contains(cls)) { - return defaultContext; - } - synchronized (cache) { - JAXBContext context = cache.get(cls); - if (context != null) { - return context; - } - Package pkg = cls.getPackage(); - if (pkg != null) { - context = cache.get(pkg); - if (context != null) { - return context; - } - } - - if (pkg != null && checkPackage(pkg.getName(), cls.getClassLoader())) { - context = newJAXBContext(pkg.getName(), cls.getClassLoader()); - cache.put(pkg, context); - } else { - context = newJAXBContext(cls); - cache.put(cls, context); - } - return context; - - } - } - - public JAXBContext getJAXBContext(Class[] classes) throws JAXBException { - Set> classSet = new HashSet>(Arrays.asList(classes)); - return getJAXBContext(classSet); - } - - public JAXBContext getJAXBContext(Set> classes) throws JAXBException { - // Remove the JAXB built-in types to maximize the cache hit - Set> classSet = new HashSet>(classes); - classSet.removeAll(BUILTIN_CLASSES_SET); - - // FIXME: [rfeng] Remove java classes that are mapped to the same XSD type to avoid - // conflicts - if (classSet.contains(Date[].class)) { - classSet.remove(Calendar[].class); - } - - if (classSet.contains(URI[].class)) { - classSet.remove(UUID[].class); - } - - if (classSet.contains(Source[].class)) { - classSet.remove(Image[].class); - classSet.remove(DataHandler[].class); - } - - if(classSet.isEmpty()) { - return defaultContext; - } - - // For single class - if (classSet.size() == 1) { - return getJAXBContext(classSet.iterator().next()); - } - synchronized (cache) { - JAXBContext context = cache.get(classSet); - if (context != null) { - return context; - } - context = newJAXBContext(classSet.toArray(new Class[classSet.size()])); - cache.put(classSet, context); - return context; - } - } - - public void clear() { - synchronized (cache) { - cache.clear(); - } - /* - synchronized (upool) { - upool.clear(); - } - synchronized (upool) { - upool.clear(); - } - */ - } - - // - // This inner class is copied in its entirety from the Axis2 utility class, - // org.apache.axis2.jaxws.message.databinding.JAXBUtils. We could look into extending but it's such a basic data structure - // without other dependencies so we might be better off copying it and avoiding a new - // Axis2 dependency here. - // - - /** - * Pool a list of items for a specific key - * - * @param Key - * @param Pooled object - */ - private static class Pool { - private SoftReference>> softMap = - new SoftReference>>( - new ConcurrentHashMap>()); - - // The maps are freed up when a LOAD FACTOR is hit - private static final int MAX_LIST_FACTOR = 50; - private static final int MAX_LOAD_FACTOR = 32; // Maximum number of JAXBContext to store - - /** - * @param key - * @return removed item from pool or null. - */ - public V get(K key) { - List values = getValues(key); - synchronized (values) { - if (values.size()>0) { - V v = values.remove(values.size()-1); - return v; - - } - } - return null; - } - - /** - * Add item back to pool - * @param key - * @param value - */ - public void put(K key, V value) { - adjustSize(); - List values = getValues(key); - synchronized (values) { - if (values.size() < MAX_LIST_FACTOR) { - values.add(value); - } - } - } - - /** - * Get or create a list of the values for the key - * @param key - * @return list of values. - */ - private List getValues(K key) { - Map> map = softMap.get(); - List values = null; - if (map != null) { - values = map.get(key); - if(values !=null) { - return values; - } - } - synchronized (this) { - if (map != null) { - values = map.get(key); - } - if (values == null) { - if (map == null) { - map = new ConcurrentHashMap>(); - softMap = - new SoftReference>>(map); - } - values = new ArrayList(); - map.put(key, values); - - } - return values; - } - } - - /** - * AdjustSize - * When the number of keys exceeds the maximum load, half - * of the entries are deleted. - * - * The assumption is that the JAXBContexts, UnMarshallers, Marshallers, etc. require - * a large footprint. - */ - private void adjustSize() { - Map> map = softMap.get(); - if (map != null && map.size() > MAX_LOAD_FACTOR) { - // Remove every other Entry in the map. - Iterator it = map.entrySet().iterator(); - boolean removeIt = false; - while (it.hasNext()) { - it.next(); - if (removeIt) { - it.remove(); - } - removeIt = !removeIt; - } - } - } - } -} diff --git a/branches/sca-java-1.5/modules/databinding-jaxb/src/main/java/org/apache/tuscany/sca/databinding/jaxb/JAXBContextHelper.java b/branches/sca-java-1.5/modules/databinding-jaxb/src/main/java/org/apache/tuscany/sca/databinding/jaxb/JAXBContextHelper.java deleted file mode 100644 index 2e8a4fc385..0000000000 --- a/branches/sca-java-1.5/modules/databinding-jaxb/src/main/java/org/apache/tuscany/sca/databinding/jaxb/JAXBContextHelper.java +++ /dev/null @@ -1,447 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ -package org.apache.tuscany.sca.databinding.jaxb; - -import java.lang.reflect.GenericArrayType; -import java.lang.reflect.ParameterizedType; -import java.lang.reflect.Type; -import java.lang.reflect.TypeVariable; -import java.lang.reflect.WildcardType; -import java.util.ArrayList; -import java.util.HashSet; -import java.util.List; -import java.util.Set; - -import javax.xml.bind.JAXBContext; -import javax.xml.bind.JAXBElement; -import javax.xml.bind.JAXBException; -import javax.xml.bind.JAXBIntrospector; -import javax.xml.bind.Marshaller; -import javax.xml.bind.Unmarshaller; -import javax.xml.bind.annotation.XmlEnum; -import javax.xml.bind.annotation.XmlRootElement; -import javax.xml.bind.annotation.XmlSchema; -import javax.xml.bind.annotation.XmlType; -import javax.xml.namespace.QName; - -import org.apache.tuscany.sca.databinding.TransformationContext; -import org.apache.tuscany.sca.databinding.TransformationException; -import org.apache.tuscany.sca.databinding.impl.SimpleTypeMapperImpl; -import org.apache.tuscany.sca.databinding.util.LRUCache; -import org.apache.tuscany.sca.interfacedef.DataType; -import org.apache.tuscany.sca.interfacedef.Interface; -import org.apache.tuscany.sca.interfacedef.Operation; -import org.apache.tuscany.sca.interfacedef.util.WrapperInfo; -import org.apache.tuscany.sca.interfacedef.util.XMLType; - -/** - * - * @version $Rev$ $Date$ - */ -// FIXME: [rfeng] We probably should turn this into a pluggable system service -public class JAXBContextHelper { - // public static final String JAXB_CLASSES = "jaxb.classes"; - - // public static final String JAXB_CONTEXT_PATH = "jaxb.contextPath"; - - private static final JAXBContextCache cache = new JAXBContextCache(); - - private JAXBContextHelper() { - } - - /** - * Create a JAXBContext for a given class - * @param cls - * @return - * @throws JAXBException - */ - public static JAXBContext createJAXBContext(Class cls) throws JAXBException { - return cache.getJAXBContext(cls); - } - - public static JAXBContext createJAXBContext(TransformationContext tContext, boolean source) throws JAXBException { - if (tContext == null) - throw new TransformationException("JAXB context is not set for the transformation."); - - // TODO: [rfeng] Need to figure out what's the best grantularity to create the JAXBContext - // per interface, operation or parameter - Operation op = source ? tContext.getSourceOperation() : tContext.getTargetOperation(); - if (op != null) { - synchronized (op) { - JAXBContext context = op.getInputType().getMetaData(JAXBContext.class); - if (context == null) { - context = createJAXBContext(getDataTypes(op, true)); - op.getInputType().setMetaData(JAXBContext.class, context); - } - return context; - } - } - - // For property transformation, the operation can be null - DataType dataType = source ? tContext.getSourceDataType() : tContext.getTargetDataType(); - return createJAXBContext(dataType); - - } - - public static JAXBContext createJAXBContext(DataType dataType) throws JAXBException { - return createJAXBContext(findClasses(dataType)); - } - - public static Unmarshaller getUnmarshaller(JAXBContext context) throws JAXBException { - return cache.getUnmarshaller(context); - } - - public static void releaseJAXBUnmarshaller(JAXBContext context, Unmarshaller unmarshaller) { - cache.releaseJAXBUnmarshaller(context, unmarshaller); - } - - public static Marshaller getMarshaller(JAXBContext context) throws JAXBException { - return cache.getMarshaller(context); - } - - public static void releaseJAXBMarshaller(JAXBContext context, Marshaller marshaller) { - cache.releaseJAXBMarshaller(context, marshaller); - } - - @SuppressWarnings("unchecked") - public static Object createJAXBElement(JAXBContext context, DataType dataType, Object value) { - Class type = dataType == null ? value.getClass() : dataType.getPhysical(); - QName name = JAXBDataBinding.ROOT_ELEMENT; - if (context != null) { - Object logical = dataType == null ? null : dataType.getLogical(); - if (logical instanceof XMLType) { - XMLType xmlType = (XMLType)logical; - if (xmlType.isElement()) { - name = xmlType.getElementName(); - } else { - /** - * Set the declared type to Object.class so that xsi:type - * will be produced - */ - type = Object.class; - } - } else { - type = Object.class; - } - } - - JAXBIntrospector introspector = context.createJAXBIntrospector(); - Object element = null; - if (value != null && introspector.isElement(value)) { - // NOTE: [rfeng] We cannot wrap an element in a JAXBElement - element = value; - } - if (element == null) { - element = new JAXBElement(name, Object.class, value); - } - return element; - } - - @SuppressWarnings("unchecked") - public static Object createReturnValue(JAXBContext context, DataType dataType, Object value) { - Class cls = getJavaType(dataType); - if (cls == JAXBElement.class) { - return createJAXBElement(context, dataType, value); - } else { - if (value instanceof JAXBElement) { - return ((JAXBElement)value).getValue(); - } else { - return value; - } - } - } - - /** - * Create a JAXContext for an array of classes - * @param classes - * @return - * @throws JAXBException - */ - public static JAXBContext createJAXBContext(Class[] classes) throws JAXBException { - return cache.getJAXBContext(classes); - } - - public static JAXBContext createJAXBContext(Set> classes) throws JAXBException { - return cache.getJAXBContext(classes); - } - - /** - * Create a JAXBContext for a given java interface - * @param intf - * @return - * @throws JAXBException - */ - public static JAXBContext createJAXBContext(Interface intf, boolean useWrapper) throws JAXBException { - synchronized (cache) { - LRUCache map = cache.getCache(); - Integer key = new Integer(System.identityHashCode(intf)); - JAXBContext context = map.get(key); - if (context != null) { - return context; - } - List dataTypes = getDataTypes(intf, useWrapper); - context = createJAXBContext(dataTypes); - map.put(key, context); - return context; - } - } - - public static JAXBContext createJAXBContext(List dataTypes) throws JAXBException { - JAXBContext context; - Set> classes = new HashSet>(); - Set visited = new HashSet(); - for (DataType d : dataTypes) { - findClasses(d, classes, visited); - } - - context = createJAXBContext(classes); - return context; - } - - private static Set> findClasses(DataType d) { - Set> classes = new HashSet>(); - Set visited = new HashSet(); - findClasses(d, classes, visited); - return classes; - } - - private static void findClasses(DataType d, Set> classes, Set visited) { - if (d == null) { - return; - } - String db = d.getDataBinding(); - if (JAXBDataBinding.NAME.equals(db) || (db != null && db.startsWith("java:")) || db == null) { - if (!d.getPhysical().isInterface() && !JAXBElement.class.isAssignableFrom(d.getPhysical())) { - classes.add(d.getPhysical()); - } - } - if (d.getPhysical() != d.getGenericType()) { - findClasses(d.getGenericType(), classes, visited); - } - } - - /** - * Find referenced classes in the generic type - * @param type - * @param classSet - * @param visited - */ - private static void findClasses(Type type, Set> classSet, Set visited) { - if (visited.contains(type) || type == null) { - return; - } - visited.add(type); - if (type instanceof Class) { - Class cls = (Class)type; - if (!cls.isInterface()) { - classSet.add(cls); - } - return; - } else if (type instanceof ParameterizedType) { - ParameterizedType pType = (ParameterizedType)type; - findClasses(pType.getRawType(), classSet, visited); - for (Type t : pType.getActualTypeArguments()) { - findClasses(t, classSet, visited); - } - } else if (type instanceof TypeVariable) { - TypeVariable tv = (TypeVariable)type; - for (Type t : tv.getBounds()) { - findClasses(t, classSet, visited); - } - } else if (type instanceof GenericArrayType) { - GenericArrayType gType = (GenericArrayType)type; - findClasses(gType, classSet, visited); - } else if (type instanceof WildcardType) { - WildcardType wType = (WildcardType)type; - for (Type t : wType.getLowerBounds()) { - findClasses(t, classSet, visited); - } - for (Type t : wType.getUpperBounds()) { - findClasses(t, classSet, visited); - } - } - } - - public static JAXBContext createJAXBContext(Interface intf) throws JAXBException { - return createJAXBContext(intf, true); - } - - /** - * @param intf - * @param useWrapper Use wrapper classes? - * @return - */ - private static List getDataTypes(Interface intf, boolean useWrapper) { - List dataTypes = new ArrayList(); - for (Operation op : intf.getOperations()) { - getDataTypes(dataTypes, op, useWrapper); - } - return dataTypes; - } - - private static List getDataTypes(Operation op, boolean useWrapper) { - List dataTypes = new ArrayList(); - getDataTypes(dataTypes, op, useWrapper); - return dataTypes; - } - - private static void getDataTypes(List dataTypes, Operation op, boolean useWrapper) { - WrapperInfo inputWrapperInfo = op.getInputWrapper(); - WrapperInfo outputWrapperInfo = op.getOutputWrapper(); - - if (useWrapper && (inputWrapperInfo != null)) { - DataType dt1 = inputWrapperInfo.getWrapperType(); - if (dt1 != null) { - dataTypes.add(dt1); - } - } - if (useWrapper && (outputWrapperInfo != null)) { - DataType dt2 = outputWrapperInfo.getWrapperType(); - if (dt2 != null) { - dataTypes.add(dt2); - } - } - // FIXME: [rfeng] We may need to find the referenced classes in the child types - // else - { - for (DataType dt1 : op.getInputType().getLogical()) { - dataTypes.add(dt1); - } - DataType dt2 = op.getOutputType(); - if (dt2 != null) { - dataTypes.add(dt2); - } - } - for (DataType dt3 : op.getFaultTypes()) { - DataType dt4 = dt3.getLogical(); - if (dt4 != null) { - dataTypes.add(dt4); - } - } - } - - public static Class getJavaType(DataType dataType) { - if (dataType == null) { - return null; - } - Class type = dataType.getPhysical(); - if (JAXBElement.class.isAssignableFrom(type)) { - Type generic = dataType.getGenericType(); - type = Object.class; - } - if (type == Object.class && dataType.getLogical() instanceof XMLType) { - XMLType xType = (XMLType)dataType.getLogical(); - Class javaType = SimpleTypeMapperImpl.getJavaType(xType.getTypeName()); - if (javaType != null) { - type = javaType; - } - } - return type; - } - - public static XMLType getXmlTypeName(Class javaType) { - if (javaType.isInterface()) { - // JAXB doesn't support interfaces - return null; - } - String namespace = null; - String name = null; - Package pkg = javaType.getPackage(); - if (pkg != null) { - XmlSchema schema = pkg.getAnnotation(XmlSchema.class); - if (schema != null) { - namespace = schema.namespace(); - } - } - - QName elementQName = null; - QName typeQName = null; - XmlRootElement rootElement = javaType.getAnnotation(XmlRootElement.class); - if (rootElement != null) { - String elementName = rootElement.name(); - String elementNamespace = rootElement.namespace(); - if (elementNamespace.equals("##default")) { - elementNamespace = namespace; - } - if (elementName.equals("##default")) { - elementName = jaxbDecapitalize(javaType.getSimpleName()); - } - elementQName = new QName(elementNamespace, elementName); - } - XmlType type = javaType.getAnnotation(XmlType.class); - if (type != null) { - String typeNamespace = type.namespace(); - String typeName = type.name(); - - if (typeNamespace.equals("##default")) { - // namespace is from the package - typeNamespace = namespace; - } - - if (typeName.equals("##default")) { - typeName = jaxbDecapitalize(javaType.getSimpleName()); - } - typeQName = new QName(typeNamespace, typeName); - } else { - XmlEnum xmlEnum = javaType.getAnnotation(XmlEnum.class); - // POJO can have the @XmlSchema on the package-info too - if (xmlEnum != null || namespace != null) { - name = jaxbDecapitalize(javaType.getSimpleName()); - typeQName = new QName(namespace, name); - } - } - if (elementQName == null && typeQName == null) { - return null; - } - return new XMLType(elementQName, typeQName); - } - - /** - * The JAXB RI doesn't implement the decapitalization algorithm in the - * JAXB spec. See Sun bug 6505643 for details. This means that instead - * of calling java.beans.Introspector.decapitalize() as the JAXB spec says, - * Tuscany needs to mimic the incorrect JAXB RI algorithm. - */ - public static String jaxbDecapitalize(String name) { - // find first lower case char in name - int lower = name.length(); - for (int i = 0; i < name.length(); i++) { - if (Character.isLowerCase(name.charAt(i))) { - lower = i; - break; - } - } - - int decap; - if (name.length() == 0) { - decap = 0; // empty string: nothing to do - } else if (lower == 0) { - decap = 0; // first char is lower case: nothing to do - } else if (lower == 1) { - decap = 1; // one upper followed by lower: decapitalize 1 char - } else if (lower < name.length()) { - decap = lower - 1; // n uppers followed by at least one lower: decapitalize n-1 chars - } else { - decap = name.length(); // all upper case: decapitalize all chars - } - - return name.substring(0, decap).toLowerCase() + name.substring(decap); - } - -} diff --git a/branches/sca-java-1.5/modules/databinding-jaxb/src/main/java/org/apache/tuscany/sca/databinding/jaxb/JAXBDataBinding.java b/branches/sca-java-1.5/modules/databinding-jaxb/src/main/java/org/apache/tuscany/sca/databinding/jaxb/JAXBDataBinding.java deleted file mode 100644 index 38efd288cb..0000000000 --- a/branches/sca-java-1.5/modules/databinding-jaxb/src/main/java/org/apache/tuscany/sca/databinding/jaxb/JAXBDataBinding.java +++ /dev/null @@ -1,131 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -package org.apache.tuscany.sca.databinding.jaxb; - -import java.lang.reflect.ParameterizedType; -import java.lang.reflect.Type; - -import javax.xml.bind.JAXBContext; -import javax.xml.bind.JAXBElement; -import javax.xml.namespace.QName; - -import org.apache.tuscany.sca.databinding.WrapperHandler; -import org.apache.tuscany.sca.databinding.XMLTypeHelper; -import org.apache.tuscany.sca.databinding.impl.BaseDataBinding; -import org.apache.tuscany.sca.databinding.impl.DOMHelper; -import org.apache.tuscany.sca.interfacedef.DataType; -import org.apache.tuscany.sca.interfacedef.Operation; -import org.apache.tuscany.sca.interfacedef.impl.DataTypeImpl; -import org.apache.tuscany.sca.interfacedef.util.XMLType; -import org.w3c.dom.Document; - -/** - * JAXB DataBinding - * - * @version $Rev$ $Date$ - */ -public class JAXBDataBinding extends BaseDataBinding { - public static final String NAME = JAXBElement.class.getName(); - - public static final String ROOT_NAMESPACE = "http://tuscany.apache.org/xmlns/sca/databinding/jaxb/1.0"; - public static final QName ROOT_ELEMENT = new QName(ROOT_NAMESPACE, "root"); - - private JAXBWrapperHandler wrapperHandler; - private JAXBTypeHelper xmlTypeHelper; - - public JAXBDataBinding() { - super(NAME, JAXBElement.class); - this.wrapperHandler = new JAXBWrapperHandler(); - this.xmlTypeHelper = new JAXBTypeHelper(); - } - - @Override - public boolean introspect(DataType dataType, Operation operation) { - Class javaType = dataType.getPhysical(); - if (JAXBElement.class.isAssignableFrom(javaType)) { - Type type = javaType.getGenericSuperclass(); - if (type instanceof ParameterizedType) { - ParameterizedType parameterizedType = ((ParameterizedType)type); - Type rawType = parameterizedType.getRawType(); - if (rawType == JAXBElement.class) { - Type actualType = parameterizedType.getActualTypeArguments()[0]; - if (actualType instanceof Class) { - XMLType xmlType = JAXBContextHelper.getXmlTypeName((Class)actualType); - dataType.setLogical(xmlType); - dataType.setDataBinding(NAME); - return true; - } - } - } - if (dataType.getLogical() == null) { - dataType.setLogical(XMLType.UNKNOWN); - } - dataType.setDataBinding(NAME); - return true; - } - - XMLType xmlType = JAXBContextHelper.getXmlTypeName(javaType); - if (xmlType == null) { - return false; - } - dataType.setLogical(xmlType); - dataType.setDataBinding(NAME); - return true; - } - - @SuppressWarnings("unchecked") - @Override - public Object copy(Object arg, DataType dataType, Operation operation) { - try { - boolean isElement = false; - if (dataType == null) { - Class cls = arg.getClass(); - if (arg instanceof JAXBElement) { - isElement = true; - cls = ((JAXBElement)arg).getDeclaredType(); - } - dataType = new DataTypeImpl(NAME, cls, XMLType.UNKNOWN); - } - JAXBContext context = JAXBContextHelper.createJAXBContext(dataType); - arg = JAXBContextHelper.createJAXBElement(context, dataType, arg); - Document doc = DOMHelper.newDocument(); - context.createMarshaller().marshal(arg, doc); - Object value = context.createUnmarshaller().unmarshal(doc, dataType.getPhysical()); - if (isElement && value instanceof JAXBElement) { - return value; - } - return JAXBContextHelper.createReturnValue(context, dataType, value); - } catch (Exception e) { - throw new IllegalArgumentException(e); - } - } - - @Override - public WrapperHandler getWrapperHandler() { - return wrapperHandler; - } - - @Override - public XMLTypeHelper getXMLTypeHelper() { - // return new JAXBTypeHelper(); - return xmlTypeHelper; - } - -} diff --git a/branches/sca-java-1.5/modules/databinding-jaxb/src/main/java/org/apache/tuscany/sca/databinding/jaxb/JAXBPropertyDescriptor.java b/branches/sca-java-1.5/modules/databinding-jaxb/src/main/java/org/apache/tuscany/sca/databinding/jaxb/JAXBPropertyDescriptor.java deleted file mode 100644 index 8805d72627..0000000000 --- a/branches/sca-java-1.5/modules/databinding-jaxb/src/main/java/org/apache/tuscany/sca/databinding/jaxb/JAXBPropertyDescriptor.java +++ /dev/null @@ -1,302 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -package org.apache.tuscany.sca.databinding.jaxb; - -import java.beans.IndexedPropertyDescriptor; -import java.beans.PropertyDescriptor; -import java.lang.reflect.InvocationTargetException; -import java.lang.reflect.Method; -import java.util.Collection; - -import javax.xml.bind.JAXBElement; -import javax.xml.namespace.QName; - -import org.osoa.sca.ServiceRuntimeException; - -/** - * A PropertyDescriptor provides acesss to a bean property. Values can be queried/changed using the - * read and writer methods of the PropertyDescriptor. - *

- * A PropertyDescriptorPlus object wraps a PropertyDescriptor and supplies enhanced set/get methods - * that match JAXB semantis. - *

- * For example, the set(..) method is smart enough to add lists, arrays and atomic values on JAXB - * beans. - *

- * The PropertyDescriptorPlus object also stores the xmlName of the property. - * - * @See XMLRootElementUtil.createPropertyDescriptorMap , which creates the PropertyDescriptorPlus - * objects - */ -public class JAXBPropertyDescriptor implements Comparable { - PropertyDescriptor descriptor; - QName xmlName = null; - int index; - - /** - * Package protected constructor. Only created by XMLRootElementUtil.createPropertyDescriptorMap - * @param descriptor - * @param index TODO - * @param propertyName - * - * @see XMLRootElementUtil.createPropertyDescriptorMap - */ - JAXBPropertyDescriptor(PropertyDescriptor descriptor, QName xmlName, int index) { - super(); - this.descriptor = descriptor; - this.xmlName = xmlName; - } - - /** - * Package protected constructor. Only created by XMLRootElementUtil.createPropertyDescriptorMap - * @param descriptor - * @param index TODO - * @param propertyName - * - * @see XMLRootElementUtil.createPropertyDescriptorMap - */ - JAXBPropertyDescriptor(PropertyDescriptor descriptor, String xmlName, int index) { - super(); - this.descriptor = descriptor; - this.xmlName = new QName("", xmlName); - } - - public int compareTo(JAXBPropertyDescriptor o) { - return index - o.index; - } - - /** @return xmlname */ - public String getXmlName() { - return xmlName.getLocalPart(); - } - - public QName getXmlQName() { - return xmlName; - } - - /** @return property type */ - public Class getPropertyType() { - return descriptor.getPropertyType(); - } - - /** @return property name */ - public String getPropertyName() { - return descriptor.getName(); - } - - /** - * Get the object - * - * @param targetBean - * @return Object for this property or null - * @throws InvocationTargetException - * @throws IllegalAccessException - */ - public Object get(Object targetBean) throws InvocationTargetException, IllegalAccessException { - Method method = descriptor.getReadMethod(); - if (method == null && descriptor.getPropertyType() == Boolean.class) { - String propertyName = descriptor.getName(); - if (propertyName != null) { - String methodName = "is"; - methodName = - methodName + ((propertyName.length() > 0) ? propertyName.substring(0, 1).toUpperCase() : ""); - methodName = methodName + ((propertyName.length() > 1) ? propertyName.substring(1) : ""); - try { - method = targetBean.getClass().getMethod(methodName); - } catch (NoSuchMethodException e) { - } - } - } - if (method == null) { - throw new ServiceRuntimeException("No getter is found"); - } - Object ret = method.invoke(targetBean); - if (method.getReturnType() == JAXBElement.class) { - ret = ((JAXBElement)ret).getValue(); - } - return ret; - } - - /** - * Set the object - * - * @param targetBean - * @param propValue - * @throws InvocationTargetException - * @throws IllegalAccessException - * @throws JAXBWrapperException - */ - public void set(Object targetBean, Object propValue) throws InvocationTargetException, IllegalAccessException, - JAXBWrapperException { - - Method writeMethod = null; - try { - // No set occurs if the value is null - if (propValue == null) { - return; - } - - // There are 3 different types of setters that can occur. - // 1) Normal Attomic Setter : setFoo(type) - // 2) Indexed Array Setter : setFoo(type[]) - // 3) No Setter case if the property is a List. - - writeMethod = descriptor.getWriteMethod(); - if (descriptor instanceof IndexedPropertyDescriptor) { - // Set for indexed T[] - setIndexedArray(targetBean, propValue, writeMethod); - } else if (writeMethod == null) { - // Set for List - setList(targetBean, propValue); - } else if (descriptor.getPropertyType() == JAXBElement.class) { - if (propValue != null) { - Class clazz = propValue.getClass(); - JAXBElement element = new JAXBElement(xmlName, clazz, propValue); - setAtomic(targetBean, element, writeMethod); - } - } else { - // Normal case - setAtomic(targetBean, propValue, writeMethod); - } - } catch (RuntimeException e) { - throw e; - } - } - - /** - * Set the property value onto targetBean using the writeMethod - * - * @param targetBean - * @param propValue - * @param writeMethod (set(T)) - * @throws InvocationTargetException - * @throws IllegalAccessException - * @throws JAXBWrapperException - */ - private void setAtomic(Object targetBean, Object propValue, Method writeMethod) throws InvocationTargetException, - IllegalAccessException, JAXBWrapperException { - // JAXB provides setters for atomic value. - - if (propValue != null) { - // Normal case - Object[] SINGLE_PARAM = new Object[1]; - SINGLE_PARAM[0] = propValue; - writeMethod.invoke(targetBean, SINGLE_PARAM); - } else { - Class[] paramTypes = writeMethod.getParameterTypes(); - - if (paramTypes != null && paramTypes.length == 1) { - Class paramType = paramTypes[0]; - if (paramType.isPrimitive() && propValue == null) { - //Ignoring null value for primitive type, this could potentially be the way of a customer indicating to set - //default values defined in JAXBObject/xmlSchema. - return; - } - } - } - - } - - /** - * Set the property value using the indexed array setter - * - * @param targetBean - * @param propValue - * @param writeMethod set(T[]) - * @throws InvocationTargetException - * @throws IllegalAccessException - * @throws JAXBWrapperException - */ - private void setIndexedArray(Object targetBean, Object propValue, Method writeMethod) - throws InvocationTargetException, IllegalAccessException, JAXBWrapperException { - - Class paramType = writeMethod.getParameterTypes()[0]; - Object value = asArray(propValue, paramType); - // JAXB provides setters for atomic value. - Object[] SINGLE_PARAM = new Object[1]; - SINGLE_PARAM[0] = value; - - writeMethod.invoke(targetBean, SINGLE_PARAM); - } - - /** - * Set the property value for the collection case. - * - * @param targetBean - * @param propValue - * @throws InvocationTargetException - * @throws IllegalAccessException - * @throws JAXBWrapperException - */ - private void setList(Object targetBean, Object propValue) throws InvocationTargetException, IllegalAccessException, - JAXBWrapperException { - // For the List case, there is no setter. - // You are supposed to use the getter to obtain access to the collection and then add the collection - - Collection value = asCollection(propValue, descriptor.getPropertyType()); - Collection collection = (Collection)get(targetBean); - - // Now add our our object to the collection - collection.clear(); - if (propValue != null) { - collection.addAll(value); - } - } - - /** - * @param propValue - * @param destType - * @return propValue as a Collection - */ - private static Collection asCollection(Object propValue, Class destType) { - // TODO Missing function - // Convert the object into an equivalent object that is a collection - if (DataConverter.isConvertable(propValue, destType)) { - return (Collection)DataConverter.convert(propValue, destType); - } else { - String objectClass = (propValue == null) ? "null" : propValue.getClass().getName(); - throw new ServiceRuntimeException("Cannot convert " + objectClass); - } - } - - /** - * @param propValue - * @param destType T[] - * @return array of component type - */ - private static Object asArray(Object propValue, Class destType) { - if (DataConverter.isConvertable(propValue, destType)) { - return DataConverter.convert(propValue, destType); - } else { - String objectClass = (propValue == null) ? "null" : propValue.getClass().getName(); - throw new ServiceRuntimeException("Cannot convert " + objectClass); - - } - } - - @Override - public String toString() { - String value = "PropertyDescriptorPlus["; - value += " name=" + this.getPropertyName(); - value += " type=" + this.getPropertyType().getName(); - value += " propertyDecriptor=" + this.descriptor; - return value + "]"; - } -} diff --git a/branches/sca-java-1.5/modules/databinding-jaxb/src/main/java/org/apache/tuscany/sca/databinding/jaxb/JAXBTypeHelper.java b/branches/sca-java-1.5/modules/databinding-jaxb/src/main/java/org/apache/tuscany/sca/databinding/jaxb/JAXBTypeHelper.java deleted file mode 100644 index a60a882801..0000000000 --- a/branches/sca-java-1.5/modules/databinding-jaxb/src/main/java/org/apache/tuscany/sca/databinding/jaxb/JAXBTypeHelper.java +++ /dev/null @@ -1,245 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -package org.apache.tuscany.sca.databinding.jaxb; - -import java.io.IOException; -import java.io.StringReader; -import java.io.StringWriter; -import java.net.URI; -import java.net.URISyntaxException; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -import javax.xml.bind.JAXBContext; -import javax.xml.bind.SchemaOutputResolver; -import javax.xml.namespace.QName; -import javax.xml.transform.Result; -import javax.xml.transform.dom.DOMResult; -import javax.xml.transform.stream.StreamResult; - -import org.apache.tuscany.sca.contribution.resolver.ModelResolver; -import org.apache.tuscany.sca.databinding.XMLTypeHelper; -import org.apache.tuscany.sca.interfacedef.DataType; -import org.apache.tuscany.sca.interfacedef.Interface; -import org.apache.tuscany.sca.interfacedef.util.JavaXMLMapper; -import org.apache.tuscany.sca.interfacedef.util.TypeInfo; -import org.apache.tuscany.sca.interfacedef.util.XMLType; -import org.apache.tuscany.sca.xsd.XSDFactory; -import org.apache.tuscany.sca.xsd.XSDefinition; -import org.apache.ws.commons.schema.resolver.URIResolver; -import org.osoa.sca.ServiceRuntimeException; -import org.w3c.dom.Document; -import org.xml.sax.InputSource; - -public class JAXBTypeHelper implements XMLTypeHelper { - private static final String SCHEMA_NS = "http://www.w3.org/2001/XMLSchema"; - private static final String ANYTYPE_NAME = "anyType"; - private static final QName ANYTYPE_QNAME = new QName(SCHEMA_NS, ANYTYPE_NAME); - - // private List> types = new ArrayList>(); - - public JAXBTypeHelper() { - super(); - } - - public TypeInfo getTypeInfo(Class javaType, Object logical) { - QName xmlType = JavaXMLMapper.getXMLType(javaType); - if (xmlType != null) { - return new TypeInfo(xmlType, true, null); - } else if (javaType.isInterface()) { - return new TypeInfo(ANYTYPE_QNAME, true, null); - } else { - // types.add(javaType); - if (logical instanceof XMLType) { - xmlType = ((XMLType)logical).getTypeName(); - } - if (xmlType == null) { - xmlType = new QName(JAXBContextHelper.jaxbDecapitalize(javaType.getSimpleName())); - } - return new TypeInfo(xmlType, false, null); - } - } - - /* - public List getSchemaDefinitions(XSDFactory factory, ModelResolver resolver) { - List definitions = new ArrayList(); - generateJAXBSchemas(definitions, factory); - return definitions; - } - */ - - public static Map generateSchema(JAXBContext context) throws IOException { - StringResolverImpl resolver = new StringResolverImpl(); - context.generateSchema(resolver); - Map xsds = new HashMap(); - for (Map.Entry xsd : resolver.getResults().entrySet()) { - xsds.put(xsd.getKey(), xsd.getValue().getWriter().toString()); - } - return xsds; - } - - private static class XSDResolver implements URIResolver { - private Map xsds; - - public XSDResolver(Map xsds) { - super(); - this.xsds = xsds; - } - - public InputSource resolveEntity(java.lang.String namespace, - java.lang.String schemaLocation, - java.lang.String baseUri) { - String xsd = xsds.get(schemaLocation); - if (xsd == null) { - return null; - } - return new InputSource(new StringReader(xsd)); - } - - } - - /* - private void generateJAXBSchemas1(List definitions, XSDFactory factory) { - if (types.size() > 0) { - try { - XmlSchemaCollection collection = new XmlSchemaCollection(); - Class[] typesArray = new Class[types.size()]; - typesArray = types.toArray(typesArray); - JAXBContext context = JAXBContextHelper.createJAXBContext(typesArray); - Map results = generateSchema(context); - collection.setSchemaResolver(new XSDResolver(results)); - - for (Map.Entry entry : results.entrySet()) { - XSDefinition definition = factory.createXSDefinition(); - int index = entry.getKey().lastIndexOf('#'); - String ns = entry.getKey().substring(0, index); - String file = entry.getKey().substring(index + 1); - definition.setUnresolved(true); - definition.setNamespace(ns); - definition.setSchema(collection.read(new StringReader(entry.getValue()), null)); - definition.setSchemaCollection(collection); - definition.setUnresolved(false); - definitions.add(definition); - } - } catch (Exception e) { - throw new RuntimeException(e); - } - } - } - */ - - private static class DOMResolverImpl extends SchemaOutputResolver { - private Map results = new HashMap(); - - @Override - public Result createOutput(String ns, String file) throws IOException { - DOMResult result = new DOMResult(); - // TUSCANY-2498: Set the system id to "" so that the xsd:import doesn't produce - // an illegal schemaLocation attr - result.setSystemId(""); - results.put(ns, result); - return result; - } - - public Map getResults() { - return results; - } - } - - /* - private void generateJAXBSchemas(List definitions, XSDFactory factory) { - if (types.size() > 0) { - try { - Class[] typesArray = new Class[types.size()]; - typesArray = types.toArray(typesArray); - JAXBContext context = JAXBContext.newInstance(typesArray); - generateSchemas(definitions, factory, context); - } catch (Exception e) { - throw new RuntimeException(e); - } - } - } - */ - - private void generateSchemas(List definitions, XSDFactory factory, JAXBContext context) - throws IOException { - DOMResolverImpl resolver = new DOMResolverImpl(); - context.generateSchema(resolver); - Map results = resolver.getResults(); - for (Map.Entry entry : results.entrySet()) { - XSDefinition definition = factory.createXSDefinition(); - definition.setUnresolved(true); - definition.setDocument((Document)entry.getValue().getNode()); - definition.setNamespace(entry.getKey()); - URI location = null; - try { - location = new URI(entry.getValue().getSystemId()); - } catch (URISyntaxException e) { - // ignore: use null value - } - definition.setLocation(location); - definitions.add(definition); - } - } - - private static class StringResolverImpl extends SchemaOutputResolver { - private Map results = new HashMap(); - - @Override - public Result createOutput(String ns, String file) throws IOException { - StringWriter sw = new StringWriter(); - StreamResult result = new StreamResult(sw); - String sysId = ns + '#' + file; - result.setSystemId(sysId); - results.put(sysId, result); - return result; - } - - public Map getResults() { - return results; - } - } - - public List getSchemaDefinitions(XSDFactory factory, ModelResolver resolver, Interface intf) { - try { - JAXBContext context = JAXBContextHelper.createJAXBContext(intf, false); - List definitions = new ArrayList(); - generateSchemas(definitions, factory, context); - return definitions; - } catch (Throwable e) { - throw new ServiceRuntimeException(e); - } - } - - public List getSchemaDefinitions(XSDFactory factory, ModelResolver resolver, List dataTypes) { - try { - - JAXBContext context = JAXBContextHelper.createJAXBContext(dataTypes); - List definitions = new ArrayList(); - generateSchemas(definitions, factory, context); - return definitions; - } catch (Throwable e) { - throw new ServiceRuntimeException(e); - } - } - -} diff --git a/branches/sca-java-1.5/modules/databinding-jaxb/src/main/java/org/apache/tuscany/sca/databinding/jaxb/JAXBWrapperException.java b/branches/sca-java-1.5/modules/databinding-jaxb/src/main/java/org/apache/tuscany/sca/databinding/jaxb/JAXBWrapperException.java deleted file mode 100644 index f83c7f09d9..0000000000 --- a/branches/sca-java-1.5/modules/databinding-jaxb/src/main/java/org/apache/tuscany/sca/databinding/jaxb/JAXBWrapperException.java +++ /dev/null @@ -1,56 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -package org.apache.tuscany.sca.databinding.jaxb; - -import org.osoa.sca.ServiceRuntimeException; - -public class JAXBWrapperException extends ServiceRuntimeException { - private static final long serialVersionUID = 1L; - - /** - * - */ - public JAXBWrapperException() { - super(); - - } - - /** - * @param message - * @param cause - */ - public JAXBWrapperException(String message, Throwable cause) { - super(message, cause); - - } - - /** @param message */ - public JAXBWrapperException(String message) { - super(message); - - } - - /** @param cause */ - public JAXBWrapperException(Throwable cause) { - super(cause); - - } - -} diff --git a/branches/sca-java-1.5/modules/databinding-jaxb/src/main/java/org/apache/tuscany/sca/databinding/jaxb/JAXBWrapperHandler.java b/branches/sca-java-1.5/modules/databinding-jaxb/src/main/java/org/apache/tuscany/sca/databinding/jaxb/JAXBWrapperHandler.java deleted file mode 100644 index 9cb781a3e1..0000000000 --- a/branches/sca-java-1.5/modules/databinding-jaxb/src/main/java/org/apache/tuscany/sca/databinding/jaxb/JAXBWrapperHandler.java +++ /dev/null @@ -1,153 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -package org.apache.tuscany.sca.databinding.jaxb; - -import java.lang.reflect.Method; -import java.security.AccessController; -import java.security.PrivilegedActionException; -import java.security.PrivilegedExceptionAction; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.Collection; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -import org.apache.tuscany.sca.databinding.TransformationException; -import org.apache.tuscany.sca.databinding.WrapperHandler; -import org.apache.tuscany.sca.interfacedef.DataType; -import org.apache.tuscany.sca.interfacedef.Operation; -import org.apache.tuscany.sca.interfacedef.util.ElementInfo; -import org.apache.tuscany.sca.interfacedef.util.WrapperInfo; - -/** - * JAXB WrapperHandler implementation - * - * @version $Rev$ $Date$ - */ -public class JAXBWrapperHandler implements WrapperHandler { - private JAXBWrapperHelper helper = new JAXBWrapperHelper(); - - public Object create(Operation operation, boolean input) { - WrapperInfo inputWrapperInfo = operation.getInputWrapper(); - WrapperInfo outputWrapperInfo = operation.getOutputWrapper(); - ElementInfo element = input ? inputWrapperInfo.getWrapperElement() : outputWrapperInfo.getWrapperElement(); - final Class wrapperClass = input ? inputWrapperInfo.getWrapperClass() : outputWrapperInfo.getWrapperClass(); - try { - if (wrapperClass == null) { - return null; - } - return AccessController.doPrivileged(new PrivilegedExceptionAction() { - public Object run() throws Exception { - return wrapperClass.newInstance(); - } - }); - } catch (PrivilegedActionException e) { - throw new TransformationException(e); - } - } - - public void setChildren(Object wrapper, Object[] childObjects, Operation operation, boolean input) { - List childElements = - input ? operation.getInputWrapper().getChildElements() : operation.getOutputWrapper().getChildElements(); - List childNames = new ArrayList(); - Map values = new HashMap(); - for (int i = 0; i < childElements.size(); i++) { - ElementInfo e = childElements.get(i); - String name = e.getQName().getLocalPart(); - childNames.add(name); - values.put(name, childObjects[i]); - } - // Get the property descriptor map - Map pdMap = null; - try { - pdMap = XMLRootElementUtil.createPropertyDescriptorMap(wrapper.getClass()); - } catch (Throwable t) { - throw new JAXBWrapperException(t); - } - helper.wrap(wrapper, childNames, values, pdMap); - } - - public void setChild(Object wrapper, int i, ElementInfo childElement, Object value) { - Object wrapperValue = wrapper; - Class wrapperClass = wrapperValue.getClass(); - - // FIXME: We probably should use the jaxb-reflection to handle the properties - try { - String prop = childElement.getQName().getLocalPart(); - boolean collection = (value instanceof Collection); - Method getter = null; - for (Method m : wrapperClass.getMethods()) { - Class[] paramTypes = m.getParameterTypes(); - if (paramTypes.length == 1 && m.getName().equals("set" + capitalize(prop))) { - m.invoke(wrapperValue, new Object[] {value}); - return; - } - if (collection && paramTypes.length == 0 && m.getName().equals("get" + capitalize(prop))) { - getter = m; - } - } - if (getter != null && Collection.class.isAssignableFrom(getter.getReturnType())) { - ((Collection)getter.invoke(wrapperValue)).addAll((Collection)value); - } - - } catch (Throwable e) { - throw new TransformationException(e); - } - } - - private static String capitalize(String name) { - char first = Character.toUpperCase(name.charAt(0)); - return first + name.substring(1); - } - - /** - * @see org.apache.tuscany.sca.databinding.WrapperHandler#getChildren(java.lang.Object, Operation, boolean) - */ - public List getChildren(Object wrapper, Operation operation, boolean input) { - List childElements = input? operation.getInputWrapper().getChildElements(): - operation.getOutputWrapper().getChildElements(); - - List childNames = new ArrayList(); - for (ElementInfo e : childElements) { - childNames.add(e.getQName().getLocalPart()); - } - return Arrays.asList(helper.unwrap(wrapper, childNames)); - } - - /** - * @see org.apache.tuscany.sca.databinding.WrapperHandler#getWrapperType(Operation, boolean) - */ - public DataType getWrapperType(Operation operation, boolean input) { - WrapperInfo inputWrapperInfo = operation.getInputWrapper(); - WrapperInfo outputWrapperInfo = operation.getOutputWrapper(); - DataType dt = input ? inputWrapperInfo.getWrapperType() : outputWrapperInfo.getWrapperType(); - return dt; - } - - /** - * @see org.apache.tuscany.sca.databinding.WrapperHandler#isInstance(java.lang.Object, Operation, boolean) - */ - public boolean isInstance(Object wrapper, Operation operation, boolean input) { - Class wrapperClass = - input ? operation.getInputWrapper().getWrapperClass() : operation.getOutputWrapper().getWrapperClass(); - return wrapperClass == null ? false : wrapperClass.isInstance(wrapper); - } -} diff --git a/branches/sca-java-1.5/modules/databinding-jaxb/src/main/java/org/apache/tuscany/sca/databinding/jaxb/JAXBWrapperHelper.java b/branches/sca-java-1.5/modules/databinding-jaxb/src/main/java/org/apache/tuscany/sca/databinding/jaxb/JAXBWrapperHelper.java deleted file mode 100644 index 5f90aa4d7a..0000000000 --- a/branches/sca-java-1.5/modules/databinding-jaxb/src/main/java/org/apache/tuscany/sca/databinding/jaxb/JAXBWrapperHelper.java +++ /dev/null @@ -1,166 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -package org.apache.tuscany.sca.databinding.jaxb; - -import java.util.ArrayList; -import java.util.Collections; -import java.util.List; -import java.util.Map; - -/** - * The JAXBWrapper tool is used to create a JAXB Object from a series of child objects (wrap) or get - * the child objects from a JAXB Object (unwrap) - */ -public class JAXBWrapperHelper { - - /** - * unwrap Returns the list of child objects of the jaxb object - * - * @param jaxbObject that represents the type - * @param childNames list of xml child names as String - * @param pdMap PropertyDescriptor map for this jaxbObject - * @return list of Objects in the same order as the element names. - */ - public Object[] unwrap(Object jaxbObject, List childNames, Map pdMap) - throws JAXBWrapperException { - - // Get the object that will have the property descriptors (i.e. the object representing the complexType) - Object jaxbComplexTypeObj = jaxbObject; - - // Get the PropertyDescriptorPlus map. - // The method makes sure that each child name has a matching jaxb property - // checkPropertyDescriptorMap(jaxbComplexTypeObj.getClass(), childNames, pdMap); - - // Get the corresponsing objects from the jaxb bean - ArrayList objList = new ArrayList(); - int index = 0; - for (String childName : childNames) { - JAXBPropertyDescriptor propInfo = getPropertyDescriptor(pdMap, childName, index); - - Object object = null; - try { - object = propInfo.get(jaxbComplexTypeObj); - } catch (Throwable e) { - throw new JAXBWrapperException(e); - } - - objList.add(object); - index++; - } - Object[] jaxbObjects = objList.toArray(); - objList = null; - return jaxbObjects; - - } - - private JAXBPropertyDescriptor getPropertyDescriptor(Map pdMap, - String childName, - int index) { - JAXBPropertyDescriptor propInfo = pdMap.get(childName); - if (propInfo == null) { - // FIXME: [rfeng] Sometimes the child element names don't match. Get chilld by location? - List props = new ArrayList(pdMap.values()); - // Sort the properties by index. We might need to take propOrder into consideration - Collections.sort(props); - propInfo = props.get(index); - } - return propInfo; - } - - /** - * wrap Creates a jaxb object that is initialized with the child objects. - *

- * Note that the jaxbClass must be the class the represents the complexType. (It should never be - * JAXBElement) - * - * @param jaxbClass - * @param childNames list of xml child names as String - * @param childObjects, component type objects - * @param pdMap PropertyDescriptor map for this jaxbObject - */ - public Object wrap(Class jaxbClass, - List childNames, - Map childObjects, - Map pdMap) throws JAXBWrapperException { - - // Just like unWrap, get the property info map - // checkPropertyDescriptorMap(jaxbClass, childNames, pdMap); - - // The jaxb object always has a default constructor. Create the object - Object jaxbObject = null; - try { - jaxbObject = jaxbClass.newInstance(); - } catch (Throwable t) { - throw new JAXBWrapperException(t); - } - - wrap(jaxbObject, childNames, childObjects, pdMap); - - // Return the jaxb object - return jaxbObject; - } - - public void wrap(Object jaxbObject, - List childNames, - Map childObjects, - Map pdMap) { - // Now set each object onto the jaxb object - int index = 0; - for (String childName : childNames) { - JAXBPropertyDescriptor propInfo = getPropertyDescriptor(pdMap, childName, index); - Object value = childObjects.get(childName); - try { - propInfo.set(jaxbObject, value); - } catch (Throwable t) { - throw new JAXBWrapperException(t); - } - index++; - } - } - - public Object[] unwrap(Object jaxbObject, List childNames) throws JAXBWrapperException { - // Get the property descriptor map for this JAXBClass - Class jaxbClass = jaxbObject.getClass(); - Map pdMap = null; - try { - pdMap = XMLRootElementUtil.createPropertyDescriptorMap(jaxbClass); - } catch (Throwable t) { - throw new JAXBWrapperException(t); - } - - // Delegate - return unwrap(jaxbObject, childNames, pdMap); - } - - public Object wrap(Class jaxbClass, List childNames, Map childObjects) - throws JAXBWrapperException { - // Get the property descriptor map - Map pdMap = null; - try { - pdMap = XMLRootElementUtil.createPropertyDescriptorMap(jaxbClass); - } catch (Throwable t) { - throw new JAXBWrapperException(t); - } - - // Delegate - return wrap(jaxbClass, childNames, childObjects, pdMap); - } - -} diff --git a/branches/sca-java-1.5/modules/databinding-jaxb/src/main/java/org/apache/tuscany/sca/databinding/jaxb/Node2JAXB.java b/branches/sca-java-1.5/modules/databinding-jaxb/src/main/java/org/apache/tuscany/sca/databinding/jaxb/Node2JAXB.java deleted file mode 100644 index e375a9b85e..0000000000 --- a/branches/sca-java-1.5/modules/databinding-jaxb/src/main/java/org/apache/tuscany/sca/databinding/jaxb/Node2JAXB.java +++ /dev/null @@ -1,73 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ -package org.apache.tuscany.sca.databinding.jaxb; - -import javax.xml.bind.JAXBContext; -import javax.xml.bind.Unmarshaller; - -import org.apache.tuscany.sca.databinding.PullTransformer; -import org.apache.tuscany.sca.databinding.TransformationContext; -import org.apache.tuscany.sca.databinding.TransformationException; -import org.apache.tuscany.sca.databinding.impl.BaseTransformer; -import org.w3c.dom.Node; - -/** - * - * @version $Rev$ $Date$ - */ -public class Node2JAXB extends BaseTransformer implements PullTransformer { - - public Node2JAXB() { - super(); - } - - public Object transform(Node source, TransformationContext context) { - if (source == null) - return null; - try { - JAXBContext jaxbContext = JAXBContextHelper.createJAXBContext(context, false); - Unmarshaller unmarshaller = jaxbContext.createUnmarshaller(); - Object result = unmarshaller.unmarshal(source, JAXBContextHelper.getJavaType(context.getTargetDataType())); - return JAXBContextHelper.createReturnValue(jaxbContext, context.getTargetDataType(), result); - } catch (Exception e) { - throw new TransformationException(e); - } - } - - @Override - protected Class getSourceType() { - return Node.class; - } - - @Override - protected Class getTargetType() { - return Object.class; - } - - @Override - public int getWeight() { - return 30; - } - - @Override - public String getTargetDataBinding() { - return JAXBDataBinding.NAME; - } - -} diff --git a/branches/sca-java-1.5/modules/databinding-jaxb/src/main/java/org/apache/tuscany/sca/databinding/jaxb/Reader2JAXB.java b/branches/sca-java-1.5/modules/databinding-jaxb/src/main/java/org/apache/tuscany/sca/databinding/jaxb/Reader2JAXB.java deleted file mode 100644 index 840edfd234..0000000000 --- a/branches/sca-java-1.5/modules/databinding-jaxb/src/main/java/org/apache/tuscany/sca/databinding/jaxb/Reader2JAXB.java +++ /dev/null @@ -1,74 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ -package org.apache.tuscany.sca.databinding.jaxb; - -import java.io.Reader; - -import javax.xml.bind.JAXBContext; -import javax.xml.bind.Unmarshaller; -import javax.xml.transform.stream.StreamSource; - -import org.apache.tuscany.sca.databinding.PullTransformer; -import org.apache.tuscany.sca.databinding.TransformationContext; -import org.apache.tuscany.sca.databinding.TransformationException; -import org.apache.tuscany.sca.databinding.impl.BaseTransformer; - -/** - * - * @version $Rev$ $Date$ - */ -public class Reader2JAXB extends BaseTransformer implements - PullTransformer { - - public Object transform(final Reader source, final TransformationContext context) { - if (source == null) { - return null; - } - try { - JAXBContext jaxbContext = JAXBContextHelper.createJAXBContext(context, false); - Unmarshaller unmarshaller = jaxbContext.createUnmarshaller(); - StreamSource streamSource = new StreamSource(source); - Object result = unmarshaller.unmarshal(streamSource, JAXBContextHelper.getJavaType(context.getTargetDataType())); - return JAXBContextHelper.createReturnValue(jaxbContext, context.getTargetDataType(), result); - } catch (Exception e) { - throw new TransformationException(e); - } - } - - @Override - protected Class getSourceType() { - return Reader.class; - } - - @Override - protected Class getTargetType() { - return Object.class; - } - - @Override - public int getWeight() { - return 30; - } - - @Override - public String getTargetDataBinding() { - return JAXBDataBinding.NAME; - } - -} diff --git a/branches/sca-java-1.5/modules/databinding-jaxb/src/main/java/org/apache/tuscany/sca/databinding/jaxb/String2JAXB.java b/branches/sca-java-1.5/modules/databinding-jaxb/src/main/java/org/apache/tuscany/sca/databinding/jaxb/String2JAXB.java deleted file mode 100644 index 5559690de8..0000000000 --- a/branches/sca-java-1.5/modules/databinding-jaxb/src/main/java/org/apache/tuscany/sca/databinding/jaxb/String2JAXB.java +++ /dev/null @@ -1,80 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ -package org.apache.tuscany.sca.databinding.jaxb; - -import java.io.StringReader; - -import javax.xml.bind.JAXBContext; -import javax.xml.bind.Unmarshaller; -import javax.xml.transform.stream.StreamSource; - -import org.apache.tuscany.sca.databinding.PullTransformer; -import org.apache.tuscany.sca.databinding.TransformationContext; -import org.apache.tuscany.sca.databinding.TransformationException; -import org.apache.tuscany.sca.databinding.impl.BaseTransformer; -import org.apache.tuscany.sca.databinding.xml.XMLStringDataBinding; - -/** - * - * @version $Rev$ $Date$ - */ -public class String2JAXB extends BaseTransformer implements - PullTransformer { - - public Object transform(final String source, final TransformationContext context) { - if (source == null) { - return null; - } - try { - JAXBContext jaxbContext = JAXBContextHelper.createJAXBContext(context, false); - Unmarshaller unmarshaller = jaxbContext.createUnmarshaller(); - StreamSource streamSource = new StreamSource(new StringReader(source)); - Object result = unmarshaller.unmarshal(streamSource, JAXBContextHelper.getJavaType(context.getTargetDataType())); - return JAXBContextHelper.createReturnValue(jaxbContext, context.getTargetDataType(), result); - } catch (Exception e) { - throw new TransformationException(e); - } - } - - @Override - protected Class getSourceType() { - return String.class; - } - - @Override - protected Class getTargetType() { - return Object.class; - } - - @Override - public int getWeight() { - return 30; - } - - @Override - public String getSourceDataBinding() { - return XMLStringDataBinding.NAME; - } - - @Override - public String getTargetDataBinding() { - return JAXBDataBinding.NAME; - } - -} diff --git a/branches/sca-java-1.5/modules/databinding-jaxb/src/main/java/org/apache/tuscany/sca/databinding/jaxb/XMLAdapterExtensionPoint.java b/branches/sca-java-1.5/modules/databinding-jaxb/src/main/java/org/apache/tuscany/sca/databinding/jaxb/XMLAdapterExtensionPoint.java deleted file mode 100644 index 5fa98b5ed1..0000000000 --- a/branches/sca-java-1.5/modules/databinding-jaxb/src/main/java/org/apache/tuscany/sca/databinding/jaxb/XMLAdapterExtensionPoint.java +++ /dev/null @@ -1,52 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -package org.apache.tuscany.sca.databinding.jaxb; - -import java.util.Map; - -import javax.xml.bind.annotation.adapters.XmlAdapter; - -/** - * @version $Rev$ $Date$ - */ -public interface XMLAdapterExtensionPoint { - /** - * @param boundType - * @param adapter - */ - void addAdapter(Class boundType, Class adapter); - - /** - * @param boundType - * @return - */ - Class getAdapter(Class boundType); - - /** - * @param boundType - * @return - */ - Class removeAdapter(Class boundType); - - /** - * @return - */ - Map, Class> getAdapters(); -} diff --git a/branches/sca-java-1.5/modules/databinding-jaxb/src/main/java/org/apache/tuscany/sca/databinding/jaxb/XMLRootElementUtil.java b/branches/sca-java-1.5/modules/databinding-jaxb/src/main/java/org/apache/tuscany/sca/databinding/jaxb/XMLRootElementUtil.java deleted file mode 100644 index ad4bd04084..0000000000 --- a/branches/sca-java-1.5/modules/databinding-jaxb/src/main/java/org/apache/tuscany/sca/databinding/jaxb/XMLRootElementUtil.java +++ /dev/null @@ -1,286 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -package org.apache.tuscany.sca.databinding.jaxb; - -import java.beans.IntrospectionException; -import java.beans.Introspector; -import java.beans.PropertyDescriptor; -import java.lang.annotation.Annotation; -import java.lang.reflect.AnnotatedElement; -import java.lang.reflect.Field; -import java.security.AccessController; -import java.security.PrivilegedAction; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.StringTokenizer; - -import javax.xml.bind.JAXBElement; -import javax.xml.bind.annotation.XmlElement; -import javax.xml.bind.annotation.XmlElementRef; -import javax.xml.bind.annotation.XmlEnumValue; -import javax.xml.bind.annotation.XmlRootElement; -import javax.xml.bind.annotation.XmlSchema; -import javax.xml.namespace.QName; - -/** - * - */ -public class XMLRootElementUtil { - - /** Constructor is intentionally private. This class only provides static utility methods */ - private XMLRootElementUtil() { - - } - - /** - * @param clazz - * @return namespace of root element qname or null if this is not object does not represent a - * root element - */ - public static QName getXmlRootElementQNameFromObject(Object obj) { - - // A JAXBElement stores its name - if (obj instanceof JAXBElement) { - return ((JAXBElement)obj).getName(); - } - - Class clazz = (obj instanceof java.lang.Class) ? (Class)obj : obj.getClass(); - return getXmlRootElementQName(clazz); - } - - /** - * @param clazz - * @return namespace of root element qname or null if this is not object does not represent a - * root element - */ - public static QName getXmlRootElementQName(Class clazz) { - - // See if the object represents a root element - XmlRootElement root = (XmlRootElement)getAnnotation(clazz, XmlRootElement.class); - if (root == null) { - return null; - } - - String name = root.name(); - String namespace = root.namespace(); - - // The name may need to be defaulted - if (name == null || name.length() == 0 || name.equals("##default")) { - name = getSimpleName(clazz.getCanonicalName()); - } - - // The namespace may need to be defaulted - if (namespace == null || namespace.length() == 0 || namespace.equals("##default")) { - Package pkg = clazz.getPackage(); - XmlSchema schema = (XmlSchema)getAnnotation(pkg, XmlSchema.class); - if (schema != null) { - namespace = schema.namespace(); - } else { - namespace = ""; - } - } - - return new QName(namespace, name); - } - - /** - * @param clazz - * @return namespace of root element qname or null if this is not object does not represent a root element - */ - public static String getEnumValue(Enum myEnum) { - Field f; - String value; - try { - f = myEnum.getClass().getField(myEnum.name()); - - f.setAccessible(true); - - XmlEnumValue xev = (XmlEnumValue)getAnnotation(f, XmlEnumValue.class); - if (xev == null) { - value = f.getName(); - } else { - value = xev.value(); - } - } catch (SecurityException e) { - value = null; - } catch (NoSuchFieldException e) { - value = null; - } - - return value; - } - - /** - * utility method to get the last token in a "."-delimited package+classname string - * - * @return - */ - private static String getSimpleName(String in) { - if (in == null || in.length() == 0) { - return in; - } - String out = null; - StringTokenizer tokenizer = new StringTokenizer(in, "."); - if (tokenizer.countTokens() == 0) - out = in; - else { - while (tokenizer.hasMoreTokens()) { - out = tokenizer.nextToken(); - } - } - return out; - } - - /** - * The JAXBClass has a set of bean properties each represented by a PropertyDescriptor Each of - * the fields of the class has an associated xml name. The method returns a map where the key is - * the xml name and value is the PropertyDescriptor - * - * @param jaxbClass - * @return map - */ - public static Map createPropertyDescriptorMap(Class jaxbClass) - throws NoSuchFieldException, IntrospectionException { - - PropertyDescriptor[] pds = Introspector.getBeanInfo(jaxbClass).getPropertyDescriptors(); - Map map = new HashMap(); - - // Unfortunately the element names are stored on the fields. - // Get all of the fields in the class and super classes - - List fields = getFields(jaxbClass); - - // Now match up the fields with the property descriptors...Sigh why didn't JAXB put the @XMLElement annotations on the - // property methods! - for (PropertyDescriptor pd : pds) { - - // Skip over the class property..it is never represented as an xml element - if (pd.getName().equals("class")) { - continue; - } - - // For the current property, find a matching field...so that we can get the xml name - boolean found = false; - - int index = 0; - for (Field field : fields) { - String fieldName = field.getName(); - - // Use the name of the field and property to find the match - if (fieldName.equalsIgnoreCase(pd.getDisplayName()) || fieldName.equalsIgnoreCase(pd.getName())) { - // Get the xmlElement name for this field - QName xmlName = getXmlElementRefOrElementQName(field.getDeclaringClass(), field); - found = true; - map.put(xmlName.getLocalPart(), new JAXBPropertyDescriptor(pd, xmlName, index)); - index++; - break; - } - - // Unfortunately, sometimes the field name is preceeded by an underscore - if (fieldName.startsWith("_")) { - fieldName = fieldName.substring(1); - if (fieldName.equalsIgnoreCase(pd.getDisplayName()) || fieldName.equalsIgnoreCase(pd.getName())) { - // Get the xmlElement name for this field - QName xmlName = getXmlElementRefOrElementQName(field.getDeclaringClass(), field); - found = true; - - map.put(xmlName.getLocalPart(), new JAXBPropertyDescriptor(pd, xmlName, index)); - index++; - break; - } - } - } - - // We didn't find a field. Default the xmlname to the property name - if (!found) { - String xmlName = pd.getName(); - - map.put(xmlName, new JAXBPropertyDescriptor(pd, xmlName, index)); - index++; - } - - } - return map; - } - - /** - * Gets all of the fields in this class and the super classes - * - * @param beanClass - * @return - */ - static private List getFields(final Class beanClass) { - // This class must remain private due to Java 2 Security concerns - List fields = AccessController.doPrivileged(new PrivilegedAction>() { - public List run() { - List fields = new ArrayList(); - Class cls = beanClass; - while (cls != null) { - Field[] fieldArray = cls.getDeclaredFields(); - for (Field field : fieldArray) { - fields.add(field); - } - cls = cls.getSuperclass(); - } - return fields; - } - }); - - return fields; - } - - /** - * Get the name of the field by looking at the XmlElement annotation. - * - * @param jaxbClass - * @param fieldName - * @return - * @throws NoSuchFieldException - */ - private static QName getXmlElementRefOrElementQName(Class jaxbClass, Field field) throws NoSuchFieldException { - XmlElementRef xmlElementRef = (XmlElementRef)getAnnotation(field, XmlElementRef.class); - if (xmlElementRef != null) { - return new QName(xmlElementRef.namespace(), xmlElementRef.name()); - } - XmlElement xmlElement = (XmlElement)getAnnotation(field, XmlElement.class); - - // If XmlElement does not exist, default to using the field name - if (xmlElement == null || xmlElement.name().equals("##default")) { - return new QName("", field.getName()); - } - return new QName(xmlElement.namespace(), xmlElement.name()); - } - - /** - * Get an annotation. This is wrappered to avoid a Java2Security violation. - * @param cls Class that contains annotation - * @param annotation Class of requrested Annotation - * @return annotation or null - */ - private static T getAnnotation(final AnnotatedElement element, final Class annotation) { - return AccessController.doPrivileged(new PrivilegedAction() { - public T run() { - return element.getAnnotation(annotation); - } - }); - } -} diff --git a/branches/sca-java-1.5/modules/databinding-jaxb/src/main/java/org/apache/tuscany/sca/databinding/jaxb/XMLStreamReader2JAXB.java b/branches/sca-java-1.5/modules/databinding-jaxb/src/main/java/org/apache/tuscany/sca/databinding/jaxb/XMLStreamReader2JAXB.java deleted file mode 100644 index af3fa3fb66..0000000000 --- a/branches/sca-java-1.5/modules/databinding-jaxb/src/main/java/org/apache/tuscany/sca/databinding/jaxb/XMLStreamReader2JAXB.java +++ /dev/null @@ -1,77 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ -package org.apache.tuscany.sca.databinding.jaxb; - -import javax.xml.bind.JAXBContext; -import javax.xml.bind.Unmarshaller; -import javax.xml.stream.XMLStreamReader; - -import org.apache.tuscany.sca.databinding.PullTransformer; -import org.apache.tuscany.sca.databinding.TransformationContext; -import org.apache.tuscany.sca.databinding.TransformationException; -import org.apache.tuscany.sca.databinding.impl.BaseTransformer; - -/** - * - * @version $Rev$ $Date$ - */ -public class XMLStreamReader2JAXB extends BaseTransformer implements - PullTransformer { - - public XMLStreamReader2JAXB() { - super(); - } - - public Object transform(XMLStreamReader source, TransformationContext context) { - if (source == null) { - return null; - } - try { - JAXBContext jaxbContext = JAXBContextHelper.createJAXBContext(context, false); - Unmarshaller unmarshaller = jaxbContext.createUnmarshaller(); - // FIXME: [rfeng] If the java type is Object.class, the unmarshalled result will be - // a DOM Node - Object result = unmarshaller.unmarshal(source, JAXBContextHelper.getJavaType(context.getTargetDataType())); - source.close(); - return JAXBContextHelper.createReturnValue(jaxbContext, context.getTargetDataType(), result); - } catch (Exception e) { - throw new TransformationException(e); - } - } - - @Override - public Class getSourceType() { - return XMLStreamReader.class; - } - - @Override - public Class getTargetType() { - return Object.class; - } - - @Override - public int getWeight() { - return 10; - } - - @Override - public String getTargetDataBinding() { - return JAXBDataBinding.NAME; - } -} diff --git a/branches/sca-java-1.5/modules/databinding-jaxb/src/main/resources/META-INF/services/org.apache.tuscany.sca.databinding.DataBinding b/branches/sca-java-1.5/modules/databinding-jaxb/src/main/resources/META-INF/services/org.apache.tuscany.sca.databinding.DataBinding deleted file mode 100644 index 3f2978ad25..0000000000 --- a/branches/sca-java-1.5/modules/databinding-jaxb/src/main/resources/META-INF/services/org.apache.tuscany.sca.databinding.DataBinding +++ /dev/null @@ -1,19 +0,0 @@ -# Licensed to the Apache Software Foundation (ASF) under one -# or more contributor license agreements. See the NOTICE file -# distributed with this work for additional information -# regarding copyright ownership. The ASF licenses this file -# to you under the Apache License, Version 2.0 (the -# "License"); you may not use this file except in compliance -# with the License. You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, -# software distributed under the License is distributed on an -# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY -# KIND, either express or implied. See the License for the -# specific language governing permissions and limitations -# under the License. - -# implementation classes for the databindings -org.apache.tuscany.sca.databinding.jaxb.JAXBDataBinding;name=javax.xml.bind.JAXBElement diff --git a/branches/sca-java-1.5/modules/databinding-jaxb/src/main/resources/META-INF/services/org.apache.tuscany.sca.databinding.PullTransformer b/branches/sca-java-1.5/modules/databinding-jaxb/src/main/resources/META-INF/services/org.apache.tuscany.sca.databinding.PullTransformer deleted file mode 100644 index 4e062e4c22..0000000000 --- a/branches/sca-java-1.5/modules/databinding-jaxb/src/main/resources/META-INF/services/org.apache.tuscany.sca.databinding.PullTransformer +++ /dev/null @@ -1,32 +0,0 @@ -# Licensed to the Apache Software Foundation (ASF) under one -# or more contributor license agreements. See the NOTICE file -# distributed with this work for additional information -# regarding copyright ownership. The ASF licenses this file -# to you under the Apache License, Version 2.0 (the -# "License"); you may not use this file except in compliance -# with the License. You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, -# software distributed under the License is distributed on an -# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY -# KIND, either express or implied. See the License for the -# specific language governing permissions and limitations -# under the License. - -# Implementation classes for the transformers -org.apache.tuscany.sca.databinding.jaxb.JAXB2Node;source=javax.xml.bind.JAXBElement,target=org.w3c.dom.Node,weight=500 -org.apache.tuscany.sca.databinding.jaxb.Node2JAXB;source=org.w3c.dom.Node,target=javax.xml.bind.JAXBElement,weight=500 -org.apache.tuscany.sca.databinding.jaxb.Reader2JAXB;source=java.io.Reader,target=javax.xml.bind.JAXBElement,weight=510 -org.apache.tuscany.sca.databinding.jaxb.XMLStreamReader2JAXB;source=javax.xml.stream.XMLStreamReader,target=javax.xml.bind.JAXBElement,weight=490 - -org.apache.tuscany.sca.databinding.jaxb.JAXB2Node;source=java:complexType,target=org.w3c.dom.Node,weight=90000 -org.apache.tuscany.sca.databinding.jaxb.Node2JAXB;source=org.w3c.dom.Node,target=java:complexType,weight=90000 - -org.apache.tuscany.sca.databinding.jaxb.Node2JAXB;source=org.w3c.dom.Node,target=java:simpleType,weight=90000 -org.apache.tuscany.sca.databinding.jaxb.JAXB2Node;source=java:simpleType,target=org.w3c.dom.Node,weight=90000 - -org.apache.tuscany.sca.databinding.jaxb.XMLStreamReader2JAXB;source=javax.xml.stream.XMLStreamReader,target=java:complexType,weight=90000 -org.apache.tuscany.sca.databinding.jaxb.XMLStreamReader2JAXB;source=javax.xml.stream.XMLStreamReader,target=java:simpleType,weight=90000 - diff --git a/branches/sca-java-1.5/modules/databinding-jaxb/src/main/resources/META-INF/services/org.apache.tuscany.sca.databinding.jaxb.XMLAdapterExtensionPoint b/branches/sca-java-1.5/modules/databinding-jaxb/src/main/resources/META-INF/services/org.apache.tuscany.sca.databinding.jaxb.XMLAdapterExtensionPoint deleted file mode 100644 index d1f6d9f1e3..0000000000 --- a/branches/sca-java-1.5/modules/databinding-jaxb/src/main/resources/META-INF/services/org.apache.tuscany.sca.databinding.jaxb.XMLAdapterExtensionPoint +++ /dev/null @@ -1,17 +0,0 @@ -# Licensed to the Apache Software Foundation (ASF) under one -# or more contributor license agreements. See the NOTICE file -# distributed with this work for additional information -# regarding copyright ownership. The ASF licenses this file -# to you under the Apache License, Version 2.0 (the -# "License"); you may not use this file except in compliance -# with the License. You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, -# software distributed under the License is distributed on an -# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY -# KIND, either express or implied. See the License for the -# specific language governing permissions and limitations -# under the License. -org.apache.tuscany.sca.databinding.jaxb.DefaultXMLAdapterExtensionPoint \ No newline at end of file diff --git a/branches/sca-java-1.5/modules/databinding-jaxb/src/test/java/com/example/stock/StockQuoteOffer.java b/branches/sca-java-1.5/modules/databinding-jaxb/src/test/java/com/example/stock/StockQuoteOffer.java deleted file mode 100644 index 5c5c892f33..0000000000 --- a/branches/sca-java-1.5/modules/databinding-jaxb/src/test/java/com/example/stock/StockQuoteOffer.java +++ /dev/null @@ -1,45 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ -package com.example.stock; - -import javax.xml.bind.annotation.XmlAccessType; -import javax.xml.bind.annotation.XmlAccessorType; -import javax.xml.bind.annotation.XmlRootElement; -import javax.xml.bind.annotation.XmlType; - -/** - *

Java class for anonymous complex type. - * - */ -@XmlAccessorType(XmlAccessType.FIELD) -@XmlType(name = "", propOrder = {"input"}) -@XmlRootElement(name = "stockQuoteOffer") -public class StockQuoteOffer { - - protected String input; - - public String getInput() { - return this.input; - } - - public void setInput(String input) { - this.input = input; - } - -} diff --git a/branches/sca-java-1.5/modules/databinding-jaxb/src/test/java/org/apache/tuscany/sca/databinding/jaxb/BeanXMLStreamReaderImpl.java b/branches/sca-java-1.5/modules/databinding-jaxb/src/test/java/org/apache/tuscany/sca/databinding/jaxb/BeanXMLStreamReaderImpl.java deleted file mode 100644 index 602bc66569..0000000000 --- a/branches/sca-java-1.5/modules/databinding-jaxb/src/test/java/org/apache/tuscany/sca/databinding/jaxb/BeanXMLStreamReaderImpl.java +++ /dev/null @@ -1,324 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -package org.apache.tuscany.sca.databinding.jaxb; - -import java.lang.reflect.Array; -import java.lang.reflect.ParameterizedType; -import java.lang.reflect.Type; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.Collection; -import java.util.Collections; -import java.util.Comparator; -import java.util.HashMap; -import java.util.Iterator; -import java.util.List; -import java.util.Map; -import java.util.Map.Entry; - -import javax.xml.namespace.QName; - -import org.apache.tuscany.sca.databinding.impl.SimpleTypeMapperImpl; -import org.apache.tuscany.sca.databinding.xml.SimpleXmlNodeImpl; -import org.apache.tuscany.sca.databinding.xml.XmlNode; -import org.apache.tuscany.sca.databinding.xml.XmlTreeStreamReaderImpl; -import org.apache.tuscany.sca.interfacedef.util.TypeInfo; -import org.jvnet.jaxb.reflection.model.annotation.RuntimeInlineAnnotationReader; -import org.jvnet.jaxb.reflection.model.core.Ref; -import org.jvnet.jaxb.reflection.model.impl.RuntimeModelBuilder; -import org.jvnet.jaxb.reflection.model.runtime.RuntimeClassInfo; -import org.jvnet.jaxb.reflection.model.runtime.RuntimePropertyInfo; -import org.jvnet.jaxb.reflection.model.runtime.RuntimeTypeInfoSet; -import org.jvnet.jaxb.reflection.runtime.IllegalAnnotationsException; -import org.jvnet.jaxb.reflection.runtime.JAXBContextImpl; - - - -/** - * @version $Rev$ $Date$ - */ -public class BeanXMLStreamReaderImpl extends XmlTreeStreamReaderImpl { - private static final Comparator COMPARATOR = new Comparator() { - public int compare(Accessor o1, Accessor o2) { - return o1.getName().compareTo(o2.getName()); - } - }; - - private static final String XSI_PREFIX = "xsi"; - private static final String XSI_NS = "http://www.w3.org/2001/XMLSchema-instance"; - - private static XmlNode getXSIType(QName realType) { - QName xsiType = new QName(XSI_NS, "type", XSI_PREFIX); - String prefix = realType.getPrefix(); - String typeName = realType.getLocalPart(); - if (prefix != null && !prefix.equals("")) { - typeName = prefix + ":" + realType.getLocalPart(); - } - return new SimpleXmlNodeImpl(xsiType, XmlNode.Type.ATTRIBUTE); - } - - /** - * Represent a Map.Entry XML node - * @version $Rev$ $Date$ - */ - public static class MapEntryXmlNodeImpl extends SimpleXmlNodeImpl implements XmlNode { - private Map.Entry entry; - - public MapEntryXmlNodeImpl(Entry entry) { - super(new QName("", "entry"), entry); - this.entry = entry; - } - - @Override - public Iterator children() { - List nodes = new ArrayList(); - XmlNode key = new BeanXmlNodeImpl(new QName("", "key"), entry.getKey()); - XmlNode value = new BeanXmlNodeImpl(new QName("", "value"), entry.getValue()); - nodes.add(key); - nodes.add(value); - return nodes.iterator(); - } - } - - public static class BeanXmlNodeImpl extends SimpleXmlNodeImpl implements XmlNode { - private static final Object[] NULL = null; - private static final SimpleTypeMapperImpl MAPPER = new SimpleTypeMapperImpl(); - - public BeanXmlNodeImpl(Object bean) { - super(getName(bean == null ? null : bean.getClass()), bean); - } - - public BeanXmlNodeImpl(QName name, Object bean) { - super(name, bean); - } - - private static boolean isSimpleType(Class javaType) { - return SimpleTypeMapperImpl.getXMLType(javaType) != null; - } - - private static String getStringValue(Object o) { - if (o == null) { - return null; - } - TypeInfo info = SimpleTypeMapperImpl.getXMLType(o.getClass()); - if (info != null) { - return MAPPER.toXMLLiteral(info.getQName(), o, null); - } else { - return String.valueOf(o); - } - } - - @Override - public Iterator children() { - if (name == null) { - return null; - } - if (value == null) { - return super.children(); - } - if (isSimpleType(value.getClass())) { - XmlNode textNode = new BeanXmlNodeImpl(null, value); - return Arrays.asList(textNode).iterator(); - } - if (Map.class.isAssignableFrom(value.getClass())) { - List entries = new ArrayList(); - Map map = (Map)value; - if (map != null) { - for (Object e : map.entrySet()) { - Map.Entry entry = (Map.Entry)e; - entries.add(new MapEntryXmlNodeImpl(entry)); - } - } - return entries.iterator(); - } - try { - Map accessorMap = getAccessors(value); - List accessorList = new ArrayList(accessorMap.values()); - Collections.sort(accessorList, COMPARATOR); - - List props = new ArrayList(); - for (Accessor accessor : accessorList) { - Class pType = accessor.getType(); - - QName pName = new QName(name.getNamespaceURI(), accessor.getName()); - Object pValue = accessor.getValue(); - if (pType.isArray()) { - if (pValue != null) { - int i1 = Array.getLength(pValue); - for (int j = 0; j < i1; j++) { - Object o = Array.get(pValue, j); - props.add(new BeanXmlNodeImpl(pName, o)); - } - } else { - // TODO: How to handle null? - } - } else if (Collection.class.isAssignableFrom(pType)) { - Collection objList = (Collection)pValue; - if (objList != null && objList.size() > 0) { - for (Iterator j = objList.iterator(); j.hasNext();) { - Object o = j.next(); - props.add(new BeanXmlNodeImpl(pName, o)); - } - - } else { - // How to handle null - } - } else { - props.add(new BeanXmlNodeImpl(pName, pValue)); - } - } - return props.iterator(); - } catch (Exception e) { - throw new IllegalArgumentException(e); - } - } - - @Override - public QName getName() { - return name; - } - - @Override - public String getValue() { - return getStringValue(value); - } - - private static String getPackageName(Class cls) { - String name = cls.getName(); - int index = name.lastIndexOf('.'); - return index == -1 ? "" : name.substring(0, index); - } - - public static QName getName(Class cls) { - if (cls == null) { - return null; - } - - String packageName = getPackageName(cls); - - if ("".equals(packageName)) { - return new QName("", cls.getSimpleName()); - } - StringBuffer ns = new StringBuffer("http://"); - String[] names = packageName.split("\\."); - for (int i = names.length - 1; i >= 0; i--) { - ns.append(names[i]); - if (i != 0) { - ns.append('.'); - } - } - ns.append('/'); - return new QName(ns.toString(), cls.getSimpleName()); - } - } - - public BeanXMLStreamReaderImpl(QName name, Object bean) { - super(getXmlNode(name, bean)); - } - - private static BeanXmlNodeImpl getXmlNode(QName name, Object bean) { - BeanXmlNodeImpl root = null; - if (name != null) { - root = new BeanXmlNodeImpl(name, bean); - } else { - root = new BeanXmlNodeImpl(bean); - } - return root; - } - - public static interface Accessor { - String getName(); - - Class getType(); - - Object getValue() throws Exception; - - void setValue(Object value) throws Exception; - } - - private static RuntimeTypeInfoSet create(Class... classes) throws Exception { - IllegalAnnotationsException.Builder errorListener = new IllegalAnnotationsException.Builder(); - RuntimeInlineAnnotationReader reader = new RuntimeInlineAnnotationReader(); - JAXBContextImpl context = - new JAXBContextImpl(classes, null, Collections. emptyMap(), null, false, reader, false, false); - RuntimeModelBuilder builder = - new RuntimeModelBuilder(context, reader, Collections. emptyMap(), null); - builder.setErrorHandler(errorListener); - for (Class c : classes) - builder.getTypeInfo(new Ref(c)); - - RuntimeTypeInfoSet r = builder.link(); - errorListener.check(); - return r; - } - - private static class JAXBAccessor implements Accessor { - private Object target; - private RuntimePropertyInfo prop; - - public JAXBAccessor(Object target, RuntimePropertyInfo field) { - super(); - this.target = target; - this.prop = field; - } - - public String getName() { - return prop.getName(); - } - - public Object getValue() throws Exception { - return prop.getAccessor().get(target); - } - - public void setValue(Object value) throws Exception { - prop.getAccessor().set(target, value); - } - - public Class getType() { - Type type = prop.getRawType(); - if (type instanceof Class) { - return (Class)type; - } else if (type instanceof ParameterizedType) { - ParameterizedType pType = (ParameterizedType)type; - type = pType.getRawType(); - if (type instanceof Class) { - return (Class)type; - } - } - return Object.class; - } - - } - - private static Map getAccessors(Object target) throws Exception { - if (target == null) { - return Collections.emptyMap(); - } - Map map = new HashMap(); - Class type = target.getClass(); - RuntimeTypeInfoSet set = create(type); - RuntimeClassInfo clsInfo = (RuntimeClassInfo)set.getTypeInfo(type); - for (RuntimePropertyInfo f : clsInfo.getProperties()) { - map.put(f.getName(), new JAXBAccessor(target, f)); - } - return map; - } - -} diff --git a/branches/sca-java-1.5/modules/databinding-jaxb/src/test/java/org/apache/tuscany/sca/databinding/jaxb/JAXB2XMLStreamReader.java b/branches/sca-java-1.5/modules/databinding-jaxb/src/test/java/org/apache/tuscany/sca/databinding/jaxb/JAXB2XMLStreamReader.java deleted file mode 100644 index e2151e23a1..0000000000 --- a/branches/sca-java-1.5/modules/databinding-jaxb/src/test/java/org/apache/tuscany/sca/databinding/jaxb/JAXB2XMLStreamReader.java +++ /dev/null @@ -1,84 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ -package org.apache.tuscany.sca.databinding.jaxb; - -import javax.xml.bind.JAXBContext; -import javax.xml.bind.JAXBElement; -import javax.xml.namespace.QName; -import javax.xml.stream.XMLStreamReader; - -import org.apache.tuscany.sca.databinding.PullTransformer; -import org.apache.tuscany.sca.databinding.TransformationContext; -import org.apache.tuscany.sca.databinding.TransformationException; -import org.apache.tuscany.sca.databinding.impl.BaseTransformer; - -/** - * - * @version $Rev$ $Date$ - */ -public class JAXB2XMLStreamReader extends BaseTransformer implements - PullTransformer { - - public JAXB2XMLStreamReader() { - super(); - } - - public XMLStreamReader transform(Object source, TransformationContext context) { - if (source == null) { - return null; - } - try { - QName name = null; - Object bean = null; - if (source instanceof JAXBElement) { - bean = ((JAXBElement)source).getValue(); - name = ((JAXBElement)source).getName(); - } else { - JAXBContext jaxbContext = JAXBContextHelper.createJAXBContext(context, true); - Object element = JAXBContextHelper.createJAXBElement(jaxbContext, context.getSourceDataType(), source); - name = jaxbContext.createJAXBIntrospector().getElementName(element); - bean = source; - } - BeanXMLStreamReaderImpl reader = new BeanXMLStreamReaderImpl(name, bean); - return reader; - } catch (Exception e) { - throw new TransformationException(e); - } - } - - @Override - protected Class getSourceType() { - return Object.class; - } - - @Override - protected Class getTargetType() { - return XMLStreamReader.class; - } - - @Override - public int getWeight() { - return 10; - } - - @Override - public String getTargetDataBinding() { - return JAXBDataBinding.NAME; - } -} diff --git a/branches/sca-java-1.5/modules/databinding-jaxb/src/test/java/org/apache/tuscany/sca/databinding/jaxb/JAXBContextCacheTestCase.java b/branches/sca-java-1.5/modules/databinding-jaxb/src/test/java/org/apache/tuscany/sca/databinding/jaxb/JAXBContextCacheTestCase.java deleted file mode 100644 index 761414e92b..0000000000 --- a/branches/sca-java-1.5/modules/databinding-jaxb/src/test/java/org/apache/tuscany/sca/databinding/jaxb/JAXBContextCacheTestCase.java +++ /dev/null @@ -1,123 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -package org.apache.tuscany.sca.databinding.jaxb; - -import java.io.StringReader; -import java.io.StringWriter; - -import javax.xml.bind.JAXBContext; -import javax.xml.bind.JAXBElement; -import javax.xml.bind.JAXBException; -import javax.xml.namespace.QName; -import javax.xml.transform.Source; -import javax.xml.transform.stream.StreamSource; - -import junit.framework.Assert; - -import org.apache.tuscany.sca.databinding.jaxb.JAXBContextCache; -import org.apache.tuscany.sca.databinding.util.LRUCache; -import org.junit.Test; - -import com.example.ipo.jaxb.Address; -import com.example.ipo.jaxb.PurchaseOrderType; - -/** - * @version $Rev$ $Date$ - */ -public class JAXBContextCacheTestCase { - @Test - public void testCache() throws JAXBException { - JAXBContextCache cache = new JAXBContextCache(); - JAXBContext context1 = cache.getJAXBContext(String.class); - JAXBContext context2 = cache.getJAXBContext(int.class); - JAXBContext context3 = cache.getJAXBContext(String[].class); - JAXBContext context4 = cache.getJAXBContext(Source.class); - Assert.assertSame(context1, context2); - Assert.assertNotSame(context2, context3); - Assert.assertSame(context1, context4); - - QName name = new QName("http://example.com/ns1", "e1"); - JAXBElement element = new JAXBElement(name, String.class, "123"); - StringWriter sw = new StringWriter(); - context4.createMarshaller().marshal(element, sw); - StreamSource source = new StreamSource(new StringReader(sw.toString()), null); - context4.createUnmarshaller().unmarshal(source, String.class); - - JAXBContext context5 = cache.getJAXBContext(Address.class); - JAXBContext context6 = cache.getJAXBContext(PurchaseOrderType.class); - Assert.assertSame(context5, context6); - } - - @Test - public void testLRUCache() { - LRUCache cache = new LRUCache(3); - cache.put("1", "A"); - Assert.assertEquals(1, cache.size()); - cache.put("2", "B"); - Assert.assertEquals(2, cache.size()); - cache.put("3", "C"); - Assert.assertEquals(3, cache.size()); - cache.put("4", "D"); - Assert.assertEquals(3, cache.size()); - String data = cache.get("1"); - Assert.assertNull(data); - data = cache.get("2"); - Assert.assertEquals("B", data); - cache.put("5", "E"); - data = cache.get("2"); - Assert.assertEquals("B", data); - } - - @Test - public void testPerf() throws JAXBException { - JAXBContextCache cache = new JAXBContextCache(); - - // Test JAXBContext for simple java classes - long start = System.currentTimeMillis(); - for (int i = 0; i < 100; i++) { - JAXBContext context = JAXBContext.newInstance(String.class); - } - long end = System.currentTimeMillis(); - long d1 = end - start; - start = System.currentTimeMillis(); - for (int i = 0; i < 100; i++) { - JAXBContext context = cache.getJAXBContext(String.class); - } - end = System.currentTimeMillis(); - long d2 = end - start; - System.out.println(d1 + "ms vs. " + d2 + "ms"); - - // Test JAXBContext for generated JAXB classes - start = System.currentTimeMillis(); - for (int i = 0; i < 20; i++) { - JAXBContext context = JAXBContext.newInstance(PurchaseOrderType.class); - } - end = System.currentTimeMillis(); - d1 = end - start; - start = System.currentTimeMillis(); - for (int i = 0; i < 20; i++) { - JAXBContext context = cache.getJAXBContext(PurchaseOrderType.class); - } - end = System.currentTimeMillis(); - d2 = end - start; - System.out.println(d1 + "ms vs. " + d2 + "ms"); - - } -} diff --git a/branches/sca-java-1.5/modules/databinding-jaxb/src/test/java/org/apache/tuscany/sca/databinding/jaxb/JAXBDataBindingTestCase.java b/branches/sca-java-1.5/modules/databinding-jaxb/src/test/java/org/apache/tuscany/sca/databinding/jaxb/JAXBDataBindingTestCase.java deleted file mode 100644 index 5452175c54..0000000000 --- a/branches/sca-java-1.5/modules/databinding-jaxb/src/test/java/org/apache/tuscany/sca/databinding/jaxb/JAXBDataBindingTestCase.java +++ /dev/null @@ -1,130 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -package org.apache.tuscany.sca.databinding.jaxb; - -import javax.xml.bind.JAXBElement; -import javax.xml.namespace.QName; - -import junit.framework.TestCase; - -import org.apache.tuscany.sca.databinding.jaxb.JAXBDataBinding; -import org.apache.tuscany.sca.interfacedef.DataType; -import org.apache.tuscany.sca.interfacedef.Operation; -import org.apache.tuscany.sca.interfacedef.impl.DataTypeImpl; -import org.apache.tuscany.sca.interfacedef.util.XMLType; - -import com.example.ipo.jaxb.ObjectFactory; -import com.example.ipo.jaxb.PurchaseOrderType; -import com.example.ipo.jaxb.USAddress; -import com.example.ipo.jaxb.USState; - -/** - * - * @version $Rev$ $Date$ - */ -public class JAXBDataBindingTestCase extends TestCase { - private JAXBDataBinding binding; - - /** - * @see junit.framework.TestCase#setUp() - */ - @Override - protected void setUp() throws Exception { - super.setUp(); - binding = new JAXBDataBinding(); - } - - /** - * Test method for - * {@link org.apache.tuscany.sca.databinding.jaxb.JAXBDataBinding#introspect(java.lang.Class, Operation)}. - */ - public final void testIntrospect() { - DataType dataType = new DataTypeImpl(JAXBElement.class, null); - Operation op = null; - boolean yes = binding.introspect(dataType, op); - assertTrue(yes); - assertTrue(dataType.getDataBinding().equals(binding.getName())); - assertTrue(dataType.getPhysical() == JAXBElement.class && dataType.getLogical() == XMLType.UNKNOWN); - dataType = new DataTypeImpl(MockJAXBElement.class, null); - yes = binding.introspect(dataType, op); - assertTrue(yes); - assertEquals(MockJAXBElement.class, dataType.getPhysical()); - assertEquals(new QName("http://www.example.com/IPO", "PurchaseOrderType"), ((XMLType)dataType.getLogical()) - .getTypeName()); - dataType = new DataTypeImpl(USAddress.class, null); - yes = binding.introspect(dataType, op); - assertTrue(yes); - assertEquals(USAddress.class, dataType.getPhysical()); - assertEquals(new QName("http://www.example.com/IPO", "USAddress"), ((XMLType)dataType.getLogical()) - .getTypeName()); - dataType = new DataTypeImpl(USState.class, null); - yes = binding.introspect(dataType, op); - assertTrue(yes); - assertTrue(dataType.getDataBinding().equals(binding.getName())); - assertEquals(USState.class, dataType.getPhysical()); - assertEquals(new QName("http://www.example.com/IPO", "USState"), ((XMLType)dataType.getLogical()).getTypeName()); - - } - - private static class MockJAXBElement extends JAXBElement { - - private static final long serialVersionUID = -2767569071002707973L; - - /** - * @param elementName - * @param type - * @param value - */ - public MockJAXBElement(QName elementName, Class type, PurchaseOrderType value) { - super(elementName, type, value); - } - - } - - @SuppressWarnings("unchecked") - public void testCopy() { - ObjectFactory factory = new ObjectFactory(); - PurchaseOrderType poType = factory.createPurchaseOrderType(); - JAXBElement po = factory.createPurchaseOrder(poType); - JAXBElement copy = (JAXBElement)binding.copy(po, null, null); - assertEquals(new QName("http://www.example.com/IPO", "purchaseOrder"), copy.getName()); - } - - @SuppressWarnings("unchecked") - public void testCopyNonElement() { - ObjectFactory factory = new ObjectFactory(); - PurchaseOrderType poType = factory.createPurchaseOrderType(); - poType.setComment("Comment"); - PurchaseOrderType copy = (PurchaseOrderType)binding.copy(poType, null, null); - assertTrue(copy instanceof PurchaseOrderType); - assertEquals("Comment", (copy).getComment()); - } - - @SuppressWarnings("unchecked") - public void testCopyNonRoot() { - ObjectFactory factory = new ObjectFactory(); - USAddress address = factory.createUSAddress(); - address.setCity("San Jose"); - USAddress copy = (USAddress)binding.copy(address, null, null); - assertTrue(copy instanceof USAddress); - assertEquals("San Jose", (copy).getCity()); - - } -} diff --git a/branches/sca-java-1.5/modules/databinding-jaxb/src/test/java/org/apache/tuscany/sca/databinding/jaxb/JAXBReflectionTestCase.java b/branches/sca-java-1.5/modules/databinding-jaxb/src/test/java/org/apache/tuscany/sca/databinding/jaxb/JAXBReflectionTestCase.java deleted file mode 100644 index 500422c9c7..0000000000 --- a/branches/sca-java-1.5/modules/databinding-jaxb/src/test/java/org/apache/tuscany/sca/databinding/jaxb/JAXBReflectionTestCase.java +++ /dev/null @@ -1,92 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -package org.apache.tuscany.sca.databinding.jaxb; - -import java.lang.reflect.Type; -import java.util.Collections; -import java.util.Map; - -import javax.xml.bind.JAXBContext; -import javax.xml.namespace.QName; - -import junit.framework.Assert; -import junit.framework.TestCase; - -import org.jvnet.jaxb.reflection.model.annotation.RuntimeInlineAnnotationReader; -import org.jvnet.jaxb.reflection.model.core.Ref; -import org.jvnet.jaxb.reflection.model.impl.RuntimeModelBuilder; -import org.jvnet.jaxb.reflection.model.runtime.RuntimeClassInfo; -import org.jvnet.jaxb.reflection.model.runtime.RuntimePropertyInfo; -import org.jvnet.jaxb.reflection.model.runtime.RuntimeTypeInfoSet; -import org.jvnet.jaxb.reflection.runtime.IllegalAnnotationsException; -import org.jvnet.jaxb.reflection.runtime.JAXBContextImpl; - -import com.example.ipo.jaxb.ObjectFactory; -import com.example.ipo.jaxb.PurchaseOrderType; -import com.example.ipo.jaxb.USAddress; -import com.example.ipo.jaxb.USState; - -/** - * @version $Rev$ $Date$ - */ -public class JAXBReflectionTestCase extends TestCase { - - public void testGenerateSchema() throws Exception { - JAXBContext context = JAXBContext.newInstance("com.example.ipo.jaxb"); - Map schemas = JAXBTypeHelper.generateSchema(context); - System.out.println(schemas); - } - - /** - * This is a workaround for the NPE bug in jaxb-reflection - * @param classes - * @return - * @throws Exception - */ - @SuppressWarnings("unchecked") - private static RuntimeTypeInfoSet create(Class... classes) throws Exception { - IllegalAnnotationsException.Builder errorListener = new IllegalAnnotationsException.Builder(); - RuntimeInlineAnnotationReader reader = new RuntimeInlineAnnotationReader(); - JAXBContextImpl context = - new JAXBContextImpl(classes, null, Collections. emptyMap(), null, false, reader, false, false); - RuntimeModelBuilder builder = - new RuntimeModelBuilder(context, reader, Collections. emptyMap(), null); - builder.setErrorHandler(errorListener); - for (Class c : classes) - builder.getTypeInfo(new Ref(c)); - - RuntimeTypeInfoSet r = builder.link(); - errorListener.check(); - return r; - } - - public void testReflection() throws Exception { - org.jvnet.jaxb.reflection.model.runtime.RuntimeTypeInfoSet model = create(PurchaseOrderType.class); - RuntimeClassInfo type = (RuntimeClassInfo)model.getTypeInfo(PurchaseOrderType.class); - Assert.assertEquals(new QName("http://www.example.com/IPO", "PurchaseOrderType"), type.getTypeName()); - type = (RuntimeClassInfo)model.getTypeInfo(USAddress.class); - Assert.assertEquals(new QName("http://www.example.com/IPO", "USAddress"), type.getTypeName()); - RuntimePropertyInfo prop = type.getProperty("state"); - Assert.assertNotNull(prop); - USAddress address = new ObjectFactory().createUSAddress(); - prop.getAccessor().set(address, USState.CA); - Assert.assertEquals(USState.CA, address.getState()); - } -} diff --git a/branches/sca-java-1.5/modules/databinding-jaxb/src/test/java/org/apache/tuscany/sca/databinding/jaxb/JAXBTestCase.java b/branches/sca-java-1.5/modules/databinding-jaxb/src/test/java/org/apache/tuscany/sca/databinding/jaxb/JAXBTestCase.java deleted file mode 100644 index 53779a1af6..0000000000 --- a/branches/sca-java-1.5/modules/databinding-jaxb/src/test/java/org/apache/tuscany/sca/databinding/jaxb/JAXBTestCase.java +++ /dev/null @@ -1,175 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ -package org.apache.tuscany.sca.databinding.jaxb; - -import static org.easymock.EasyMock.createMock; -import static org.easymock.EasyMock.expect; -import static org.easymock.EasyMock.replay; - -import java.io.StringReader; - -import javax.xml.namespace.QName; - -import junit.framework.Assert; -import junit.framework.TestCase; - -import org.apache.tuscany.sca.databinding.TransformationContext; -import org.apache.tuscany.sca.databinding.jaxb.JAXB2Node; -import org.apache.tuscany.sca.databinding.jaxb.Node2JAXB; -import org.apache.tuscany.sca.databinding.jaxb.Reader2JAXB; -import org.apache.tuscany.sca.interfacedef.DataType; -import org.apache.tuscany.sca.interfacedef.impl.DataTypeImpl; -import org.apache.tuscany.sca.interfacedef.util.XMLType; -import org.w3c.dom.Node; - -import com.example.ipo.jaxb.ObjectFactory; -import com.example.ipo.jaxb.PurchaseOrderType; - -/** - * - * @version $Rev$ $Date$ - */ -public class JAXBTestCase extends TestCase { - private static final String IPO_XML = - "" + "" - + " " - + " Helen Zoe" - + " 47 Eden Street" - + " Cambridge" - + " CB1 1JR" - + " " - + " " - + " Robert Smith" - + " 8 Oak Avenue" - + " Old Town" - + " PA" - + " 95819" - + " " - + " " - + " " - + " Lapis necklace" - + " 1" - + " 99.95" - + " Want this for the holidays" - + " 1999-12-05" - + " " - + " " - + ""; - - @Override - protected void setUp() throws Exception { - super.setUp(); - } - - public void testTransform() throws Exception { - Reader2JAXB t0 = new Reader2JAXB(); - - DataType targetDataType = new DataTypeImpl(PurchaseOrderType.class, null); - - TransformationContext tContext = createMock(TransformationContext.class); - expect(tContext.getTargetDataType()).andReturn(targetDataType).anyTimes(); - expect(tContext.getTargetOperation()).andReturn(null).anyTimes(); - replay(tContext); - - Object object1 = t0.transform(new StringReader(IPO_XML), tContext); - - DataType sourceDataType = new DataTypeImpl(PurchaseOrderType.class, null); - - TransformationContext tContext1 = createMock(TransformationContext.class); - expect(tContext1.getSourceDataType()).andReturn(sourceDataType).anyTimes(); - expect(tContext1.getTargetDataType()).andReturn(null).anyTimes(); - expect(tContext1.getSourceOperation()).andReturn(null).anyTimes(); - expect(tContext1.getTargetOperation()).andReturn(null).anyTimes(); - replay(tContext1); - - JAXB2Node t1 = new JAXB2Node(); - Node node = t1.transform(object1, tContext1); - - Assert.assertNotNull(node); - - Node2JAXB t2 = new Node2JAXB(); - Object object2 = t2.transform(node, tContext); - Assert.assertNotNull(object2); - - } - - public void testTransform2() throws Exception { - Reader2JAXB t0 = new Reader2JAXB(); - - QName root = new QName("http://www.example.com/IPO", "purchaseOrder"); - DataType targetDataType = new DataTypeImpl(PurchaseOrderType.class, new XMLType(root, null)); - // targetDataType.setMetadata(JAXBContextHelper.JAXB_CONTEXT_PATH, contextPath); - - TransformationContext tContext = createMock(TransformationContext.class); - expect(tContext.getTargetDataType()).andReturn(targetDataType).anyTimes(); - expect(tContext.getTargetOperation()).andReturn(null).anyTimes(); - replay(tContext); - - Object object1 = t0.transform(new StringReader(IPO_XML), tContext); - - DataType sourceDataType = new DataTypeImpl(PurchaseOrderType.class, new XMLType(root, null)); - // sourceDataType.setMetadata(JAXBContextHelper.JAXB_CONTEXT_PATH, contextPath); - - TransformationContext tContext1 = createMock(TransformationContext.class); - expect(tContext1.getSourceDataType()).andReturn(sourceDataType).anyTimes(); - expect(tContext1.getTargetDataType()).andReturn(null).anyTimes(); - expect(tContext1.getSourceOperation()).andReturn(null).anyTimes(); - expect(tContext1.getTargetOperation()).andReturn(null).anyTimes(); - replay(tContext1); - - JAXB2Node t1 = new JAXB2Node(); - Node node = t1.transform(object1, tContext1); - - Assert.assertNotNull(node); - - Node2JAXB t2 = new Node2JAXB(); - Object object2 = t2.transform(node, tContext); - Assert.assertNotNull(object2); - - } - - public void testTransform3() throws Exception { - - DataType sourceDataType = new DataTypeImpl(PurchaseOrderType.class, null); - - TransformationContext tContext1 = createMock(TransformationContext.class); - expect(tContext1.getSourceDataType()).andReturn(sourceDataType).anyTimes(); - expect(tContext1.getTargetDataType()).andReturn(null).anyTimes(); - expect(tContext1.getSourceOperation()).andReturn(null).anyTimes(); - expect(tContext1.getTargetOperation()).andReturn(null).anyTimes(); - replay(tContext1); - - JAXB2Node t1 = new JAXB2Node(); - PurchaseOrderType po = new ObjectFactory().createPurchaseOrderType(); - Node node = t1.transform(po, tContext1); - - Assert.assertNotNull(node); - - } - - @Override - protected void tearDown() throws Exception { - super.tearDown(); - } - -} diff --git a/branches/sca-java-1.5/modules/databinding-jaxb/src/test/java/org/apache/tuscany/sca/databinding/jaxb/JAXBWrapperHandlerTestCase.java b/branches/sca-java-1.5/modules/databinding-jaxb/src/test/java/org/apache/tuscany/sca/databinding/jaxb/JAXBWrapperHandlerTestCase.java deleted file mode 100644 index 501f5b21b7..0000000000 --- a/branches/sca-java-1.5/modules/databinding-jaxb/src/test/java/org/apache/tuscany/sca/databinding/jaxb/JAXBWrapperHandlerTestCase.java +++ /dev/null @@ -1,90 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -package org.apache.tuscany.sca.databinding.jaxb; - -import java.util.ArrayList; -import java.util.List; - -import javax.xml.namespace.QName; - -import junit.framework.Assert; -import junit.framework.TestCase; - -import org.apache.tuscany.sca.databinding.jaxb.JAXBDataBinding; -import org.apache.tuscany.sca.databinding.jaxb.JAXBWrapperHandler; -import org.apache.tuscany.sca.interfacedef.Operation; -import org.apache.tuscany.sca.interfacedef.impl.DataTypeImpl; -import org.apache.tuscany.sca.interfacedef.impl.OperationImpl; -import org.apache.tuscany.sca.interfacedef.util.ElementInfo; -import org.apache.tuscany.sca.interfacedef.util.WrapperInfo; -import org.apache.tuscany.sca.interfacedef.util.XMLType; - -import com.example.stock.StockQuoteOffer; - -/** - * Test case for JAXBExceptionHandler - * - * @version $Rev$ $Date$ - */ -public class JAXBWrapperHandlerTestCase extends TestCase { - private static final QName ELEMENT = new QName("http://www.example.com/stock", "stockQuoteOffer"); - private static final QName INPUT = new QName("", "input"); - private JAXBWrapperHandler handler; - - /** - * @see junit.framework.TestCase#setUp() - */ - @Override - protected void setUp() throws Exception { - super.setUp(); - this.handler = new JAXBWrapperHandler(); - } - - public void testCreate() { - ElementInfo element = new ElementInfo(ELEMENT, null); - Operation op = new OperationImpl(); - WrapperInfo wrapperInfo = new WrapperInfo(JAXBDataBinding.NAME, element, null); - wrapperInfo.setWrapperType(new DataTypeImpl(JAXBDataBinding.NAME, StockQuoteOffer.class, - XMLType.UNKNOWN)); - op.setInputWrapper(wrapperInfo); - Object offer = handler.create(op, true); - Assert.assertTrue(offer instanceof StockQuoteOffer); - } - - public void testSetChild() { - StockQuoteOffer wrapper = new StockQuoteOffer(); - handler.setChild(wrapper, 0, new ElementInfo(INPUT, null), "IBM"); - Assert.assertEquals("IBM", wrapper.getInput()); - } - - public void testGetChildren() { - StockQuoteOffer wrapper = new StockQuoteOffer(); - wrapper.setInput("IBM"); - List elements = new ArrayList(); - elements.add(new ElementInfo(INPUT, null)); - WrapperInfo wrapperInfo = new WrapperInfo(JAXBDataBinding.NAME, null, elements); - Operation op = new OperationImpl(); - op.setInputWrapper(wrapperInfo); - List children = handler.getChildren(wrapper, op, true); - assertNotNull(children); - assertEquals(1, children.size()); - assertEquals("IBM", children.get(0)); - } -} diff --git a/branches/sca-java-1.5/modules/databinding-jaxb/src/test/java/org/apache/tuscany/sca/databinding/jaxb/MyBean.java b/branches/sca-java-1.5/modules/databinding-jaxb/src/test/java/org/apache/tuscany/sca/databinding/jaxb/MyBean.java deleted file mode 100644 index 9bdfb108fe..0000000000 --- a/branches/sca-java-1.5/modules/databinding-jaxb/src/test/java/org/apache/tuscany/sca/databinding/jaxb/MyBean.java +++ /dev/null @@ -1,162 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ -package org.apache.tuscany.sca.databinding.jaxb; - -import java.util.ArrayList; -import java.util.Arrays; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -/** - * - * @version $Rev$ $Date$ - */ -public class MyBean { - private int age; - private String name; - private float[] rates = new float[] {1.0f, 2.0f}; - private List notes = new ArrayList(); - private Map map = new HashMap(); - private Object service; - private Object otherService; - private boolean good; - - public int getAge() { - return age; - } - - public void setAge(int age) { - this.age = age; - } - - public String getName() { - return name; - } - - public void setName(String name) { - this.name = name; - } - - public List getNotes() { - return notes; - } - - public void setNotes(List notes) { - this.notes = notes; - } - - public float[] getRates() { - return rates; - } - - public void setRates(float[] rates) { - this.rates = rates; - } - - public Map getMap() { - return map; - } - - public void setMap(Map map) { - this.map = map; - } - - public Object getService() { - return service; - } - - public void setService(Object service) { - this.service = service; - } - - public Object getOtherService() { - return otherService; - } - - public void setOtherService(Object otherService) { - this.otherService = otherService; - } - - public boolean isGood() { - return good; - } - - public void setGood(boolean good) { - this.good = good; - } - - @Override - public int hashCode() { - final int prime = 31; - int result = 1; - result = prime * result + age; - result = prime * result + (good ? 1231 : 1237); - result = prime * result + ((map == null) ? 0 : map.hashCode()); - result = prime * result + ((name == null) ? 0 : name.hashCode()); - result = prime * result + ((notes == null) ? 0 : notes.hashCode()); - result = prime * result + ((otherService == null) ? 0 : otherService.hashCode()); - result = prime * result + Arrays.hashCode(rates); - result = prime * result + ((service == null) ? 0 : service.hashCode()); - return result; - } - - @Override - public boolean equals(Object obj) { - if (this == obj) - return true; - if (obj == null) - return false; - if (getClass() != obj.getClass()) - return false; - final MyBean other = (MyBean)obj; - if (age != other.age) - return false; - if (good != other.good) - return false; - if (map == null) { - if (other.map != null) - return false; - } else if (!map.equals(other.map)) - return false; - if (name == null) { - if (other.name != null) - return false; - } else if (!name.equals(other.name)) - return false; - if (notes == null) { - if (other.notes != null) - return false; - } else if (!notes.equals(other.notes)) - return false; - if (otherService == null) { - if (other.otherService != null) - return false; - } else if (!otherService.equals(other.otherService)) - return false; - if (!Arrays.equals(rates, other.rates)) - return false; - if (service == null) { - if (other.service != null) - return false; - } else if (!service.equals(other.service)) - return false; - return true; - } -} diff --git a/branches/sca-java-1.5/modules/databinding-jaxb/src/test/java/org/apache/tuscany/sca/databinding/jaxb/MyInterface.java b/branches/sca-java-1.5/modules/databinding-jaxb/src/test/java/org/apache/tuscany/sca/databinding/jaxb/MyInterface.java deleted file mode 100644 index b8e9ee7f7d..0000000000 --- a/branches/sca-java-1.5/modules/databinding-jaxb/src/test/java/org/apache/tuscany/sca/databinding/jaxb/MyInterface.java +++ /dev/null @@ -1,29 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -package org.apache.tuscany.sca.databinding.jaxb; - -/** - * @version $Rev$ $Date$ - */ -public interface MyInterface { - void setId(String id); - - String getId(); -} diff --git a/branches/sca-java-1.5/modules/databinding-jaxb/src/test/java/org/apache/tuscany/sca/databinding/jaxb/MyInterfaceImpl.java b/branches/sca-java-1.5/modules/databinding-jaxb/src/test/java/org/apache/tuscany/sca/databinding/jaxb/MyInterfaceImpl.java deleted file mode 100644 index 5c511e6ccb..0000000000 --- a/branches/sca-java-1.5/modules/databinding-jaxb/src/test/java/org/apache/tuscany/sca/databinding/jaxb/MyInterfaceImpl.java +++ /dev/null @@ -1,67 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -package org.apache.tuscany.sca.databinding.jaxb; - -/** - * @version $Rev$ $Date$ - */ -public class MyInterfaceImpl implements MyInterface { - private String id; - - /** - * @see org.apache.tuscany.databinding.jaxb.MyInterface#getId() - */ - public String getId() { - return id; - } - - /** - * @see org.apache.tuscany.databinding.jaxb.MyInterface#setId(java.lang.String) - */ - public void setId(String id) { - this.id = id; - } - - @Override - public int hashCode() { - final int prime = 31; - int result = 1; - result = prime * result + ((id == null) ? 0 : id.hashCode()); - return result; - } - - @Override - public boolean equals(Object obj) { - if (this == obj) - return true; - if (obj == null) - return false; - if (getClass() != obj.getClass()) - return false; - final MyInterfaceImpl other = (MyInterfaceImpl)obj; - if (id == null) { - if (other.id != null) - return false; - } else if (!id.equals(other.id)) - return false; - return true; - } - -} diff --git a/branches/sca-java-1.5/modules/databinding-jaxb/src/test/java/org/apache/tuscany/sca/databinding/jaxb/MyJaxbBean.java b/branches/sca-java-1.5/modules/databinding-jaxb/src/test/java/org/apache/tuscany/sca/databinding/jaxb/MyJaxbBean.java deleted file mode 100644 index 3c3992524a..0000000000 --- a/branches/sca-java-1.5/modules/databinding-jaxb/src/test/java/org/apache/tuscany/sca/databinding/jaxb/MyJaxbBean.java +++ /dev/null @@ -1,64 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -package org.apache.tuscany.sca.databinding.jaxb; - -import javax.xml.bind.annotation.XmlAnyElement; -import javax.xml.bind.annotation.XmlElement; -import javax.xml.bind.annotation.XmlRootElement; -import javax.xml.bind.annotation.adapters.XmlAdapter; -import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter; - -import org.w3c.dom.Element; - -/** - * - */ -@XmlRootElement(name = "myBean", namespace = "http://ns1") -public class MyJaxbBean { - public MyBean myBean; - - @XmlJavaTypeAdapter(AnyTypeXmlAdapter.class) - public MyInterface myInterface; - - @XmlElement(type = MyInterfaceImpl.class) - public MyInterface myInterface1; - - @XmlJavaTypeAdapter(MyInterfaceAdapter.class) - public MyInterface myInterface2; - - public Object myObject; - - @XmlAnyElement - public Element anyElement; - - public static class MyInterfaceAdapter extends XmlAdapter { - - @Override - public MyInterfaceImpl marshal(MyInterface v) throws Exception { - return (MyInterfaceImpl) v; - } - - @Override - public MyInterface unmarshal(MyInterfaceImpl v) throws Exception { - return (MyInterface) v; - } - - } -} diff --git a/branches/sca-java-1.5/modules/databinding-jaxb/src/test/java/org/apache/tuscany/sca/databinding/jaxb/MySubBean.java b/branches/sca-java-1.5/modules/databinding-jaxb/src/test/java/org/apache/tuscany/sca/databinding/jaxb/MySubBean.java deleted file mode 100644 index 62dfa6f73c..0000000000 --- a/branches/sca-java-1.5/modules/databinding-jaxb/src/test/java/org/apache/tuscany/sca/databinding/jaxb/MySubBean.java +++ /dev/null @@ -1,35 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -package org.apache.tuscany.sca.databinding.jaxb; - -/** - * @version $Rev$ $Date$ - */ -public class MySubBean extends MyBean { - private String addtional; - - public String getAddtional() { - return addtional; - } - - public void setAddtional(String addtional) { - this.addtional = addtional; - } -} diff --git a/branches/sca-java-1.5/modules/databinding-jaxb/src/test/java/org/apache/tuscany/sca/databinding/jaxb/POJOTestCase.java b/branches/sca-java-1.5/modules/databinding-jaxb/src/test/java/org/apache/tuscany/sca/databinding/jaxb/POJOTestCase.java deleted file mode 100644 index fdfa87ff43..0000000000 --- a/branches/sca-java-1.5/modules/databinding-jaxb/src/test/java/org/apache/tuscany/sca/databinding/jaxb/POJOTestCase.java +++ /dev/null @@ -1,268 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ -package org.apache.tuscany.sca.databinding.jaxb; - -import java.io.StringReader; -import java.io.StringWriter; -import java.lang.reflect.Type; -import java.util.Collection; -import java.util.Collections; -import java.util.Map; - -import javax.xml.bind.JAXBContext; -import javax.xml.bind.JAXBElement; -import javax.xml.namespace.QName; -import javax.xml.stream.XMLStreamReader; -import javax.xml.transform.stream.StreamSource; - -import junit.framework.TestCase; - -import org.apache.tuscany.sca.databinding.TransformationContext; -import org.apache.tuscany.sca.databinding.impl.TransformationContextImpl; - -import com.sun.xml.bind.v2.model.annotation.RuntimeInlineAnnotationReader; -import com.sun.xml.bind.v2.model.core.Ref; -import com.sun.xml.bind.v2.model.impl.RuntimeModelBuilder; -import com.sun.xml.bind.v2.model.runtime.RuntimeClassInfo; -import com.sun.xml.bind.v2.model.runtime.RuntimePropertyInfo; -import com.sun.xml.bind.v2.model.runtime.RuntimeTypeInfoSet; -import com.sun.xml.bind.v2.runtime.IllegalAnnotationsException; -import com.sun.xml.bind.v2.runtime.JAXBContextImpl; - -/** - * - * @version $Rev$ $Date$ - */ -public class POJOTestCase extends TestCase { - public void testAdapter() throws Exception { - JAXBContext context = JAXBContext.newInstance(MyJaxbBean.class, MyInterfaceImpl.class); - StringWriter writer = new StringWriter(); - MyJaxbBean bean = new MyJaxbBean(); - bean.myBean = new MySubBean(); - bean.myBean.setName("Ray"); - bean.myInterface = new MyInterfaceImpl(); - bean.myInterface.setId("001"); - bean.myObject = new MyBean(); - ((MyBean) bean.myObject).setName("Y"); - context.createMarshaller().marshal(bean, writer); - System.out.println(writer.toString()); - Object result = context.createUnmarshaller().unmarshal(new StringReader(writer.toString())); - assertTrue(result instanceof MyJaxbBean); - Map schemas = JAXBTypeHelper.generateSchema(context); - System.out.println(schemas); - } - - public void testPOJO() throws Exception { - JAXBContext context = JAXBContext.newInstance(MyBean.class, MyInterfaceImpl.class); - StringWriter writer = new StringWriter(); - MyBean bean = new MyBean(); - bean.setName("Test"); - bean.setAge(20); - bean.getNotes().add("1"); - bean.getNotes().add("2"); - bean.getMap().put("1", 1); - MyInterface service = new MyInterfaceImpl(); - service.setId("ID001"); - bean.setService(service); - bean.setOtherService(service); - JAXBElement element = new JAXBElement(new QName("http://ns1", "bean"), Object.class, bean); - context.createMarshaller().marshal(element, writer); - // System.out.println(writer.toString()); - - Object result = context.createUnmarshaller().unmarshal(new StringReader(writer.toString())); - assertTrue(result instanceof JAXBElement); - JAXBElement e2 = (JAXBElement)result; - assertTrue(e2.getValue() instanceof MyBean); - MyBean newBean = (MyBean)e2.getValue(); - assertEquals(bean, newBean); - } - - public void testPOJOArray() throws Exception { - JAXBContext context = JAXBContext.newInstance(MyBean[].class, MySubBean.class); - StringWriter writer = new StringWriter(); - MySubBean bean = new MySubBean(); - bean.setAddtional("SUB"); - bean.setName("Test"); - bean.setAge(20); - bean.getNotes().add("1"); - bean.getNotes().add("2"); - bean.getMap().put("1", 1); - - JAXBElement element = - new JAXBElement(new QName("http://ns1", "beans"), Object.class, new MyBean[] {bean}); - context.createMarshaller().marshal(element, writer); - System.out.println(writer.toString()); - - Object result = - context.createUnmarshaller().unmarshal(new StreamSource(new StringReader(writer.toString())), - MyBean[].class); - assertTrue(result instanceof JAXBElement); - JAXBElement e2 = (JAXBElement)result; - assertTrue(e2.getValue() instanceof MyBean[]); - MyBean newBean = ((MyBean[])e2.getValue())[0]; - assertTrue(newBean instanceof MySubBean); - } - - public void testXMLStreamReader() throws Exception { - JAXBContext context = JAXBContext.newInstance(MyBean.class, MyInterfaceImpl.class); - - MyBean bean = new MyBean(); - bean.setName("Test"); - bean.setAge(20); - bean.getNotes().add("1"); - bean.getNotes().add("2"); - bean.getMap().put("1", 1); - MyInterface service = new MyInterfaceImpl(); - service.setId("ID001"); - bean.setService(service); - bean.setOtherService(service); - QName name = new QName("http://ns1", "bean"); - JAXBElement element = new JAXBElement(name, Object.class, bean); - TransformationContext tContext = new TransformationContextImpl(); - XMLStreamReader reader = new JAXB2XMLStreamReader().transform(element, tContext); - -// XMLStreamReader2String t2 = new XMLStreamReader2String(); -// String xml = t2.transform(reader, null); - // System.out.println(xml); - Object result = context.createUnmarshaller().unmarshal(reader, MyBean.class); - assertTrue(result instanceof JAXBElement); - JAXBElement e2 = (JAXBElement)result; - assertTrue(e2.getValue() instanceof MyBean); - MyBean newBean = (MyBean)e2.getValue(); - // FIXME :To be implemented - // assertEquals(bean, newBean); - } - - public void testString() throws Exception { - JAXBContext context = JAXBContext.newInstance(String.class); - StringWriter writer = new StringWriter(); - JAXBElement element = new JAXBElement(new QName("http://ns1", "bean"), Object.class, "ABC"); - context.createMarshaller().marshal(element, writer); - // System.out.println(writer.toString()); - - Object result = context.createUnmarshaller().unmarshal(new StringReader(writer.toString())); - assertTrue(result instanceof JAXBElement); - JAXBElement e2 = (JAXBElement)result; - assertEquals("ABC", e2.getValue()); - } - - public void testNull() throws Exception { - JAXBContext context = JAXBContext.newInstance(String.class); - StringWriter writer = new StringWriter(); - JAXBElement element = new JAXBElement(new QName("http://ns1", "bean"), Object.class, null); - element.setNil(true); - context.createMarshaller().marshal(element, writer); - // System.out.println(writer.toString()); - StreamSource source = new StreamSource(new StringReader(writer.toString())); - Object result = context.createUnmarshaller().unmarshal(source, String.class); - assertTrue(result instanceof JAXBElement); - JAXBElement e2 = (JAXBElement)result; - assertNull(e2.getValue()); - } - - public void testArray() throws Exception { - JAXBContext context = JAXBContext.newInstance(String[].class); - StringWriter writer = new StringWriter(); - JAXBElement element = - new JAXBElement(new QName("http://ns1", "bean"), Object.class, new String[] {"ABC", "123"}); - context.createMarshaller().marshal(element, writer); - // System.out.println(writer.toString()); - - Object result = context.createUnmarshaller().unmarshal(new StringReader(writer.toString())); - assertTrue(result instanceof JAXBElement); - JAXBElement e2 = (JAXBElement)result; - assertTrue(e2.getValue() instanceof String[]); - } - - public void testByteArray() throws Exception { - JAXBContext context = JAXBContext.newInstance(byte[].class); - StringWriter writer = new StringWriter(); - JAXBElement element = - new JAXBElement(new QName("http://ns1", "bean"), Object.class, "ABC".getBytes()); - context.createMarshaller().marshal(element, writer); - String xml = writer.toString(); - assertTrue(xml.contains("QUJD")); - assertTrue(xml.contains("base64Binary")); - - Object result = context.createUnmarshaller().unmarshal(new StringReader(xml)); - assertTrue(result instanceof JAXBElement); - JAXBElement e2 = (JAXBElement)result; - assertTrue(e2.getValue() instanceof byte[]); - } - - public void testPrimitive() throws Exception { - JAXBContext context = JAXBContext.newInstance(int.class); - StringWriter writer = new StringWriter(); - JAXBElement element = new JAXBElement(new QName("http://ns1", "bean"), Object.class, 1); - context.createMarshaller().marshal(element, writer); - // System.out.println(writer.toString()); - - Object result = context.createUnmarshaller().unmarshal(new StringReader(writer.toString())); - assertTrue(result instanceof JAXBElement); - JAXBElement e2 = (JAXBElement)result; - assertEquals(1, e2.getValue()); - } - - /* - public void testException() throws Exception { - JAXBContext context = JAXBContext.newInstance(IllegalArgumentException.class); - StringWriter writer = new StringWriter(); - Exception e = new IllegalArgumentException("123"); - JAXBElement element = new JAXBElement(new QName("http://ns1", "bean"), Object.class, e); - context.createMarshaller().marshal(element, writer); - System.out.println(writer.toString()); - - Object result = context.createUnmarshaller().unmarshal(new StringReader(writer.toString())); - assertTrue(result instanceof JAXBElement); - JAXBElement e2 = (JAXBElement)result; - assertTrue(e2.getValue() instanceof Exception); - } - */ - - private static RuntimeTypeInfoSet create(Class... classes) throws Exception { - IllegalAnnotationsException.Builder errorListener = new IllegalAnnotationsException.Builder(); - RuntimeInlineAnnotationReader reader = new RuntimeInlineAnnotationReader(); - JAXBContextImpl context = - new JAXBContextImpl(classes, null, Collections. emptyMap(), null, false, reader, false, false); - RuntimeModelBuilder builder = - new RuntimeModelBuilder(context, reader, Collections. emptyMap(), null); - builder.setErrorHandler(errorListener); - for (Class c : classes) - builder.getTypeInfo(new Ref(c)); - - RuntimeTypeInfoSet r = builder.link(); - errorListener.check(); - return r; - } - - public void testReflection() throws Exception { - MyBean bean = new MyBean(); - RuntimeTypeInfoSet model = create(MyBean.class); - RuntimeClassInfo clsInfo = (RuntimeClassInfo)model.getTypeInfo(MyBean.class); - for (RuntimePropertyInfo p : clsInfo.getProperties()) { - // System.out.print(p.getName()); - // System.out.println(" " + p.isCollection()); - if (p.getName().equals("notes")) { - Collection c = (Collection)p.getAccessor().get(bean); - c.add("123"); - } - } - - } -} diff --git a/branches/sca-java-1.5/modules/databinding-jaxb/src/test/resources/ipo.xsd b/branches/sca-java-1.5/modules/databinding-jaxb/src/test/resources/ipo.xsd deleted file mode 100755 index 241ec15d36..0000000000 --- a/branches/sca-java-1.5/modules/databinding-jaxb/src/test/resources/ipo.xsd +++ /dev/null @@ -1,136 +0,0 @@ - - - - - - International Purchase order schema for Example.com - Copyright 2000 Example.com. All rights reserved. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -- cgit v1.2.3