You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tuscany.apache.org by Simon Laws <si...@googlemail.com> on 2008/08/12 22:53:22 UTC

Re: svn commit: r685307 - in /tuscany/branches/sca-java-1.3/modules: binding-ws-axis2/src/main/java/org/apache/tuscany/sca/binding/ws/axis2/ binding-ws-wsdlgen/src/main/java/org/apache/tuscany/sca/binding/ws/wsdlgen/ databinding-jaxb/src/main/java/or

On Tue, Aug 12, 2008 at 9:40 PM, <na...@apache.org> wrote:

> Author: nash
> Date: Tue Aug 12 13:40:20 2008
> New Revision: 685307
>
> URL: http://svn.apache.org/viewvc?rev=685307&view=rev
> Log:
> Fix TUSCANY-2531
>
> Modified:
>
>  tuscany/branches/sca-java-1.3/modules/binding-ws-axis2/src/main/java/org/apache/tuscany/sca/binding/ws/axis2/Axis2ServiceProvider.java
>
>  tuscany/branches/sca-java-1.3/modules/binding-ws-wsdlgen/src/main/java/org/apache/tuscany/sca/binding/ws/wsdlgen/Interface2WSDLGenerator.java
>
>  tuscany/branches/sca-java-1.3/modules/databinding-jaxb/src/main/java/org/apache/tuscany/sca/databinding/jaxb/JAXBTypeHelper.java
>
> Modified:
> tuscany/branches/sca-java-1.3/modules/binding-ws-axis2/src/main/java/org/apache/tuscany/sca/binding/ws/axis2/Axis2ServiceProvider.java
> URL:
> http://svn.apache.org/viewvc/tuscany/branches/sca-java-1.3/modules/binding-ws-axis2/src/main/java/org/apache/tuscany/sca/binding/ws/axis2/Axis2ServiceProvider.java?rev=685307&r1=685306&r2=685307&view=diff
>
> ==============================================================================
> ---
> tuscany/branches/sca-java-1.3/modules/binding-ws-axis2/src/main/java/org/apache/tuscany/sca/binding/ws/axis2/Axis2ServiceProvider.java
> (original)
> +++
> tuscany/branches/sca-java-1.3/modules/binding-ws-axis2/src/main/java/org/apache/tuscany/sca/binding/ws/axis2/Axis2ServiceProvider.java
> Tue Aug 12 13:40:20 2008
> @@ -536,10 +536,12 @@
>             if (obj instanceof XmlSchemaExternal) {
>                 XmlSchemaExternal extSchema = (XmlSchemaExternal)obj;
>                 String location = extSchema.getSchemaLocation();
> -                if (location.indexOf(":/") < 0 & location.indexOf("?xsd=")
> < 0) {
> +                if (location.length() > 0 && location.indexOf(":/") < 0 &&
> location.indexOf("?xsd=") < 0) {
>                     extSchema.setSchemaLocation(name + "?xsd=" + location);
>                 }
> -                updateSchemaRefs(extSchema.getSchema(), name);
> +                if (extSchema.getSchema() != null) {
> +                    updateSchemaRefs(extSchema.getSchema(), name);
> +                }
>             }
>         }
>     }
>
> Modified:
> tuscany/branches/sca-java-1.3/modules/binding-ws-wsdlgen/src/main/java/org/apache/tuscany/sca/binding/ws/wsdlgen/Interface2WSDLGenerator.java
> URL:
> http://svn.apache.org/viewvc/tuscany/branches/sca-java-1.3/modules/binding-ws-wsdlgen/src/main/java/org/apache/tuscany/sca/binding/ws/wsdlgen/Interface2WSDLGenerator.java?rev=685307&r1=685306&r2=685307&view=diff
>
> ==============================================================================
> ---
> tuscany/branches/sca-java-1.3/modules/binding-ws-wsdlgen/src/main/java/org/apache/tuscany/sca/binding/ws/wsdlgen/Interface2WSDLGenerator.java
> (original)
> +++
> tuscany/branches/sca-java-1.3/modules/binding-ws-wsdlgen/src/main/java/org/apache/tuscany/sca/binding/ws/wsdlgen/Interface2WSDLGenerator.java
> Tue Aug 12 13:40:20 2008
> @@ -76,6 +76,8 @@
>  import org.apache.ws.commons.schema.utils.NamespaceMap;
>  import org.w3c.dom.Document;
>  import org.w3c.dom.Element;
> +import org.w3c.dom.Node;
> +import org.w3c.dom.NodeList;
>
>  /**
>  * @version $Rev: 670103 $ $Date: 2008-06-21 01:35:00 +0100 (Sat, 21 Jun
> 2008) $
> @@ -325,7 +327,10 @@
>                             }
>                             QName typeName = element.getType().getQName();
>                             String nsURI = typeName.getNamespaceURI();
> -                            if ("".equals(nsURI) ||
> targetNS.equals(nsURI)) {
> +                            if ("".equals(nsURI)) {
> +                                xsElement.setAttribute("type",
> typeName.getLocalPart());
> +                                addSchemaImport(schema, "", schemaDoc);
> +                            } else if (targetNS.equals(nsURI)) {
>                                 xsElement.setAttribute("type",
> typeName.getLocalPart());
>                             } else if (SCHEMA_NS.equals(nsURI)) {
>                                 xsElement.setAttribute("type", "xs:" +
> typeName.getLocalPart());
> @@ -336,6 +341,7 @@
>                                     prefix = "ns" + i++;
>                                     prefixMap.put(nsURI, prefix);
>                                     schema.setAttributeNS(XMLNS_NS,
> "xmlns:" + prefix, nsURI);
> +                                    addSchemaImport(schema, nsURI,
> schemaDoc);
>                                 }
>                                 xsElement.setAttribute("type", prefix + ":"
> + typeName.getLocalPart());
>                             }
> @@ -354,7 +360,26 @@
>
>         return definition;
>     }
> -
> +
> +    private static void addSchemaImport(Element schema, String nsURI,
> Document schemaDoc) {
> +        Element imp = schemaDoc.createElementNS(SCHEMA_NS, "xs:import");
> +        if (!"".equals(nsURI)) {
> +            imp.setAttribute("namespace", nsURI);
> +        }
> +        NodeList childNodes = schema.getChildNodes();
> +        for (int i = 0; i < childNodes.getLength(); i++) {
> +            Node childNode = childNodes.item(i);
> +            if (childNode instanceof Element) {
> +                schema.insertBefore(imp, childNode);
> +                imp = null;
> +                break;
> +            }
> +        }
> +        if (imp != null) {
> +            schema.appendChild(imp);
> +        }
> +    }
> +
>     private void addSchemaExtension(XSDefinition xsDef,
>                                     XmlSchemaCollection schemaCollection,
>                                     WSDLDefinition wsdlDefinition,
>
> Modified:
> tuscany/branches/sca-java-1.3/modules/databinding-jaxb/src/main/java/org/apache/tuscany/sca/databinding/jaxb/JAXBTypeHelper.java
> URL:
> http://svn.apache.org/viewvc/tuscany/branches/sca-java-1.3/modules/databinding-jaxb/src/main/java/org/apache/tuscany/sca/databinding/jaxb/JAXBTypeHelper.java?rev=685307&r1=685306&r2=685307&view=diff
>
> ==============================================================================
> ---
> tuscany/branches/sca-java-1.3/modules/databinding-jaxb/src/main/java/org/apache/tuscany/sca/databinding/jaxb/JAXBTypeHelper.java
> (original)
> +++
> tuscany/branches/sca-java-1.3/modules/databinding-jaxb/src/main/java/org/apache/tuscany/sca/databinding/jaxb/JAXBTypeHelper.java
> Tue Aug 12 13:40:20 2008
> @@ -19,7 +19,6 @@
>
>  package org.apache.tuscany.sca.databinding.jaxb;
>
> -import java.beans.Introspector;
>  import java.io.IOException;
>  import java.io.StringReader;
>  import java.io.StringWriter;
> @@ -74,13 +73,43 @@
>                 xmlType = ((XMLType)logical).getTypeName();
>             }
>             if (xmlType == null) {
> -                xmlType =
> -                    new QName(JavaXMLMapper.getNamespace(javaType),
> Introspector.decapitalize(javaType.getSimpleName()));
> +                xmlType = new
> QName(jaxbRIDecapitalize(javaType.getSimpleName()));
>             }
>             return new TypeInfo(xmlType, false, null);
>         }
>     }
>
> +    /**
> +     * The JAXB RI doesn't implement the decapitalization algorithm in the
> +     * JAXB spec.  See Sun bug 6505643 for details.  This means that we
> need
> +     * to mimic the incorrect algorithm for references from wrapper
> schemas.
> +     */
> +    private String jaxbRIDecapitalize(String name) {
> +        // find first lower case char in name
> +        int lower = name.length();
> +        for (int i = 0; i < name.length(); i++) {
> +            if (Character.isLowerCase(name.charAt(i))) {
> +                lower = i;
> +                break;
> +            }
> +        }
> +
> +        int decap;
> +        if (name.length() == 0) {
> +            decap = 0;  // empty string: nothing to do
> +        } else if (lower == 0) {
> +            decap = 0;  // first char is lower case: nothing to do
> +        } else if (lower == 1) {
> +            decap = 1;  // one upper followed by lower: decapitalize 1
> char
> +        } else if (lower < name.length()) {
> +            decap = lower - 1;  // n uppers followed by at least one
> lower: decapitalize n-1 chars
> +        } else {
> +            decap = name.length();  // all upper case: decapitalize all
> chars
> +        }
> +
> +        return name.substring(0, decap).toLowerCase() +
> name.substring(decap);
> +    }
> +
>     /*
>     public List<XSDefinition> getSchemaDefinitions(XSDFactory factory,
> ModelResolver resolver) {
>         List<XSDefinition> definitions = new ArrayList<XSDefinition>();
>
>
>
Was this intended to be a 1.3 change or a 1.3.1 change?

Simon