Class AxiomSoapMessageFactory

java.lang.Object
org.springframework.ws.soap.axiom.AxiomSoapMessageFactory
All Implemented Interfaces:
org.springframework.beans.factory.InitializingBean, SoapMessageFactory, WebServiceMessageFactory

public class AxiomSoapMessageFactory extends Object implements SoapMessageFactory, org.springframework.beans.factory.InitializingBean
Axiom-specific implementation of the WebServiceMessageFactory interface. Creates AxiomSoapMessages.

To increase reading performance on the SOAP request created by this message factory, you can set the payloadCaching property to false (default is true). This this will read the contents of the body directly from the stream. However, when this setting is enabled, the payload can only be read once. This means that any endpoint mappings or interceptors which are based on the message payload (such as the PayloadRootAnnotationMethodEndpointMapping, the PayloadValidatingInterceptor, or the PayloadLoggingInterceptor) cannot be used. Instead, use an endpoint mapping that does not consume the payload (i.e. the SoapActionAnnotationMethodEndpointMapping).

Additionally, this message factory can cache large attachments to disk by setting the attachmentCaching property to true (default is false). Optionally, the location where attachments are stored can be defined via the attachmentCacheDir property (defaults to the system temp file path).

Mostly derived from org.apache.axis2.transport.http.HTTPTransportUtils and org.apache.axis2.transport.TransportUtils, which we cannot use since they are not part of the Axiom distribution.

Since:
1.0.0
See Also:
  • Constructor Details

    • AxiomSoapMessageFactory

      public AxiomSoapMessageFactory()
  • Method Details

    • setPayloadCaching

      public void setPayloadCaching(boolean payloadCaching)
      Indicates whether the SOAP Body payload should be cached or not. Default is true.

      Setting this to false will increase performance, but also result in the fact that the message payload can only be read once.

    • setAttachmentCaching

      public void setAttachmentCaching(boolean attachmentCaching)
      Indicates whether SOAP attachments should be cached or not. Default is false.

      Setting this to true will cause Axiom to store larger attachments on disk, rather than in memory. This decreases memory consumption, but decreases performance.

    • setAttachmentCacheDir

      public void setAttachmentCacheDir(File attachmentCacheDir)
      Sets the directory where SOAP attachments will be stored. Only used when attachmentCaching is set to true.

      The parameter should be an existing, writable directory. This property defaults to the temporary directory of the operating system (i.e. the value of the java.io.tmpdir system property).

    • setAttachmentCacheThreshold

      public void setAttachmentCacheThreshold(int attachmentCacheThreshold)
      Sets the threshold for attachments caching, in bytes. Attachments larger than this threshold will be cached in the attachment cache directory. Only used when attachmentCaching is set to true.

      Defaults to 4096 bytes (i.e. 4 kilobytes).

    • setSoapVersion

      public void setSoapVersion(SoapVersion version)
      Description copied from interface: SoapMessageFactory
      Sets the SOAP Version used by this factory.
      Specified by:
      setSoapVersion in interface SoapMessageFactory
      Parameters:
      version - the version constant
      See Also:
    • setLangAttributeOnSoap11FaultString

      public void setLangAttributeOnSoap11FaultString(boolean langAttributeOnSoap11FaultString)
      Defines whether a xml:lang attribute should be set on SOAP 1.1 <faultstring> elements.

      The default is true, to comply with WS-I, but this flag can be set to false to the older W3C SOAP 1.1 specification.

      See Also:
    • setReplacingEntityReferences

      public void setReplacingEntityReferences(boolean replacingEntityReferences)
      Sets whether internal entity references should be replaced with their replacement text and report them as characters.
      See Also:
    • setSupportingExternalEntities

      public void setSupportingExternalEntities(boolean supportingExternalEntities)
      Sets whether external parsed entities should be resolved.
      See Also:
    • afterPropertiesSet

      public void afterPropertiesSet() throws Exception
      Specified by:
      afterPropertiesSet in interface org.springframework.beans.factory.InitializingBean
      Throws:
      Exception
    • createWebServiceMessage

      public AxiomSoapMessage createWebServiceMessage()
      Description copied from interface: SoapMessageFactory
      Creates a new, empty SoapMessage.
      Specified by:
      createWebServiceMessage in interface SoapMessageFactory
      Specified by:
      createWebServiceMessage in interface WebServiceMessageFactory
      Returns:
      the empty message
    • createWebServiceMessage

      public AxiomSoapMessage createWebServiceMessage(InputStream inputStream) throws IOException
      Description copied from interface: SoapMessageFactory
      Reads a SoapMessage from the given input stream.

      If the given stream is an instance of TransportInputStream, the headers will be read from the request.

      Specified by:
      createWebServiceMessage in interface SoapMessageFactory
      Specified by:
      createWebServiceMessage in interface WebServiceMessageFactory
      Parameters:
      inputStream - the input stream to read the message from
      Returns:
      the created message
      Throws:
      IOException - if an I/O exception occurs
    • getCharSetEncoding

      protected String getCharSetEncoding(String contentType)
      Returns the character set from the given content type. Mostly copied
      Returns:
      the character set encoding
    • createXmlInputFactory

      protected XMLInputFactory createXmlInputFactory()
      Create a XMLInputFactory that this resolver will use to create XMLStreamReader objects.

      Can be overridden in subclasses, adding further initialization of the factory. The resulting factory is cached, so this method will only be called once.

      By default this method creates a standard XMLInputFactory and configures it based on the replacingEntityReferences and supportingExternalEntities properties.

      Returns:
      the created factory
    • toString

      public String toString()
      Overrides:
      toString in class Object