You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tuscany.apache.org by na...@apache.org on 2008/04/25 19:24:27 UTC
svn commit: r651656 - in
/incubator/tuscany/java/sca/modules/interface-wsdl-java2wsdl/src/main/java/org/apache/tuscany/sca/interfacedef/wsdl:
interface2wsdl/Interface2WSDLGenerator.java java2wsdl/Java2WSDLHelper.java
Author: nash
Date: Fri Apr 25 10:24:24 2008
New Revision: 651656
URL: http://svn.apache.org/viewvc?rev=651656&view=rev
Log:
Fix some bugs in WSDL generation
Modified:
incubator/tuscany/java/sca/modules/interface-wsdl-java2wsdl/src/main/java/org/apache/tuscany/sca/interfacedef/wsdl/interface2wsdl/Interface2WSDLGenerator.java
incubator/tuscany/java/sca/modules/interface-wsdl-java2wsdl/src/main/java/org/apache/tuscany/sca/interfacedef/wsdl/java2wsdl/Java2WSDLHelper.java
Modified: incubator/tuscany/java/sca/modules/interface-wsdl-java2wsdl/src/main/java/org/apache/tuscany/sca/interfacedef/wsdl/interface2wsdl/Interface2WSDLGenerator.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/interface-wsdl-java2wsdl/src/main/java/org/apache/tuscany/sca/interfacedef/wsdl/interface2wsdl/Interface2WSDLGenerator.java?rev=651656&r1=651655&r2=651656&view=diff
==============================================================================
--- incubator/tuscany/java/sca/modules/interface-wsdl-java2wsdl/src/main/java/org/apache/tuscany/sca/interfacedef/wsdl/interface2wsdl/Interface2WSDLGenerator.java (original)
+++ incubator/tuscany/java/sca/modules/interface-wsdl-java2wsdl/src/main/java/org/apache/tuscany/sca/interfacedef/wsdl/interface2wsdl/Interface2WSDLGenerator.java Fri Apr 25 10:24:24 2008
@@ -79,6 +79,8 @@
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 ANYTYPE_NAME = "anyType";
+ private static final QName ANYTYPE_QNAME = new QName(SCHEMA_NS, ANYTYPE_NAME);
private WSDLFactory factory;
private DataBindingExtensionPoint dataBindingExtensionPoint;
@@ -200,13 +202,23 @@
wrapper.setAttribute("name", entry.getKey().getLocalPart());
Element complexType = schemaDoc.createElementNS(SCHEMA_NS, "xs:complexType");
wrapper.appendChild(complexType);
- for (ElementInfo element: entry.getValue()) {
- Element xsElement = schemaDoc.createElementNS(SCHEMA_NS, "xs:element");
- xsElement.setAttribute("minOccurs", "0");
- xsElement.setAttribute("name", element.getQName().getLocalPart());
- QName typeName = element.getType().getQName();
- xsElement.setAttribute("type", typeName.getLocalPart());
- complexType.appendChild(xsElement);
+ 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();
+ xsElement.setAttribute("type", typeName.getLocalPart());
+ sequence.appendChild(xsElement);
+ }
}
}
}
@@ -350,33 +362,36 @@
Class<?>[] paramTypes = method.getParameterTypes();
for (int i = 0; i < paramTypes.length; i++) {
Object logical = operation.getInputType().getLogical().get(i).getLogical();
- TypeInfo typeInfo = getTypeInfo(paramTypes[i], logical);
- if (!typeInfo.isSimpleType()) {
- javaTypes.add(paramTypes[i]);
- }
- ElementInfo element = new ElementInfo(elements.get(i).getQName(), typeInfo);
- elements.set(i, element);
+ elements.set(i, getElementInfo(paramTypes[i], logical, elements.get(i).getQName(), javaTypes));
}
} else {
Class<?> returnType = method.getReturnType();
if (returnType != Void.TYPE) {
Object logical = operation.getOutputType().getLogical();
- TypeInfo typeInfo = getTypeInfo(returnType, logical);
- if (!typeInfo.isSimpleType()) {
- javaTypes.add(returnType);
- }
- ElementInfo element = new ElementInfo(elements.get(0).getQName(), typeInfo);
- elements.set(0, element);
+ elements.set(0, getElementInfo(returnType, logical, elements.get(0).getQName(), javaTypes));
}
}
}
return part;
}
+ private ElementInfo getElementInfo(Class javaType, Object logical, QName name, ArrayList<Class> javaTypes) {
+ TypeInfo typeInfo = getTypeInfo(javaType.isArray() ? javaType.getComponentType() : javaType, logical);
+ if (!typeInfo.isSimpleType()) {
+ javaTypes.add(javaType);
+ }
+ ElementInfo element = new ElementInfo(name, typeInfo);
+ element.setMany(javaType.isArray());
+ element.setNillable(!javaType.isPrimitive());
+ return element;
+ }
+
private TypeInfo getTypeInfo(Class javaType, Object logical) {
QName xmlType = JavaXMLMapper.getXMLType(javaType);
if (xmlType != null) {
return new TypeInfo(xmlType, true, null);
+ } else if (javaType.isInterface()) {
+ return new TypeInfo(ANYTYPE_QNAME, true, null);
} else {
if (logical instanceof XMLType) {
xmlType = ((XMLType)logical).getTypeName();
Modified: incubator/tuscany/java/sca/modules/interface-wsdl-java2wsdl/src/main/java/org/apache/tuscany/sca/interfacedef/wsdl/java2wsdl/Java2WSDLHelper.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/interface-wsdl-java2wsdl/src/main/java/org/apache/tuscany/sca/interfacedef/wsdl/java2wsdl/Java2WSDLHelper.java?rev=651656&r1=651655&r2=651656&view=diff
==============================================================================
--- incubator/tuscany/java/sca/modules/interface-wsdl-java2wsdl/src/main/java/org/apache/tuscany/sca/interfacedef/wsdl/java2wsdl/Java2WSDLHelper.java (original)
+++ incubator/tuscany/java/sca/modules/interface-wsdl-java2wsdl/src/main/java/org/apache/tuscany/sca/interfacedef/wsdl/java2wsdl/Java2WSDLHelper.java Fri Apr 25 10:24:24 2008
@@ -51,6 +51,7 @@
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;
@@ -148,15 +149,17 @@
} catch (WSDLException e) {
throw new RuntimeException(e);
}
-
- // temp for debugging
- // try {
- // WSDLWriter writer = javax.wsdl.factory.WSDLFactory.newInstance().newWSDLWriter();
- // writer.writeWSDL(def, System.out);
- // } catch (WSDLException e) {
- // throw new RuntimeException(e);
- // }
}
+
+ /*
+ // for debugging
+ try {
+ 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);