You are viewing a plain text version of this content. The canonical link for it is here.
Posted to axis-cvs@ws.apache.org by am...@apache.org on 2007/03/20 07:20:40 UTC
svn commit: r520296 - in /webservices/axis2/trunk/java/modules:
adb-codegen/src/org/apache/axis2/schema/template/ADBBeanTemplate.xsl
kernel/src/org/apache/axis2/description/WSDL11ToAxisServiceBuilder.java
Author: amilas
Date: Mon Mar 19 23:20:39 2007
New Revision: 520296
URL: http://svn.apache.org/viewvc?view=rev&rev=520296
Log:
Improved the adb performance by directly calling to serialize method always.
Fixed the operation parameter order problem. But still comment the code which causes the jaxws fail.
Modified:
webservices/axis2/trunk/java/modules/adb-codegen/src/org/apache/axis2/schema/template/ADBBeanTemplate.xsl
webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/description/WSDL11ToAxisServiceBuilder.java
Modified: webservices/axis2/trunk/java/modules/adb-codegen/src/org/apache/axis2/schema/template/ADBBeanTemplate.xsl
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/java/modules/adb-codegen/src/org/apache/axis2/schema/template/ADBBeanTemplate.xsl?view=diff&rev=520296&r1=520295&r2=520296
==============================================================================
--- webservices/axis2/trunk/java/modules/adb-codegen/src/org/apache/axis2/schema/template/ADBBeanTemplate.xsl (original)
+++ webservices/axis2/trunk/java/modules/adb-codegen/src/org/apache/axis2/schema/template/ADBBeanTemplate.xsl Mon Mar 19 23:20:39 2007
@@ -675,36 +675,38 @@
final javax.xml.namespace.QName parentQName,
final org.apache.axiom.om.OMFactory factory){
- org.apache.axiom.om.OMDataSource dataSource = getOMDataSource(parentQName, factory);
<xsl:choose>
<xsl:when test="@type">
+ org.apache.axiom.om.OMDataSource dataSource =
+ new org.apache.axis2.databinding.ADBDataSource(this,parentQName){
+
+ public void serialize(javax.xml.stream.XMLStreamWriter xmlWriter) throws javax.xml.stream.XMLStreamException {
+ <xsl:value-of select="$name"/>.this.serialize(parentQName,factory,xmlWriter);
+ }
+ };
return new org.apache.axiom.om.impl.llom.OMSourcedElementImpl(
parentQName,factory,dataSource);
</xsl:when>
<xsl:otherwise>
+ org.apache.axiom.om.OMDataSource dataSource =
+ new org.apache.axis2.databinding.ADBDataSource(this,MY_QNAME){
+
+ public void serialize(javax.xml.stream.XMLStreamWriter xmlWriter) throws javax.xml.stream.XMLStreamException {
+ <xsl:value-of select="$name"/>.this.serialize(MY_QNAME,factory,xmlWriter);
+ }
+ };
return new org.apache.axiom.om.impl.llom.OMSourcedElementImpl(
MY_QNAME,factory,dataSource);
</xsl:otherwise>
</xsl:choose>
}
- /**
- *
- * @param parentQName
- * @param factory
- * @return org.apache.axiom.om.OMElement
- */
- public org.apache.axiom.om.OMDataSource getOMDataSource(
- final javax.xml.namespace.QName parentQName,
- final org.apache.axiom.om.OMFactory factory){
- org.apache.axiom.om.OMDataSource dataSource =
- new org.apache.axis2.databinding.ADBDataSource(this,parentQName){
-
- public void serialize(
- javax.xml.stream.XMLStreamWriter xmlWriter) throws javax.xml.stream.XMLStreamException {
+ public void serialize(final javax.xml.namespace.QName parentQName,
+ final org.apache.axiom.om.OMFactory factory,
+ javax.xml.stream.XMLStreamWriter xmlWriter) throws javax.xml.stream.XMLStreamException {
<xsl:choose>
<xsl:when test="$simple and $union">
@@ -925,18 +927,16 @@
writeAttribute("xsi","http://www.w3.org/2001/XMLSchema-instance","nil","1",xmlWriter);
xmlWriter.writeEndElement();
}else{
- <xsl:value-of select="$varName"/>.getOMDataSource(
- new javax.xml.namespace.QName("<xsl:value-of select="$namespace"/>","<xsl:value-of select="$propertyName"/>"),
- factory).serialize(xmlWriter);
+ <xsl:value-of select="$varName"/>.serialize(new javax.xml.namespace.QName("<xsl:value-of select="$namespace"/>","<xsl:value-of select="$propertyName"/>"),
+ factory,xmlWriter);
}
</xsl:when>
<xsl:otherwise>
if (<xsl:value-of select="$varName"/>==null){
throw new RuntimeException("<xsl:value-of select="$propertyName"/> cannot be null!!");
}
- <xsl:value-of select="$varName"/>.getOMDataSource(
- new javax.xml.namespace.QName("<xsl:value-of select="$namespace"/>","<xsl:value-of select="$propertyName"/>"),
- factory).serialize(xmlWriter);
+ <xsl:value-of select="$varName"/>.serialize(new javax.xml.namespace.QName("<xsl:value-of select="$namespace"/>","<xsl:value-of select="$propertyName"/>"),
+ factory,xmlWriter);
</xsl:otherwise>
</xsl:choose>
</xsl:when>
@@ -944,9 +944,8 @@
if (<xsl:value-of select="$varName"/>!=null){
for (int i = 0;i < <xsl:value-of select="$varName"/>.length;i++){
if (<xsl:value-of select="$varName"/>[i] != null){
- <xsl:value-of select="$varName"/>[i].getOMDataSource(
- new javax.xml.namespace.QName("<xsl:value-of select="$namespace"/>","<xsl:value-of select="$propertyName"/>"),
- factory).serialize(xmlWriter);
+ <xsl:value-of select="$varName"/>[i].serialize(new javax.xml.namespace.QName("<xsl:value-of select="$namespace"/>","<xsl:value-of select="$propertyName"/>"),
+ factory,xmlWriter);
} else {
<xsl:choose>
<xsl:when test="@nillable">
@@ -1501,18 +1500,14 @@
writeAttribute("xsi","http://www.w3.org/2001/XMLSchema-instance","nil","1",xmlWriter);
xmlWriter.writeEndElement();
}else{
- <xsl:value-of select="$varName"/>.getOMDataSource(
- MY_QNAME,
- factory).serialize(xmlWriter);
+ <xsl:value-of select="$varName"/>.serialize(MY_QNAME,factory,xmlWriter);
}
</xsl:when>
<xsl:otherwise>
if (<xsl:value-of select="$varName"/>==null){
throw new RuntimeException("Property cannot be null!");
}
- <xsl:value-of select="$varName"/>.getOMDataSource(
- MY_QNAME,
- factory).serialize(xmlWriter);
+ <xsl:value-of select="$varName"/>.serialize(MY_QNAME,factory,xmlWriter);
</xsl:otherwise>
</xsl:choose>
</xsl:when>
@@ -1728,10 +1723,7 @@
private java.lang.String createPrefix() {
return "ns" + (int)Math.random();
}
- };
- return dataSource;
- }
<!-- ######################################################################################### -->
/**
Modified: webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/description/WSDL11ToAxisServiceBuilder.java
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/description/WSDL11ToAxisServiceBuilder.java?view=diff&rev=520296&r1=520295&r2=520296
==============================================================================
--- webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/description/WSDL11ToAxisServiceBuilder.java (original)
+++ webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/description/WSDL11ToAxisServiceBuilder.java Mon Mar 19 23:20:39 2007
@@ -67,12 +67,7 @@
import javax.xml.parsers.ParserConfigurationException;
import java.io.IOException;
import java.io.InputStream;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
-import java.util.TreeMap;
+import java.util.*;
/*
* Copyright 2004,2005 The Apache Software Foundation.
@@ -465,7 +460,7 @@
axisBindingInMessage.setAxisMessage(axisInMessage);
axisBindingInMessage.setDirection(axisInMessage.getDirection());
-
+
axisBindingOperation
.addChild(axisBindingInMessage.getDirection(), axisBindingInMessage);
}
@@ -587,7 +582,7 @@
return schemaMap;
}
-
+
/**
* return the service to process
@@ -1274,36 +1269,30 @@
if (bindingInput != null) {
- Iterator partsIterator = null;
+ Collection partsCollection = null;
if (BINDING_TYPE_SOAP.equals(this.bindingType)) {
// first see the body parts list
List bodyPartsList =
getPartsListFromSoapBody(bindingInput.getExtensibilityElements());
if (bodyPartsList != null) {
- partsIterator = message.getOrderedParts(bodyPartsList).iterator();
+ partsCollection = message.getOrderedParts(bodyPartsList);
} else {
- // then see the parameter order
- List parameterOrder = operation.getOperation().getParameterOrdering();
- if (parameterOrder != null) {
- partsIterator = message.getOrderedParts(parameterOrder).iterator();
- } else {
- // finally get the message part list
- partsIterator = message.getParts().values().iterator();
- }
-
+ partsCollection = message.getParts().values();
}
} else {
// i.e http binding
- partsIterator = message.getParts().values().iterator();
+ partsCollection = message.getParts().values();
}
-
+ List parameterOrder = operation.getOperation().getParameterOrdering();
namespaceImportsMap = new HashMap();
namespacePrefixMap = new HashMap();
Node newComplexType = getNewComplextType(document,
xsdPrefix,
- partsIterator,
+ partsCollection,
+ parameterOrder,
+ false,
namespaceImportsMap,
namespacePrefixMap);
@@ -1368,33 +1357,24 @@
Message message = (Message) operationToOutputMessageMap.get(operation);
if (bindingOutput != null) {
- Iterator partsIterator = null;
+ Collection partsCollection = null;
if (BINDING_TYPE_SOAP.equals(this.bindingType)) {
// first see the body parts list
List bodyPartsList =
getPartsListFromSoapBody(bindingOutput.getExtensibilityElements());
if (bodyPartsList != null) {
- bodyPartsList.add("result");
- partsIterator = message.getOrderedParts(bodyPartsList).iterator();
+ partsCollection = message.getOrderedParts(bodyPartsList);
} else {
// then see the parameter order
- List parameterOrder = operation.getOperation().getParameterOrdering();
- if (parameterOrder != null) {
- parameterOrder = new ArrayList(parameterOrder);
-
- parameterOrder.add("result");
- partsIterator = message.getOrderedParts(parameterOrder).iterator();
- } else {
- // finally get the message part list
- partsIterator = message.getParts().values().iterator();
- }
-
+ partsCollection = message.getParts().values();
}
} else {
// i.e if http binding
- partsIterator = message.getParts().values().iterator();
+ partsCollection = message.getParts().values();
}
+ List parameterOrder = operation.getOperation().getParameterOrdering();
+
// we have to initialize the hash maps always since we add the elements onece we
// generate it
namespacePrefixMap = new HashMap();
@@ -1402,7 +1382,9 @@
Node newComplexType = getNewComplextType(document,
xsdPrefix,
- partsIterator,
+ partsCollection,
+ parameterOrder,
+ true,
namespaceImportsMap,
namespacePrefixMap);
elementDeclaration.appendChild(newComplexType);
@@ -1578,15 +1560,19 @@
*
* @param document
* @param xsdPrefix
- * @param partsIterator
+ * @param partsCollection - parts to be added
+ * @param parameterOrder - param Order list if it is given
+ * @param isOutMessage
* @param namespaceImportsMap
* @param namespacePrefixMap
- * @return the new complex type element
+ * @return new element
*/
private Element getNewComplextType(Document document,
String xsdPrefix,
- Iterator partsIterator,
+ Collection partsCollection,
+ List parameterOrder,
+ boolean isOutMessage,
Map namespaceImportsMap,
Map namespacePrefixMap) {
// add the complex type
@@ -1597,69 +1583,129 @@
Element cmplxTypeSequence = document.createElementNS(
XMLSCHEMA_NAMESPACE_URI, xsdPrefix + ":"
+ XML_SCHEMA_SEQUENCE_LOCAL_NAME);
- Element child;
+
Part part;
+ if ((parameterOrder == null) || (parameterOrder.size() == 0)) {
+ // no parameter order then just add the elements in the parts collection
+ for (Iterator partsIter = partsCollection.iterator(); partsIter.hasNext();) {
+ part = (Part) partsIter.next();
+ // the part name
+ addPartToElement(part,
+ document,
+ xsdPrefix,
+ namespaceImportsMap,
+ namespacePrefixMap,
+ cmplxTypeSequence);
- while (partsIterator.hasNext()) {
- part = (Part) partsIterator.next();
- // the part name
- String elementName = part.getName();
-
- // the type name
- QName schemaTypeName = part.getTypeName();
-
- if (schemaTypeName != null) {
-
- child = document.createElementNS(XMLSCHEMA_NAMESPACE_URI,
- xsdPrefix + ":" + XML_SCHEMA_ELEMENT_LOCAL_NAME);
- // always child attribute should be in no namespace
- child.setAttribute("form", "unqualified");
-
- String prefix;
- if (XMLSCHEMA_NAMESPACE_URI.equals(schemaTypeName.getNamespaceURI())) {
- prefix = xsdPrefix;
- } else {
- // this schema is a third party one. So we need to have
- // an import statement in our generated schema
- String uri = schemaTypeName.getNamespaceURI();
- if (!namespaceImportsMap.containsKey(uri)) {
- // create Element for namespace import
- Element namespaceImport = document.createElementNS(
- XMLSCHEMA_NAMESPACE_URI, xsdPrefix + ":"
- + XML_SCHEMA_IMPORT_LOCAL_NAME);
- namespaceImport.setAttribute(NAMESPACE_URI, uri);
- // add this to the map
- namespaceImportsMap.put(uri, namespaceImport);
- // we also need to associate this uri with a prefix
- // and include that prefix
- // in the schema's namspace declarations. So add
- // theis particular namespace to the
- // prefix map as well
- prefix = getTemporaryNamespacePrefix();
- namespacePrefixMap.put(uri, prefix);
+ }
+ } else {
+ // i.e an parts order is given
+ // first populate all the parts to a map
+ Map partsMap = new HashMap();
+ for (Iterator partsIter = partsCollection.iterator(); partsIter.hasNext();){
+ part = (Part) partsIter.next();
+ partsMap.put(part.getName(),part);
+ }
+
+ String partName;
+ for (Iterator paramOrderIter = parameterOrder.iterator(); paramOrderIter.hasNext();) {
+ partName = (String) paramOrderIter.next();
+ part = (Part) partsMap.get(partName);
+ if (part != null) {
+ addPartToElement(part,
+ document,
+ xsdPrefix,
+ namespaceImportsMap,
+ namespacePrefixMap,
+ cmplxTypeSequence);
+ partsMap.remove(partName);
+ }
+ }
+ // if this is an out put message then we have to set the
+ // return type if exists
+ if (isOutMessage) {
+ if (partsMap.size() > 0) {
+ if (partsMap.size() == 1) {
+ part = (Part) partsMap.values().iterator().next();
+ // change the name of this part
+ // this is the return type and its name should be result
+// part.setName("result");
+// addPartToElement(part,
+// document,
+// xsdPrefix,
+// namespaceImportsMap,
+// namespacePrefixMap,
+// cmplxTypeSequence);
} else {
- // this URI should be already in the namspace prefix
- // map
- prefix = (String) namespacePrefixMap.get(uri);
+ throw new WSDLProcessingException("the parameter order can left atmost" +
+ " one part");
}
-
}
+ }
+ }
+
+ newComplexType.appendChild(cmplxTypeSequence);
+ return newComplexType;
+ }
+
+ private void addPartToElement(Part part,
+ Document document,
+ String xsdPrefix,
+ Map namespaceImportsMap,
+ Map namespacePrefixMap,
+ Element cmplxTypeSequence) {
+ Element child;
+ String elementName = part.getName();
- child.setAttribute(XSD_NAME, elementName);
- child.setAttribute(XSD_TYPE, prefix + ":" + schemaTypeName.getLocalPart());
+ // the type name
+ QName schemaTypeName = part.getTypeName();
+ if (schemaTypeName != null) {
- cmplxTypeSequence.appendChild(child);
+ child = document.createElementNS(XMLSCHEMA_NAMESPACE_URI,
+ xsdPrefix + ":" + XML_SCHEMA_ELEMENT_LOCAL_NAME);
+ // always child attribute should be in no namespace
+ child.setAttribute("form", "unqualified");
+ String prefix;
+ if (XMLSCHEMA_NAMESPACE_URI.equals(schemaTypeName.getNamespaceURI())) {
+ prefix = xsdPrefix;
} else {
- // see the basic profile 4.4.1 for rpc-literal messages parts can have only types
- throw new WSDLProcessingException("RPC-literal type message part " +
- part.getName() + "should have a type attribute ");
+ // this schema is a third party one. So we need to have
+ // an import statement in our generated schema
+ String uri = schemaTypeName.getNamespaceURI();
+ if (!namespaceImportsMap.containsKey(uri)) {
+ // create Element for namespace import
+ Element namespaceImport = document.createElementNS(
+ XMLSCHEMA_NAMESPACE_URI, xsdPrefix + ":"
+ + XML_SCHEMA_IMPORT_LOCAL_NAME);
+ namespaceImport.setAttribute(NAMESPACE_URI, uri);
+ // add this to the map
+ namespaceImportsMap.put(uri, namespaceImport);
+ // we also need to associate this uri with a prefix
+ // and include that prefix
+ // in the schema's namspace declarations. So add
+ // theis particular namespace to the
+ // prefix map as well
+ prefix = getTemporaryNamespacePrefix();
+ namespacePrefixMap.put(uri, prefix);
+ } else {
+ // this URI should be already in the namspace prefix
+ // map
+ prefix = (String) namespacePrefixMap.get(uri);
+ }
+
}
+ child.setAttribute(XSD_NAME, elementName);
+ child.setAttribute(XSD_TYPE, prefix + ":" + schemaTypeName.getLocalPart());
+ cmplxTypeSequence.appendChild(child);
+
+ } else {
+ // see the basic profile 4.4.1 for rpc-literal messages parts can have only types
+ throw new WSDLProcessingException("RPC-literal type message part " +
+ part.getName() + " should have a type attribute ");
}
- newComplexType.appendChild(cmplxTypeSequence);
- return newComplexType;
}
/**
---------------------------------------------------------------------
To unsubscribe, e-mail: axis-cvs-unsubscribe@ws.apache.org
For additional commands, e-mail: axis-cvs-help@ws.apache.org