snichol     2002/08/29 20:22:54

  Modified:    java/docs changes.html
               java/src/org/apache/soap/server DeploymentDescriptor.java
               java/src/org/apache/soap/util/xml DOMUtils.java
               java/samples/interop readme.html
  Added:       java/samples/interop DeploymentDescriptor2.xml
  Log:
  Bugzilla 12124
  
  Support valid XML namespace constructs in deployment descriptor
  mappings for Microsoft interop, e.g. it is now legal to specify
  qname="inputInteger"</code> rather than the invalid construct
  xmlns:x="" qname="x:inputInteger".
  
  Revision  Changes    Path
  1.42      +4 -0      xml-soap/java/docs/changes.html
  
  Index: changes.html
  ===================================================================
  RCS file: /home/cvs/xml-soap/java/docs/changes.html,v
  retrieving revision 1.41
  retrieving revision 1.42
  diff -u -r1.41 -r1.42
  --- changes.html      29 Aug 2002 03:33:43 -0000      1.41
  +++ changes.html      30 Aug 2002 03:22:54 -0000      1.42
  @@ -65,6 +65,10 @@
         <li>Fix EJB and CORBA providers to check deployment descriptor to
         determine whether method is exposed.</li>
         <li>Add serialization of collection/map interfaces and concrete classes.</li>
  +      <li>Support valid XML namespace constructs in deployment descriptor
  +      mappings for Microsoft interop, e.g. it is now legal to specify
  +      <code>qname=&quot;inputInteger&quot;</code> rather than the invalid construct
  +      <code>xmlns:x=&quot;&quot; qname=&quot;x:inputInteger&quot;</code>.
       </ul>
     </li>
   </ul>
  
  
  
  1.35      +1 -1      
xml-soap/java/src/org/apache/soap/server/DeploymentDescriptor.java
  
  Index: DeploymentDescriptor.java
  ===================================================================
  RCS file: 
/home/cvs/xml-soap/java/src/org/apache/soap/server/DeploymentDescriptor.java,v
  retrieving revision 1.34
  retrieving revision 1.35
  diff -u -r1.34 -r1.35
  --- DeploymentDescriptor.java 23 Aug 2002 02:18:23 -0000      1.34
  +++ DeploymentDescriptor.java 30 Aug 2002 03:22:54 -0000      1.35
  @@ -699,7 +699,7 @@
           dd.setMappings (tms);
           for (int i = 0; i < nmaps; i++) {
             e = (Element) nl.item (i);
  -          QName qname = DOMUtils.getQualifiedAttributeValue(e, "qname");
  +          QName qname = DOMUtils.getQualifiedAttributeValue(e, "qname", true);
             tms[i] =
               new TypeMapping (DOMUtils.getAttribute (e, "encodingStyle"),
                                qname,
  
  
  
  1.7       +30 -1     xml-soap/java/src/org/apache/soap/util/xml/DOMUtils.java
  
  Index: DOMUtils.java
  ===================================================================
  RCS file: /home/cvs/xml-soap/java/src/org/apache/soap/util/xml/DOMUtils.java,v
  retrieving revision 1.6
  retrieving revision 1.7
  diff -u -r1.6 -r1.7
  --- DOMUtils.java     26 Jul 2002 04:48:29 -0000      1.6
  +++ DOMUtils.java     30 Aug 2002 03:22:54 -0000      1.7
  @@ -60,8 +60,11 @@
   import org.w3c.dom.*;
   
   /**
  + * Common operations on DOM structures.
  + *
    * @author Matthew J. Duftler
    * @author Sanjiva Weerawarana
  + * @author Scott Nichol ([EMAIL PROTECTED])
    */
   public class DOMUtils {
     /**
  @@ -296,10 +299,30 @@
          return null;
     }
   
  +  /**
  +   * Gets an attribute value as a QName.  The value must have a prefix
  +   * that correctly maps to a namespace URI.
  +   */
     public static QName getQualifiedAttributeValue(Element el,
                                                    String attrName)
       throws IllegalArgumentException
     {
  +    return getQualifiedAttributeValue(el, attrName, false);
  +  }
  +
  +  /**
  +   * Gets an attribute value as a QName.
  +   *
  +   * @param el The DOM Element to which the attribute applies.
  +   * @param attrName The name of the attribute.
  +   * @param allowNoPrefix If false, an exception is thrown if the attribute
  +   *                      value does not have a prefix.
  +   */
  +  public static QName getQualifiedAttributeValue(Element el,
  +                                                 String attrName,
  +                                                 boolean allowNoPrefix)
  +    throws IllegalArgumentException
  +  {
       String attrValue = DOMUtils.getAttribute(el, attrName);
   
       if (attrValue != null)
  @@ -310,7 +333,13 @@
                                        : null;
         String attrValueLocalPart    = attrValue.substring(index + 1);
         String attrValueNamespaceURI =
  -        DOMUtils.getNamespaceURIFromPrefix(el, attrValuePrefix);
  +                DOMUtils.getNamespaceURIFromPrefix(el, attrValuePrefix);
  +
  +      // This matches usage elsewhere in Apache SOAP code: an empty
  +      // namespace in a QName specifies no namespace, rather than a
  +      // null namespace.
  +      if (attrValueNamespaceURI == null && allowNoPrefix)
  +        attrValueNamespaceURI = "";
   
         if (attrValueNamespaceURI != null)
         {
  
  
  
  1.2       +9 -0      xml-soap/java/samples/interop/readme.html
  
  Index: readme.html
  ===================================================================
  RCS file: /home/cvs/xml-soap/java/samples/interop/readme.html,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- readme.html       19 May 2001 17:38:53 -0000      1.1
  +++ readme.html       30 Aug 2002 03:22:54 -0000      1.2
  @@ -1,12 +1,21 @@
   <html>
   <body>
  +<p>
   The client and server for this sample implement the SOAP interoperability echo
   test suite as defined by the <a
   href="http://groups.yahoo.com/group/soapbuilders";>soapbuilders</a> community.
   More info on these tests, and a selection of clients and servers to test
   against, is available at <a href="http://www.xmethods.net/ilab";>the XMethods
   interop lab</a>.
  +</p>
  +<p>
  +Note that there are two deployment descriptor options.  DeploymentDescriptor.xml
  +is the &quot;classic&quot; structure.  DeploymentDescriptor2.xml works only with
  +Apache SOAP versions later than 2.3.1.  All namespace definitions are valid
  +according to the XML Namespace spec, so parsers like Xerces 2.0.2 accept it.
  +</p>
   <p>
   Author:  <a href="mailto:[EMAIL PROTECTED]";>Glen Daniels</a>
  +</p>
   </body>
   </html>
  
  
  
  1.1                  xml-soap/java/samples/interop/DeploymentDescriptor2.xml
  
  Index: DeploymentDescriptor2.xml
  ===================================================================
  <isd:service xmlns:isd="http://xml.apache.org/xml-soap/deployment";
               id="http://soapinterop.org/";
               checkMustUnderstands="true">
    <isd:provider type="java"
                  scope="Application"
                  methods="nop echoInteger echoString echoFloat echoStruct 
echoIntegerArray echoFloatArray echoStringArray echoStructArray echoVoid echoBase64 
echoHexBinary echoDate echoDecimal echoBoolean echoMap echoMapArray">
      <isd:java class="samples.interop.EchoTestService" static="false"/>
      <isd:option key="SessionRequired" value="false"/>
    </isd:provider>
  
    <isd:faultListener>org.apache.soap.server.DOMFaultListener</isd:faultListener>
  
    <isd:mappings>
      <isd:map encodingStyle="http://schemas.xmlsoap.org/soap/encoding/";
               qname="inputInteger"
               xml2JavaClassName="org.apache.soap.encoding.soapenc.IntDeserializer"/>
      <isd:map encodingStyle="http://schemas.xmlsoap.org/soap/encoding/";
               qname="inputFloat"
               xml2JavaClassName="org.apache.soap.encoding.soapenc.FloatDeserializer"/>
      <isd:map encodingStyle="http://schemas.xmlsoap.org/soap/encoding/";
               qname="inputString"
               
xml2JavaClassName="org.apache.soap.encoding.soapenc.StringDeserializer"/>
      <isd:map encodingStyle="http://schemas.xmlsoap.org/soap/encoding/";
               qname="inputStruct"
               xml2JavaClassName="samples.interop.DataSerializer"/>
      <isd:map encodingStyle="http://schemas.xmlsoap.org/soap/encoding/";
               qname="inputIntegerArray"
               xml2JavaClassName="org.apache.soap.encoding.soapenc.ArraySerializer"/>
      <isd:map encodingStyle="http://schemas.xmlsoap.org/soap/encoding/";
               qname="inputFloatArray"
               xml2JavaClassName="org.apache.soap.encoding.soapenc.ArraySerializer"/>
      <isd:map encodingStyle="http://schemas.xmlsoap.org/soap/encoding/";
               qname="inputStringArray"
               xml2JavaClassName="org.apache.soap.encoding.soapenc.ArraySerializer"/>
      <isd:map encodingStyle="http://schemas.xmlsoap.org/soap/encoding/";
               qname="inputStructArray"
               xml2JavaClassName="org.apache.soap.encoding.soapenc.ArraySerializer"/>
  
      <isd:map encodingStyle="http://schemas.xmlsoap.org/soap/encoding/";
               xmlns:x="http://soapinterop.org/xsd"; qname="x:SOAPStruct"
               javaType="samples.interop.Data"
               java2XMLClassName="samples.interop.DataSerializer"
               xml2JavaClassName="samples.interop.DataSerializer"/>
  
      <isd:map encodingStyle="http://schemas.xmlsoap.org/soap/encoding/";
               xmlns:x="http://soapinterop.org/xsd"; qname="x:ArrayOfSOAPStruct"
               xml2JavaClassName="org.apache.soap.encoding.soapenc.ArraySerializer"/>
  
      <isd:map encodingStyle="http://schemas.xmlsoap.org/soap/encoding/";
               qname="inputBase64"
               xml2JavaClassName="org.apache.soap.encoding.soapenc.Base64Serializer"/>
  
      <isd:map encodingStyle="http://schemas.xmlsoap.org/soap/encoding/";
               qname="inputHexBinary"
               xml2JavaClassName="org.apache.soap.encoding.soapenc.HexDeserializer"/>
  
      <isd:map encodingStyle="http://schemas.xmlsoap.org/soap/encoding/";
               qname="inputDate"
               xml2JavaClassName="org.apache.soap.encoding.soapenc.DateSerializer"/>
      <isd:map encodingStyle="http://schemas.xmlsoap.org/soap/encoding/";
               qname="inputDecimal"
               
xml2JavaClassName="org.apache.soap.encoding.soapenc.DecimalDeserializer"/>
      <isd:map encodingStyle="http://schemas.xmlsoap.org/soap/encoding/";
               qname="inputBoolean"
               
xml2JavaClassName="org.apache.soap.encoding.soapenc.BooleanDeserializer"/>
      <isd:map encodingStyle="http://schemas.xmlsoap.org/soap/encoding/";
               qname="inputMap"
               
xml2JavaClassName="org.apache.soap.encoding.soapenc.HashtableSerializer"/>
    </isd:mappings>    
  </isd:service>
  
  
  

--
To unsubscribe, e-mail:   <mailto:[EMAIL PROTECTED]>
For additional commands, e-mail: <mailto:[EMAIL PROTECTED]>

Reply via email to