Remove module interface-wsdl-java2wsdl
git-svn-id: http://svn.us.apache.org/repos/asf/tuscany@673199 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
parent
4319151b25
commit
ae1154b985
18 changed files with 0 additions and 2367 deletions
|
@ -80,11 +80,6 @@
|
|||
<artifactId>tuscany-interface-wsdl-xml</artifactId>
|
||||
<version>1.4-SNAPSHOT</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.apache.tuscany.sca</groupId>
|
||||
<artifactId>tuscany-interface-wsdl-java2wsdl</artifactId>
|
||||
<version>1.4-SNAPSHOT</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.apache.tuscany.sca</groupId>
|
||||
<artifactId>tuscany-databinding</artifactId>
|
||||
|
|
|
@ -78,12 +78,6 @@
|
|||
<version>1.4-SNAPSHOT</version>
|
||||
<scope>test</scope>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>org.apache.tuscany.sca</groupId>
|
||||
<artifactId>tuscany-interface-wsdl-java2wsdl</artifactId>
|
||||
<version>1.4-SNAPSHOT</version>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>org.apache.tuscany.sca</groupId>
|
||||
|
|
|
@ -51,12 +51,6 @@
|
|||
<version>1.4-SNAPSHOT</version>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>org.apache.tuscany.sca</groupId>
|
||||
<artifactId>tuscany-interface-wsdl-java2wsdl</artifactId>
|
||||
<version>1.4-SNAPSHOT</version>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>org.apache.tuscany.sca</groupId>
|
||||
<artifactId>tuscany-assembly-xml</artifactId>
|
||||
|
|
|
@ -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.
|
||||
|
||||
|
||||
|
|
@ -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/).
|
||||
|
|
@ -1,135 +0,0 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!--
|
||||
* Licensed to the Apache Software Foundation (ASF) under one
|
||||
* or more contributor license agreements. See the NOTICE file
|
||||
* distributed with this work for additional information
|
||||
* regarding copyright ownership. The ASF licenses this file
|
||||
* to you under the Apache License, Version 2.0 (the
|
||||
* "License"); you may not use this file except in compliance
|
||||
* with the License. You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing,
|
||||
* software distributed under the License is distributed on an
|
||||
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||
* KIND, either express or implied. See the License for the
|
||||
* specific language governing permissions and limitations
|
||||
* under the License.
|
||||
-->
|
||||
<project>
|
||||
<modelVersion>4.0.0</modelVersion>
|
||||
<parent>
|
||||
<groupId>org.apache.tuscany.sca</groupId>
|
||||
<artifactId>tuscany-modules</artifactId>
|
||||
<version>1.4-SNAPSHOT</version>
|
||||
<relativePath>../pom.xml</relativePath>
|
||||
</parent>
|
||||
<artifactId>tuscany-interface-wsdl-java2wsdl</artifactId>
|
||||
<name>Apache Tuscany SCA WSDL Interface Java2WSDL Helper</name>
|
||||
|
||||
<dependencies>
|
||||
|
||||
<dependency>
|
||||
<groupId>org.apache.tuscany.sca</groupId>
|
||||
<artifactId>tuscany-interface-wsdl</artifactId>
|
||||
<version>1.4-SNAPSHOT</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.apache.tuscany.sca</groupId>
|
||||
<artifactId>tuscany-interface-wsdl-xml</artifactId>
|
||||
<version>1.4-SNAPSHOT</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.apache.tuscany.sca</groupId>
|
||||
<artifactId>tuscany-interface-java</artifactId>
|
||||
<version>1.4-SNAPSHOT</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.apache.tuscany.sca</groupId>
|
||||
<artifactId>tuscany-interface-java-jaxws</artifactId>
|
||||
<version>1.4-SNAPSHOT</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.apache.tuscany.sca</groupId>
|
||||
<artifactId>tuscany-xsd</artifactId>
|
||||
<version>1.4-SNAPSHOT</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.apache.tuscany.sca</groupId>
|
||||
<artifactId>tuscany-xsd-xml</artifactId>
|
||||
<version>1.4-SNAPSHOT</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.apache.tuscany.sca</groupId>
|
||||
<artifactId>tuscany-databinding</artifactId>
|
||||
<version>1.4-SNAPSHOT</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.apache.axis2</groupId>
|
||||
<artifactId>axis2-java2wsdl</artifactId>
|
||||
<version>1.3</version>
|
||||
<exclusions>
|
||||
<exclusion>
|
||||
<groupId>commons-codec</groupId>
|
||||
<artifactId>commons-codec</artifactId>
|
||||
</exclusion>
|
||||
<exclusion>
|
||||
<groupId>backport-util-concurrent</groupId>
|
||||
<artifactId>backport-util-concurrent</artifactId>
|
||||
</exclusion>
|
||||
</exclusions>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>backport-util-concurrent</groupId>
|
||||
<artifactId>backport-util-concurrent</artifactId>
|
||||
<version>3.0</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.apache.axis2</groupId>
|
||||
<artifactId>axis2-adb</artifactId>
|
||||
<version>1.3</version>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>junit</groupId>
|
||||
<artifactId>junit</artifactId>
|
||||
<version>4.2</version>
|
||||
<scope>test</scope>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>org.apache.tuscany.sca</groupId>
|
||||
<artifactId>tuscany-core-databinding</artifactId>
|
||||
<version>1.4-SNAPSHOT</version>
|
||||
<scope>test</scope>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>commons-codec</groupId>
|
||||
<artifactId>commons-codec</artifactId>
|
||||
<version>1.3</version>
|
||||
</dependency>
|
||||
|
||||
</dependencies>
|
||||
|
||||
|
||||
<build>
|
||||
<plugins>
|
||||
<plugin>
|
||||
<groupId>org.apache.felix</groupId>
|
||||
<artifactId>maven-bundle-plugin</artifactId>
|
||||
|
||||
<configuration>
|
||||
<instructions>
|
||||
<Bundle-Version>${tuscany.version}</Bundle-Version>
|
||||
<Bundle-SymbolicName>org.apache.tuscany.sca.interface.wsdl.java2wsdl</Bundle-SymbolicName>
|
||||
<Bundle-Description>${pom.name}</Bundle-Description>
|
||||
<Export-Package>org.apache.tuscany.sca.interfacedef.wsdl*</Export-Package>
|
||||
</instructions>
|
||||
</configuration>
|
||||
</plugin>
|
||||
</plugins>
|
||||
</build>
|
||||
|
||||
</project>
|
|
@ -1,685 +0,0 @@
|
|||
/*
|
||||
* Licensed to the Apache Software Foundation (ASF) under one
|
||||
* or more contributor license agreements. See the NOTICE file
|
||||
* distributed with this work for additional information
|
||||
* regarding copyright ownership. The ASF licenses this file
|
||||
* to you under the Apache License, Version 2.0 (the
|
||||
* "License"); you may not use this file except in compliance
|
||||
* with the License. You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing,
|
||||
* software distributed under the License is distributed on an
|
||||
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||
* KIND, either express or implied. See the License for the
|
||||
* specific language governing permissions and limitations
|
||||
* under the License.
|
||||
*/
|
||||
|
||||
package org.apache.tuscany.sca.interfacedef.wsdl.interface2wsdl;
|
||||
|
||||
import java.lang.reflect.Method;
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashMap;
|
||||
import java.util.HashSet;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
import javax.wsdl.Binding;
|
||||
import javax.wsdl.BindingOperation;
|
||||
import javax.wsdl.Definition;
|
||||
import javax.wsdl.Fault;
|
||||
import javax.wsdl.Input;
|
||||
import javax.wsdl.Message;
|
||||
import javax.wsdl.OperationType;
|
||||
import javax.wsdl.Output;
|
||||
import javax.wsdl.Part;
|
||||
import javax.wsdl.PortType;
|
||||
import javax.wsdl.Types;
|
||||
import javax.wsdl.WSDLException;
|
||||
import javax.wsdl.extensions.schema.Schema;
|
||||
import javax.wsdl.factory.WSDLFactory;
|
||||
import javax.xml.namespace.QName;
|
||||
import javax.xml.parsers.DocumentBuilderFactory;
|
||||
import javax.xml.parsers.ParserConfigurationException;
|
||||
|
||||
import org.apache.tuscany.sca.contribution.resolver.ModelResolver;
|
||||
import org.apache.tuscany.sca.databinding.DataBinding;
|
||||
import org.apache.tuscany.sca.databinding.DataBindingExtensionPoint;
|
||||
import org.apache.tuscany.sca.databinding.XMLTypeHelper;
|
||||
import org.apache.tuscany.sca.databinding.jaxb.JAXBDataBinding;
|
||||
import org.apache.tuscany.sca.interfacedef.DataType;
|
||||
import org.apache.tuscany.sca.interfacedef.Interface;
|
||||
import org.apache.tuscany.sca.interfacedef.Operation;
|
||||
import org.apache.tuscany.sca.interfacedef.java.JavaInterface;
|
||||
import org.apache.tuscany.sca.interfacedef.java.JavaOperation;
|
||||
import org.apache.tuscany.sca.interfacedef.util.ElementInfo;
|
||||
import org.apache.tuscany.sca.interfacedef.util.JavaXMLMapper;
|
||||
import org.apache.tuscany.sca.interfacedef.util.TypeInfo;
|
||||
import org.apache.tuscany.sca.interfacedef.util.WrapperInfo;
|
||||
import org.apache.tuscany.sca.interfacedef.util.XMLType;
|
||||
import org.apache.tuscany.sca.interfacedef.wsdl.WSDLDefinition;
|
||||
import org.apache.tuscany.sca.interfacedef.wsdl.WSDLInterface;
|
||||
import org.apache.tuscany.sca.xsd.XSDFactory;
|
||||
import org.apache.tuscany.sca.xsd.XSDefinition;
|
||||
import org.apache.ws.commons.schema.XmlSchema;
|
||||
import org.apache.ws.commons.schema.XmlSchemaCollection;
|
||||
import org.apache.ws.commons.schema.XmlSchemaException;
|
||||
import org.apache.ws.commons.schema.utils.NamespaceMap;
|
||||
import org.w3c.dom.Document;
|
||||
import org.w3c.dom.Element;
|
||||
|
||||
/**
|
||||
* @version $Rev$ $Date$
|
||||
*/
|
||||
public class Interface2WSDLGenerator {
|
||||
private static final String SCHEMA_NS = "http://www.w3.org/2001/XMLSchema";
|
||||
private static final String SCHEMA_NAME = "schema";
|
||||
private static final QName SCHEMA_QNAME = new QName(SCHEMA_NS, SCHEMA_NAME);
|
||||
private static final String XMLNS_NS = "http://www.w3.org/2000/xmlns/";
|
||||
|
||||
private static final String ANYTYPE_NAME = "anyType";
|
||||
private static final QName ANYTYPE_QNAME = new QName(SCHEMA_NS, ANYTYPE_NAME);
|
||||
|
||||
|
||||
private WSDLFactory factory;
|
||||
private DataBindingExtensionPoint dataBindings;
|
||||
private WSDLDefinitionGenerator definitionGenerator;
|
||||
private boolean requiresSOAP12;
|
||||
private ModelResolver resolver;
|
||||
private XSDFactory xsdFactory;
|
||||
|
||||
public Interface2WSDLGenerator(boolean requiresSOAP12,
|
||||
ModelResolver resolver,
|
||||
DataBindingExtensionPoint dataBindings,
|
||||
XSDFactory xsdFactory) throws WSDLException {
|
||||
this(requiresSOAP12, resolver, dataBindings, xsdFactory, WSDLFactory.newInstance());
|
||||
}
|
||||
|
||||
public Interface2WSDLGenerator(boolean requiresSOAP12,
|
||||
ModelResolver resolver,
|
||||
DataBindingExtensionPoint dataBindings,
|
||||
XSDFactory xsdFactory,
|
||||
WSDLFactory factory) {
|
||||
super();
|
||||
this.requiresSOAP12 = requiresSOAP12;
|
||||
this.resolver = resolver;
|
||||
definitionGenerator = new WSDLDefinitionGenerator(requiresSOAP12);
|
||||
this.dataBindings = dataBindings;
|
||||
this.xsdFactory = xsdFactory;
|
||||
this.factory = factory;
|
||||
}
|
||||
|
||||
private void addDataType(Map<String, List<DataType>> map, DataType type) {
|
||||
if (type == null) {
|
||||
return;
|
||||
}
|
||||
String db = type.getDataBinding();
|
||||
if (db == null) {
|
||||
return;
|
||||
}
|
||||
if ("java:array".equals(db)) {
|
||||
DataType dt = (DataType)type.getLogical();
|
||||
db = dt.getDataBinding();
|
||||
}
|
||||
List<DataType> types = map.get(db);
|
||||
if (types == null) {
|
||||
types = new ArrayList<DataType>();
|
||||
map.put(db, types);
|
||||
}
|
||||
types.add(type);
|
||||
}
|
||||
|
||||
private Map<String, List<DataType>> getDataTypes(Interface intf, boolean useWrapper) {
|
||||
Map<String, List<DataType>> dataTypes = new HashMap<String, List<DataType>>();
|
||||
for (Operation op : intf.getOperations()) {
|
||||
WrapperInfo wrapper = op.getWrapper();
|
||||
if (useWrapper && wrapper != null) {
|
||||
DataType dt1 = wrapper.getInputWrapperType();
|
||||
addDataType(dataTypes, dt1);
|
||||
DataType dt2 = wrapper.getOutputWrapperType();
|
||||
addDataType(dataTypes, dt2);
|
||||
} else {
|
||||
for (DataType dt1 : op.getInputType().getLogical()) {
|
||||
addDataType(dataTypes, dt1);
|
||||
}
|
||||
DataType dt2 = op.getOutputType();
|
||||
addDataType(dataTypes, dt2);
|
||||
}
|
||||
for (DataType<DataType> dt3 : op.getFaultTypes()) {
|
||||
DataType dt4 = dt3.getLogical();
|
||||
addDataType(dataTypes, dt4);
|
||||
}
|
||||
}
|
||||
return dataTypes;
|
||||
}
|
||||
|
||||
|
||||
public Definition generate(Interface interfaze, WSDLDefinition wsdlDefinition) throws WSDLException {
|
||||
if (interfaze == null) {
|
||||
return null;
|
||||
}
|
||||
if (!interfaze.isRemotable()) {
|
||||
throw new IllegalArgumentException("Interface is not remotable");
|
||||
}
|
||||
if (interfaze instanceof WSDLInterface) {
|
||||
return ((WSDLInterface)interfaze).getWsdlDefinition().getDefinition();
|
||||
}
|
||||
JavaInterface iface = (JavaInterface)interfaze;
|
||||
QName name = getQName(iface);
|
||||
Definition definition = factory.newDefinition();
|
||||
if (requiresSOAP12) {
|
||||
definition.addNamespace("soap12", "http://schemas.xmlsoap.org/wsdl/soap12/");
|
||||
} else {
|
||||
definition.addNamespace("soap", "http://schemas.xmlsoap.org/wsdl/soap/");
|
||||
}
|
||||
definition.addNamespace("wsdl", "http://schemas.xmlsoap.org/wsdl/");
|
||||
definition.addNamespace("xs", SCHEMA_NS);
|
||||
|
||||
String namespaceURI = name.getNamespaceURI();
|
||||
definition.setTargetNamespace(namespaceURI);
|
||||
definition.setQName(new QName(namespaceURI, name.getLocalPart() + "Service", name.getPrefix()));
|
||||
definition.addNamespace(name.getPrefix(), namespaceURI);
|
||||
|
||||
PortType portType = definition.createPortType();
|
||||
portType.setQName(name);
|
||||
Binding binding = definitionGenerator.createBinding(definition, portType);
|
||||
Map<String, XMLTypeHelper> helpers = new HashMap<String, XMLTypeHelper>();
|
||||
Map<QName, List<ElementInfo>> wrappers = new HashMap<QName, List<ElementInfo>>();
|
||||
for (Operation op : interfaze.getOperations()) {
|
||||
javax.wsdl.Operation operation = generateOperation(definition, op, helpers, wrappers);
|
||||
portType.addOperation(operation);
|
||||
String action = ((JavaOperation)op).getAction();
|
||||
BindingOperation bindingOp = definitionGenerator.createBindingOperation(definition, operation, action);
|
||||
binding.addBindingOperation(bindingOp);
|
||||
}
|
||||
portType.setUndefined(false);
|
||||
definition.addPortType(portType);
|
||||
binding.setUndefined(false);
|
||||
definition.addBinding(binding);
|
||||
wsdlDefinition.setBinding(binding);
|
||||
|
||||
// call each helper in turn to populate the wsdl.types element
|
||||
XmlSchemaCollection schemaCollection = new XmlSchemaCollection();
|
||||
|
||||
for (Map.Entry<String, List<DataType>> en: getDataTypes(interfaze, false).entrySet()) {
|
||||
XMLTypeHelper helper = helpers.get(en.getKey());
|
||||
if (helper == null) {
|
||||
continue;
|
||||
}
|
||||
List<XSDefinition> xsDefinitions = helper.getSchemaDefinitions(xsdFactory, resolver, en.getValue());
|
||||
for (XSDefinition xsDef: xsDefinitions) {
|
||||
addSchemaExtension(xsDef, schemaCollection, wsdlDefinition, definition);
|
||||
}
|
||||
}
|
||||
|
||||
// remove global wrapper elements with schema definitions from generation list
|
||||
for (QName wrapperName: new HashSet<QName>(wrappers.keySet())) {
|
||||
if (wsdlDefinition.getXmlSchemaElement(wrapperName) != null) {
|
||||
wrappers.remove(wrapperName);
|
||||
}
|
||||
}
|
||||
|
||||
// generate schema elements for wrappers that aren't defined in the schemas
|
||||
if (wrappers.size() > 0) {
|
||||
int i = 0;
|
||||
Map<String, XSDefinition> wrapperXSDs = new HashMap<String, XSDefinition>();
|
||||
Map<Element, Map<String, String>> prefixMaps = new HashMap<Element, Map<String, String>>();
|
||||
for (Map.Entry<QName, List<ElementInfo>> entry: wrappers.entrySet()) {
|
||||
String targetNS = entry.getKey().getNamespaceURI();
|
||||
Document schemaDoc = null;
|
||||
Element schema = null;
|
||||
XSDefinition xsDef = wrapperXSDs.get(targetNS);
|
||||
if (xsDef != null) {
|
||||
schemaDoc = xsDef.getDocument();
|
||||
schema = schemaDoc.getDocumentElement();
|
||||
} else {
|
||||
schemaDoc = createDocument();
|
||||
schema = schemaDoc.createElementNS(SCHEMA_NS, "xs:schema");
|
||||
// The elementFormDefault should be set to unqualified, see TUSCANY-2388
|
||||
schema.setAttribute("elementFormDefault", "unqualified");
|
||||
schema.setAttribute("attributeFormDefault", "qualified");
|
||||
schema.setAttribute("targetNamespace", targetNS);
|
||||
schema.setAttributeNS(XMLNS_NS, "xmlns:xs", SCHEMA_NS);
|
||||
schemaDoc.appendChild(schema);
|
||||
Schema schemaExt = createSchemaExt(definition);
|
||||
schemaExt.setElement(schema);
|
||||
prefixMaps.put(schema, new HashMap<String, String>());
|
||||
xsDef = xsdFactory.createXSDefinition();
|
||||
xsDef.setUnresolved(true);
|
||||
xsDef.setNamespace(targetNS);
|
||||
xsDef.setDocument(schemaDoc);
|
||||
wrapperXSDs.put(targetNS, xsDef);
|
||||
}
|
||||
Element wrapper = schemaDoc.createElementNS(SCHEMA_NS, "xs:element");
|
||||
schema.appendChild(wrapper);
|
||||
wrapper.setAttribute("name", entry.getKey().getLocalPart());
|
||||
if (entry.getValue().size() == 1 && entry.getValue().get(0).getQName() == null) {
|
||||
// special case for global fault element
|
||||
QName typeName = entry.getValue().get(0).getType().getQName();
|
||||
wrapper.setAttribute("type", typeName.getLocalPart());
|
||||
} else {
|
||||
// normal wrapper containing type definition inline
|
||||
Element complexType = schemaDoc.createElementNS(SCHEMA_NS, "xs:complexType");
|
||||
wrapper.appendChild(complexType);
|
||||
if (entry.getValue().size() > 0) {
|
||||
Element sequence = schemaDoc.createElementNS(SCHEMA_NS, "xs:sequence");
|
||||
complexType.appendChild(sequence);
|
||||
for (ElementInfo element: entry.getValue()) {
|
||||
Element xsElement = schemaDoc.createElementNS(SCHEMA_NS, "xs:element");
|
||||
if (element.isMany()) {
|
||||
xsElement.setAttribute("maxOccurs", "unbounded");
|
||||
}
|
||||
xsElement.setAttribute("minOccurs", "0");
|
||||
xsElement.setAttribute("name", element.getQName().getLocalPart());
|
||||
if (element.isNillable()) {
|
||||
xsElement.setAttribute("nillable", "true");
|
||||
}
|
||||
QName typeName = element.getType().getQName();
|
||||
String nsURI = typeName.getNamespaceURI();
|
||||
if ("".equals(nsURI) || targetNS.equals(nsURI)) {
|
||||
xsElement.setAttribute("type", typeName.getLocalPart());
|
||||
} else if (SCHEMA_NS.equals(nsURI)) {
|
||||
xsElement.setAttribute("type", "xs:" + typeName.getLocalPart());
|
||||
} else {
|
||||
Map<String, String> prefixMap = prefixMaps.get(schema);
|
||||
String prefix = prefixMap.get(nsURI);
|
||||
if (prefix == null) {
|
||||
prefix = "ns" + i++;
|
||||
prefixMap.put(nsURI, prefix);
|
||||
schema.setAttributeNS(XMLNS_NS, "xmlns:" + prefix, nsURI);
|
||||
}
|
||||
xsElement.setAttribute("type", prefix + ":" + typeName.getLocalPart());
|
||||
}
|
||||
sequence.appendChild(xsElement);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// resolve XSDefinitions containing generated wrappers
|
||||
for (XSDefinition xsDef: wrapperXSDs.values()) {
|
||||
loadXSD(schemaCollection, xsDef);
|
||||
wsdlDefinition.getXmlSchemas().add(xsDef);
|
||||
}
|
||||
}
|
||||
|
||||
return definition;
|
||||
}
|
||||
|
||||
private void addSchemaExtension(XSDefinition xsDef,
|
||||
XmlSchemaCollection schemaCollection,
|
||||
WSDLDefinition wsdlDefinition,
|
||||
Definition definition) throws WSDLException {
|
||||
if (xsDef.getAggregatedDefinitions() != null) {
|
||||
for (XSDefinition xsd: xsDef.getAggregatedDefinitions()) {
|
||||
addSchemaExtension(xsd, schemaCollection, wsdlDefinition, definition);
|
||||
}
|
||||
} else {
|
||||
String nsURI = xsDef.getNamespace();
|
||||
Document document = xsDef.getDocument();
|
||||
if (document == null) {
|
||||
try {
|
||||
NamespaceMap prefixMap = new NamespaceMap();
|
||||
prefixMap.add("xs", SCHEMA_NS);
|
||||
prefixMap.add("tns", nsURI);
|
||||
XmlSchema schemaDef = xsDef.getSchema();
|
||||
schemaDef.setNamespaceContext(prefixMap);
|
||||
Document[] docs = schemaDef.getAllSchemas();
|
||||
document = docs[docs.length-1];
|
||||
document.setDocumentURI(xsDef.getLocation().toString());
|
||||
xsDef.setDocument(document);
|
||||
} catch (XmlSchemaException e) {
|
||||
throw new RuntimeException(e);
|
||||
}
|
||||
}
|
||||
loadXSD(schemaCollection, xsDef);
|
||||
wsdlDefinition.getXmlSchemas().add(xsDef);
|
||||
Element schema = document.getDocumentElement();
|
||||
Schema schemaExt = createSchemaExt(definition);
|
||||
schemaExt.setDocumentBaseURI(document.getDocumentURI());
|
||||
schemaExt.setElement(schema);
|
||||
}
|
||||
}
|
||||
|
||||
private static void loadXSD(XmlSchemaCollection schemaCollection, XSDefinition definition) {
|
||||
if (definition.getSchema() != null) {
|
||||
return;
|
||||
}
|
||||
if (definition.getDocument() != null) {
|
||||
String uri = null;
|
||||
if (definition.getLocation() != null) {
|
||||
uri = definition.getLocation().toString();
|
||||
}
|
||||
XmlSchema schema = schemaCollection.read(definition.getDocument(), uri, null);
|
||||
if (definition.getSchemaCollection() == null) {
|
||||
definition.setSchemaCollection(schemaCollection);
|
||||
}
|
||||
if (definition.getSchema() == null) {
|
||||
definition.setSchema(schema);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public Schema createSchemaExt(Definition definition) throws WSDLException {
|
||||
Types types = definition.getTypes();
|
||||
if (types == null) {
|
||||
types = definition.createTypes();
|
||||
definition.setTypes(types);
|
||||
}
|
||||
|
||||
Schema schemaExt = createSchema(definition);
|
||||
types.addExtensibilityElement(schemaExt);
|
||||
|
||||
return schemaExt;
|
||||
}
|
||||
|
||||
public Schema createSchema(Definition definition) throws WSDLException {
|
||||
return (Schema)definition.getExtensionRegistry().createExtension(Types.class, SCHEMA_QNAME);
|
||||
}
|
||||
|
||||
private DocumentBuilderFactory documentBuilderFactory;
|
||||
|
||||
public Document createDocument() {
|
||||
Document document;
|
||||
try {
|
||||
if (documentBuilderFactory == null) {
|
||||
documentBuilderFactory = DocumentBuilderFactory.newInstance();
|
||||
documentBuilderFactory.setNamespaceAware(true);
|
||||
}
|
||||
document = documentBuilderFactory.newDocumentBuilder().newDocument();
|
||||
} catch (ParserConfigurationException e) {
|
||||
throw new RuntimeException(e);
|
||||
}
|
||||
// document.setDocumentURI("http://");
|
||||
return document;
|
||||
}
|
||||
|
||||
protected QName getQName(Interface interfaze) {
|
||||
JavaInterface iface = (JavaInterface)interfaze;
|
||||
QName qname = iface.getQName();
|
||||
if (qname != null) {
|
||||
return qname;
|
||||
} else {
|
||||
Class<?> javaClass = iface.getJavaClass();
|
||||
return new QName(JavaXMLMapper.getNamespace(javaClass), javaClass.getSimpleName(), "tns");
|
||||
}
|
||||
}
|
||||
|
||||
public javax.wsdl.Operation generateOperation(Definition definition,
|
||||
Operation op,
|
||||
Map<String, XMLTypeHelper> helpers,
|
||||
Map<QName, List<ElementInfo>> wrappers)
|
||||
throws WSDLException {
|
||||
javax.wsdl.Operation operation = definition.createOperation();
|
||||
operation.setName(op.getName());
|
||||
operation.setUndefined(false);
|
||||
|
||||
Input input = definition.createInput();
|
||||
Message inputMsg = definition.createMessage();
|
||||
String namespaceURI = definition.getQName().getNamespaceURI();
|
||||
QName inputMsgName = new QName(namespaceURI, op.getName());
|
||||
inputMsg.setQName(inputMsgName);
|
||||
inputMsg.setUndefined(false);
|
||||
definition.addMessage(inputMsg);
|
||||
|
||||
// FIXME: By default, java interface is mapped to doc-lit-wrapper style WSDL
|
||||
if (op.getWrapper() != null) {
|
||||
// Generate doc-lit-wrapper style
|
||||
inputMsg.addPart(generateWrapperPart(definition, op, helpers, wrappers, true));
|
||||
} else {
|
||||
// Bare style
|
||||
int i = 0;
|
||||
for (DataType d : op.getInputType().getLogical()) {
|
||||
inputMsg.addPart(generatePart(definition, d, "arg" + i));
|
||||
i++;
|
||||
}
|
||||
}
|
||||
input.setMessage(inputMsg);
|
||||
operation.setInput(input);
|
||||
|
||||
if (!op.isNonBlocking()) {
|
||||
Output output = definition.createOutput();
|
||||
Message outputMsg = definition.createMessage();
|
||||
QName outputMsgName = new QName(namespaceURI, op.getName() + "Response");
|
||||
outputMsg.setQName(outputMsgName);
|
||||
outputMsg.setUndefined(false);
|
||||
definition.addMessage(outputMsg);
|
||||
|
||||
if (op.getWrapper() != null) {
|
||||
outputMsg.addPart(generateWrapperPart(definition, op, helpers, wrappers, false));
|
||||
} else {
|
||||
outputMsg.addPart(generatePart(definition, op.getOutputType(), "return"));
|
||||
}
|
||||
output.setMessage(outputMsg);
|
||||
|
||||
operation.setOutput(output);
|
||||
operation.setStyle(OperationType.REQUEST_RESPONSE);
|
||||
} else {
|
||||
operation.setStyle(OperationType.ONE_WAY);
|
||||
}
|
||||
|
||||
for (DataType<DataType> faultType: op.getFaultTypes()) {
|
||||
Fault fault = definition.createFault();
|
||||
QName faultName = ((XMLType)faultType.getLogical().getLogical()).getElementName();
|
||||
fault.setName(faultName.getLocalPart());
|
||||
Message faultMsg = definition.getMessage(faultName);
|
||||
if (faultMsg == null) {
|
||||
faultMsg = definition.createMessage();
|
||||
faultMsg.setQName(faultName);
|
||||
faultMsg.setUndefined(false);
|
||||
definition.addMessage(faultMsg);
|
||||
faultMsg.addPart(generatePart(definition, faultType.getLogical(), faultName.getLocalPart()));
|
||||
}
|
||||
fault.setMessage(faultMsg);
|
||||
operation.addFault(fault);
|
||||
List<ElementInfo> elements = null;
|
||||
if (faultType.getLogical().getPhysical() != faultType.getPhysical()) {
|
||||
// create special wrapper for type indirection to real fault bean
|
||||
elements = new ArrayList<ElementInfo>(1);
|
||||
DataType logical = faultType.getLogical();
|
||||
elements.add(getElementInfo(logical.getPhysical(), logical, null, helpers));
|
||||
} else {
|
||||
// convert synthesized fault bean to a wrapper type
|
||||
elements = new ArrayList<ElementInfo>();
|
||||
for (DataType<XMLType> propDT: op.getFaultBeans().get(faultName)) {
|
||||
XMLType logical = propDT.getLogical();
|
||||
elements.add(getElementInfo(propDT.getPhysical(), propDT, logical.getElementName(), helpers));
|
||||
}
|
||||
}
|
||||
wrappers.put(faultName, elements);
|
||||
}
|
||||
|
||||
operation.setUndefined(false);
|
||||
return operation;
|
||||
}
|
||||
|
||||
public Part generatePart(Definition definition, DataType arg, String partName) {
|
||||
Part part = definition.createPart();
|
||||
part.setName(partName);
|
||||
if (arg != null && arg.getLogical() instanceof XMLType) {
|
||||
XMLType xmlType = (XMLType)arg.getLogical();
|
||||
QName elementName = xmlType.getElementName();
|
||||
part.setElementName(elementName);
|
||||
addNamespace(definition, elementName);
|
||||
if (xmlType.getElementName() == null) {
|
||||
QName typeName = xmlType.getTypeName();
|
||||
part.setTypeName(typeName);
|
||||
addNamespace(definition, typeName);
|
||||
}
|
||||
}
|
||||
return part;
|
||||
}
|
||||
|
||||
public Part generateWrapperPart(Definition definition,
|
||||
Operation operation,
|
||||
Map<String, XMLTypeHelper> helpers,
|
||||
Map<QName, List<ElementInfo>> wrappers,
|
||||
boolean input) throws WSDLException {
|
||||
Part part = definition.createPart();
|
||||
String partName = input ? operation.getName() : (operation.getName() + "Response");
|
||||
part.setName(partName);
|
||||
WrapperInfo opWrapper = operation.getWrapper();
|
||||
if (opWrapper != null) {
|
||||
ElementInfo elementInfo =
|
||||
input ? opWrapper.getInputWrapperElement() : opWrapper.getOutputWrapperElement();
|
||||
List<ElementInfo> elements =
|
||||
input ? opWrapper.getInputChildElements() : opWrapper.getOutputChildElements();
|
||||
QName wrapperName = elementInfo.getQName();
|
||||
part.setElementName(wrapperName);
|
||||
addNamespace(definition, wrapperName);
|
||||
wrappers.put(wrapperName, elements);
|
||||
|
||||
// FIXME: [rfeng] Ideally, we should try to register the wrappers only. But we are
|
||||
// expriencing the problem that we cannot handle XSD imports
|
||||
/*
|
||||
Class<?> wrapperClass = input ? opWrapper.getInputWrapperClass() : opWrapper.getOutputWrapperClass();
|
||||
DataType wrapperDT = input ? opWrapper.getInputWrapperType() : opWrapper.getOutputWrapperType();
|
||||
if (wrapperClass != null) {
|
||||
getElementInfo(wrapperClass, wrapperDT, wrapperName, helpers);
|
||||
return part;
|
||||
}
|
||||
*/
|
||||
|
||||
Method method = ((JavaOperation)operation).getJavaMethod();
|
||||
if (input) {
|
||||
Class<?>[] paramTypes = method.getParameterTypes();
|
||||
for (int i = 0; i < paramTypes.length; i++) {
|
||||
DataType dataType = operation.getInputType().getLogical().get(i);
|
||||
elements.set(i, getElementInfo(paramTypes[i], dataType, elements.get(i).getQName(), helpers));
|
||||
}
|
||||
} else {
|
||||
Class<?> returnType = method.getReturnType();
|
||||
if (returnType != Void.TYPE) {
|
||||
DataType dataType = operation.getOutputType();
|
||||
elements.set(0, getElementInfo(returnType, dataType, elements.get(0).getQName(), helpers));
|
||||
}
|
||||
}
|
||||
}
|
||||
return part;
|
||||
}
|
||||
|
||||
private ElementInfo getElementInfo(Class javaType,
|
||||
DataType dataType,
|
||||
QName name,
|
||||
Map<String, XMLTypeHelper> helpers) {
|
||||
String db = dataType.getDataBinding();
|
||||
while ("java:array".equals(db)) {
|
||||
dataType = (DataType)dataType.getLogical();
|
||||
db = dataType.getDataBinding();
|
||||
}
|
||||
XMLTypeHelper helper = helpers.get(db);
|
||||
if (helper == null) {
|
||||
DataBinding dataBinding = dataBindings.getDataBinding(db);
|
||||
if (dataBinding == null) {
|
||||
QName element = name;
|
||||
if (element == null || dataType.getLogical() instanceof XMLType) {
|
||||
XMLType xmlType = (XMLType)dataType.getLogical();
|
||||
if (xmlType.getElementName() != null) {
|
||||
element = xmlType.getElementName();
|
||||
}
|
||||
}
|
||||
return new ElementInfo(element, new TypeInfo(ANYTYPE_QNAME, false, null));
|
||||
// throw new ServiceRuntimeException("No data binding for " + db);
|
||||
}
|
||||
|
||||
helper = dataBinding.getXMLTypeHelper();
|
||||
if (helper == null) {
|
||||
// Default to JAXB
|
||||
helper = helpers.get(JAXBDataBinding.NAME);
|
||||
if (helper == null) {
|
||||
helper = dataBindings.getDataBinding(JAXBDataBinding.NAME).getXMLTypeHelper();
|
||||
helpers.put(JAXBDataBinding.NAME, helper);
|
||||
}
|
||||
}
|
||||
helpers.put(db, helper);
|
||||
}
|
||||
TypeInfo typeInfo = helper.getTypeInfo(javaType.isArray() ? javaType.getComponentType() : javaType,
|
||||
dataType.getLogical());
|
||||
ElementInfo element = new ElementInfo(name, typeInfo);
|
||||
element.setMany(byte[].class != javaType && javaType.isArray());
|
||||
element.setNillable(!javaType.isPrimitive());
|
||||
return element;
|
||||
}
|
||||
|
||||
private static void addNamespace(Definition definition, QName name) {
|
||||
String namespace = name.getNamespaceURI();
|
||||
if (definition.getPrefix(namespace) == null) {
|
||||
definition.addNamespace("ns" + definition.getNamespaces().size(), namespace);
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
// currently not using the next three methods
|
||||
public XmlSchemaType getXmlSchemaType(DataType type) {
|
||||
return null;
|
||||
}
|
||||
|
||||
// FIXME: WE need to add databinding-specific Java2XSD generation
|
||||
public Element generateXSD(DataType dataType) {
|
||||
DataBinding dataBinding = dataBindings.getDataBinding(dataType.getDataBinding());
|
||||
if (dataBinding != null) {
|
||||
// return dataBinding.generateSchema(dataType);
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
public void generateWrapperElements(Operation op) {
|
||||
XmlSchemaCollection collection = new XmlSchemaCollection();
|
||||
String ns = getQName(op.getInterface()).getNamespaceURI();
|
||||
XmlSchema schema = new XmlSchema(ns, collection);
|
||||
schema.setAttributeFormDefault(new XmlSchemaForm(XmlSchemaForm.QUALIFIED));
|
||||
schema.setElementFormDefault(new XmlSchemaForm(XmlSchemaForm.QUALIFIED));
|
||||
|
||||
XmlSchemaElement inputElement = new XmlSchemaElement();
|
||||
inputElement.setQName(new QName(ns, op.getName()));
|
||||
XmlSchemaComplexType inputType = new XmlSchemaComplexType(schema);
|
||||
inputType.setName("");
|
||||
XmlSchemaSequence inputSeq = new XmlSchemaSequence();
|
||||
inputType.setParticle(inputSeq);
|
||||
List<DataType> argTypes = op.getInputType().getLogical();
|
||||
for (DataType argType : argTypes) {
|
||||
XmlSchemaElement child = new XmlSchemaElement();
|
||||
Object logical = argType.getLogical();
|
||||
if (logical instanceof XMLType) {
|
||||
child.setName(((XMLType)logical).getElementName().getLocalPart());
|
||||
XmlSchemaType type = getXmlSchemaType(argType);
|
||||
child.setType(type);
|
||||
}
|
||||
inputSeq.getItems().add(child);
|
||||
}
|
||||
inputElement.setType(inputType);
|
||||
|
||||
XmlSchemaElement outputElement = new XmlSchemaElement();
|
||||
outputElement.setQName(new QName(ns, op.getName() + "Response"));
|
||||
XmlSchemaComplexType outputType = new XmlSchemaComplexType(schema);
|
||||
outputType.setName("");
|
||||
XmlSchemaSequence outputSeq = new XmlSchemaSequence();
|
||||
outputType.setParticle(outputSeq);
|
||||
DataType returnType = op.getOutputType();
|
||||
XmlSchemaElement child = new XmlSchemaElement();
|
||||
Object logical = returnType.getLogical();
|
||||
if (logical instanceof XMLType) {
|
||||
child.setName(((XMLType)logical).getElementName().getLocalPart());
|
||||
XmlSchemaType type = getXmlSchemaType(returnType);
|
||||
child.setType(type);
|
||||
}
|
||||
outputSeq.getItems().add(child);
|
||||
outputElement.setType(outputType);
|
||||
|
||||
schema.getElements().add(inputElement.getQName(), inputElement);
|
||||
schema.getElements().add(outputElement.getQName(), outputElement);
|
||||
|
||||
}
|
||||
*/
|
||||
|
||||
public WSDLFactory getFactory() {
|
||||
return factory;
|
||||
}
|
||||
|
||||
public void setFactory(WSDLFactory factory) {
|
||||
this.factory = factory;
|
||||
}
|
||||
|
||||
}
|
|
@ -1,304 +0,0 @@
|
|||
/*
|
||||
* Licensed to the Apache Software Foundation (ASF) under one
|
||||
* or more contributor license agreements. See the NOTICE file
|
||||
* distributed with this work for additional information
|
||||
* regarding copyright ownership. The ASF licenses this file
|
||||
* to you under the Apache License, Version 2.0 (the
|
||||
* "License"); you may not use this file except in compliance
|
||||
* with the License. You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing,
|
||||
* software distributed under the License is distributed on an
|
||||
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||
* KIND, either express or implied. See the License for the
|
||||
* specific language governing permissions and limitations
|
||||
* under the License.
|
||||
*/
|
||||
|
||||
package org.apache.tuscany.sca.interfacedef.wsdl.interface2wsdl;
|
||||
|
||||
import java.util.Iterator;
|
||||
|
||||
import javax.wsdl.Binding;
|
||||
import javax.wsdl.BindingFault;
|
||||
import javax.wsdl.BindingInput;
|
||||
import javax.wsdl.BindingOperation;
|
||||
import javax.wsdl.BindingOutput;
|
||||
import javax.wsdl.Definition;
|
||||
import javax.wsdl.Fault;
|
||||
import javax.wsdl.Input;
|
||||
import javax.wsdl.Operation;
|
||||
import javax.wsdl.Output;
|
||||
import javax.wsdl.Port;
|
||||
import javax.wsdl.PortType;
|
||||
import javax.wsdl.Service;
|
||||
import javax.wsdl.Types;
|
||||
import javax.wsdl.WSDLException;
|
||||
import javax.wsdl.extensions.ExtensibilityElement;
|
||||
import javax.wsdl.extensions.soap.SOAPAddress;
|
||||
import javax.wsdl.extensions.soap.SOAPBinding;
|
||||
import javax.wsdl.extensions.soap.SOAPBody;
|
||||
import javax.wsdl.extensions.soap.SOAPFault;
|
||||
import javax.wsdl.extensions.soap.SOAPOperation;
|
||||
import javax.wsdl.extensions.soap12.SOAP12Address;
|
||||
import javax.wsdl.extensions.soap12.SOAP12Binding;
|
||||
import javax.wsdl.extensions.soap12.SOAP12Body;
|
||||
import javax.wsdl.extensions.soap12.SOAP12Fault;
|
||||
import javax.wsdl.extensions.soap12.SOAP12Operation;
|
||||
import javax.wsdl.factory.WSDLFactory;
|
||||
import javax.wsdl.xml.WSDLReader;
|
||||
import javax.xml.namespace.QName;
|
||||
|
||||
import org.w3c.dom.Element;
|
||||
|
||||
/**
|
||||
*
|
||||
* @version $Rev$ $Date$
|
||||
*/
|
||||
public class WSDLDefinitionGenerator {
|
||||
private static final String SOAP_NS = "http://schemas.xmlsoap.org/wsdl/soap/";
|
||||
public static final QName SOAP_ADDRESS = new QName(SOAP_NS, "address");
|
||||
private static final QName SOAP_BINDING = new QName(SOAP_NS, "binding");
|
||||
private static final QName SOAP_BODY = new QName(SOAP_NS, "body");
|
||||
private static final QName SOAP_FAULT = new QName(SOAP_NS, "fault");
|
||||
private static final QName SOAP_OPERATION = new QName(SOAP_NS, "operation");
|
||||
private static final String SOAP12_NS = "http://schemas.xmlsoap.org/wsdl/soap12/";
|
||||
public static final QName SOAP12_ADDRESS = new QName(SOAP12_NS, "address");
|
||||
private static final QName SOAP12_BINDING = new QName(SOAP12_NS, "binding");
|
||||
private static final QName SOAP12_BODY = new QName(SOAP12_NS, "body");
|
||||
private static final QName SOAP12_FAULT = new QName(SOAP12_NS, "fault");
|
||||
private static final QName SOAP12_OPERATION = new QName(SOAP12_NS, "operation");
|
||||
|
||||
private static final String BINDING_SUFFIX = "Binding";
|
||||
private static final String SERVICE_SUFFIX = "Service";
|
||||
private static final String PORT_SUFFIX = "Port";
|
||||
|
||||
private boolean requiresSOAP12;
|
||||
private QName soapAddress;
|
||||
private QName soapBinding;
|
||||
private QName soapBody;
|
||||
private QName soapFault;
|
||||
private QName soapOperation;
|
||||
|
||||
public WSDLDefinitionGenerator(boolean requiresSOAP12) {
|
||||
super();
|
||||
this.requiresSOAP12 = requiresSOAP12;
|
||||
soapAddress = requiresSOAP12 ? SOAP12_ADDRESS : SOAP_ADDRESS;
|
||||
soapBinding = requiresSOAP12 ? SOAP12_BINDING : SOAP_BINDING;
|
||||
soapBody = requiresSOAP12 ? SOAP12_BODY : SOAP_BODY;
|
||||
soapFault = requiresSOAP12 ? SOAP12_FAULT : SOAP_FAULT;
|
||||
soapOperation = requiresSOAP12 ? SOAP12_OPERATION : SOAP_OPERATION;
|
||||
}
|
||||
|
||||
public Definition cloneDefinition(WSDLFactory factory, Definition definition) throws WSDLException {
|
||||
Element root = definition.getDocumentationElement();
|
||||
root = (Element)root.cloneNode(true);
|
||||
WSDLReader reader = factory.newWSDLReader();
|
||||
return reader.readWSDL(definition.getDocumentBaseURI(), root);
|
||||
}
|
||||
|
||||
public Types createTypes(Definition definition) {
|
||||
Types types = definition.createTypes();
|
||||
definition.setTypes(types);
|
||||
return types;
|
||||
}
|
||||
|
||||
public Binding createBinding(Definition definition, PortType portType) {
|
||||
try {
|
||||
Binding binding = definition.createBinding();
|
||||
binding.setPortType(portType);
|
||||
configureBinding(definition, binding, portType);
|
||||
ExtensibilityElement bindingExtension =
|
||||
definition.getExtensionRegistry().createExtension(Binding.class, soapBinding);
|
||||
if (requiresSOAP12) {
|
||||
((SOAP12Binding)bindingExtension).setStyle("document");
|
||||
((SOAP12Binding)bindingExtension).setTransportURI("http://schemas.xmlsoap.org/soap/http");
|
||||
} else {
|
||||
((SOAPBinding)bindingExtension).setStyle("document");
|
||||
((SOAPBinding)bindingExtension).setTransportURI("http://schemas.xmlsoap.org/soap/http");
|
||||
}
|
||||
binding.addExtensibilityElement(bindingExtension);
|
||||
return binding;
|
||||
} catch (WSDLException e) {
|
||||
throw new IllegalArgumentException(e);
|
||||
}
|
||||
}
|
||||
|
||||
protected void configureBinding(Definition definition, Binding binding, PortType portType) throws WSDLException {
|
||||
QName portTypeName = portType.getQName();
|
||||
if (portTypeName != null) {
|
||||
// Choose <porttype>Binding if available. If this name is in use, insert
|
||||
// separating underscores until there is no clash.
|
||||
for (String suffix = BINDING_SUFFIX; ; suffix = "_" + suffix) {
|
||||
QName name = new QName(definition.getTargetNamespace(), portTypeName.getLocalPart() + suffix);
|
||||
if (definition.getBinding(name) == null) {
|
||||
binding.setQName(name);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@SuppressWarnings("unchecked")
|
||||
public void createBindingOperations(Definition definition, Binding binding, PortType portType) {
|
||||
try {
|
||||
for (Iterator oi = portType.getOperations().iterator(); oi.hasNext();) {
|
||||
Operation operation = (Operation)oi.next();
|
||||
BindingOperation bindingOperation = createBindingOperation(definition, operation, "");
|
||||
binding.addBindingOperation(bindingOperation);
|
||||
}
|
||||
} catch (WSDLException e) {
|
||||
throw new IllegalArgumentException(e);
|
||||
}
|
||||
}
|
||||
|
||||
@SuppressWarnings("unchecked")
|
||||
public BindingOperation createBindingOperation(Definition definition, Operation operation, String action)
|
||||
throws WSDLException {
|
||||
BindingOperation bindingOperation = definition.createBindingOperation();
|
||||
bindingOperation.setOperation(operation);
|
||||
configureBindingOperation(bindingOperation, operation);
|
||||
ExtensibilityElement operationExtension =
|
||||
definition.getExtensionRegistry().createExtension(BindingOperation.class, soapOperation);
|
||||
if (requiresSOAP12) {
|
||||
((SOAP12Operation)operationExtension).setSoapActionURI(action);
|
||||
} else {
|
||||
((SOAPOperation)operationExtension).setSoapActionURI(action);
|
||||
}
|
||||
bindingOperation.addExtensibilityElement(operationExtension);
|
||||
if (operation.getInput() != null) {
|
||||
BindingInput bindingInput = definition.createBindingInput();
|
||||
configureBindingInput(bindingInput, operation.getInput());
|
||||
ExtensibilityElement inputExtension =
|
||||
definition.getExtensionRegistry().createExtension(BindingInput.class, soapBody);
|
||||
if (requiresSOAP12) {
|
||||
((SOAP12Body)inputExtension).setUse("literal");
|
||||
} else {
|
||||
((SOAPBody)inputExtension).setUse("literal");
|
||||
}
|
||||
bindingInput.addExtensibilityElement(inputExtension);
|
||||
bindingOperation.setBindingInput(bindingInput);
|
||||
}
|
||||
if (operation.getOutput() != null) {
|
||||
BindingOutput bindingOutput = definition.createBindingOutput();
|
||||
configureBindingOutput(bindingOutput, operation.getOutput());
|
||||
ExtensibilityElement outputExtension =
|
||||
definition.getExtensionRegistry().createExtension(BindingOutput.class, soapBody);
|
||||
if (requiresSOAP12) {
|
||||
((SOAP12Body)outputExtension).setUse("literal");
|
||||
} else {
|
||||
((SOAPBody)outputExtension).setUse("literal");
|
||||
}
|
||||
bindingOutput.addExtensibilityElement(outputExtension);
|
||||
bindingOperation.setBindingOutput(bindingOutput);
|
||||
}
|
||||
for (Iterator fi = operation.getFaults().values().iterator(); fi.hasNext();) {
|
||||
Fault fault = (Fault)fi.next();
|
||||
BindingFault bindingFault = definition.createBindingFault();
|
||||
ExtensibilityElement faultExtension =
|
||||
definition.getExtensionRegistry().createExtension(BindingFault.class, soapFault);
|
||||
configureBindingFault(bindingFault, faultExtension, fault);
|
||||
bindingFault.addExtensibilityElement(faultExtension);
|
||||
bindingOperation.addBindingFault(bindingFault);
|
||||
}
|
||||
return bindingOperation;
|
||||
}
|
||||
|
||||
protected void configureBindingOperation(BindingOperation bindingOperation, Operation operation)
|
||||
throws WSDLException {
|
||||
bindingOperation.setName(operation.getName());
|
||||
}
|
||||
|
||||
protected void configureBindingInput(BindingInput bindingInput, Input input) throws WSDLException {
|
||||
bindingInput.setName(input.getName());
|
||||
}
|
||||
|
||||
protected void configureBindingOutput(BindingOutput bindingOutput, Output output) throws WSDLException {
|
||||
bindingOutput.setName(output.getName());
|
||||
}
|
||||
|
||||
protected void configureBindingFault(BindingFault bindingFault,
|
||||
ExtensibilityElement faultExtension,
|
||||
Fault fault)
|
||||
throws WSDLException {
|
||||
String faultName = fault.getName();
|
||||
bindingFault.setName(faultName);
|
||||
if (requiresSOAP12) {
|
||||
((SOAP12Fault)faultExtension).setName(faultName);
|
||||
((SOAP12Fault)faultExtension).setUse("literal");
|
||||
} else {
|
||||
((SOAPFault)faultExtension).setName(faultName);
|
||||
((SOAPFault)faultExtension).setUse("literal");
|
||||
}
|
||||
}
|
||||
|
||||
public Service createService(Definition definition, PortType portType) {
|
||||
try {
|
||||
Service service = definition.createService();
|
||||
configureService(definition, service, portType);
|
||||
// createPort(definition, binding, service);
|
||||
definition.addService(service);
|
||||
return service;
|
||||
} catch (WSDLException e) {
|
||||
throw new IllegalArgumentException(e);
|
||||
}
|
||||
}
|
||||
|
||||
public Service createService(Definition definition, Binding binding) {
|
||||
try {
|
||||
Service service = definition.createService();
|
||||
configureService(definition, service, binding.getPortType());
|
||||
// createPort(definition, binding, service);
|
||||
definition.addService(service);
|
||||
return service;
|
||||
} catch (WSDLException e) {
|
||||
throw new IllegalArgumentException(e);
|
||||
}
|
||||
}
|
||||
|
||||
protected void configureService(Definition definition, Service service, PortType portType) throws WSDLException {
|
||||
QName portTypeName = portType.getQName();
|
||||
if (portTypeName != null) {
|
||||
// Choose <porttype>Service if available. If this name is in use, insert
|
||||
// separating underscores until there is no clash.
|
||||
for (String suffix = SERVICE_SUFFIX; ; suffix = "_" + suffix) {
|
||||
QName name = new QName(definition.getTargetNamespace(), portTypeName.getLocalPart() + suffix);
|
||||
if (definition.getService(name) == null) {
|
||||
service.setQName(name);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public Port createPort(Definition definition, Binding binding, Service service, String uri) {
|
||||
try {
|
||||
Port port = definition.createPort();
|
||||
port.setBinding(binding);
|
||||
configurePort(port, binding);
|
||||
if (uri != null) {
|
||||
ExtensibilityElement portExtension =
|
||||
definition.getExtensionRegistry().createExtension(Port.class, soapAddress);
|
||||
if (requiresSOAP12) {
|
||||
((SOAP12Address)portExtension).setLocationURI(uri);
|
||||
} else {
|
||||
((SOAPAddress)portExtension).setLocationURI(uri);
|
||||
}
|
||||
port.addExtensibilityElement(portExtension);
|
||||
}
|
||||
service.addPort(port);
|
||||
return port;
|
||||
} catch (WSDLException e) {
|
||||
throw new IllegalArgumentException(e);
|
||||
}
|
||||
}
|
||||
|
||||
protected void configurePort(Port port, Binding binding) throws WSDLException {
|
||||
if (binding.getPortType() != null && binding.getPortType().getQName() != null) {
|
||||
port.setName(binding.getPortType().getQName().getLocalPart() + PORT_SUFFIX);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
|
@ -1,602 +0,0 @@
|
|||
/*
|
||||
* Licensed to the Apache Software Foundation (ASF) under one
|
||||
* or more contributor license agreements. See the NOTICE file
|
||||
* distributed with this work for additional information
|
||||
* regarding copyright ownership. The ASF licenses this file
|
||||
* to you under the Apache License, Version 2.0 (the
|
||||
* "License"); you may not use this file except in compliance
|
||||
* with the License. You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing,
|
||||
* software distributed under the License is distributed on an
|
||||
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||
* KIND, either express or implied. See the License for the
|
||||
* specific language governing permissions and limitations
|
||||
* under the License.
|
||||
*/
|
||||
package org.apache.tuscany.sca.interfacedef.wsdl.java2wsdl;
|
||||
|
||||
import java.io.ByteArrayInputStream;
|
||||
import java.io.ByteArrayOutputStream;
|
||||
import java.io.IOException;
|
||||
import java.io.InputStream;
|
||||
import java.lang.reflect.Method;
|
||||
import java.net.URI;
|
||||
import java.net.URL;
|
||||
import java.security.AccessController;
|
||||
import java.security.PrivilegedAction;
|
||||
import java.security.PrivilegedExceptionAction;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
import javax.wsdl.Binding;
|
||||
import javax.wsdl.BindingOperation;
|
||||
import javax.wsdl.BindingOutput;
|
||||
import javax.wsdl.Definition;
|
||||
import javax.wsdl.Input;
|
||||
import javax.wsdl.Message;
|
||||
import javax.wsdl.OperationType;
|
||||
import javax.wsdl.Output;
|
||||
import javax.wsdl.Part;
|
||||
import javax.wsdl.Port;
|
||||
import javax.wsdl.PortType;
|
||||
import javax.wsdl.Service;
|
||||
import javax.wsdl.Types;
|
||||
import javax.wsdl.WSDLException;
|
||||
import javax.wsdl.extensions.ExtensibilityElement;
|
||||
import javax.wsdl.extensions.UnknownExtensibilityElement;
|
||||
import javax.wsdl.extensions.schema.Schema;
|
||||
import javax.wsdl.xml.WSDLLocator;
|
||||
import javax.wsdl.xml.WSDLReader;
|
||||
import javax.wsdl.xml.WSDLWriter;
|
||||
import javax.xml.XMLConstants;
|
||||
import javax.xml.namespace.QName;
|
||||
|
||||
import org.apache.tuscany.sca.contribution.resolver.ModelResolver;
|
||||
import org.apache.tuscany.sca.databinding.DataBindingExtensionPoint;
|
||||
import org.apache.tuscany.sca.interfacedef.DataType;
|
||||
import org.apache.tuscany.sca.interfacedef.Operation;
|
||||
import org.apache.tuscany.sca.interfacedef.java.JavaInterface;
|
||||
import org.apache.tuscany.sca.interfacedef.java.JavaInterfaceContract;
|
||||
import org.apache.tuscany.sca.interfacedef.util.XMLType;
|
||||
import org.apache.tuscany.sca.interfacedef.wsdl.WSDLDefinition;
|
||||
import org.apache.tuscany.sca.interfacedef.wsdl.WSDLFactory;
|
||||
import org.apache.tuscany.sca.interfacedef.wsdl.WSDLInterface;
|
||||
import org.apache.tuscany.sca.interfacedef.wsdl.WSDLInterfaceContract;
|
||||
import org.apache.tuscany.sca.interfacedef.wsdl.impl.InvalidWSDLException;
|
||||
import org.apache.tuscany.sca.interfacedef.wsdl.impl.WSDLInterfaceIntrospectorImpl;
|
||||
import org.apache.tuscany.sca.interfacedef.wsdl.interface2wsdl.Interface2WSDLGenerator;
|
||||
import org.apache.tuscany.sca.interfacedef.wsdl.xml.WSDLModelResolver;
|
||||
import org.apache.tuscany.sca.xsd.XSDefinition;
|
||||
import org.apache.tuscany.sca.xsd.XSDFactory;
|
||||
import org.apache.tuscany.sca.xsd.xml.XMLDocumentHelper;
|
||||
import org.apache.ws.commons.schema.XmlSchema;
|
||||
import org.apache.ws.commons.schema.XmlSchemaCollection;
|
||||
import org.apache.ws.java2wsdl.Java2WSDLBuilder;
|
||||
import org.osoa.sca.annotations.OneWay;
|
||||
import org.w3c.dom.Attr;
|
||||
import org.w3c.dom.Document;
|
||||
import org.w3c.dom.Element;
|
||||
import org.w3c.dom.NamedNodeMap;
|
||||
import org.w3c.dom.Node;
|
||||
import org.xml.sax.InputSource;
|
||||
|
||||
/**
|
||||
* Utility methods to create WSDL objects from Java interfaces.
|
||||
*
|
||||
* @version $Rev$ $Date$
|
||||
*/
|
||||
public class Java2WSDLHelper {
|
||||
// the following 3 switches are temporary for debugging
|
||||
public static boolean newGenerator = true; // external code sets this to force new generator
|
||||
public static boolean oldGenerator; // external code sets this to force old generator
|
||||
public static boolean printWSDL; // external code sets this to print generated WSDL
|
||||
|
||||
private static void register(Map<String, String> map, DataType type) {
|
||||
if (type == null) {
|
||||
return;
|
||||
}
|
||||
Package pkg = type.getPhysical().getPackage();
|
||||
if (pkg != null) {
|
||||
String pkgName = pkg.getName();
|
||||
Object logical = type.getLogical();
|
||||
if (logical instanceof XMLType) {
|
||||
QName typeName = ((XMLType)logical).getTypeName();
|
||||
if (typeName != null && !XMLConstants.W3C_XML_SCHEMA_NS_URI.equals(typeName.getNamespaceURI())) {
|
||||
map.put(pkgName, typeName.getNamespaceURI());
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//FIXME: temp code to control whether the old or new path is used.
|
||||
// Will be removed when the new path can handle all cases.
|
||||
private static boolean useNewGenerator(JavaInterface iface) {
|
||||
/* restore the following code when the new generator supports exception mapping
|
||||
// check databindings to see if new generator can be used
|
||||
boolean newGenerator = true;
|
||||
for (Operation op : iface.getOperations()) {
|
||||
DataType<List<DataType>> inputType = op.getInputType();
|
||||
for (DataType t : inputType.getLogical()) {
|
||||
newGenerator &= checkDataBinding(t);
|
||||
}
|
||||
DataType outputType = op.getOutputType();
|
||||
newGenerator &= checkDataBinding(outputType);
|
||||
}
|
||||
return newGenerator;
|
||||
*/
|
||||
return iface.getQName() != null; // use new generator for @WebService
|
||||
}
|
||||
|
||||
/*
|
||||
//FIXME: temp code to control whether the old or new path is used.
|
||||
// Will be removed when the new path can handle all databindings.
|
||||
private static boolean checkDataBinding(DataType dt) {
|
||||
boolean result = (dt == null ||
|
||||
"java:simpleType".equals(dt.getDataBinding()) ||
|
||||
"java:complexType".equals(dt.getDataBinding()) ||
|
||||
"java:array".equals(dt.getDataBinding()) ||
|
||||
"java.io.Externalizable".equals(dt.getDataBinding()) ||
|
||||
"org.osoa.sca.CallableReference".equals(dt.getDataBinding()) ||
|
||||
"org.apache.axiom.om.OMElement".equals(dt.getDataBinding()) ||
|
||||
"javax.xml.bind.JAXBElement".equals(dt.getDataBinding()));
|
||||
if (!result) {
|
||||
System.out.println("$$ unsupported databinding " + dt.getDataBinding());
|
||||
}
|
||||
return result;
|
||||
}
|
||||
*/
|
||||
|
||||
/**
|
||||
* Create a WSDLInterfaceContract from a JavaInterfaceContract
|
||||
*/
|
||||
public static WSDLInterfaceContract createWSDLInterfaceContract(JavaInterfaceContract contract,
|
||||
ModelResolver resolver,
|
||||
DataBindingExtensionPoint dataBindings,
|
||||
WSDLFactory wsdlFactory,
|
||||
XSDFactory xsdFactory) {
|
||||
return createWSDLInterfaceContract(contract, false, resolver, dataBindings, wsdlFactory, xsdFactory);
|
||||
}
|
||||
|
||||
/**
|
||||
* Create a WSDLInterfaceContract from a JavaInterfaceContract
|
||||
*/
|
||||
public static WSDLInterfaceContract createWSDLInterfaceContract(JavaInterfaceContract contract,
|
||||
boolean requiresSOAP12,
|
||||
ModelResolver resolver,
|
||||
DataBindingExtensionPoint dataBindings,
|
||||
WSDLFactory wsdlFactory,
|
||||
XSDFactory xsdFactory) {
|
||||
|
||||
WSDLInterfaceContract wsdlContract = wsdlFactory.createWSDLInterfaceContract();
|
||||
WSDLInterface wsdlInterface = wsdlFactory.createWSDLInterface();
|
||||
wsdlContract.setInterface(wsdlInterface);
|
||||
|
||||
final WSDLDefinition wsdlDefinition = wsdlFactory.createWSDLDefinition();
|
||||
JavaInterface iface = (JavaInterface)contract.getInterface();
|
||||
|
||||
//FIXME: When Interface2WSDLGenerator supports all databindings, change this
|
||||
// code to use it in all cases instead of calling createDefinition()
|
||||
Definition def = null;
|
||||
boolean usedNewGenerator = false;
|
||||
if (newGenerator || (!oldGenerator && useNewGenerator(iface))) {
|
||||
usedNewGenerator = true;
|
||||
/*
|
||||
System.out.println("$$ new gen: " + iface.getName());
|
||||
*/
|
||||
try {
|
||||
Interface2WSDLGenerator wsdlGenerator =
|
||||
new Interface2WSDLGenerator(requiresSOAP12, resolver, dataBindings, xsdFactory);
|
||||
def = wsdlGenerator.generate(iface, wsdlDefinition);
|
||||
} catch (WSDLException e) {
|
||||
throw new RuntimeException(e);
|
||||
}
|
||||
|
||||
} else {
|
||||
/*
|
||||
System.out.println("$$ old gen: " + iface.getName());
|
||||
*/
|
||||
// Create a package2ns map
|
||||
Map<String, String> pkg2nsMap = new HashMap<String, String>();
|
||||
for (Operation op : iface.getOperations()) {
|
||||
DataType<List<DataType>> inputType = op.getInputType();
|
||||
for (DataType t : inputType.getLogical()) {
|
||||
register(pkg2nsMap, t);
|
||||
}
|
||||
DataType outputType = op.getOutputType();
|
||||
register(pkg2nsMap, outputType);
|
||||
}
|
||||
def = createDefinition(pkg2nsMap, iface.getJavaClass(), requiresSOAP12);
|
||||
}
|
||||
|
||||
// for debugging
|
||||
if (printWSDL) {
|
||||
try {
|
||||
System.out.println("Generated WSDL for Java interface " + iface.getName() + " class " + iface.getJavaClass().getName());
|
||||
WSDLWriter writer = javax.wsdl.factory.WSDLFactory.newInstance().newWSDLWriter();
|
||||
writer.writeWSDL(def, System.out);
|
||||
} catch (WSDLException e) {
|
||||
throw new RuntimeException(e);
|
||||
}
|
||||
}
|
||||
|
||||
wsdlDefinition.setDefinition(def);
|
||||
wsdlInterface.setWsdlDefinition(wsdlDefinition);
|
||||
wsdlInterface.setRemotable(true);
|
||||
wsdlInterface.setConversational(contract.getInterface().isConversational());
|
||||
wsdlInterface.setUnresolved(false);
|
||||
wsdlInterface.setRemotable(true);
|
||||
PortType portType = (PortType)def.getAllPortTypes().values().iterator().next();
|
||||
wsdlInterface.setPortType(portType);
|
||||
|
||||
if (!usedNewGenerator) {
|
||||
// Allow privileged access to read properties. Requires PropertiesPermission read in
|
||||
// security policy.
|
||||
final XSDFactory finalFactory = xsdFactory;
|
||||
final Definition fdef = def;
|
||||
AccessController.doPrivileged(new PrivilegedAction<Object>() {
|
||||
public Object run() {
|
||||
readInlineSchemas(finalFactory, wsdlDefinition, fdef, new XmlSchemaCollection());
|
||||
return null;
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
try {
|
||||
for (Operation op : iface.getOperations()) {
|
||||
javax.wsdl.Operation wsdlOp = portType.getOperation(op.getName(), null, null);
|
||||
wsdlInterface.getOperations().add(WSDLInterfaceIntrospectorImpl.getOperation(
|
||||
wsdlOp, wsdlDefinition, resolver, xsdFactory));
|
||||
|
||||
/*
|
||||
Operation clonedOp = (Operation)op.clone();
|
||||
clonedOp.setDataBinding(null);
|
||||
|
||||
if (clonedOp.getInputType().getLogical().isEmpty()) {
|
||||
// null args case needs a single input type for the wrapper
|
||||
clonedOp.setInputType(opx.getInputType());
|
||||
}
|
||||
for (DataType<?> dt : clonedOp.getInputType().getLogical()) {
|
||||
dt.setDataBinding(null);
|
||||
}
|
||||
|
||||
if (clonedOp.getOutputType() != null) {
|
||||
clonedOp.getOutputType().setDataBinding(null);
|
||||
}
|
||||
for (DataType<?> dt : clonedOp.getFaultTypes()) {
|
||||
dt.setDataBinding(null);
|
||||
}
|
||||
clonedOp.setWrapperStyle(true);
|
||||
clonedOp.setWrapper(opx.getWrapper().getWrapperInfo());
|
||||
|
||||
wsdlInterface.getOperations().add(clonedOp);
|
||||
*/
|
||||
}
|
||||
} catch (InvalidWSDLException e) {
|
||||
throw new RuntimeException(e);
|
||||
}
|
||||
|
||||
return wsdlContract;
|
||||
}
|
||||
|
||||
private static Document promote(Element element) {
|
||||
Document doc = (Document)element.getOwnerDocument().cloneNode(false);
|
||||
Element schema = (Element)doc.importNode(element, true);
|
||||
doc.appendChild(schema);
|
||||
Node parent = element.getParentNode();
|
||||
while (parent instanceof Element) {
|
||||
Element root = (Element)parent;
|
||||
NamedNodeMap nodeMap = root.getAttributes();
|
||||
if (nodeMap != null) { // nodename: #document value: null
|
||||
for (int i = 0; i < nodeMap.getLength(); i++) {
|
||||
Attr attr = (Attr)nodeMap.item(i);
|
||||
String name = attr.getName();
|
||||
if ("xmlns".equals(name) || name.startsWith("xmlns:")) {
|
||||
if (schema.getAttributeNode(name) == null) {
|
||||
schema.setAttributeNodeNS((Attr)doc.importNode(attr, true));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
parent = parent.getParentNode();
|
||||
}
|
||||
doc.setDocumentURI(element.getOwnerDocument().getDocumentURI());
|
||||
return doc;
|
||||
}
|
||||
|
||||
/**
|
||||
* Populate the inline schemas including those from the imported definitions
|
||||
*
|
||||
* @param definition
|
||||
* @param schemaCollection
|
||||
*/
|
||||
private static void readInlineSchemas(XSDFactory xsdFactory,
|
||||
WSDLDefinition wsdlDefinition,
|
||||
Definition definition,
|
||||
XmlSchemaCollection schemaCollection) {
|
||||
Types types = definition.getTypes();
|
||||
if (types != null) {
|
||||
int index = 0;
|
||||
for (Object ext : types.getExtensibilityElements()) {
|
||||
ExtensibilityElement extElement = (ExtensibilityElement)ext;
|
||||
Element element = null;
|
||||
if (WSDLModelResolver.XSD_QNAME_LIST.contains(extElement.getElementType())) {
|
||||
if (extElement instanceof Schema) {
|
||||
element = ((Schema)extElement).getElement();
|
||||
} else if (extElement instanceof UnknownExtensibilityElement) {
|
||||
element = ((UnknownExtensibilityElement)extElement).getElement();
|
||||
}
|
||||
}
|
||||
if (element != null) {
|
||||
Document doc = promote(element);
|
||||
XSDefinition xsDefinition = xsdFactory.createXSDefinition();
|
||||
xsDefinition.setUnresolved(true);
|
||||
xsDefinition.setNamespace(element.getAttribute("targetNamespace"));
|
||||
xsDefinition.setDocument(doc);
|
||||
xsDefinition.setLocation(URI.create(doc.getDocumentURI() + "#" + index));
|
||||
loadXSD(schemaCollection, xsDefinition);
|
||||
wsdlDefinition.getXmlSchemas().add(xsDefinition);
|
||||
index++;
|
||||
}
|
||||
}
|
||||
}
|
||||
for (Object imports : definition.getImports().values()) {
|
||||
List impList = (List)imports;
|
||||
for (Object i : impList) {
|
||||
javax.wsdl.Import anImport = (javax.wsdl.Import)i;
|
||||
// Read inline schemas
|
||||
if (anImport.getDefinition() != null) {
|
||||
readInlineSchemas(xsdFactory, wsdlDefinition, anImport.getDefinition(), schemaCollection);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private static void loadXSD(XmlSchemaCollection schemaCollection, XSDefinition definition) {
|
||||
if (definition.getSchema() != null) {
|
||||
return;
|
||||
}
|
||||
if (definition.getDocument() != null) {
|
||||
String uri = null;
|
||||
if (definition.getLocation() != null) {
|
||||
uri = definition.getLocation().toString();
|
||||
}
|
||||
XmlSchema schema = schemaCollection.read(definition.getDocument(), uri, null);
|
||||
definition.setSchemaCollection(schemaCollection);
|
||||
definition.setSchema(schema);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Create a WSDL4J Definition object from a Java interface
|
||||
*/
|
||||
protected static Definition createDefinition(Map map, final Class<?> javaInterface, boolean requiresSOAP12) {
|
||||
|
||||
final String className = javaInterface.getName();
|
||||
// Allow privileged access to get ClassLoader. Requires RuntimePermission read in security
|
||||
// policy.
|
||||
final ClassLoader cl = AccessController.doPrivileged(new PrivilegedAction<ClassLoader>() {
|
||||
public ClassLoader run() {
|
||||
return javaInterface.getClassLoader();
|
||||
}
|
||||
});
|
||||
final ByteArrayOutputStream os = new ByteArrayOutputStream();
|
||||
// Allow privileged access to read properties. Requires PropertiesPermission read in
|
||||
// security policy.
|
||||
final Java2WSDLBuilder builder = AccessController.doPrivileged(new PrivilegedAction<Java2WSDLBuilder>() {
|
||||
public Java2WSDLBuilder run() {
|
||||
return new Java2WSDLBuilder(os, className, cl);
|
||||
}
|
||||
});
|
||||
if (map != null) {
|
||||
builder.setPkg2nsMap(map);
|
||||
}
|
||||
|
||||
// builder.generateWSDL();
|
||||
// Allow privileged access to read properties. Requires PropertiesPermission read in
|
||||
// security policy.
|
||||
try {
|
||||
AccessController.doPrivileged(new PrivilegedExceptionAction<Object>() {
|
||||
public Object run() throws Exception {
|
||||
builder.generateWSDL();
|
||||
return null;
|
||||
}
|
||||
});
|
||||
} catch (Exception e) {
|
||||
throw new RuntimeException(e);
|
||||
}
|
||||
|
||||
try {
|
||||
|
||||
WSDLReader reader = javax.wsdl.factory.WSDLFactory.newInstance().newWSDLReader();
|
||||
reader.setFeature("javax.wsdl.verbose", false);
|
||||
reader.setFeature("javax.wsdl.importDocuments", true);
|
||||
|
||||
WSDLLocatorImpl locator = new WSDLLocatorImpl(new ByteArrayInputStream(os.toByteArray()));
|
||||
Definition definition = reader.readWSDL(locator);
|
||||
|
||||
// processSOAPVersion(definition, requiresSOAP12);
|
||||
processNoArgAndVoidReturnMethods(definition, javaInterface);
|
||||
|
||||
return definition;
|
||||
|
||||
} catch (WSDLException e) {
|
||||
throw new RuntimeException(e);
|
||||
}
|
||||
}
|
||||
|
||||
private static void processSOAPVersion(Definition definition, boolean requiresSOAP12) {
|
||||
if (requiresSOAP12) {
|
||||
removePort(definition, "SOAP11port_http");
|
||||
} else {
|
||||
removePort(definition, "SOAP12port_http");
|
||||
}
|
||||
}
|
||||
|
||||
private static void removePort(Definition definition, String portNameSuffix) {
|
||||
Service service = (Service)definition.getServices().values().iterator().next();
|
||||
Map<?, ?> ports = service.getPorts();
|
||||
for (Object o : ports.keySet()) {
|
||||
if (((String)o).endsWith(portNameSuffix)) {
|
||||
Port p = (Port)ports.remove(o);
|
||||
definition.removeBinding(p.getBinding().getQName());
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private static void processNoArgAndVoidReturnMethods(Definition definition, Class javaInterface) {
|
||||
String namespaceURI = definition.getTargetNamespace();
|
||||
String prefix = definition.getPrefix(namespaceURI);
|
||||
String xsPrefix = definition.getPrefix("http://www.w3.org/2001/XMLSchema");
|
||||
PortType portType = (PortType)definition.getAllPortTypes().values().iterator().next();
|
||||
|
||||
Element schema = null;
|
||||
Document document = null;
|
||||
Types types = definition.getTypes();
|
||||
if (types != null) {
|
||||
for (Object ext : types.getExtensibilityElements()) {
|
||||
if (ext instanceof Schema) {
|
||||
Element element = ((Schema)ext).getElement();
|
||||
if (element.getAttribute("targetNamespace").equals(namespaceURI)) {
|
||||
schema = element;
|
||||
document = schema.getOwnerDocument();
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
if (document == null) {
|
||||
return;
|
||||
}
|
||||
|
||||
// look at each operation in the port type to see if it needs fixing up
|
||||
for (Object oper : portType.getOperations()) {
|
||||
javax.wsdl.Operation operation = (javax.wsdl.Operation)oper;
|
||||
String opName = operation.getName();
|
||||
|
||||
// if input message has no parts, add one containing an empty wrapper
|
||||
Input input = operation.getInput();
|
||||
if (input != null) {
|
||||
Message inputMsg = input.getMessage();
|
||||
if (inputMsg.getParts().isEmpty()) {
|
||||
// create wrapper element and add it to the schema DOM
|
||||
Element wrapper =
|
||||
document.createElementNS("http://www.w3.org/2001/XMLSchema", xsPrefix + ":element");
|
||||
wrapper.setAttribute("name", opName);
|
||||
schema.appendChild(wrapper);
|
||||
Element complexType =
|
||||
document.createElementNS("http://www.w3.org/2001/XMLSchema", xsPrefix + ":complexType");
|
||||
wrapper.appendChild(complexType);
|
||||
|
||||
// create new part for the wrapper and add it to the message
|
||||
Part part = definition.createPart();
|
||||
part.setName("parameters");
|
||||
part.setElementName(new QName(namespaceURI, opName, prefix));
|
||||
inputMsg.addPart(part);
|
||||
}
|
||||
}
|
||||
|
||||
// if two-way operation has no output message, add one containing an empty wrapper
|
||||
if (input != null && operation.getOutput() == null) {
|
||||
boolean isOneWay = false;
|
||||
Method[] methods = javaInterface.getMethods();
|
||||
for (Method method : methods) {
|
||||
if (method.getName().equals(opName) && method.getAnnotation(OneWay.class) != null) {
|
||||
isOneWay = true;
|
||||
}
|
||||
}
|
||||
if (!isOneWay) {
|
||||
// create wrapper element and add it to the schema DOM
|
||||
String msgName = opName + "Response";
|
||||
Element wrapper =
|
||||
document.createElementNS("http://www.w3.org/2001/XMLSchema", xsPrefix + ":element");
|
||||
wrapper.setAttribute("name", msgName);
|
||||
schema.appendChild(wrapper);
|
||||
Element complexType =
|
||||
document.createElementNS("http://www.w3.org/2001/XMLSchema", xsPrefix + ":complexType");
|
||||
wrapper.appendChild(complexType);
|
||||
|
||||
// create new part for the wrapper
|
||||
Part part = definition.createPart();
|
||||
part.setName("parameters");
|
||||
part.setElementName(new QName(namespaceURI, msgName, prefix));
|
||||
|
||||
// create new message for the part
|
||||
Message outputMsg = definition.createMessage();
|
||||
outputMsg.setQName(new QName(namespaceURI, msgName, prefix));
|
||||
outputMsg.addPart(part);
|
||||
outputMsg.setUndefined(false);
|
||||
definition.addMessage(outputMsg);
|
||||
|
||||
// create output element for the operation
|
||||
Output output = definition.createOutput();
|
||||
output.setMessage(outputMsg);
|
||||
output.setExtensionAttribute(new QName("http://www.w3.org/2006/05/addressing/wsdl", "Action"),
|
||||
new QName("urn:" + msgName));
|
||||
operation.setOutput(output);
|
||||
operation.setStyle(OperationType.REQUEST_RESPONSE);
|
||||
|
||||
// add binding output element to bindings for this port type
|
||||
for (Object bindObj : definition.getAllBindings().values()) {
|
||||
Binding binding = (Binding)bindObj;
|
||||
if (binding.getPortType().equals(portType)) {
|
||||
BindingOperation op = binding.getBindingOperation(opName, null, null);
|
||||
if (op != null && op.getBindingInput() != null && op.getBindingOutput() == null) {
|
||||
BindingOutput bindingOut = definition.createBindingOutput();
|
||||
for (Object extObj : op.getBindingInput().getExtensibilityElements()) {
|
||||
bindingOut.addExtensibilityElement((ExtensibilityElement)extObj);
|
||||
}
|
||||
op.setBindingOutput(bindingOut);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
class WSDLLocatorImpl implements WSDLLocator {
|
||||
private InputStream inputStream;
|
||||
private String base = "http://";
|
||||
private String latestImportURI;
|
||||
|
||||
public WSDLLocatorImpl(InputStream is) {
|
||||
this.inputStream = is;
|
||||
}
|
||||
|
||||
public void close() {
|
||||
try {
|
||||
inputStream.close();
|
||||
} catch (IOException e) {
|
||||
// Ignore
|
||||
}
|
||||
}
|
||||
|
||||
public InputSource getBaseInputSource() {
|
||||
try {
|
||||
return XMLDocumentHelper.getInputSource(new URL(base), inputStream);
|
||||
} catch (IOException e) {
|
||||
throw new IllegalArgumentException(e);
|
||||
}
|
||||
}
|
||||
|
||||
public String getBaseURI() {
|
||||
return base;
|
||||
}
|
||||
|
||||
public InputSource getImportInputSource(String parentLocation, String importLocation) {
|
||||
return null;
|
||||
}
|
||||
|
||||
public String getLatestImportURI() {
|
||||
return latestImportURI;
|
||||
}
|
||||
|
||||
}
|
|
@ -1,47 +0,0 @@
|
|||
/*
|
||||
* Licensed to the Apache Software Foundation (ASF) under one
|
||||
* or more contributor license agreements. See the NOTICE file
|
||||
* distributed with this work for additional information
|
||||
* regarding copyright ownership. The ASF licenses this file
|
||||
* to you under the Apache License, Version 2.0 (the
|
||||
* "License"); you may not use this file except in compliance
|
||||
* with the License. You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing,
|
||||
* software distributed under the License is distributed on an
|
||||
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||
* KIND, either express or implied. See the License for the
|
||||
* specific language governing permissions and limitations
|
||||
* under the License.
|
||||
*/
|
||||
|
||||
package org.apache.tuscany.sca.interfacedef.wsdl;
|
||||
|
||||
/**
|
||||
*
|
||||
* @version $Rev$ $Date$
|
||||
*/
|
||||
public class TestException extends Exception {
|
||||
|
||||
private String userdata;
|
||||
|
||||
public TestException(String message) {
|
||||
super(message);
|
||||
}
|
||||
|
||||
public TestException(String message, String userdata) {
|
||||
super(message);
|
||||
this.userdata = userdata;
|
||||
}
|
||||
|
||||
public String getUserdata() {
|
||||
return userdata;
|
||||
}
|
||||
|
||||
public void setUserdata(String userdata) {
|
||||
this.userdata = userdata;
|
||||
}
|
||||
|
||||
}
|
|
@ -1,46 +0,0 @@
|
|||
/*
|
||||
* Licensed to the Apache Software Foundation (ASF) under one
|
||||
* or more contributor license agreements. See the NOTICE file
|
||||
* distributed with this work for additional information
|
||||
* regarding copyright ownership. The ASF licenses this file
|
||||
* to you under the Apache License, Version 2.0 (the
|
||||
* "License"); you may not use this file except in compliance
|
||||
* with the License. You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing,
|
||||
* software distributed under the License is distributed on an
|
||||
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||
* KIND, either express or implied. See the License for the
|
||||
* specific language governing permissions and limitations
|
||||
* under the License.
|
||||
*/
|
||||
|
||||
package org.apache.tuscany.sca.interfacedef.wsdl;
|
||||
|
||||
import javax.xml.ws.WebFault;
|
||||
|
||||
/**
|
||||
*
|
||||
* @version $Rev$ $Date$
|
||||
*/
|
||||
@WebFault(faultBean="org.apache.tuscany.sca.interfacedef.wsdl.TestFaultBean")
|
||||
public class TestFault extends Exception {
|
||||
|
||||
private TestFaultBean bean;
|
||||
|
||||
public TestFault(TestFaultBean bean, String message) {
|
||||
super(message);
|
||||
this.bean = bean;
|
||||
}
|
||||
|
||||
public TestFault(TestFaultBean bean, String message, Throwable cause) {
|
||||
super(message, cause);
|
||||
this.bean = bean;
|
||||
}
|
||||
|
||||
public TestFaultBean getFaultInfo() {
|
||||
return bean;
|
||||
}
|
||||
}
|
|
@ -1,54 +0,0 @@
|
|||
/*
|
||||
* Licensed to the Apache Software Foundation (ASF) under one
|
||||
* or more contributor license agreements. See the NOTICE file
|
||||
* distributed with this work for additional information
|
||||
* regarding copyright ownership. The ASF licenses this file
|
||||
* to you under the Apache License, Version 2.0 (the
|
||||
* "License"); you may not use this file except in compliance
|
||||
* with the License. You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing,
|
||||
* software distributed under the License is distributed on an
|
||||
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||
* KIND, either express or implied. See the License for the
|
||||
* specific language governing permissions and limitations
|
||||
* under the License.
|
||||
*/
|
||||
|
||||
package org.apache.tuscany.sca.interfacedef.wsdl;
|
||||
|
||||
/**
|
||||
*
|
||||
* @version $Rev$ $Date$
|
||||
*/
|
||||
public class TestFaultBean {
|
||||
private String lastName;
|
||||
private String firstName;
|
||||
private float age;
|
||||
|
||||
public String getLastName() {
|
||||
return lastName;
|
||||
}
|
||||
|
||||
public void setLastName(String lastName) {
|
||||
this.lastName = lastName;
|
||||
}
|
||||
|
||||
public String getFirstName() {
|
||||
return firstName;
|
||||
}
|
||||
|
||||
public void setFirstName(String firstName) {
|
||||
this.firstName = firstName;
|
||||
}
|
||||
|
||||
public float getAge() {
|
||||
return age;
|
||||
}
|
||||
|
||||
public void setAge(float age) {
|
||||
this.age = age;
|
||||
}
|
||||
}
|
|
@ -1,30 +0,0 @@
|
|||
/*
|
||||
* Licensed to the Apache Software Foundation (ASF) under one
|
||||
* or more contributor license agreements. See the NOTICE file
|
||||
* distributed with this work for additional information
|
||||
* regarding copyright ownership. The ASF licenses this file
|
||||
* to you under the Apache License, Version 2.0 (the
|
||||
* "License"); you may not use this file except in compliance
|
||||
* with the License. You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing,
|
||||
* software distributed under the License is distributed on an
|
||||
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||
* KIND, either express or implied. See the License for the
|
||||
* specific language governing permissions and limitations
|
||||
* under the License.
|
||||
*/
|
||||
|
||||
package org.apache.tuscany.sca.interfacedef.wsdl;
|
||||
|
||||
/**
|
||||
*
|
||||
* @version $Rev$ $Date$
|
||||
*/
|
||||
public class TestJavaClass {
|
||||
public String name;
|
||||
public int number;
|
||||
public float balance;
|
||||
}
|
|
@ -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.interfacedef.wsdl;
|
||||
|
||||
import javax.jws.WebMethod;
|
||||
import javax.jws.WebService;
|
||||
|
||||
import org.osoa.sca.annotations.OneWay;
|
||||
import org.osoa.sca.annotations.Remotable;
|
||||
|
||||
/**
|
||||
*
|
||||
* @version $Rev$ $Date$
|
||||
*/
|
||||
@Remotable
|
||||
@WebService
|
||||
public interface TestJavaInterface {
|
||||
String m1(String str);
|
||||
|
||||
@OneWay
|
||||
@WebMethod
|
||||
void m2(int i);
|
||||
|
||||
@WebMethod
|
||||
String m3();
|
||||
|
||||
void m4();
|
||||
|
||||
@WebMethod
|
||||
String m5(String str, int i);
|
||||
|
||||
@WebMethod(exclude = true)
|
||||
void dummy();
|
||||
|
||||
@WebMethod
|
||||
void m6(TestJavaClass info) throws TestException;
|
||||
|
||||
@WebMethod
|
||||
void m7(TestJavaClass info) throws TestFault;
|
||||
}
|
|
@ -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.interfacedef.wsdl.interface2wsdl;
|
||||
|
||||
import java.io.StringWriter;
|
||||
|
||||
import javax.wsdl.Definition;
|
||||
import javax.wsdl.xml.WSDLWriter;
|
||||
|
||||
import org.apache.tuscany.sca.contribution.DefaultModelFactoryExtensionPoint;
|
||||
import org.apache.tuscany.sca.core.databinding.processor.DataBindingJavaInterfaceProcessor;
|
||||
import org.apache.tuscany.sca.databinding.DefaultDataBindingExtensionPoint;
|
||||
import org.apache.tuscany.sca.interfacedef.java.DefaultJavaInterfaceFactory;
|
||||
import org.apache.tuscany.sca.interfacedef.java.JavaInterface;
|
||||
import org.apache.tuscany.sca.interfacedef.java.jaxws.JAXWSFaultExceptionMapper;
|
||||
import org.apache.tuscany.sca.interfacedef.java.jaxws.JAXWSJavaInterfaceProcessor;
|
||||
import org.apache.tuscany.sca.interfacedef.wsdl.DefaultWSDLFactory;
|
||||
import org.apache.tuscany.sca.interfacedef.wsdl.TestJavaInterface;
|
||||
import org.apache.tuscany.sca.interfacedef.wsdl.WSDLDefinition;
|
||||
import org.apache.tuscany.sca.xsd.DefaultXSDFactory;
|
||||
import org.apache.tuscany.sca.xsd.xml.XSDModelResolver;
|
||||
import org.junit.Test;
|
||||
|
||||
/**
|
||||
* @version $Rev$ $Date$
|
||||
*/
|
||||
public class Java2WSDLGeneratorTestCase {
|
||||
|
||||
@Test
|
||||
public void testGenerate() throws Exception {
|
||||
DefaultJavaInterfaceFactory iFactory = new DefaultJavaInterfaceFactory();
|
||||
JavaInterface iface = iFactory.createJavaInterface(TestJavaInterface.class);
|
||||
DefaultDataBindingExtensionPoint dataBindings = new DefaultDataBindingExtensionPoint();
|
||||
JAXWSFaultExceptionMapper faultExceptionMapper = new JAXWSFaultExceptionMapper(dataBindings, null);
|
||||
new JAXWSJavaInterfaceProcessor(dataBindings, faultExceptionMapper, null).visitInterface(iface);
|
||||
new DataBindingJavaInterfaceProcessor(dataBindings).visitInterface(iface);
|
||||
DefaultModelFactoryExtensionPoint modelFactories = new DefaultModelFactoryExtensionPoint();
|
||||
WSDLDefinition wsdlDefinition = new DefaultWSDLFactory(modelFactories).createWSDLDefinition();
|
||||
DefaultXSDFactory factory = new DefaultXSDFactory();
|
||||
Interface2WSDLGenerator generator = new Interface2WSDLGenerator(false, new XSDModelResolver(null, null), dataBindings, factory);
|
||||
Definition definition = generator.generate(iface, wsdlDefinition);
|
||||
|
||||
// print the generated WSDL file and inline schemas
|
||||
WSDLWriter writer = generator.getFactory().newWSDLWriter();
|
||||
StringWriter sw = new StringWriter();
|
||||
writer.writeWSDL(definition, sw);
|
||||
System.out.println(sw.toString());
|
||||
}
|
||||
|
||||
}
|
|
@ -1,105 +0,0 @@
|
|||
/*
|
||||
* Licensed to the Apache Software Foundation (ASF) under one
|
||||
* or more contributor license agreements. See the NOTICE file
|
||||
* distributed with this work for additional information
|
||||
* regarding copyright ownership. The ASF licenses this file
|
||||
* to you under the Apache License, Version 2.0 (the
|
||||
* "License"); you may not use this file except in compliance
|
||||
* with the License. You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing,
|
||||
* software distributed under the License is distributed on an
|
||||
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||
* KIND, either express or implied. See the License for the
|
||||
* specific language governing permissions and limitations
|
||||
* under the License.
|
||||
*/
|
||||
package org.apache.tuscany.sca.interfacedef.wsdl.java2wsdl;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
import javax.wsdl.Definition;
|
||||
import javax.wsdl.Operation;
|
||||
import javax.wsdl.PortType;
|
||||
|
||||
import junit.framework.TestCase;
|
||||
|
||||
import org.apache.tuscany.sca.contribution.DefaultModelFactoryExtensionPoint;
|
||||
import org.apache.tuscany.sca.core.databinding.processor.DataBindingJavaInterfaceProcessor;
|
||||
import org.apache.tuscany.sca.databinding.DefaultDataBindingExtensionPoint;
|
||||
import org.apache.tuscany.sca.interfacedef.InvalidInterfaceException;
|
||||
import org.apache.tuscany.sca.interfacedef.java.DefaultJavaInterfaceFactory;
|
||||
import org.apache.tuscany.sca.interfacedef.java.JavaInterface;
|
||||
import org.apache.tuscany.sca.interfacedef.java.JavaInterfaceContract;
|
||||
import org.apache.tuscany.sca.interfacedef.java.jaxws.JAXWSFaultExceptionMapper;
|
||||
import org.apache.tuscany.sca.interfacedef.java.jaxws.JAXWSJavaInterfaceProcessor;
|
||||
import org.apache.tuscany.sca.interfacedef.wsdl.TestJavaInterface;
|
||||
import org.apache.tuscany.sca.interfacedef.wsdl.WSDLFactory;
|
||||
import org.apache.tuscany.sca.interfacedef.wsdl.WSDLInterface;
|
||||
import org.apache.tuscany.sca.interfacedef.wsdl.WSDLInterfaceContract;
|
||||
import org.apache.tuscany.sca.xsd.XSDFactory;
|
||||
import org.apache.tuscany.sca.xsd.xml.XSDModelResolver;
|
||||
import org.osoa.sca.annotations.Remotable;
|
||||
|
||||
/**
|
||||
*
|
||||
* @version $Rev$ $Date$
|
||||
*/
|
||||
public class Java2WSDLHelperTestCase extends TestCase {
|
||||
|
||||
public void testCreateDefinition() {
|
||||
Definition definition = Java2WSDLHelper.createDefinition(null, HelloWorld.class, false);
|
||||
assertNotNull(definition);
|
||||
|
||||
Map portTypes = definition.getPortTypes();
|
||||
assertEquals(1, portTypes.size());
|
||||
|
||||
PortType portType = (PortType)portTypes.values().iterator().next();
|
||||
assertEquals("HelloWorldPortType", portType.getQName().getLocalPart());
|
||||
assertEquals("http://java2wsdl.wsdl.interfacedef.sca.tuscany.apache.org", portType.getQName().getNamespaceURI());
|
||||
|
||||
List<?> ops = portType.getOperations();
|
||||
assertEquals(1, ops.size());
|
||||
|
||||
Operation operation = (Operation)ops.get(0);
|
||||
assertEquals("sayHello", operation.getName());
|
||||
}
|
||||
|
||||
public void testCreateWSDLInterfaceContract() throws InvalidInterfaceException {
|
||||
DefaultModelFactoryExtensionPoint modelFactories = new DefaultModelFactoryExtensionPoint();
|
||||
WSDLFactory wsdlFactory = modelFactories.getFactory(WSDLFactory.class);
|
||||
XSDFactory xsdFactory = modelFactories.getFactory(XSDFactory.class);
|
||||
DefaultJavaInterfaceFactory factory = new DefaultJavaInterfaceFactory();
|
||||
JavaInterfaceContract javaIC = factory.createJavaInterfaceContract();
|
||||
JavaInterface iface = factory.createJavaInterface(HelloWorld.class);
|
||||
DefaultDataBindingExtensionPoint dataBindings = new DefaultDataBindingExtensionPoint();
|
||||
JAXWSFaultExceptionMapper faultExceptionMapper = new JAXWSFaultExceptionMapper(dataBindings, null);
|
||||
new JAXWSJavaInterfaceProcessor(dataBindings, faultExceptionMapper, null).visitInterface(iface);
|
||||
new DataBindingJavaInterfaceProcessor(dataBindings).visitInterface(iface);
|
||||
javaIC.setInterface(iface);
|
||||
WSDLInterfaceContract wsdlIC = Java2WSDLHelper.createWSDLInterfaceContract(javaIC, new XSDModelResolver(null, null), dataBindings, wsdlFactory, xsdFactory);
|
||||
assertNotNull(wsdlIC);
|
||||
WSDLInterface wsdlInterface = (WSDLInterface)wsdlIC.getInterface();
|
||||
assertNotNull(wsdlInterface);
|
||||
assertEquals(1, wsdlInterface.getOperations().size());
|
||||
assertEquals("sayHello", wsdlInterface.getOperations().get(0).getName());
|
||||
assertNotNull(wsdlInterface.getPortType());
|
||||
|
||||
JavaInterfaceContract javaIC2 = factory.createJavaInterfaceContract();
|
||||
JavaInterface iface2 = factory.createJavaInterface(TestJavaInterface.class);
|
||||
new JAXWSJavaInterfaceProcessor(dataBindings, faultExceptionMapper, null).visitInterface(iface2);
|
||||
new DataBindingJavaInterfaceProcessor(dataBindings).visitInterface(iface2);
|
||||
javaIC2.setInterface(iface2);
|
||||
WSDLInterfaceContract wsdlIC2 = Java2WSDLHelper.createWSDLInterfaceContract(javaIC2, new XSDModelResolver(null, null), dataBindings, wsdlFactory, xsdFactory);
|
||||
assertNotNull(wsdlIC2);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@Remotable
|
||||
interface HelloWorld {
|
||||
String sayHello(String s);
|
||||
}
|
|
@ -121,7 +121,6 @@
|
|||
<module>interface-java-jaxws</module>
|
||||
<module>interface-java-xml</module>
|
||||
<module>interface-wsdl</module>
|
||||
<module>interface-wsdl-java2wsdl</module>
|
||||
<module>interface-wsdl-xml</module>
|
||||
<module>implementation-bpel</module>
|
||||
<module>implementation-bpel-ode</module>
|
||||
|
|
|
@ -72,12 +72,6 @@
|
|||
<version>1.4-SNAPSHOT</version>
|
||||
<scope>runtime</scope>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.apache.tuscany.sca</groupId>
|
||||
<artifactId>tuscany-interface-wsdl-java2wsdl</artifactId>
|
||||
<version>1.4-SNAPSHOT</version>
|
||||
<scope>runtime</scope>
|
||||
</dependency>
|
||||
<!-- test dependencies -->
|
||||
<dependency>
|
||||
<groupId>junit</groupId>
|
||||
|
|
Loading…
Add table
Reference in a new issue