src/share/jaxws_classes/com/sun/xml/internal/ws/api/addressing/OneWayFeature.java

changeset 0
373ffda63c9a
child 637
9c07ef4934dd
equal deleted inserted replaced
-1:000000000000 0:373ffda63c9a
1 /*
2 * Copyright (c) 1997, 2013, Oracle and/or its affiliates. All rights reserved.
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4 *
5 * This code is free software; you can redistribute it and/or modify it
6 * under the terms of the GNU General Public License version 2 only, as
7 * published by the Free Software Foundation. Oracle designates this
8 * particular file as subject to the "Classpath" exception as provided
9 * by Oracle in the LICENSE file that accompanied this code.
10 *
11 * This code is distributed in the hope that it will be useful, but WITHOUT
12 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
13 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
14 * version 2 for more details (a copy is included in the LICENSE file that
15 * accompanied this code).
16 *
17 * You should have received a copy of the GNU General Public License version
18 * 2 along with this work; if not, write to the Free Software Foundation,
19 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
20 *
21 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
22 * or visit www.oracle.com if you need additional information or have any
23 * questions.
24 */
25
26 package com.sun.xml.internal.ws.api.addressing;
27
28 import java.net.URL;
29
30 import com.sun.istack.internal.NotNull;
31 import com.sun.istack.internal.Nullable;
32 import com.sun.xml.internal.ws.api.FeatureConstructor;
33
34 import javax.xml.ws.WebServiceFeature;
35
36 import com.sun.org.glassfish.gmbal.ManagedAttribute;
37 import com.sun.org.glassfish.gmbal.ManagedData;
38
39 /**
40 * Unsupported RI extension to work around an issue in WSIT.
41 *
42 * <p>
43 * <b>This feature is not meant to be used by a common Web service developer</b> as there
44 * is no need to send the above mentioned header for a one-way operation. But these
45 * properties may need to be sent in certain middleware Web services.
46 *
47 * <p>
48 * This feature allows ReplyTo, From and RelatesTo Message Addressing Properties
49 * to be added for all messages that are sent from the port configured with
50 * this annotation. All operations are assumed to be one-way, and
51 * this feature should be used for one-way
52 * operations only.
53 *
54 * If a non-null ReplyTo is specified, then MessageID property is also added.
55 *
56 * @author Arun Gupta
57 */
58 @ManagedData
59 public class OneWayFeature extends WebServiceFeature {
60 /**
61 * Constant value identifying the {@link OneWayFeature}
62 */
63 public static final String ID = "http://java.sun.com/xml/ns/jaxws/addressing/oneway";
64
65 private String messageId;
66 private WSEndpointReference replyTo;
67 private WSEndpointReference sslReplyTo;
68 private WSEndpointReference from;
69 private WSEndpointReference faultTo;
70 private WSEndpointReference sslFaultTo;
71 private String relatesToID;
72 private boolean useAsyncWithSyncInvoke = false;
73
74 /**
75 * Create an {@link OneWayFeature}. The instance created will be enabled.
76 */
77 public OneWayFeature() {
78 this.enabled = true;
79 }
80
81 /**
82 * Create an {@link OneWayFeature}
83 *
84 * @param enabled specifies whether this feature should
85 * be enabled or not.
86 */
87 public OneWayFeature(boolean enabled) {
88 this.enabled = enabled;
89 }
90
91 /**
92 * Create an {@link OneWayFeature}
93 *
94 * @param enabled specifies whether this feature should be enabled or not.
95 * @param replyTo specifies the {@link WSEndpointReference} of wsa:ReplyTo header.
96 */
97 public OneWayFeature(boolean enabled, WSEndpointReference replyTo) {
98 this.enabled = enabled;
99 this.replyTo = replyTo;
100 }
101
102 /**
103 * Create an {@link OneWayFeature}
104 *
105 * @param enabled specifies whether this feature should be enabled or not.
106 * @param replyTo specifies the {@link WSEndpointReference} of wsa:ReplyTo header.
107 * @param from specifies the {@link WSEndpointReference} of wsa:From header.
108 * @param relatesTo specifies the MessageID to be used for wsa:RelatesTo header.
109 */
110 @FeatureConstructor({"enabled","replyTo","from","relatesTo"})
111 public OneWayFeature(boolean enabled, WSEndpointReference replyTo, WSEndpointReference from, String relatesTo) {
112 this.enabled = enabled;
113 this.replyTo = replyTo;
114 this.from = from;
115 this.relatesToID = relatesTo;
116 }
117
118 public OneWayFeature(final AddressingPropertySet a, AddressingVersion v) {
119 this.enabled = true;
120 this.messageId = a.getMessageId();
121 this.relatesToID = a.getRelatesTo();
122 this.replyTo = makeEPR(a.getReplyTo(), v);
123 this.faultTo = makeEPR(a.getFaultTo(), v);
124 }
125
126 private WSEndpointReference makeEPR(final String x, final AddressingVersion v) {
127 if (x == null) { return null; }
128 return new WSEndpointReference(x, v);
129 }
130
131 public String getMessageId() {
132 return messageId;
133 }
134
135 /**
136 * {@inheritDoc}
137 */
138 @ManagedAttribute
139 public String getID() {
140 return ID;
141 }
142
143 public boolean
144 hasSslEprs() {
145 return sslReplyTo != null || sslFaultTo != null;
146 }
147
148 /**
149 * Getter for wsa:ReplyTo header {@link WSEndpointReference} .
150 *
151 * @return address of the wsa:ReplyTo header
152 */
153 @ManagedAttribute
154 public WSEndpointReference getReplyTo() {
155 return replyTo;
156 }
157
158 public WSEndpointReference getReplyTo(boolean ssl) {
159 return (ssl && sslReplyTo != null) ? sslReplyTo : replyTo;
160 }
161
162 /**
163 * Setter for wsa:ReplyTo header {@link WSEndpointReference}.
164 *
165 * @param address
166 */
167 public void setReplyTo(WSEndpointReference address) {
168 this.replyTo = address;
169 }
170
171 public WSEndpointReference getSslReplyTo() {
172 return sslReplyTo;
173 }
174
175 public void setSslReplyTo(WSEndpointReference sslReplyTo) {
176 this.sslReplyTo = sslReplyTo;
177 }
178
179 /**
180 * Getter for wsa:From header {@link WSEndpointReference}.
181 *
182 * @return address of the wsa:From header
183 */
184 @ManagedAttribute
185 public WSEndpointReference getFrom() {
186 return from;
187 }
188
189 /**
190 * Setter for wsa:From header {@link WSEndpointReference}.
191 *
192 * @param address of the wsa:From header
193 */
194 public void setFrom(WSEndpointReference address) {
195 this.from = address;
196 }
197
198 /**
199 * Getter for MessageID for wsa:RelatesTo header.
200 *
201 * @return address of the wsa:FaultTo header
202 */
203 @ManagedAttribute
204 public String getRelatesToID() {
205 return relatesToID;
206 }
207
208 /**
209 * Setter for MessageID for wsa:RelatesTo header.
210 *
211 * @param id
212 */
213 public void setRelatesToID(String id) {
214 this.relatesToID = id;
215 }
216
217 /**
218 * Getter for wsa:FaultTo header {@link WSEndpointReference}.
219 *
220 * @return address of the wsa:FaultTo header
221 */
222 public WSEndpointReference getFaultTo() {
223 return faultTo;
224 }
225
226 public WSEndpointReference getFaultTo(boolean ssl) {
227 return (ssl && sslFaultTo != null) ? sslFaultTo : faultTo;
228 }
229
230 /**
231 * Setter for wsa:FaultTo header {@link WSEndpointReference}.
232 *
233 * @param address of the wsa:FaultTo header
234 */
235 public void setFaultTo(WSEndpointReference address) {
236 this.faultTo = address;
237 }
238
239 public WSEndpointReference getSslFaultTo() {
240 return sslFaultTo;
241 }
242
243 public void setSslFaultTo(WSEndpointReference sslFaultTo) {
244 this.sslFaultTo = sslFaultTo;
245 }
246
247 /**
248 * Getter for whether async is to be used with sync invoke
249 *
250 * @return whether async is to be used with sync invoke
251 */
252 public boolean isUseAsyncWithSyncInvoke() {
253 return useAsyncWithSyncInvoke;
254 }
255
256 /**
257 * Setter for whether async is to be used with sync invoke
258 *
259 * @param useAsyncWithSyncInvoke whether async is to be used with sync invoke
260 */
261 public void setUseAsyncWithSyncInvoke(boolean useAsyncWithSyncInvoke) {
262 this.useAsyncWithSyncInvoke = useAsyncWithSyncInvoke;
263 }
264
265 /**
266 * Calculate a new EPR using an existing one and substituting SSL specific
267 * host and port values.
268 * @param epr Existing EPR that will be the starting point for the SSL
269 * version
270 * @param sslHost New SSL host or null if the existing host should be used
271 * @param sslPort New SSL port or -1 if the existing port should be used
272 * @return
273 */
274 public static WSEndpointReference
275 enableSslForEpr(@NotNull WSEndpointReference epr,
276 @Nullable String sslHost,
277 int sslPort) {
278 if (!epr.isAnonymous()) {
279 String address = epr.getAddress();
280 URL url;
281 try {
282 url = new URL(address);
283 } catch (Exception e) {
284 throw new RuntimeException(e);
285 }
286 String protocol = url.getProtocol();
287 if (!protocol.equalsIgnoreCase("https")) {
288 protocol = "https";
289 String host = url.getHost();
290 if (sslHost != null) {
291 host = sslHost;
292 }
293 int port = url.getPort();
294 if (sslPort > 0) {
295 port = sslPort;
296 }
297 try {
298 url = new URL(protocol, host, port, url.getFile());
299 } catch (Exception e) {
300 throw new RuntimeException(e);
301 }
302 address = url.toExternalForm();
303 return
304 new WSEndpointReference(address, epr.getVersion());
305 }
306 }
307
308 return epr;
309 }
310
311 }

mercurial