com.sun.xml.ws.api.SOAPVersion Maven / Gradle / Ivy
Show all versions of webservices-rt Show documentation
/*
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
*
* Copyright (c) 1997-2017 Oracle and/or its affiliates. All rights reserved.
*
* The contents of this file are subject to the terms of either the GNU
* General Public License Version 2 only ("GPL") or the Common Development
* and Distribution License("CDDL") (collectively, the "License"). You
* may not use this file except in compliance with the License. You can
* obtain a copy of the License at
* https://oss.oracle.com/licenses/CDDL+GPL-1.1
* or LICENSE.txt. See the License for the specific
* language governing permissions and limitations under the License.
*
* When distributing the software, include this License Header Notice in each
* file and include the License file at LICENSE.txt.
*
* GPL Classpath Exception:
* Oracle designates this particular file as subject to the "Classpath"
* exception as provided by Oracle in the GPL Version 2 section of the License
* file that accompanied this code.
*
* Modifications:
* If applicable, add the following below the License Header, with the fields
* enclosed by brackets [] replaced by your own identifying information:
* "Portions Copyright [year] [name of copyright owner]"
*
* Contributor(s):
* If you wish your version of this file to be governed by only the CDDL or
* only the GPL Version 2, indicate your decision by adding "[Contributor]
* elects to include this software in this distribution under the [CDDL or GPL
* Version 2] license." If you don't indicate a single choice of license, a
* recipient has the option to distribute your version of this file under
* either the CDDL, the GPL Version 2 or to extend the choice of license to
* its licensees as provided above. However, if you add GPL Version 2 code
* and therefore, elected the GPL Version 2 license, then the option applies
* only if the new code is made subject to such option by the copyright
* holder.
*/
package com.sun.xml.ws.api;
import com.sun.xml.bind.util.Which;
import com.sun.xml.ws.api.message.saaj.SAAJFactory;
import com.sun.xml.ws.encoding.soap.SOAP12Constants;
import javax.xml.namespace.QName;
import javax.xml.soap.MessageFactory;
import javax.xml.soap.SOAPConstants;
import javax.xml.soap.SOAPException;
import javax.xml.soap.SOAPFactory;
import javax.xml.ws.soap.SOAPBinding;
import com.oracle.webservices.api.EnvelopeStyle;
import com.oracle.webservices.api.EnvelopeStyleFeature;
import java.util.Arrays;
import java.util.Collections;
import java.util.HashSet;
import java.util.Set;
/**
* Version of SOAP (1.1 and 1.2).
*
*
* This class defines various constants for SOAP 1.1 and SOAP 1.2,
* and also defines convenience methods to simplify the processing
* of multiple SOAP versions.
*
*
* This constant alows you to do:
*
*
* SOAPVersion version = ...;
* version.someOp(...);
*
*
* As opposed to:
*
*
* if(binding is SOAP11) {
* doSomeOp11(...);
* } else {
* doSomeOp12(...);
* }
*
*
* @author Kohsuke Kawaguchi
*/
public enum SOAPVersion {
SOAP_11(SOAPBinding.SOAP11HTTP_BINDING,
com.sun.xml.ws.encoding.soap.SOAPConstants.URI_ENVELOPE,
"text/xml",
SOAPConstants.URI_SOAP_ACTOR_NEXT, "actor",
javax.xml.soap.SOAPConstants.SOAP_1_1_PROTOCOL,
new QName(com.sun.xml.ws.encoding.soap.SOAPConstants.URI_ENVELOPE, "MustUnderstand"),
"Client",
"Server",
Collections.singleton(SOAPConstants.URI_SOAP_ACTOR_NEXT)),
SOAP_12(SOAPBinding.SOAP12HTTP_BINDING,
SOAP12Constants.URI_ENVELOPE,
"application/soap+xml",
SOAPConstants.URI_SOAP_1_2_ROLE_ULTIMATE_RECEIVER, "role",
javax.xml.soap.SOAPConstants.SOAP_1_2_PROTOCOL,
new QName(com.sun.xml.ws.encoding.soap.SOAP12Constants.URI_ENVELOPE, "MustUnderstand"),
"Sender",
"Receiver",
new HashSet(Arrays.asList(SOAPConstants.URI_SOAP_1_2_ROLE_NEXT,SOAPConstants.URI_SOAP_1_2_ROLE_ULTIMATE_RECEIVER)));
/**
* Binding ID for SOAP/HTTP binding of this SOAP version.
*
*
* Either {@link SOAPBinding#SOAP11HTTP_BINDING} or
* {@link SOAPBinding#SOAP12HTTP_BINDING}
*/
public final String httpBindingId;
/**
* SOAP envelope namespace URI.
*/
public final String nsUri;
/**
* Content-type. Either "text/xml" or "application/soap+xml".
*/
public final String contentType;
/**
* SOAP MustUnderstand FaultCode for this SOAP version
*/
public final QName faultCodeMustUnderstand;
/**
* SAAJ {@link MessageFactory} for this SOAP version.
* @deprecated
*/
public final MessageFactory saajMessageFactory;
/**
* SAAJ {@link SOAPFactory} for this SOAP version.
* @deprecated
*/
public final SOAPFactory saajSoapFactory;
private final String saajFactoryString;
/**
* If the actor/role attribute is absent, this SOAP version assumes this value.
*/
public final String implicitRole;
/**
* Singleton set that contains {@link #implicitRole}.
*/
public final Set implicitRoleSet;
/**
* This represents the roles required to be assumed by SOAP binding implementation.
*/
public final Set requiredRoles;
/**
* "role" (SOAP 1.2) or "actor" (SOAP 1.1)
*/
public final String roleAttributeName;
/**
* "{nsUri}Client" or "{nsUri}Sender"
*/
public final QName faultCodeClient;
/**
* "{nsUri}Server" or "{nsUri}Receiver"
*/
public final QName faultCodeServer;
private SOAPVersion(String httpBindingId, String nsUri, String contentType, String implicitRole, String roleAttributeName,
String saajFactoryString, QName faultCodeMustUnderstand, String faultCodeClientLocalName,
String faultCodeServerLocalName,Set requiredRoles) {
this.httpBindingId = httpBindingId;
this.nsUri = nsUri;
this.contentType = contentType;
this.implicitRole = implicitRole;
this.implicitRoleSet = Collections.singleton(implicitRole);
this.roleAttributeName = roleAttributeName;
this.saajFactoryString = saajFactoryString;
try {
saajMessageFactory = MessageFactory.newInstance(saajFactoryString);
saajSoapFactory = SOAPFactory.newInstance(saajFactoryString);
} catch (SOAPException e) {
throw new Error(e);
} catch (NoSuchMethodError e) {
// SAAJ 1.3 is not in the classpath
LinkageError x = new LinkageError("You are loading old SAAJ from "+ Which.which(MessageFactory.class));
x.initCause(e);
throw x;
}
this.faultCodeMustUnderstand = faultCodeMustUnderstand;
this.requiredRoles = requiredRoles;
this.faultCodeClient = new QName(nsUri,faultCodeClientLocalName);
this.faultCodeServer = new QName(nsUri,faultCodeServerLocalName);
}
public SOAPFactory getSOAPFactory() {
try {
return SAAJFactory.getSOAPFactory(saajFactoryString);
} catch (SOAPException e) {
throw new Error(e);
} catch (NoSuchMethodError e) {
// SAAJ 1.3 is not in the classpath
LinkageError x = new LinkageError("You are loading old SAAJ from "+ Which.which(MessageFactory.class));
x.initCause(e);
throw x;
}
}
public MessageFactory getMessageFactory() {
try {
return SAAJFactory.getMessageFactory(saajFactoryString);
} catch (SOAPException e) {
throw new Error(e);
} catch (NoSuchMethodError e) {
// SAAJ 1.3 is not in the classpath
LinkageError x = new LinkageError("You are loading old SAAJ from "+ Which.which(MessageFactory.class));
x.initCause(e);
throw x;
}
}
public String toString() {
return httpBindingId;
}
/**
* Returns {@link SOAPVersion} whose {@link #httpBindingId} equals to
* the given string.
*
* This method does not perform input string validation.
*
* @param binding
* for historical reason, we treat null as {@link #SOAP_11},
* but you really shouldn't be passing null.
* @return always non-null.
*/
public static SOAPVersion fromHttpBinding(String binding) {
if(binding==null)
return SOAP_11;
if(binding.equals(SOAP_12.httpBindingId))
return SOAP_12;
else
return SOAP_11;
}
/**
* Returns {@link SOAPVersion} whose {@link #nsUri} equals to
* the given string.
*
* This method does not perform input string validation.
*
* @param nsUri
* must not be null.
* @return always non-null.
*/
public static SOAPVersion fromNsUri(String nsUri) {
if(nsUri.equals(SOAP_12.nsUri))
return SOAP_12;
else
return SOAP_11;
}
public static SOAPVersion from(EnvelopeStyleFeature f) {
EnvelopeStyle.Style[] style = f.getStyles();
if (style.length != 1) throw new IllegalArgumentException ("The EnvelopingFeature must has exactly one Enveloping.Style");
return from(style[0]);
}
public static SOAPVersion from(EnvelopeStyle.Style style) {
switch (style) {
case SOAP11: return SOAP_11;
case SOAP12: return SOAP_12;
case XML: //ERROR??
default: return SOAP_11;
}
}
public EnvelopeStyleFeature toFeature() {
return SOAP_11.equals(this) ?
new EnvelopeStyleFeature(new EnvelopeStyle.Style[]{EnvelopeStyle.Style.SOAP11}) :
new EnvelopeStyleFeature(new EnvelopeStyle.Style[]{EnvelopeStyle.Style.SOAP12});
}
}