WebServices - SOAP

June 10, 2002 - Version 2.3.1

  • Added logic to use xsi:nil, instead of xsi:null, when using the 2001 Schema spec.
  • Fixed behavior when the 1999 or 2000 schema URI is specified so that the serialization logic uses the older version of both the xsi and the xsd namespaces; it was previously just using the older xsd namespace.

May 31, 2002 - Version 2.3

  • Changed default schema to 2001 spec.
  • Reflected timeInstant -> dateTime change in 2001 schema spec.
  • Added support for primitive XSD data type hexBinary.
  • Added support for 2001:base64Binary.
  • Added HTTPS proxy support.
  • Made several changes to reduce the overhead of a SOAPMappingRegistry creation and also to reduce the number of SMRs created.
  • Removed SMR constructor which took the schema namespace URI because it doesn't work (new'ing an SMR with the desired URI isn't enough to make the entire thing use that schema URI).
  • Added a getParent() method to SOAPMappingRegistry to allow the registry tree to be walked-up.
  • Added a test to the SOAPMappingRegistry so that null strings get serialized correctly.
  • Fixed a bug that prevents the default encoding from being correctly applied in the SOAPMappingRegistry.
  • The SOAPMappingRegistry class, a subclass of XMLJavaMappingRegistry, now supports chaining, i.e. an instance has a parent, with the parent being null for the "root" instance. When looking up a mapping, the chain is followed if necessary to resolve the mapping.
  • The XMLJavaMappingRegistry class has a method setDefaultEncodingStyle, which sets the default encoding style. When this method is called on a SOAPMappingRegistry instance, the default encoding style is set only for the particular link in the chain. It is *not* set for the parent (and recursively for all parents). This breaks the proper application of the default.
  • Fixed encoding in SOAPHTTPConnection for systems whose default codepage is not 8859_1.
  • Add deployment descriptor to the bag in SOAPContext so people can query the data in it.
  • Fixed the popPollDelay constructor argument in SOAPSMTPConnection so that it is no longer being ignored.
  • Put the port number back in the HTTP host header.
  • Fixed the behavior of ExceptionFaultListener. It was previously not looking in the right place for the type of the detail entry to be unmarshalled. It was also not printing the encodingStyle attribute.
  • Within SOAPException, the fault code and exception message will now be run through Utils.cleanString(...) to escape special characters.
  • "Clean" stack tracebacks. In particular, constructors appear in stack tracebacks as <init> methods.
  • Fixed the deployment descriptor so javaType= doesn't get output if the value is null.
  • Fixed a bug that prevented a service's method from taking a Hashtable, array, or Vector, as a parameter, while returning a DOM Element.
  • Fixed the documentation and code for the Base64 class so that they match, and so that encode uses its len parameter correctly.
  • Fixed a bug that prevented the client from using a BeanSerializer to serialize SOAP-encoded parameters within a Call labeled with the literalXML encoding style.
  • The BooleanDeserializer has been updated to be very liberal in what it will accept; per the spec, 0 and 1 are valid boolean values (and, in fact, are the ones used by the WhiteMesa implementation).
  • Synchronized calls to DateFormat's methods, since DateFormat appears to not be thread-safe.
  • Serialize dates without losing precision (the JDK format is contains milliseconds). Deserialize dates with any number of digits of fractional seconds, and with or without a time zone offset.
  • Fixed a NullPointerException that was being thrown when a DataSource was passed as the source parameter within the MimePartSerializer.
  • Started to add the ability to serialize elements with qualified names. If PrefixedName objects are not explicitly used as the context arguments for serialization, the behavior is exactly the same as it was before.
  • Fixed a bug in the EJB providers which printed out the wrong error message.
  • Changed context intialization within the EJB providers to allow the specification of the PROVIDER_URL and INITIAL_CONTEXT_FACTORY separately.
  • Put in the non-debug version of the COM provider.
  • Added a method to remove a body part from a Call object.
  • Fixed a problem that would cause a Call object's targetObjectURI property to get set to null if a Fault was returned.
  • Pass the actual encoding style on the Call constructor. Solves a literal XML interop problem with pocket soap.
  • Fixed a bug that was causing an attribute to be printed without a closing ".
  • The DeploymentDescriptor will now allow a TypeMapping to be specified without the elementType.
  • Made the DeploymentDescriptor and TypeMappings serializing/deserializing logic more tolerant of null values.
  • Fixed the DeploymentDescriptor.toString() method to correctly display the TypeMappings.
  • Removed debug println from the DeploymentDescriptor.
  • Add support for opts on java and script services in the dd.xml file.
  • A type-check was not being performed in the ServiceManager due to its placement. It has been moved so that it now has effect.
  • Added support for setting the configuration file name as a Web application context parameter so that it will be picked up by the JSPs as well as the router servlets. This will fix the problem of the JSPs using the default ConfigMananger when one has been specified for the router servlets.
  • Fixed problem of attempting to store null as the classloader in the servlet attributes.
  • Made the servlets store the classloader from the thread instead of theirs.
  • Removed 2 server-side stack traces from the servlets where exceptions were also being propagated.
  • Made the ServerHTTPUtils.readEnvelopeFromRequest(...) method public, instead of the default package access.
  • The code will now only store the target object in the ServletContext or HTTPSession when it is newly created, and will not store it on each invocation.
  • Added a patch to SOAPHTTPConnection that makes the set-cookie and set-cookie2 header searches case-insensitive.
  • Fixed exceptions that are thrown from HTTPUtils, so that they contain more helpful messages.
  • Ensure request URI contains at least one character.
  • Fixed a StringOutOfBoundsException that was being thrown when a server returned a header with no value to an Apache SOAP client.
  • Added a method to DOMUtils to retrieve qualified attribute value. That is, it will returna QName representing the value of the requested attribute.
  • Fixed a problem with QName that Was causing it to throw a NullPointerException if localPart constructor arg was null.
  • Fixed a missing closing </a> tag in list.jsp.
  • Build now allows dist target to build when ejb is not present.
  • Added support for config file element to allow users to enable or disable SOAP interface to Service Manager.
  • Changed all samples to use the Fault class's toString() method, instead of calling the getFaultCode() and getFaultString() methods. This will cause the samples to display all the fault information, and not just parts of it.
  • Added a new calculator demo that simulates a reverse polish notation calculator.
  • Fixed the EJB sample so that the correct parameters are passed to the EJB method.
  • Fixed up the interop sample and added support for the echoMap service.
  • Updated to reflect Java 1.2+ requirement.
  • Fixed some typos in the documentation.
  • Fixed WAS 3.5 instructions for using the correct Xerces JAR.
  • Updated deployment descriptor schema to reflect the mapping QName being made optional.
  • Made the XMLParserUtils.getXMLDocBuilder() method synchronized.
  • Added support for turning off Nagle's algorithm under TCP (HTTP).
  • Fixed ArraySerializer to recognize null items when unmarshalling.
  • Changed unmarshalling of xsi:null to be just as liberal as BooleanDeserializer is in what it accepts.

May 30, 2001 - Version 2.2

  • Changed all code and samples to use JAXP; no longer bound to Xerces.
  • Removed many printlns from the server-side code, replacing them with thrown Exceptions.
  • A soap.war Web Application Archive is now included in the distribution for easier deployment to Servlet containers.
  • Included SSL (on Tomcat) doc, and linked to it from the Installation page.
  • Added support for serializing/deserializing java.util.Maps.
  • Added support for serializing/deserializing BigDecimal <--> xsd:decimal.
  • Removed non-threadsafe private variables from Servlets.
  • If a service method with a matching signature is not found, a second search is done for a method with an additional (first) parameter of type SOAPContext.
  • User's Guide has been re-worked and updated.
  • COM sample has been updated.
  • Added a BEA WebLogic EJB sample.
  • Changed the EJB providers so that it grabs the JNDIName from one of the 'options' instead of from the 'java class=' section of the deployment descriptor. For backwards compatibility if it doesn't find it in the options section (using key="JNDIName") then it will look in the old 'java class=' section.
  • Added an XMLConfigManager.
  • Added a BaseConfigManager (to make authoring ConfigManagers easier).
  • Added a workaround to org.apache.soap.Fault to enable it to work with Xerces 1.3.1 and later. It will now accept a return value of "" from Node.getNamespaceURI(), instead of just accepting null or a non-empty String.
  • Fixed a bug when deserializing nulls of type "ur-type", which are generated when the VectorSerializer finds nulls inside a Vector.
  • Removed requirement of <java> tag in deployment descriptor when using pluggable providers.
  • Fixed a bug where a 400 error code was being returned instead of the 500 required by SOAP.
  • Fixed a bug in header parsing code .. it was assuming that a space existed after the ":" character.
  • Unmarshalling logic now understands 1999, 2000, and 2001 Schema simple types.
  • Unmarshalling logic can now deserialize payload with ID/HREF attributes.
  • RPCRouter can now throw a SOAPException if the checkMustUnderstand property is set on the DeploymentDescriptor and a mustUnderstand="1" attribute is found on a header.
  • The output buffer size can now be explicitly set on the SOAPHTTPConnection.
  • Added HTTP proxy basic authentication support.
  • The SOAPHTTPConnection now has a maintainSession property which, when true, will cause the SOAPHTTPConnection to return the appropriate cookies with requests. It is true by default.
  • Added a default encoding style property to SOAPMappingRegistry, to be used when no encoding style is specified.
  • Removed special treatment of CDATA sections in the code that inserts escape sequences. The code will now round trip Strings correctly, whether they contain CDATA sections or not.
  • All the simple numeric types now use a serializer that does not run its content through Utils.cleanString(String).
  • Cleaned up handling of servlet init-parameters in RPCRouterServlet and MessageRouterServlet.
  • Removed transport hook system property dependency. The only remaining call to System.getProperty(String) is to get "line.separator". This should help with some of the security constraints for Applets and the like.
  • Removed some extraneous methods from org.apache.soap.util.StringUtils.
  • Put 2 lines back into XMISerializer and XMIDeserializer (the same 1 line in each, actually) to enable them to work with the xmisoap.jar which is posted on the site. These lines were originally there, but were removed to try to work with the latestXMI version. For now, the code works with the posted version.
  • Added the BidBuy interoperability sample.
  • Made DateSerializer.unmarshall(...) a little more lenient so that it handles parsing dates with and without milliseconds specified.
  • Added a Troubleshooting table, and a link to it from the front page.
  • Added an Interoperability section to the User's Guide.
  • Added a Migration section to the User's Guide.
  • Fixed a bug in StatelessEJBProvider and StatefulEJBProvider where the respEncStyle was being set, but not used.
  • In RPCRouterServlet.doGet(...) and MessageRouterServlet.doGet(...), moved res.setContentType(...) call before res.getWriter() call to be in compliance with Servlet spec.
  • Added install docs for iPlanet.

February 5, 2001 - Version 2.1

  • Added Message Handling Support
  • Added configurable error handling mechanism
  • Added pluggable provider support
  • Added client-side HTTPS support
  • Added HTTP proxy support
  • Added HTTP basic authentication support
  • Added support for SOAP Messages with Attachments
  • Introduced SOAPContext
  • Added support for transport hooks
  • Added SSL support
  • Reduced dependency on xsi:type for deserialization
  • Added soap configuration file
  • Added pluggable configuration manager
  • Added support for international character sets
  • Added support for default serialization/deserialization of:
    • Hashtable (as xmlsoap:Map)
    • Date (as xsd:timeInstant)
    • GregorianCalendar (as xsd:date)

August 18, 2000 - Version 2.0

  • Deprecated the rpcrouter.jsp in favor of an RPCRouter servlet.
    • Steven J. McDowall, Noor Zaman, Sanjiva Weerawarana
  • Switched the stockquote demo's provider from www.i3solutions.com to www.xmltoday.com.
    • Sam Ruby
  • Restructured documentation.
    • Sanjiva Weerawarana
  • The serializer for java.lang.String now runs its content through Utils.cleanString(...) to escape necessary characters.
    • Matthew J. Duftler
  • Added a distribution containing the source.
    • Matthew J. Duftler
  • Created a new 'soap' webapp. Provides access to the web-based admin client, and the rpcrouter servlet.
    • Sanjiva Weerawarana
  • Changed remaining IBM-SOAP references to Apache-SOAP.
    • Wouter Cloetens, Mike Paolini, Matthew J. Duftler
  • Added a serializer for Vectors and Enumerations.
    • Glen Daniels
  • Removed trailing '/' in XSD and XSI namespace URIs.
    • Steven J. McDowall
  • The unmarshalling logic in Fault will now accept the SOAP-ENV namespace URI in addition to the old accepted behavior of no namespace URI at all, when processing subelements of Fault.
    • Steven J. McDowall, Matthew J. Duftler
  • HTTPUtils.post(...) will now use port 80 if no port is specified.
    • Steven J. McDowall
  • Fixed a bug that occurred when a ServiceManagerClient was instantiated and used to make several invocations. The problem was: when there were no params, the params property of the Call object was not being set to null.
    • Peter Brittenham, Matthew J. Duftler
  • Added getAttributeNS(...) to DOMUtils. It has similar behavior to DOMUtils.getAttribute(...). DOMUtils.getAttributeNS(...) will return null if there is no specified or default attribute value.
    • Matthew J. Duftler
  • Fixed HTTP code to use \r\n instead of println for line endings.
    • Kevin J. Mitchell
  • An array of bytes (i.e. byte[]) will now be serialized into a SOAP-ENC:base64 type. A SOAP-ENC:base64 type will also now be deserialized into a byte array (i.e. byte[]).
    • Matthew J. Duftler, Sanjiva Weerawarana
  • Removed extraneous references to BML namespace URI from deploy.jsp.
    • Sanjiva Weerawarana

June 4, 2000 - Version 1.2

  • Created initial code base from IBM-SOAP.