Thu, 31 Aug 2017 15:18:52 +0800
merge
1 /*
2 * Copyright (c) 1997, 2012, 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 */
26 package com.sun.xml.internal.ws.api.addressing;
28 import com.sun.istack.internal.NotNull;
29 import com.sun.istack.internal.Nullable;
30 import com.sun.xml.internal.stream.buffer.XMLStreamBuffer;
31 import com.sun.xml.internal.ws.addressing.W3CAddressingConstants;
32 import com.sun.xml.internal.ws.addressing.WsaTubeHelper;
33 import com.sun.xml.internal.ws.addressing.v200408.MemberSubmissionAddressingConstants;
34 import com.sun.xml.internal.ws.api.WSBinding;
35 import com.sun.xml.internal.ws.api.message.Header;
36 import com.sun.xml.internal.ws.api.model.wsdl.WSDLPort;
37 import com.sun.xml.internal.ws.api.model.SEIModel;
38 import com.sun.xml.internal.ws.developer.MemberSubmissionAddressingFeature;
39 import com.sun.xml.internal.ws.developer.MemberSubmissionEndpointReference;
40 import com.sun.xml.internal.ws.message.stream.OutboundStreamHeader;
42 import javax.xml.namespace.QName;
43 import javax.xml.stream.XMLStreamException;
44 import javax.xml.ws.EndpointReference;
45 import javax.xml.ws.WebServiceException;
46 import javax.xml.ws.WebServiceFeature;
47 import javax.xml.ws.soap.AddressingFeature;
48 import javax.xml.ws.wsaddressing.W3CEndpointReference;
49 import java.io.ByteArrayInputStream;
50 import java.io.UnsupportedEncodingException;
52 /**
53 * 'Traits' object that absorbs differences of WS-Addressing versions.
54 *
55 * @author Arun Gupta
56 */
57 public enum AddressingVersion {
59 W3C("http://www.w3.org/2005/08/addressing",
60 "wsa",
61 W3CAddressingConstants.ANONYMOUS_EPR,
62 "http://www.w3.org/2006/05/addressing/wsdl",
63 "http://www.w3.org/2006/05/addressing/wsdl",
64 "http://www.w3.org/2005/08/addressing/anonymous",
65 "http://www.w3.org/2005/08/addressing/none",
66 new EPR(W3CEndpointReference.class,
67 "Address",
68 "ServiceName",
69 "EndpointName",
70 "InterfaceName",
71 new QName("http://www.w3.org/2005/08/addressing","Metadata","wsa"),
72 "ReferenceParameters",
73 null )) {
75 /* package */ String getActionMismatchLocalName() {
76 return "ActionMismatch";
77 }
78 @Override
79 public boolean isReferenceParameter(String localName) {
80 return localName.equals("ReferenceParameters");
81 }
83 @Override
84 public WsaTubeHelper getWsaHelper(WSDLPort wsdlPort, SEIModel seiModel, WSBinding binding) {
85 return new com.sun.xml.internal.ws.addressing.WsaTubeHelperImpl(wsdlPort, seiModel, binding);
86 }
88 @Override
89 /* package */ String getMapRequiredLocalName() {
90 return "MessageAddressingHeaderRequired";
91 }
93 @Override
94 public String getMapRequiredText() {
95 return "A required header representing a Message Addressing Property is not present";
96 }
98 /* package */ String getInvalidAddressLocalName() {
99 return "InvalidAddress";
100 }
102 @Override
103 /* package */ String getInvalidMapLocalName() {
104 return "InvalidAddressingHeader";
105 }
107 @Override
108 public String getInvalidMapText() {
109 return "A header representing a Message Addressing Property is not valid and the message cannot be processed";
110 }
112 @Override
113 /* package */ String getInvalidCardinalityLocalName() {
114 return "InvalidCardinality";
115 }
117 /*package*/ Header createReferenceParameterHeader(XMLStreamBuffer mark, String nsUri, String localName) {
118 return new OutboundReferenceParameterHeader(mark,nsUri,localName);
119 }
121 /*package*/ String getIsReferenceParameterLocalName() {
122 return "IsReferenceParameter";
123 }
125 /* package */ String getWsdlAnonymousLocalName() {
126 return "Anonymous";
127 }
129 public String getPrefix() {
130 return "wsa";
131 }
133 public String getWsdlPrefix() {
134 return "wsaw";
135 }
137 public Class<? extends WebServiceFeature> getFeatureClass() {
138 return AddressingFeature.class;
139 }
140 },
141 MEMBER("http://schemas.xmlsoap.org/ws/2004/08/addressing",
142 "wsa",
143 MemberSubmissionAddressingConstants.ANONYMOUS_EPR,
144 "http://schemas.xmlsoap.org/ws/2004/08/addressing",
145 "http://schemas.xmlsoap.org/ws/2004/08/addressing/policy",
146 "http://schemas.xmlsoap.org/ws/2004/08/addressing/role/anonymous",
147 "",
148 new EPR(MemberSubmissionEndpointReference.class,
149 "Address",
150 "ServiceName",
151 "PortName",
152 "PortType",
153 MemberSubmissionAddressingConstants.MEX_METADATA,
154 "ReferenceParameters",
155 "ReferenceProperties")) {
156 /* package */ String getActionMismatchLocalName() {
157 return "InvalidMessageInformationHeader";
158 }
159 @Override
160 public boolean isReferenceParameter(String localName) {
161 return localName.equals("ReferenceParameters") || localName.equals("ReferenceProperties");
162 }
164 @Override
165 public WsaTubeHelper getWsaHelper(WSDLPort wsdlPort, SEIModel seiModel, WSBinding binding) {
166 return new com.sun.xml.internal.ws.addressing.v200408.WsaTubeHelperImpl(wsdlPort, seiModel, binding);
167 }
169 @Override
170 /* package */ String getMapRequiredLocalName() {
171 return "MessageInformationHeaderRequired";
172 }
174 @Override
175 public String getMapRequiredText() {
176 return "A required message information header, To, MessageID, or Action, is not present.";
177 }
179 /* package */ String getInvalidAddressLocalName() {
180 return getInvalidMapLocalName();
181 }
183 @Override
184 /* package */ String getInvalidMapLocalName() {
185 return "InvalidMessageInformationHeader";
186 }
188 @Override
189 public String getInvalidMapText() {
190 return "A message information header is not valid and the message cannot be processed.";
191 }
193 @Override
194 /* package */ String getInvalidCardinalityLocalName() {
195 return getInvalidMapLocalName();
196 }
198 /*package*/ Header createReferenceParameterHeader(XMLStreamBuffer mark, String nsUri, String localName) {
199 return new OutboundStreamHeader(mark,nsUri,localName);
200 }
202 /*package*/ String getIsReferenceParameterLocalName() {
203 return "";
204 }
206 /* package */ String getWsdlAnonymousLocalName() {
207 return "";
208 }
210 public String getPrefix() {
211 return "wsa";
212 }
214 public String getWsdlPrefix() {
215 return "wsaw";
216 }
218 public Class<? extends WebServiceFeature> getFeatureClass() {
219 return MemberSubmissionAddressingFeature.class;
220 }
221 };
223 /**
224 * Namespace URI
225 */
226 public final String nsUri;
228 /**
229 * Namespace URI for the WSDL Binding
230 */
231 public final String wsdlNsUri;
233 /**
234 * Representing either {@link W3CEndpointReference} or
235 * {@link MemberSubmissionEndpointReference}.
236 */
237 public final EPR eprType;
239 /**
240 * Namespace URI for the WSDL Binding
241 */
242 public final String policyNsUri;
244 /**
245 * Gets the anonymous URI value associated with this WS-Addressing version.
246 */
247 public final @NotNull String anonymousUri;
249 /**
250 * Gets the none URI value associated with this WS-Addressing version.
251 */
252 public final @NotNull String noneUri;
254 /**
255 * Represents the anonymous EPR.
256 */
257 public final WSEndpointReference anonymousEpr;
259 /**
260 * Represents the To QName in the SOAP message for a specific WS-Addressing Version.
261 */
262 public final QName toTag;
264 /**
265 * Represents the From QName in the SOAP message for a specific WS-Addressing Version.
266 */
267 public final QName fromTag;
269 /**
270 * Represents the ReplyTo QName in the SOAP message for a specific WS-Addressing Version.
271 */
272 public final QName replyToTag;
274 /**
275 * Represents the FaultTo QName for a specific WS-Addressing Version.
276 */
277 public final QName faultToTag;
279 /**
280 * Represents the Action QName in the SOAP message for a specific WS-Addressing Version.
281 */
282 public final QName actionTag;
284 /**
285 * Represents the MessageID QName in the SOAP message for a specific WS-Addressing Version.
286 */
287 public final QName messageIDTag;
289 /**
290 * Represents the RelatesTo QName in the SOAP message for a specific WS-Addressing Version.
291 */
292 public final QName relatesToTag;
294 /**
295 * Represents the QName of the fault code when a required header representing a
296 * WS-Addressing Message Addressing Property is not present.
297 */
298 public final QName mapRequiredTag;
300 /**
301 * Represents the QName of the fault code when Action is not supported at this endpoint.
302 */
303 public final QName actionMismatchTag;
305 /**
306 * Represents the QName of the fault code when Action is not supported at this endpoint.
307 */
308 public final QName actionNotSupportedTag;
310 /**
311 * Represents the text of the fault when Action is not supported at this endpoint.
312 */
313 public final String actionNotSupportedText;
315 /**
316 * Represents the QName of the fault code when a header representing a
317 * WS-Addressing Message Addressing Property is invalid and cannot be processed.
318 */
319 public final QName invalidMapTag;
321 /**
322 * Represents the QName of the fault code when a header representing a
323 * WS-Addressing Message Addressing Property occurs greater than expected number.
324 */
325 public final QName invalidCardinalityTag;
327 /**
328 * Represents the QName of the fault code when a header representing an
329 * address is not valid.
330 */
331 public final QName invalidAddressTag;
333 /**
334 * Represents the QName of the element that conveys additional information
335 * on the pre-defined WS-Addressing faults.
336 */
337 public final QName problemHeaderQNameTag;
339 /**
340 * Represents the QName of the element that conveys additional information
341 * if Action is not matching with that expected.
342 */
343 public final QName problemActionTag;
345 /**
346 * Represents the QName of the header element that is used to capture the fault detail
347 * if there is a fault processing WS-Addressing Message Addressing Property. This is
348 * only used for SOAP 1.1.
349 */
350 public final QName faultDetailTag;
352 /**
353 * Fault sub-sub-code that represents
354 * "Specifies that the invalid header was expected to be an EPR but did not contain an [address]."
355 */
356 public final QName fault_missingAddressInEpr;
358 /**
359 * Represents the Action QName in the WSDL for a specific WS-Addressing Version.
360 */
361 public final QName wsdlActionTag;
363 /**
364 * Represents the WSDL extension QName for a specific WS-Addressing Version.
365 */
366 public final QName wsdlExtensionTag;
368 /**
369 * Represents the WSDL anonymous QName for a specific WS-Addressing Version.
370 */
371 public final QName wsdlAnonymousTag;
373 /**
374 * Represents the QName of the reference parameter in a SOAP message. This is
375 * only valid for W3C WS-Addressing.
376 */
377 public final QName isReferenceParameterTag;
379 private static final String EXTENDED_FAULT_NAMESPACE = "http://jax-ws.dev.java.net/addressing/fault";
380 public static final String UNSET_OUTPUT_ACTION = "http://jax-ws.dev.java.net/addressing/output-action-not-set";
381 public static final String UNSET_INPUT_ACTION = "http://jax-ws.dev.java.net/addressing/input-action-not-set";
383 /**
384 * Fault sub-sub-code that represents duplicate <Address> element in EPR.
385 * This is a fault code not defined in the spec.
386 */
387 public static final QName fault_duplicateAddressInEpr = new QName(
388 EXTENDED_FAULT_NAMESPACE, "DuplicateAddressInEpr", "wsa"
389 );
391 private AddressingVersion(String nsUri, String prefix, String anonymousEprString, String wsdlNsUri, String policyNsUri,
392 String anonymousUri, String noneUri,
393 EPR eprType ) {
394 this.nsUri = nsUri;
395 this.wsdlNsUri = wsdlNsUri;
396 this.policyNsUri = policyNsUri;
397 this.anonymousUri = anonymousUri;
398 this.noneUri = noneUri;
399 toTag = new QName(nsUri,"To", prefix);
400 fromTag = new QName(nsUri,"From", prefix);
401 replyToTag = new QName(nsUri,"ReplyTo", prefix);
402 faultToTag = new QName(nsUri,"FaultTo", prefix);
403 actionTag = new QName(nsUri,"Action", prefix);
404 messageIDTag = new QName(nsUri,"MessageID", prefix);
405 relatesToTag = new QName(nsUri,"RelatesTo", prefix);
407 mapRequiredTag = new QName(nsUri,getMapRequiredLocalName(), prefix);
408 actionMismatchTag = new QName(nsUri,getActionMismatchLocalName(), prefix);
409 actionNotSupportedTag = new QName(nsUri,"ActionNotSupported", prefix);
410 actionNotSupportedText = "The \"%s\" cannot be processed at the receiver";
411 invalidMapTag = new QName(nsUri,getInvalidMapLocalName(), prefix);
412 invalidAddressTag = new QName(nsUri,getInvalidAddressLocalName(), prefix);
413 invalidCardinalityTag = new QName(nsUri,getInvalidCardinalityLocalName(), prefix);
414 faultDetailTag = new QName(nsUri,"FaultDetail", prefix);
416 problemHeaderQNameTag = new QName(nsUri,"ProblemHeaderQName", prefix);
417 problemActionTag = new QName(nsUri, "ProblemAction", prefix);
419 fault_missingAddressInEpr = new QName(nsUri,"MissingAddressInEPR", prefix);
420 isReferenceParameterTag = new QName(nsUri,getIsReferenceParameterLocalName(), prefix);
422 wsdlActionTag = new QName(wsdlNsUri,"Action", prefix);
423 wsdlExtensionTag = new QName(wsdlNsUri, "UsingAddressing", prefix);
424 wsdlAnonymousTag = new QName(wsdlNsUri, getWsdlAnonymousLocalName(), prefix);
426 // create stock anonymous EPR
427 try {
428 this.anonymousEpr = new WSEndpointReference(new ByteArrayInputStream(anonymousEprString.getBytes("UTF-8")),this);
429 } catch (XMLStreamException e) {
430 throw new Error(e); // bug in our code as EPR should parse.
431 } catch (UnsupportedEncodingException e) {
432 throw new Error(e);
433 }
434 this.eprType = eprType;
435 }
437 /**
438 * Gets the local name of the fault when a header representing a WS-Addressing Action is not same as SOAPAction
439 *
440 * @return local name
441 */
442 /* package */ abstract String getActionMismatchLocalName();
444 /**
445 * Returns {@link AddressingVersion} whose {@link #nsUri} equals to
446 * the given string.
447 *
448 * This method does not perform input string validation.
449 *
450 * @param nsUri
451 * must not be null.
452 * @return always non-null.
453 */
454 public static AddressingVersion fromNsUri(String nsUri) {
455 if (nsUri.equals(W3C.nsUri))
456 return W3C;
458 if (nsUri.equals(MEMBER.nsUri))
459 return MEMBER;
461 return null;
462 }
464 /**
465 * Gets the {@link AddressingVersion} from a {@link WSBinding}
466 *
467 * @param binding WSDL binding
468 * @return
469 * addresing version enabled, or null if none is enabled.
470 */
471 public static @Nullable
472 AddressingVersion fromBinding(WSBinding binding) {
473 // TODO: who is responsible for reporting an error if both versions
474 // are on?
475 if (binding.isFeatureEnabled(AddressingFeature.class))
476 return W3C;
478 if (binding.isFeatureEnabled(MemberSubmissionAddressingFeature.class))
479 return MEMBER;
481 return null;
482 }
484 /**
485 * Gets the {@link AddressingVersion} from a {@link WSDLPort}
486 *
487 * @param port WSDL port
488 * @return addresing version
489 */
490 public static AddressingVersion fromPort(WSDLPort port) {
491 if (port == null)
492 return null;
494 WebServiceFeature wsf = port.getFeature(AddressingFeature.class);
495 if (wsf == null) {
496 wsf = port.getFeature(MemberSubmissionAddressingFeature.class);
497 }
498 if (wsf == null)
499 return null;
501 return fromFeature(wsf);
502 }
504 /**
505 * Returns {@link #nsUri} associated with this {@link AddressingVersion}
506 *
507 * @return namespace URI
508 * @deprecated
509 * Use {@link #nsUri}.
510 */
511 public String getNsUri() {
512 return nsUri;
513 }
515 /**
516 * Returns true if the given local name is considered as
517 * a reference parameter in EPR.
518 *
519 * For W3C, this means "ReferenceParameters",
520 * and for the member submission version, this means
521 * either "ReferenceParameters" or "ReferenceProperties".
522 */
523 public abstract boolean isReferenceParameter(String localName);
525 /**
526 * Returns WsaTubeHelper for the WS-Addressing version identified by <code>binding</code>
527 * {@link WSBinding} and for the {@link WSDLPort} port.
528 *
529 * @return WS-A version specific helper
530 *
531 * @deprecated
532 * TODO why are we exposing implementation specificc class through api?
533 * TODO Remove it if no one elase uses it.
534 */
535 public abstract WsaTubeHelper getWsaHelper(WSDLPort wsdlPort, SEIModel seiModel, WSBinding binding);
537 /**
538 * Gets the none URI value associated with this WS-Addressing version.
539 *
540 * @return none URI value
541 * @deprecated
542 * Use {@link #noneUri}.
543 */
544 public final String getNoneUri() {
545 return noneUri;
546 }
548 /**
549 * Gets the anonymous URI value associated with this WS-Addressing version.
550 *
551 * @deprecated
552 * Use {@link #anonymousUri}
553 */
554 public final String getAnonymousUri() {
555 return anonymousUri;
556 }
558 /**
559 * Gets the default fault Action value associated with this WS-Addressing version.
560 *
561 * @return default fault Action value
562 */
563 public String getDefaultFaultAction() {
564 return nsUri + "/fault";
565 }
567 /**
568 * Gets the local name of the fault when a header representing a WS-Addressing Message
569 * Addresing Property is absent.
570 *
571 * @return local name
572 */
573 /* package */ abstract String getMapRequiredLocalName();
575 /**
576 * Gets the description text when a required WS-Addressing header representing a
577 * Message Addressing Property is absent.
578 *
579 * @return description text
580 */
581 public abstract String getMapRequiredText();
583 /**
584 * Gets the local name of the fault when a header representing anaddress is invalid.
585 * @return local name
586 */
587 /* package */ abstract String getInvalidAddressLocalName();
590 /**
591 * Gets the local name of the fault when a header representing a WS-Addressing Message
592 * Addresing Property is invalid and cannot be processed.
593 *
594 * @return local name
595 */
596 /* package */ abstract String getInvalidMapLocalName();
598 /**
599 * Gets the description text when a header representing a WS-Addressing
600 * Message Addressing Property is invalid and cannot be processed.
601 *
602 * @return description text
603 */
604 public abstract String getInvalidMapText();
606 /**
607 * Gets the local name of the fault when a header representing a WS-Addressing Message
608 * Addresing Property occurs greater than expected number.
609 *
610 * @return local name
611 */
612 /* package */ abstract String getInvalidCardinalityLocalName();
614 /* package */ abstract String getWsdlAnonymousLocalName();
616 public abstract String getPrefix();
618 public abstract String getWsdlPrefix();
620 public abstract Class<? extends WebServiceFeature> getFeatureClass();
621 /**
622 * Creates an outbound {@link Header} from a reference parameter.
623 */
624 /*package*/ abstract Header createReferenceParameterHeader(XMLStreamBuffer mark, String nsUri, String localName);
626 /**
627 * Gets the local name for wsa:IsReferenceParameter. This method will return a valid
628 * value only valid for W3C WS-Addressing. For Member Submission WS-Addressing, this method
629 * returns null.
630 */
631 /*package*/ abstract String getIsReferenceParameterLocalName();
633 public static AddressingVersion fromFeature(WebServiceFeature af) {
634 if (af.getID().equals(AddressingFeature.ID))
635 return W3C;
636 else if (af.getID().equals(MemberSubmissionAddressingFeature.ID))
637 return MEMBER;
638 else
639 return null;
640 }
642 /**
643 * Gets the {@link WebServiceFeature} corresponding to the namespace URI of
644 * WS-Addressing policy assertion in the WSDL. <code>enabled</code> and
645 * <code>required</code> are used to initialize the value of the feature.
646 *
647 * @param nsUri namespace URI of the WS-Addressing policy assertion in the WSDL
648 * @param enabled true if feature is to be enabled, false otherwise
649 * @param required true if feature is required, false otherwise. Corresponds
650 * to wsdl:required on the extension/assertion.
651 * @return WebServiceFeature corresponding to the assertion namespace URI
652 * @throws WebServiceException if an unsupported namespace URI is passed
653 */
654 public static @NotNull WebServiceFeature getFeature(String nsUri, boolean enabled, boolean required) {
655 if (nsUri.equals(W3C.policyNsUri))
656 return new AddressingFeature(enabled, required);
657 else if (nsUri.equals(MEMBER.policyNsUri))
658 return new MemberSubmissionAddressingFeature(enabled, required);
659 else
660 throw new WebServiceException("Unsupported namespace URI: " + nsUri);
661 }
663 /**
664 * Gets the corresponding {@link AddressingVersion} instance from the
665 * EPR class.
666 */
667 public static @NotNull AddressingVersion fromSpecClass(Class<? extends EndpointReference> eprClass) {
668 if(eprClass==W3CEndpointReference.class)
669 return W3C;
670 if(eprClass==MemberSubmissionEndpointReference.class)
671 return MEMBER;
672 throw new WebServiceException("Unsupported EPR type: "+eprClass);
673 }
675 /**
676 * Returns true if the WebServiceFeature is either a {@link AddressingFeature} or
677 * {@link MemberSubmissionAddressingFeature} and is required.
678 *
679 * @param wsf The WebServiceFeature encaps
680 * @throws WebServiceException if <code>wsf</code> does not contain either {@link AddressingFeature} or
681 * {@link MemberSubmissionAddressingFeature}
682 * @return true if <code>wsf</code> requires WS-Addressing
683 */
684 public static boolean isRequired(WebServiceFeature wsf) {
685 if (wsf.getID().equals(AddressingFeature.ID)) {
686 return ((AddressingFeature)wsf).isRequired();
687 } else if (wsf.getID().equals(MemberSubmissionAddressingFeature.ID)) {
688 return ((MemberSubmissionAddressingFeature)wsf).isRequired();
689 } else
690 throw new WebServiceException("WebServiceFeature not an Addressing feature: "+ wsf.getID());
691 }
693 /**
694 * Returns true if <code>binding</code> contains either a {@link AddressingFeature} or
695 * {@link MemberSubmissionAddressingFeature} and is required.
696 *
697 * @param binding The binding
698 * @return true if <code>binding</code> requires WS-Addressing
699 */
700 public static boolean isRequired(WSBinding binding) {
701 AddressingFeature af = binding.getFeature(AddressingFeature.class);
702 if (af != null)
703 return af.isRequired();
704 MemberSubmissionAddressingFeature msaf = binding.getFeature(MemberSubmissionAddressingFeature.class);
705 if(msaf != null)
706 return msaf.isRequired();
708 return false;
709 }
711 /**
712 * Returns true if <code>binding</code> contains either a {@link AddressingFeature} or
713 * {@link MemberSubmissionAddressingFeature} and is enabled.
714 *
715 * @param binding The binding
716 * @return true if WS-Addressing is enabled for <code>binding</code>.
717 */
718 public static boolean isEnabled(WSBinding binding) {
719 return binding.isFeatureEnabled(MemberSubmissionAddressingFeature.class) ||
720 binding.isFeatureEnabled(AddressingFeature.class);
721 }
723 public final static class EPR {
724 public final Class<? extends EndpointReference> eprClass;
725 public final String address;
726 public final String serviceName;
727 public final String portName;
728 public final String portTypeName;
729 public final String referenceParameters;
730 /**
731 * Element under which metadata is specified.
732 * In W3C, it is wsa:Metadata
733 * In Member, it is directly under mex:MetadataSection
734 */
735 public final QName wsdlMetadata;
736 public final String referenceProperties;
738 public EPR(Class<? extends EndpointReference> eprClass, String address, String serviceName, String portName,
739 String portTypeName, QName wsdlMetadata,
740 String referenceParameters, String referenceProperties) {
741 this.eprClass = eprClass;
742 this.address = address;
743 this.serviceName = serviceName;
744 this.portName = portName;
745 this.portTypeName = portTypeName;
746 this.referenceParameters = referenceParameters;
747 this.referenceProperties = referenceProperties;
748 this.wsdlMetadata = wsdlMetadata;
750 }
751 }
753 }