View Javadoc

1   /*
2    * Copyright 2005-2010 the original author or authors.
3    *
4    * Licensed under the Apache License, Version 2.0 (the "License");
5    * you may not use this file except in compliance with the License.
6    * You may obtain a copy of the License at
7    *
8    *      http://www.apache.org/licenses/LICENSE-2.0
9    *
10   * Unless required by applicable law or agreed to in writing, software
11   * distributed under the License is distributed on an "AS IS" BASIS,
12   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13   * See the License for the specific language governing permissions and
14   * limitations under the License.
15   */
16  
17  package org.springframework.ws.soap.addressing.core;
18  
19  import java.io.Serializable;
20  import java.net.URI;
21  import java.util.Collections;
22  import java.util.List;
23  
24  import org.w3c.dom.Node;
25  
26  /**
27   * Represents a set of Message Addressing Properties, as defined in the WS-Addressing specification.
28   * <p/>
29   * In earlier versions of the spec, these properties were called Message Information Headers.
30   *
31   * @author Arjen Poutsma
32   * @see <a href="http://www.w3.org/TR/ws-addr-core/#msgaddrprops">Message Addressing Properties</a>
33   * @since 1.5.0
34   */
35  public final class MessageAddressingProperties implements Serializable {
36  
37      private static final long serialVersionUID = -6980663311446506672L;
38  
39      private final URI to;
40  
41      private final EndpointReference from;
42  
43      private final EndpointReference replyTo;
44  
45      private final EndpointReference faultTo;
46  
47      private final URI action;
48  
49      private final URI messageId;
50  
51      private final URI relatesTo;
52  
53      private final List<Node> referenceProperties;
54  
55      private final List<Node> referenceParameters;
56  
57      /**
58       * Constructs a new {@link MessageAddressingProperties} with the given parameters.
59       *
60       * @param to        the value of the destination property
61       * @param from      the value of the source endpoint property
62       * @param replyTo   the value of the reply endpoint property
63       * @param faultTo   the value of the fault endpoint property
64       * @param action    the value of the action property
65       * @param messageId the value of the message id property
66       */
67      public MessageAddressingProperties(URI to,
68                                         EndpointReference from,
69                                         EndpointReference replyTo,
70                                         EndpointReference faultTo,
71                                         URI action,
72                                         URI messageId) {
73          this.to = to;
74          this.from = from;
75          this.replyTo = replyTo;
76          this.faultTo = faultTo;
77          this.action = action;
78          this.messageId = messageId;
79          this.relatesTo = null;
80          this.referenceProperties = Collections.emptyList();
81          this.referenceParameters = Collections.emptyList();
82      }
83  
84      /**
85       * Constructs a new {@link MessageAddressingProperties} that forms a reply to the given EPR.
86       *
87       * @param epr       the endpoint reference to create a reply for
88       * @param action    the value of the action property
89       * @param messageId the value of the message id property
90       * @param relatesTo the value of the relates to property
91       */
92      private MessageAddressingProperties(EndpointReference epr, URI action, URI messageId, URI relatesTo) {
93          this.to = epr.getAddress();
94          this.action = action;
95          this.messageId = messageId;
96          this.relatesTo = relatesTo;
97          this.referenceParameters = epr.getReferenceParameters();
98          this.referenceProperties = epr.getReferenceProperties();
99          this.from = null;
100         this.replyTo = null;
101         this.faultTo = null;
102     }
103 
104     /** Returns the value of the destination property. */
105     public URI getTo() {
106         return to;
107     }
108 
109     /** Returns the value of the source endpoint property. */
110     public EndpointReference getFrom() {
111         return from;
112     }
113 
114     /** Returns the value of the reply endpoint property. */
115     public EndpointReference getReplyTo() {
116         return replyTo;
117     }
118 
119     /** Returns the value of the fault endpoint property. */
120     public EndpointReference getFaultTo() {
121         return faultTo;
122     }
123 
124     /** Returns the value of the action property. */
125     public URI getAction() {
126         return action;
127     }
128 
129     /** Returns the value of the message id property. */
130     public URI getMessageId() {
131         return messageId;
132     }
133 
134     /** Returns the value of the relationship property. */
135     public URI getRelatesTo() {
136         return relatesTo;
137     }
138 
139     /** Returns the endpoint properties. Returns an empty list of none are set. */
140     public List<Node> getReferenceProperties() {
141         return Collections.unmodifiableList(referenceProperties);
142     }
143 
144     /** Returns the endpoint parameters. Returns an empty list of none are set. */
145     public List<Node> getReferenceParameters() {
146         return Collections.unmodifiableList(referenceParameters);
147     }
148 
149     /**
150      * Creates a {@link MessageAddressingProperties} that can be used for creating a reply to the given {@link
151      * EndpointReference}. The {@link #getTo() destination} property will be populated with the {@link
152      * EndpointReference#getAddress() address} of the given EPR, and the {@link #getRelatesTo() relationship} property
153      * will be set to the {@link #getMessageId() message id} property of this instance. the action is specified, the
154      *
155      * @param epr    the endpoint reference to create a reply to
156      * @param action the action
157      */
158     public MessageAddressingProperties getReplyProperties(EndpointReference epr, URI action, URI messageId) {
159         return new MessageAddressingProperties(epr, action, messageId, this.messageId);
160     }
161 }