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/09/15 14:07:34 UTC

svn commit: r695444 - in /tuscany/java/sca/modules: binding-ws-wsdlgen/src/main/java/org/apache/tuscany/sca/binding/ws/wsdlgen/ databinding-jaxb/src/main/java/org/apache/tuscany/sca/databinding/jaxb/

Author: nash
Date: Mon Sep 15 05:07:34 2008
New Revision: 695444

URL: http://svn.apache.org/viewvc?rev=695444&view=rev
Log:
Fix TUSCANY-2531

Modified:
    tuscany/java/sca/modules/binding-ws-wsdlgen/src/main/java/org/apache/tuscany/sca/binding/ws/wsdlgen/Interface2WSDLGenerator.java
    tuscany/java/sca/modules/databinding-jaxb/src/main/java/org/apache/tuscany/sca/databinding/jaxb/JAXBContextHelper.java
    tuscany/java/sca/modules/databinding-jaxb/src/main/java/org/apache/tuscany/sca/databinding/jaxb/JAXBTypeHelper.java

Modified: tuscany/java/sca/modules/binding-ws-wsdlgen/src/main/java/org/apache/tuscany/sca/binding/ws/wsdlgen/Interface2WSDLGenerator.java
URL: http://svn.apache.org/viewvc/tuscany/java/sca/modules/binding-ws-wsdlgen/src/main/java/org/apache/tuscany/sca/binding/ws/wsdlgen/Interface2WSDLGenerator.java?rev=695444&r1=695443&r2=695444&view=diff
==============================================================================
--- tuscany/java/sca/modules/binding-ws-wsdlgen/src/main/java/org/apache/tuscany/sca/binding/ws/wsdlgen/Interface2WSDLGenerator.java (original)
+++ tuscany/java/sca/modules/binding-ws-wsdlgen/src/main/java/org/apache/tuscany/sca/binding/ws/wsdlgen/Interface2WSDLGenerator.java Mon Sep 15 05:07:34 2008
@@ -400,18 +400,20 @@
                             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());
                             } else {
                                 Map<String, String> prefixMap = prefixMaps.get(schema);
                                 String prefix = prefixMap.get(nsURI);
                                 if (prefix == null) {
-                                    prefix = "ns" + i++;
+                                    if (targetNS.equals(nsURI)) {
+									    prefix = "tns";
+									} else {
+                                        prefix = "ns" + i++;
+                                        addSchemaImport(schema, nsURI, schemaDoc);
+									}
                                     prefixMap.put(nsURI, prefix);
                                     schema.setAttributeNS(XMLNS_NS, "xmlns:" + prefix, nsURI);
-                                    addSchemaImport(schema, nsURI, schemaDoc);
                                 }
                                 xsElement.setAttribute("type", prefix + ":" + typeName.getLocalPart());
                             }

Modified: tuscany/java/sca/modules/databinding-jaxb/src/main/java/org/apache/tuscany/sca/databinding/jaxb/JAXBContextHelper.java
URL: http://svn.apache.org/viewvc/tuscany/java/sca/modules/databinding-jaxb/src/main/java/org/apache/tuscany/sca/databinding/jaxb/JAXBContextHelper.java?rev=695444&r1=695443&r2=695444&view=diff
==============================================================================
--- tuscany/java/sca/modules/databinding-jaxb/src/main/java/org/apache/tuscany/sca/databinding/jaxb/JAXBContextHelper.java (original)
+++ tuscany/java/sca/modules/databinding-jaxb/src/main/java/org/apache/tuscany/sca/databinding/jaxb/JAXBContextHelper.java Mon Sep 15 05:07:34 2008
@@ -18,7 +18,6 @@
  */
 package org.apache.tuscany.sca.databinding.jaxb;
 
-import java.beans.Introspector;
 import java.io.IOException;
 import java.lang.reflect.GenericArrayType;
 import java.lang.reflect.ParameterizedType;
@@ -374,7 +373,7 @@
                 elementNamespace = namespace;
             }
             if (elementName.equals("##default")) {
-                elementName = Introspector.decapitalize(javaType.getSimpleName());
+                elementName = jaxbDecapitalize(javaType.getSimpleName());
             }
             elementQName = new QName(elementNamespace, elementName);
         }
@@ -389,13 +388,13 @@
             }
 
             if (typeName.equals("##default")) {
-                typeName = Introspector.decapitalize(javaType.getSimpleName());
+                typeName = jaxbDecapitalize(javaType.getSimpleName());
             }
             typeQName = new QName(typeNamespace, typeName);
         } else {
             XmlEnum xmlEnum = javaType.getAnnotation(XmlEnum.class);
             if (xmlEnum != null) {
-                name = Introspector.decapitalize(javaType.getSimpleName());
+                name = jaxbDecapitalize(javaType.getSimpleName());
                 typeQName = new QName(namespace, name);
             }
         }
@@ -405,6 +404,38 @@
         return new XMLType(elementQName, typeQName);
     }
 
+    /**
+     * The JAXB RI doesn't implement the decapitalization algorithm in the
+     * JAXB spec.  See Sun bug 6505643 for details.  This means that instead
+	 * of calling java.beans.Introspector.decapitalize() as the JAXB spec says,
+	 * Tuscany needs to mimic the incorrect JAXB RI algorithm.
+     */
+    public static String jaxbDecapitalize(String name) {
+        // find first lower case char in name
+        int lower = name.length();
+        for (int i = 0; i < name.length(); i++) {
+            if (Character.isLowerCase(name.charAt(i))) {
+                lower = i;
+                break;
+            }
+        }
+
+        int decap;
+        if (name.length() == 0) {
+            decap = 0;  // empty string: nothing to do
+        } else if (lower == 0) {
+            decap = 0;  // first char is lower case: nothing to do
+        } else if (lower == 1) {
+            decap = 1;  // one upper followed by lower: decapitalize 1 char
+        } else if (lower < name.length()) { 
+            decap = lower - 1;  // n uppers followed by at least one lower: decapitalize n-1 chars
+        } else {
+            decap = name.length();  // all upper case: decapitalize all chars
+        }
+
+        return name.substring(0, decap).toLowerCase() + name.substring(decap);
+    }
+
     public static Node generateSchema(JAXBContext context) throws Exception {
         SchemaOutputResolverImpl resolver = new SchemaOutputResolverImpl();
         context.generateSchema(resolver);

Modified: tuscany/java/sca/modules/databinding-jaxb/src/main/java/org/apache/tuscany/sca/databinding/jaxb/JAXBTypeHelper.java
URL: http://svn.apache.org/viewvc/tuscany/java/sca/modules/databinding-jaxb/src/main/java/org/apache/tuscany/sca/databinding/jaxb/JAXBTypeHelper.java?rev=695444&r1=695443&r2=695444&view=diff
==============================================================================
--- tuscany/java/sca/modules/databinding-jaxb/src/main/java/org/apache/tuscany/sca/databinding/jaxb/JAXBTypeHelper.java (original)
+++ tuscany/java/sca/modules/databinding-jaxb/src/main/java/org/apache/tuscany/sca/databinding/jaxb/JAXBTypeHelper.java Mon Sep 15 05:07:34 2008
@@ -73,43 +73,12 @@
                 xmlType = ((XMLType)logical).getTypeName();
             }
             if (xmlType == null) {
-                xmlType = new QName(jaxbRIDecapitalize(javaType.getSimpleName()));
+                xmlType = new QName(JAXBContextHelper.jaxbDecapitalize(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>();