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
- Added support for 2001:base64Binary.
- Added HTTPS proxy support.
Made several changes to reduce the overhead
of a SOAPMappingRegistry creation and
to reduce the number of SMRs created.
- Removed SMR constructor which took the schema
namespace URI because it doesn't work
an SMR with the desired URI isn't enough
to make the entire thing use that schema
- 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
i.e. an instance has a parent, with the
being null for the "root" instance.
When looking up a mapping, the chain
if necessary to resolve the mapping.
- The XMLJavaMappingRegistry class has a method
setDefaultEncodingStyle, which sets the
encoding style. When this method is called
on a SOAPMappingRegistry instance, the
encoding style is set only for the particular
link in the chain. It is *not* set for
parent (and recursively for all parents).
This breaks the proper application of
- Fixed encoding in SOAPHTTPConnection for
systems whose default codepage is not
- 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
- Put the port number back in the HTTP host
- Fixed the behavior of ExceptionFaultListener.
It was previously not looking in the
place for the type of the detail entry
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
- "Clean" stack tracebacks. In particular,
constructors appear in stack tracebacks
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
- Fixed the documentation and code for the
Base64 class so that they match, and
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
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
(and, in fact, are the ones used by the
- 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
of fractional seconds, and with or without
a time zone offset.
- Fixed a NullPointerException that was being
thrown when a DataSource was passed as
source parameter within the MimePartSerializer.
- Started to add the ability to serialize elements
with qualified names. If PrefixedName
are not explicitly used as the context
for serialization, the behavior is exactly
the same as it was before.
Fixed a bug in the EJB providers which
out the wrong error message.
- Changed context intialization within the
EJB providers to allow the specification
of the PROVIDER_URL and INITIAL_CONTEXT_FACTORY
- Put in the non-debug version of the COM provider.
Added a method to remove a body part
a Call object.
Fixed a problem that would cause a Call
targetObjectURI property to get set to
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
TypeMapping to be specified without the
- Made the DeploymentDescriptor and TypeMappings
serializing/deserializing logic more
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
in the dd.xml file.
- A type-check was not being performed in the
ServiceManager due to its placement.
been moved so that it now has effect.
- Added support for setting the configuration
file name as a Web application context
so that it will be picked up by the JSPs
as well as the router servlets. This
fix the problem of the JSPs using the
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
- Made the ServerHTTPUtils.readEnvelopeFromRequest(...)
method public, instead of the default
- The code will now only store the target object
in the ServletContext or HTTPSession
it is newly created, and will not store
on each invocation.
- Added a patch to SOAPHTTPConnection that
makes the set-cookie and set-cookie2
- Fixed exceptions that are thrown from HTTPUtils,
so that they contain more helpful messages.
- Ensure request URI contains at least one
- Fixed a StringOutOfBoundsException that was
being thrown when a server returned a
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
- Fixed a problem with QName that Was causing
it to throw a NullPointerException if
constructor arg was null.
Fixed a missing closing </a> tag
- 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
to Service Manager.
- Changed all samples to use the Fault class's
toString() method, instead of calling
getFaultCode() and getFaultString() methods.
This will cause the samples to display
the fault information, and not just parts
- 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
- Added support for turning off Nagle's algorithm
under TCP (HTTP).
- Fixed ArraySerializer to recognize null items
- 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
- 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
- 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
- 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
- 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.
- Restructured documentation.
- The serializer for java.lang.String now runs its content through Utils.cleanString(...) to escape necessary characters.
- Added a distribution containing the source.
- Created a new 'soap' webapp. Provides access to the web-based admin client, and the rpcrouter servlet.
- Changed remaining IBM-SOAP references to Apache-SOAP.
- Wouter Cloetens, Mike Paolini, Matthew J. Duftler
- Added a serializer for Vectors and Enumerations.
- Removed trailing '/' in XSD and XSI namespace URIs.
- 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.
- 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.
- Fixed HTTP code to use \r\n instead of println for line endings.
- 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.
June 4, 2000 - Version 1.2
- Created initial code base from IBM-SOAP.