tomj        02/02/27 15:46:32

  Modified:    java/src/org/apache/axis/wsdl/fromJava Emitter.java
               java/src/org/apache/axis/wsdl/toJava JavaDeployWriter.java
               java/src/org/apache/axis/encoding/ser SimpleSerializer.java
               java/src/org/apache/axis/deployment/wsdd
                        WSDDBeanMapping.java WSDDService.java
                        WSDDTypeMapping.java
  Log:
  Changes to support document/literal WSDL generation
  and generation of simpleContent type schema.
  
  Get the encoding style of a type mapping from the service style.
  
  For now, style="document" in the service, means literal encoding.
  
  Revision  Changes    Path
  1.22      +14 -3     xml-axis/java/src/org/apache/axis/wsdl/fromJava/Emitter.java
  
  Index: Emitter.java
  ===================================================================
  RCS file: /home/cvs/xml-axis/java/src/org/apache/axis/wsdl/fromJava/Emitter.java,v
  retrieving revision 1.21
  retrieving revision 1.22
  diff -u -r1.21 -r1.22
  --- Emitter.java      27 Feb 2002 20:31:10 -0000      1.21
  +++ Emitter.java      27 Feb 2002 23:46:32 -0000      1.22
  @@ -679,7 +679,13 @@
   
           // Input SOAP Body
           SOAPBody soapBodyIn = new SOAPBodyImpl();
  -        soapBodyIn.setUse("encoded");
  +        // for now, if its document, it literal use.
  +        if (mode == MODE_RPC) {
  +            soapBodyIn.setUse("encoded");
  +            soapBodyIn.setEncodingStyles(encodingList);
  +        } else {
  +            soapBodyIn.setUse("literal");
  +        }
           if (targetService == null)
               soapBodyIn.setNamespaceURI(intfNS);
           else
  @@ -693,7 +699,13 @@
           
           // Output SOAP Body
           SOAPBody soapBodyOut = new SOAPBodyImpl();
  -        soapBodyOut.setUse("encoded");
  +        // for now, if its document, it literal use.
  +        if (mode == MODE_RPC) {
  +            soapBodyOut.setUse("encoded");
  +            soapBodyOut.setEncodingStyles(encodingList);
  +        } else {
  +            soapBodyOut.setUse("literal");
  +        }
           if (targetService == null)
               soapBodyOut.setNamespaceURI(intfNS);
           else
  @@ -702,7 +714,6 @@
           if (namespace != null) {
               soapBodyOut.setNamespaceURI(namespace);
           }
  -        soapBodyOut.setEncodingStyles(encodingList);
           bindingOutput.addExtensibilityElement(soapBodyOut);
   
           bindingOper.setBindingInput(bindingInput);
  
  
  
  1.18      +15 -5     
xml-axis/java/src/org/apache/axis/wsdl/toJava/JavaDeployWriter.java
  
  Index: JavaDeployWriter.java
  ===================================================================
  RCS file: 
/home/cvs/xml-axis/java/src/org/apache/axis/wsdl/toJava/JavaDeployWriter.java,v
  retrieving revision 1.17
  retrieving revision 1.18
  diff -u -r1.17 -r1.18
  --- JavaDeployWriter.java     13 Feb 2002 21:07:15 -0000      1.17
  +++ JavaDeployWriter.java     27 Feb 2002 23:46:32 -0000      1.18
  @@ -140,7 +140,7 @@
       /**
        * Write out bean mappings for each type
        */
  -    protected void writeDeployTypes() throws IOException {
  +    protected void writeDeployTypes(boolean hasLiteral) throws IOException {
           Vector types = symbolTable.getTypes();
   
           pw.println();
  @@ -148,7 +148,8 @@
               TypeEntry type = (TypeEntry) types.elementAt(i);
               if (type.getBaseType() == null && type.isReferenced()
                   && !type.isOnlyLiteralReferenced()
  -                && !(type instanceof CollectionType)) {
  +                && !(type instanceof CollectionType)
  +                && !(type instanceof DefinedElement)) {
                   pw.println("      <typeMapping");
                   pw.println("        xmlns:ns=\"" + 
type.getQName().getNamespaceURI() + "\"");
                   pw.println("        qname=\"ns:" + type.getQName().getLocalPart() + 
'"');
  @@ -161,11 +162,18 @@
                        type.getNode(), emitter.getSymbolTable()) != null) {
                       pw.println("        
serializer=\"org.apache.axis.encoding.ser.EnumSerializerFactory\"");
                       pw.println("        
deserializer=\"org.apache.axis.encoding.ser.EnumDeserializerFactory\"");
  +                } else if (type.isSimpleType()) {
  +                    pw.println("        
serializer=\"org.apache.axis.encoding.ser.SimpleNonPrimitiveSerializerFactory\"");
  +                    pw.println("        
deserializer=\"org.apache.axis.encoding.ser.SimpleDeserializerFactory\"");
                   } else {
                       pw.println("        
serializer=\"org.apache.axis.encoding.ser.BeanSerializerFactory\"");
                       pw.println("        
deserializer=\"org.apache.axis.encoding.ser.BeanDeserializerFactory\"");
                   }
  -                pw.println("        encodingStyle=\""+ 
Constants.URI_CURRENT_SOAP_ENC+"\"");
  +                if (hasLiteral)
  +                    pw.println("        encodingStyle=\"\"");
  +                else
  +                    pw.println("        encodingStyle=\"" + 
Constants.URI_CURRENT_SOAP_ENC + "\"");
  +                
                   pw.println("      />");
               }
           }
  @@ -180,13 +188,15 @@
           String serviceName = port.getName();
   
           boolean isRPC = (bEntry.getBindingStyle() == BindingEntry.STYLE_RPC);
  +        boolean hasLiteral = bEntry.hasLiteral();
   
           String prefix = Constants.NSPREFIX_WSDD_JAVA;
           pw.println("  <service name=\"" + serviceName
  -                + "\" provider=\"" + (isRPC ? prefix +":RPC" : prefix +":MSG") + 
"\">");
  +                + "\" provider=\"" + (isRPC ? prefix +":RPC" : prefix +":MSG")
  +                + "\"" + (hasLiteral ? " style=\"literal\"" : "") +  ">");
   
           writeDeployBinding(binding);
  -        writeDeployTypes();
  +        writeDeployTypes(hasLiteral);
   
   
           pw.println("  </service>");
  
  
  
  1.4       +86 -8     
xml-axis/java/src/org/apache/axis/encoding/ser/SimpleSerializer.java
  
  Index: SimpleSerializer.java
  ===================================================================
  RCS file: 
/home/cvs/xml-axis/java/src/org/apache/axis/encoding/ser/SimpleSerializer.java,v
  retrieving revision 1.3
  retrieving revision 1.4
  diff -u -r1.3 -r1.4
  --- SimpleSerializer.java     27 Feb 2002 13:41:27 -0000      1.3
  +++ SimpleSerializer.java     27 Feb 2002 23:46:32 -0000      1.4
  @@ -63,9 +63,13 @@
   import java.io.IOException;
   import java.util.Vector;
   import java.lang.reflect.Method;
  +import java.lang.reflect.Field;
   
   import org.apache.axis.Constants;
  +import org.apache.axis.AxisFault;
   import org.apache.axis.wsdl.fromJava.Types;
  +import org.apache.axis.wsdl.fromJava.ClassRep;
  +import org.apache.axis.wsdl.fromJava.FieldRep;
   import org.apache.axis.wsdl.toJava.Utils;
   import org.apache.axis.utils.JavaUtils;
   import org.apache.axis.utils.XMLUtils;
  @@ -88,9 +92,19 @@
   
       public QName xmlType;
       public Class javaType;
  +    
  +    private BeanPropertyDescriptor[] propertyDescriptor = null;
  +    private Vector beanAttributeNames = null;
  +    
       public SimpleSerializer(Class javaType, QName xmlType) {
           this.xmlType = xmlType;
           this.javaType = javaType;
  +        
  +        if (SimpleType.class.isAssignableFrom(javaType)) {
  +            // get the bean properties and the list of attributes from the bean
  +            propertyDescriptor = BeanSerializer.getPd(javaType);
  +            beanAttributeNames = BeanSerializer.getBeanAttributes(javaType);
  +        }
       }
       /**
        * Serialize a primitive or simple value.
  @@ -147,10 +161,6 @@
   
       private Attributes getObjectAttributes(Object value, Attributes attributes) {
           
  -        // get the list of attributes from the bean
  -        Vector beanAttributeNames = 
  -                BeanSerializer.getBeanAttributes(value.getClass());
  -
           // if nothing, return
           if (beanAttributeNames.isEmpty())
               return attributes;
  @@ -161,9 +171,6 @@
           else
               attrs = new AttributesImpl();
           
  -        BeanPropertyDescriptor propertyDescriptor[] = 
  -                BeanSerializer.getPd(value.getClass());
  -        
           try {
               // Find each property that is an attribute 
               // and add it to our attribute list
  @@ -207,6 +214,77 @@
        * @see org.apache.axis.wsdl.fromJava.Types
        */
       public boolean writeSchema(Types types) throws Exception {
  -        return false;
  +        // Let the caller generate WSDL if this is not a SimpleType
  +        if (!SimpleType.class.isAssignableFrom(javaType))
  +            return false;
  +        
  +        // Emit WSDL for simpleContent
  +        javax.wsdl.QName qName = types.getWsdlQName(xmlType);
  +
  +        // ComplexType representation of SimpleType bean class
  +        Element complexType = types.createElement("complexType");
  +        types.writeSchemaElement(qName, complexType);
  +        complexType.setAttribute("name", qName.getLocalPart());
  +
  +        // Produce simpleContent extending base type.
  +        Element simpleContent = types.createElement("simpleContent");
  +        complexType.appendChild(simpleContent);
  +        Element extension = types.createElement("extension");
  +        simpleContent.appendChild(extension);
  +        
  +        // Get the base type from the "value" element of the bean
  +        String base = "string";
  +        for (int i=0; i<propertyDescriptor.length; i++) {
  +            if (! propertyDescriptor[i].getName().equals("value"))
  +                continue;
  +            
  +            BeanPropertyDescriptor bpd = propertyDescriptor[i];
  +            Class type = bpd.getType();
  +            // Attribute must extend a simple type.
  +            if (!types.isSimpleSchemaType(type))
  +                throw new AxisFault(JavaUtils.getMessage("AttrNotSimpleType01", 
  +                        type.getName()));
  +            
  +            base = types.writeType(type);
  +        }
  +        extension.setAttribute("base", base);
  +
  +        // Build a ClassRep that represents the bean class.  This
  +        // allows users to provide their own field mapping.
  +        ClassRep clsRep = types.getBeanBuilder().build(javaType);
  +
  +        // Write out fields
  +        Vector fields = clsRep.getFields();
  +        for (int i=0; i < fields.size(); i++) {
  +            FieldRep field = (FieldRep) fields.elementAt(i);
  +
  +            String fieldName = field.getName();
  +            
  +            // if bean fields are attributes, write attribute element
  +            if (!beanAttributeNames.contains(fieldName)) {
  +                continue;
  +            }
  +            //  write attribute element
  +            Class fieldType = field.getType();
  +            
  +            // Attribute must be a simple type.
  +            if (!types.isSimpleSchemaType(fieldType))
  +                throw new AxisFault(JavaUtils.getMessage("AttrNotSimpleType00", 
  +                        fieldName,
  +                        fieldType.getName()));
  +            
  +            // write attribute element
  +            // TODO the attribute name needs to be preserved from the XML
  +            String elementType = types.writeType(fieldType);
  +            Element elem = types.createAttributeElement(fieldName,
  +                    elementType,
  +                    false,
  +                    extension.getOwnerDocument());
  +            extension.appendChild(elem);
  +        }
  +            
  +        // done
  +        return true;
  +        
       }
   }
  
  
  
  1.5       +1 -1      
xml-axis/java/src/org/apache/axis/deployment/wsdd/WSDDBeanMapping.java
  
  Index: WSDDBeanMapping.java
  ===================================================================
  RCS file: 
/home/cvs/xml-axis/java/src/org/apache/axis/deployment/wsdd/WSDDBeanMapping.java,v
  retrieving revision 1.4
  retrieving revision 1.5
  diff -u -r1.4 -r1.5
  --- WSDDBeanMapping.java      28 Jan 2002 18:23:00 -0000      1.4
  +++ WSDDBeanMapping.java      27 Feb 2002 23:46:32 -0000      1.5
  @@ -96,7 +96,7 @@
           
           serializer = "org.apache.axis.encoding.ser.BeanSerializerFactory";
           deserializer = "org.apache.axis.encoding.ser.BeanDeserializerFactory";
  -        encodingStyle = Constants.URI_CURRENT_SOAP_ENC;
  +        encodingStyle = null;
       }
   
       protected QName getElementName() {
  
  
  
  1.41      +12 -7     
xml-axis/java/src/org/apache/axis/deployment/wsdd/WSDDService.java
  
  Index: WSDDService.java
  ===================================================================
  RCS file: 
/home/cvs/xml-axis/java/src/org/apache/axis/deployment/wsdd/WSDDService.java,v
  retrieving revision 1.40
  retrieving revision 1.41
  diff -u -r1.40 -r1.41
  --- WSDDService.java  20 Feb 2002 18:59:20 -0000      1.40
  +++ WSDDService.java  27 Feb 2002 23:46:32 -0000      1.41
  @@ -330,16 +330,21 @@
               tmr = new TypeMappingRegistryImpl();
           }
           try {
  -            TypeMapping tm = (TypeMapping) 
tmr.getTypeMapping(mapping.getEncodingStyle());
  +            // Get the encoding style from the mapping, if it isn't set
  +            // use the style of the service to map doc/lit or rpc/enc
  +            String encodingStyle = mapping.getEncodingStyle();
  +            if (encodingStyle == null) {
  +                if (style == SOAPService.STYLE_RPC)
  +                    encodingStyle =Constants.URI_CURRENT_SOAP_ENC;
  +                else
  +                    encodingStyle = "";  // literal
  +            }
  +            TypeMapping tm = (TypeMapping) tmr.getTypeMapping(encodingStyle);
               TypeMapping df = (TypeMapping) tmr.getDefaultTypeMapping();
               if (tm == null || tm == df) {
                   tm = (TypeMapping) tmr.createTypeMapping();
  -                String namespace = mapping.getEncodingStyle();
  -                if (mapping.getEncodingStyle() == null) {
  -                    namespace = Constants.URI_CURRENT_SOAP_ENC;
  -                }
  -                tm.setSupportedNamespaces(new String[] {namespace});
  -                tmr.register(namespace, tm);
  +                tm.setSupportedNamespaces(new String[] {encodingStyle});
  +                tmr.register(encodingStyle, tm);
               }
               
               SerializerFactory   ser   = null;
  
  
  
  1.25      +1 -1      
xml-axis/java/src/org/apache/axis/deployment/wsdd/WSDDTypeMapping.java
  
  Index: WSDDTypeMapping.java
  ===================================================================
  RCS file: 
/home/cvs/xml-axis/java/src/org/apache/axis/deployment/wsdd/WSDDTypeMapping.java,v
  retrieving revision 1.24
  retrieving revision 1.25
  diff -u -r1.24 -r1.25
  --- WSDDTypeMapping.java      21 Feb 2002 14:33:58 -0000      1.24
  +++ WSDDTypeMapping.java      27 Feb 2002 23:46:32 -0000      1.25
  @@ -101,7 +101,7 @@
           serializer = e.getAttribute("serializer");
           deserializer = e.getAttribute("deserializer");
           encodingStyle = e.getAttribute("encodingStyle");
  -        if (encodingStyle == null || encodingStyle.equals("")) {
  +        if (encodingStyle == null) {
               encodingStyle = Constants.URI_CURRENT_SOAP_ENC;
           }
   
  
  
  


Reply via email to