/* * Copyright 2005-2010 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.springframework.ws.soap.addressing.core; import java.io.Serializable; import java.net.URI; import java.util.Collections; import java.util.List; import org.w3c.dom.Node; /** * Represents a set of Message Addressing Properties, as defined in the WS-Addressing specification. * * <p>In earlier versions of the spec, these properties were called Message Information Headers. * * @author Arjen Poutsma * @see <a href="http://www.w3.org/TR/ws-addr-core/#msgaddrprops">Message Addressing Properties</a> * @since 1.5.0 */ public final class MessageAddressingProperties implements Serializable { private static final long serialVersionUID = -6980663311446506672L; private final URI to; private final EndpointReference from; private final EndpointReference replyTo; private final EndpointReference faultTo; private final URI action; private final URI messageId; private final URI relatesTo; private final List<Node> referenceProperties; private final List<Node> referenceParameters; /** * Constructs a new {@link MessageAddressingProperties} with the given parameters. * * @param to the value of the destination property * @param from the value of the source endpoint property * @param replyTo the value of the reply endpoint property * @param faultTo the value of the fault endpoint property * @param action the value of the action property * @param messageId the value of the message id property */ public MessageAddressingProperties(URI to, EndpointReference from, EndpointReference replyTo, EndpointReference faultTo, URI action, URI messageId) { this.to = to; this.from = from; this.replyTo = replyTo; this.faultTo = faultTo; this.action = action; this.messageId = messageId; this.relatesTo = null; this.referenceProperties = Collections.emptyList(); this.referenceParameters = Collections.emptyList(); } /** * Constructs a new {@link MessageAddressingProperties} that forms a reply to the given EPR. * * @param epr the endpoint reference to create a reply for * @param action the value of the action property * @param messageId the value of the message id property * @param relatesTo the value of the relates to property */ private MessageAddressingProperties(EndpointReference epr, URI action, URI messageId, URI relatesTo) { this.to = epr.getAddress(); this.action = action; this.messageId = messageId; this.relatesTo = relatesTo; this.referenceParameters = epr.getReferenceParameters(); this.referenceProperties = epr.getReferenceProperties(); this.from = null; this.replyTo = null; this.faultTo = null; } /** Returns the value of the destination property. */ public URI getTo() { return to; } /** Returns the value of the source endpoint property. */ public EndpointReference getFrom() { return from; } /** Returns the value of the reply endpoint property. */ public EndpointReference getReplyTo() { return replyTo; } /** Returns the value of the fault endpoint property. */ public EndpointReference getFaultTo() { return faultTo; } /** Returns the value of the action property. */ public URI getAction() { return action; } /** Returns the value of the message id property. */ public URI getMessageId() { return messageId; } /** Returns the value of the relationship property. */ public URI getRelatesTo() { return relatesTo; } /** Returns the endpoint properties. Returns an empty list of none are set. */ public List<Node> getReferenceProperties() { return Collections.unmodifiableList(referenceProperties); } /** Returns the endpoint parameters. Returns an empty list of none are set. */ public List<Node> getReferenceParameters() { return Collections.unmodifiableList(referenceParameters); } /** * Creates a {@link MessageAddressingProperties} that can be used for creating a reply to the given {@link * EndpointReference}. The {@link #getTo() destination} property will be populated with the {@link * EndpointReference#getAddress() address} of the given EPR, and the {@link #getRelatesTo() relationship} property * will be set to the {@link #getMessageId() message id} property of this instance. the action is specified, the * * @param epr the endpoint reference to create a reply to * @param action the action */ public MessageAddressingProperties getReplyProperties(EndpointReference epr, URI action, URI messageId) { return new MessageAddressingProperties(epr, action, messageId, this.messageId); } }