View Javadoc

1   package org.springframework.ws.soap.axiom;
2   
3   import org.apache.axiom.om.OMException;
4   import org.apache.axiom.soap.SOAP11Constants;
5   import org.apache.axiom.soap.SOAP12Constants;
6   import org.apache.axiom.soap.SOAPBody;
7   import org.apache.axiom.soap.SOAPEnvelope;
8   import org.apache.axiom.soap.SOAPFactory;
9   import org.apache.axiom.soap.SOAPHeader;
10  
11  import org.springframework.ws.soap.SoapBody;
12  import org.springframework.ws.soap.SoapEnvelope;
13  import org.springframework.ws.soap.SoapHeader;
14  
15  /**
16   * Axiom-Specific version of <code>org.springframework.ws.soap.SoapEnvelope</code>.
17   *
18   * @author Arjen Poutsma
19   * @since 1.0.0
20   */
21  class AxiomSoapEnvelope extends AxiomSoapElement implements SoapEnvelope {
22  
23      boolean payloadCaching;
24  
25      private AxiomSoapBody body;
26  
27      AxiomSoapEnvelope(SOAPEnvelope axiomEnvelope, SOAPFactory axiomFactory, boolean payloadCaching) {
28          super(axiomEnvelope, axiomFactory);
29          this.payloadCaching = payloadCaching;
30      }
31  
32      public SoapHeader getHeader() {
33          try {
34              if (getAxiomEnvelope().getHeader() == null) {
35                  return null;
36              }
37              else {
38                  SOAPHeader axiomHeader = getAxiomEnvelope().getHeader();
39                  String namespaceURI = getAxiomEnvelope().getNamespace().getNamespaceURI();
40                  if (SOAP11Constants.SOAP_ENVELOPE_NAMESPACE_URI.equals(namespaceURI)) {
41                      return new AxiomSoap11Header(axiomHeader, getAxiomFactory());
42                  }
43                  else if (SOAP12Constants.SOAP_ENVELOPE_NAMESPACE_URI.equals(namespaceURI)) {
44                      return new AxiomSoap12Header(axiomHeader, getAxiomFactory());
45                  }
46                  else {
47                      throw new AxiomSoapEnvelopeException("Unknown SOAP namespace \"" + namespaceURI + "\"");
48                  }
49              }
50          }
51          catch (OMException ex) {
52              throw new AxiomSoapHeaderException(ex);
53          }
54      }
55  
56      public SoapBody getBody() {
57          if (body == null) {
58              try {
59                  SOAPBody axiomBody = getAxiomEnvelope().getBody();
60                  String namespaceURI = getAxiomEnvelope().getNamespace().getNamespaceURI();
61                  if (SOAP11Constants.SOAP_ENVELOPE_NAMESPACE_URI.equals(namespaceURI)) {
62                      body = new AxiomSoap11Body(axiomBody, getAxiomFactory(), payloadCaching);
63                  }
64                  else if (SOAP12Constants.SOAP_ENVELOPE_NAMESPACE_URI.equals(namespaceURI)) {
65                      body = new AxiomSoap12Body(axiomBody, getAxiomFactory(), payloadCaching);
66                  }
67                  else {
68                      throw new AxiomSoapEnvelopeException("Unknown SOAP namespace \"" + namespaceURI + "\"");
69                  }
70              }
71              catch (OMException ex) {
72                  throw new AxiomSoapBodyException(ex);
73              }
74          }
75          return body;
76      }
77  
78      protected SOAPEnvelope getAxiomEnvelope() {
79          return (SOAPEnvelope) getAxiomElement();
80      }
81  
82  }