You are viewing a plain text version of this content. The canonical link for it is here.
Posted to java-dev@axis.apache.org by ow...@apache.org on 2002/11/25 16:12:45 UTC

cvs commit: xml-axis-wsif/java/src/org/apache/wsif/schema ElementType.java Parser.java

owenb       2002/11/25 07:12:45

  Modified:    java/src/org/apache/wsif/schema ElementType.java Parser.java
  Log:
  Fix to correctly map elements which are based on xsd simple types and are nillable
  
  Revision  Changes    Path
  1.4       +11 -0     xml-axis-wsif/java/src/org/apache/wsif/schema/ElementType.java
  
  Index: ElementType.java
  ===================================================================
  RCS file: /home/cvs/xml-axis-wsif/java/src/org/apache/wsif/schema/ElementType.java,v
  retrieving revision 1.3
  retrieving revision 1.4
  diff -u -r1.3 -r1.4
  --- ElementType.java	14 Nov 2002 16:23:13 -0000	1.3
  +++ ElementType.java	25 Nov 2002 15:12:45 -0000	1.4
  @@ -79,6 +79,7 @@
   	private QName typeName = null;
   	private QName elementType = null;
   	private List childTypes = new ArrayList();
  +	private boolean nillable = false;
   
   	/**
   	 * Constructor
  @@ -88,6 +89,12 @@
       	elementType = getAttributeQName(el, "type", tns);
           typeName = getAttributeQName(el, "name", tns);
           
  +        QName nillableAttr = getAttributeQName(el, "nillable", null);
  +        String stTrue = "true";
  +        if (nillableAttr != null && stTrue.equals(nillableAttr.getLocalPart())) {
  +        	nillable = true;
  +        }
  +        
           // If the element has no name, we cannot map it. Don't do any more processing
           // of this type
           if (typeName == null) return;
  @@ -131,6 +138,10 @@
   	 */	
   	public QName getElementType() {
   		return elementType;
  +	}
  +	
  +	public boolean isNillable() {
  +		return nillable;
   	}
   
   	/**
  
  
  
  1.5       +39 -1     xml-axis-wsif/java/src/org/apache/wsif/schema/Parser.java
  
  Index: Parser.java
  ===================================================================
  RCS file: /home/cvs/xml-axis-wsif/java/src/org/apache/wsif/schema/Parser.java,v
  retrieving revision 1.4
  retrieving revision 1.5
  diff -u -r1.4 -r1.5
  --- Parser.java	11 Nov 2002 15:49:41 -0000	1.4
  +++ Parser.java	25 Nov 2002 15:12:45 -0000	1.5
  @@ -256,13 +256,19 @@
                               QName baseType = ((ElementType) st).getElementType();
   
                               if (baseType != null) {
  +                            	if (((ElementType) st).isNillable()) {
  +                                	String wrapperClass = getWrapperClassName(baseType);
  +                                	if (wrapperClass != null) {
  +                                		table.put(typeName, wrapperClass);
  +                                		continue;
  +                                	} 	
  +                                }
                                   String baseClassName =
                                       (String) table.get(baseType);
                                   if (baseClassName == null
                                       && !includeStandardMappings) {
                                       baseClassName =
                                           (String) standards.get(baseType);
  -                                    ;
                                   }
                                   if (baseClassName != null) {
                                       table.put(typeName, baseClassName);
  @@ -627,4 +633,36 @@
           }
           return null;
       }
  +    
  +    /**
  +     * Elements which are nillable and are based on xsd simple types should map to
  +     * the object wrapper version of the corresponding primitive type. This method
  +     * will return the wrapper class name for a given QName.
  +     */
  +    private static String getWrapperClassName(QName qn) {
  +        if (qn == null) return null;
  +        String ns = qn.getNamespaceURI();
  +        if (WSIFConstants.NS_URI_1999_SCHEMA_XSD.equals(ns)
  +            || WSIFConstants.NS_URI_2000_SCHEMA_XSD.equals(ns)
  +            || WSIFConstants.NS_URI_2001_SCHEMA_XSD.equals(ns)) {
  +            String lp = qn.getLocalPart();
  +            if (lp == null) return null;
  +            if (lp.equals("int")) {
  +            	return "java.lang.Integer";
  +            } else if (lp.equals("long")) {
  +            	return "java.lang.Long";            	
  +            } else if (lp.equals("float")) {
  +            	return "java.lang.Float";            	
  +            } else if (lp.equals("short")) {
  +            	return "java.lang.Short";
  +            } else if (lp.equals("double")) {
  +            	return "java.lang.Double";
  +            } else if (lp.equals("boolean")) {
  +            	return "java.lang.Boolean";
  +            } else if (lp.equals("byte")) {
  +            	return "java.lang.Byte";            	
  +            }           
  +        }
  +        return null;
  +    }   
   }