Changes Record
This document lists the changes from version to version. The
most recent version is at the top.
- Post 2.3.1
- Enhanced cookie support (used for session maintenance)
by supporting multiple Set-Cookie[2] headers from the server
and supporting RFC 2109 and RFC 2965 more completely.
- Prevent ArrayIndexOutOfBoundsException when checking for
word-wrapped header parameters in TransportMessage.
- Added a mechanism for initializing each instance of a
service class. (From general wish list in TODO.)
- Added the ability to get copies of HTTP request and
response programmatically. This is useful when debugging
SSL, as wire dumps are of no use then. (Although the JSSE
reference implementation provides full packet contents as
debug.)
- In the absence of an xsi:type attribute, check the element
namespace URI for SOAP-ENC to imply a type. For now, just
support SOAP-ENC:Array. This allows interop with .NET arrays
without a type mapping.
- Enhance multi-reference deserialization by only deserializing
the object once, regardless of the number of references. Provide
initial support for multi-reference serialization. The new
BeanMultiRefSerializer is an example of a serializer for which
multi-reference serialization is supported. Added a sample to
demonstrate serialization and deserialization of a cyclic graph
of beans.
- Remove deadlock for a service that in the constructor invokes
another service when both services are at application scope. The
deadlock still occurs if both services are at session scope.
- Add the ability to select between parsing XML using a
DocumentBuilder versus a Transform from a SAXSource to a
DOMResult on a per-Call basis. This is on the client only.
If testing establishes that the Transform offers a significant
speed improvement, the server code may be changed as well.
- Disable the Nagle algorithm on the client by default.
This dramatically decreases latency when the payload is smaller
than the TCP segment size, assuming the server platform uses
a long delayed ACK timer (typically 200 ms).
- Support authentication for https proxies.
- Add the ability to suppress session creation per service
by specifying
<isd:option key="SessionRequired" value="false"/>
within the isd:provider
element in the deployment descriptor.
- Add a CORBA provider, allowing CORBA interfaces to be exposed via
SOAP without writing any code.
- Fix deserialization of multi-reference arrays.
- Fix handling of missing Content-Type header.
- Fix EJB and CORBA providers to check deployment descriptor to
determine whether method is exposed.
- Add serialization of collection/map interfaces and concrete classes.
- Support valid XML namespace constructs in deployment descriptor
mappings for Microsoft interop, e.g. it is now legal to specify
qname="inputInteger"
rather than the invalid construct
xmlns:x="" qname="x:inputInteger"
.
- Add a document/literal serialization option. This is intended for use
by SOAP clients that need to communicate with services that use
document/literal encoding. Parameters will be serialized using document/literal
style. (No xsi:type is emitted; therefore, this does not work with
schemas specifying xsd:anyType for a parameter.)
Return values must be mapped by parameter name (the existing
interop hack).
- Add element namespace qualifying to further improve interop, especially
for doc/lit. Rather than actually qualifying all elements individually,
elements within the body are put in the appropriate default namespace. As
with the other interop "features", this is an imperfect hack that
works in many interop situations, but is not perfect.
- Support gzip encoding for HTTP. This is enabled through SOAPContext
for clients and the deployment descriptor for services.
- Add per-service authorization based on roles. Authorized roles
are specified in the deployment descriptor. The container must be
configured for authentication through its configuration and/or the Apache
SOAP web.xml deployment descriptor.
- Add a serializer (PropertyBagSerializer) that can read SOAP compound
types into a Hashtable where the element names are the keys and the
element contents are the values, which means beans do not have to be created
for each compound type being deserialized. Conversely, it can write a
Map similary, providing an alternative to the default Apache SOAP serialization
of Maps.
- Read HTTP[S] proxy information from system properties if not explicitly
specified.
- Support messaging in the Stateless EJB and CORBA providers. Throw an
exception for messaging calls in the Stateful EJB and Entity EJB providers
rather than throwing a NPE.
- Add client support for HTTP redirects.
- Allow additional transport headers to be specified by client.
- Add client support for one-way (as defined in WSDL) calls.
- Add the ability to serialize method return values using their actual
type rather than the declared type (polymorphism) on a per service basis
by specifying
<isd:option key="PolymorphicSerialization" value="true"/>
within the isd:provider
element in the deployment descriptor.
- Add the ability to return text attachments from COM-based services by setting
<isd:option key="AttachString" value="true"/>
within the isd:provider
element in the deployment descriptor.
- Fix a bug in MessageRouter#invoke that treated custom provider services
as scripts rather than Java.
- Map deserializers for the SOAP-ENC equivalents of 2001 XSD types.
- 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.
- 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 return a
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.
- 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).
- 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 latest
XMI 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.
- 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
)
- Version 2.0
- Base version. No changes.