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

Thu, 31 Aug 2017 15:18:52 +0800

author
aoqi
date
Thu, 31 Aug 2017 15:18:52 +0800
changeset 637
9c07ef4934dd
parent 368
0989ad8c0860
parent 0
373ffda63c9a
permissions
-rw-r--r--

merge

     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  */
    26 package com.sun.xml.internal.ws.api.addressing;
    28 import java.net.URL;
    30 import com.sun.istack.internal.NotNull;
    31 import com.sun.istack.internal.Nullable;
    32 import com.sun.xml.internal.ws.api.FeatureConstructor;
    34 import javax.xml.ws.WebServiceFeature;
    36 import com.sun.org.glassfish.gmbal.ManagedAttribute;
    37 import com.sun.org.glassfish.gmbal.ManagedData;
    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";
    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;
    74     /**
    75      * Create an {@link OneWayFeature}. The instance created will be enabled.
    76      */
    77     public OneWayFeature() {
    78         this.enabled = true;
    79     }
    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     }
    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     }
   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     }
   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     }
   126     private WSEndpointReference makeEPR(final String x, final AddressingVersion v) {
   127         if (x == null) { return null; }
   128         return new WSEndpointReference(x, v);
   129     }
   131     public String getMessageId() {
   132         return messageId;
   133     }
   135     /**
   136      * {@inheritDoc}
   137      */
   138     @ManagedAttribute
   139     public String getID() {
   140         return ID;
   141     }
   143     public boolean
   144     hasSslEprs() {
   145       return sslReplyTo != null || sslFaultTo != null;
   146     }
   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     }
   158     public WSEndpointReference getReplyTo(boolean ssl) {
   159         return (ssl && sslReplyTo != null) ? sslReplyTo : replyTo;
   160     }
   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     }
   171     public WSEndpointReference getSslReplyTo() {
   172       return sslReplyTo;
   173     }
   175     public void setSslReplyTo(WSEndpointReference sslReplyTo) {
   176       this.sslReplyTo = sslReplyTo;
   177     }
   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     }
   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     }
   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     }
   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     }
   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     }
   226     public WSEndpointReference getFaultTo(boolean ssl) {
   227         return (ssl && sslFaultTo != null) ? sslFaultTo : faultTo;
   228     }
   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     }
   239     public WSEndpointReference getSslFaultTo() {
   240       return sslFaultTo;
   241     }
   243     public void setSslFaultTo(WSEndpointReference sslFaultTo) {
   244       this.sslFaultTo = sslFaultTo;
   245     }
   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     }
   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     }
   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         }
   308         return epr;
   309     }
   311 }

mercurial