src/share/jaxws_classes/com/sun/xml/internal/ws/encoding/ContentTypeImpl.java

Fri, 14 Feb 2014 11:13:45 +0100

author
mkos
date
Fri, 14 Feb 2014 11:13:45 +0100
changeset 515
6cd506508147
parent 368
0989ad8c0860
child 637
9c07ef4934dd
permissions
-rw-r--r--

8026188: Enhance envelope factory
Summary: Avoiding caching data initialized via TCCL in static context; fix also reviewed by Alexander Fomin
Reviewed-by: ahgross, mgrebac, skoivu

ohair@286 1 /*
alanb@368 2 * Copyright (c) 1997, 2012, Oracle and/or its affiliates. All rights reserved.
ohair@286 3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
ohair@286 4 *
ohair@286 5 * This code is free software; you can redistribute it and/or modify it
ohair@286 6 * under the terms of the GNU General Public License version 2 only, as
ohair@286 7 * published by the Free Software Foundation. Oracle designates this
ohair@286 8 * particular file as subject to the "Classpath" exception as provided
ohair@286 9 * by Oracle in the LICENSE file that accompanied this code.
ohair@286 10 *
ohair@286 11 * This code is distributed in the hope that it will be useful, but WITHOUT
ohair@286 12 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
ohair@286 13 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
ohair@286 14 * version 2 for more details (a copy is included in the LICENSE file that
ohair@286 15 * accompanied this code).
ohair@286 16 *
ohair@286 17 * You should have received a copy of the GNU General Public License version
ohair@286 18 * 2 along with this work; if not, write to the Free Software Foundation,
ohair@286 19 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
ohair@286 20 *
ohair@286 21 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
ohair@286 22 * or visit www.oracle.com if you need additional information or have any
ohair@286 23 * questions.
ohair@286 24 */
ohair@286 25
ohair@286 26 package com.sun.xml.internal.ws.encoding;
ohair@286 27
ohair@286 28 import com.sun.istack.internal.Nullable;
ohair@286 29 import com.sun.istack.internal.NotNull;
ohair@286 30
ohair@286 31 /**
ohair@286 32 * @author Vivek Pandey
ohair@286 33 */
ohair@286 34 public final class ContentTypeImpl implements com.sun.xml.internal.ws.api.pipe.ContentType {
ohair@286 35 private final @NotNull String contentType;
ohair@286 36 private final @NotNull String soapAction;
alanb@368 37 private String accept;
ohair@286 38 private final @Nullable String charset;
alanb@368 39 private String boundary;
alanb@368 40 private String boundaryParameter;
alanb@368 41 private String rootId;
alanb@368 42 private ContentType internalContentType;
ohair@286 43
ohair@286 44 public ContentTypeImpl(String contentType) {
ohair@286 45 this(contentType, null, null);
ohair@286 46 }
ohair@286 47
ohair@286 48 public ContentTypeImpl(String contentType, @Nullable String soapAction) {
ohair@286 49 this(contentType, soapAction, null);
ohair@286 50 }
ohair@286 51
ohair@286 52 public ContentTypeImpl(String contentType, @Nullable String soapAction, @Nullable String accept) {
ohair@286 53 this(contentType, soapAction, accept, null);
ohair@286 54 }
ohair@286 55
ohair@286 56 public ContentTypeImpl(String contentType, @Nullable String soapAction, @Nullable String accept, String charsetParam) {
ohair@286 57 this.contentType = contentType;
ohair@286 58 this.accept = accept;
ohair@286 59 this.soapAction = getQuotedSOAPAction(soapAction);
ohair@286 60 if (charsetParam == null) {
ohair@286 61 String tmpCharset = null;
ohair@286 62 try {
alanb@368 63 internalContentType = new ContentType(contentType);
alanb@368 64 tmpCharset = internalContentType.getParameter("charset");
ohair@286 65 } catch(Exception e) {
ohair@286 66 //Ignore the parsing exception.
ohair@286 67 }
ohair@286 68 charset = tmpCharset;
ohair@286 69 } else {
ohair@286 70 charset = charsetParam;
ohair@286 71 }
ohair@286 72 }
ohair@286 73
ohair@286 74 /**
ohair@286 75 * Returns the character set encoding.
ohair@286 76 *
ohair@286 77 * @return returns the character set encoding.
ohair@286 78 */
ohair@286 79 public @Nullable String getCharSet() {
ohair@286 80 return charset;
ohair@286 81 }
ohair@286 82
ohair@286 83 /** BP 1.1 R1109 requires SOAPAction too be a quoted value **/
ohair@286 84 private String getQuotedSOAPAction(String soapAction){
ohair@286 85 if(soapAction == null || soapAction.length() == 0){
ohair@286 86 return "\"\"";
ohair@286 87 }else if(soapAction.charAt(0) != '"' && soapAction.charAt(soapAction.length() -1) != '"'){
ohair@286 88 //surround soapAction by double quotes for BP R1109
ohair@286 89 return "\"" + soapAction + "\"";
ohair@286 90 }else{
ohair@286 91 return soapAction;
ohair@286 92 }
ohair@286 93 }
ohair@286 94
alanb@368 95 @Override
ohair@286 96 public String getContentType() {
ohair@286 97 return contentType;
ohair@286 98 }
ohair@286 99
alanb@368 100 @Override
ohair@286 101 public String getSOAPActionHeader() {
ohair@286 102 return soapAction;
ohair@286 103 }
ohair@286 104
alanb@368 105 @Override
ohair@286 106 public String getAcceptHeader() {
ohair@286 107 return accept;
ohair@286 108 }
ohair@286 109
alanb@368 110 public void setAcceptHeader(String accept) {
alanb@368 111 this.accept = accept;
alanb@368 112 }
alanb@368 113
alanb@368 114 public String getBoundary() {
alanb@368 115 if (boundary == null) {
alanb@368 116 if (internalContentType == null) internalContentType = new ContentType(contentType);
alanb@368 117 boundary = internalContentType.getParameter("boundary");
alanb@368 118 }
alanb@368 119 return boundary;
alanb@368 120 }
alanb@368 121
alanb@368 122 public void setBoundary(String boundary) {
alanb@368 123 this.boundary = boundary;
alanb@368 124 }
alanb@368 125
alanb@368 126 public String getBoundaryParameter() {
alanb@368 127 return boundaryParameter;
alanb@368 128 }
alanb@368 129
alanb@368 130 public void setBoundaryParameter(String boundaryParameter) {
alanb@368 131 this.boundaryParameter = boundaryParameter;
alanb@368 132 }
alanb@368 133
alanb@368 134 public String getRootId() {
alanb@368 135 if (rootId == null) {
alanb@368 136 if (internalContentType == null) internalContentType = new ContentType(contentType);
alanb@368 137 rootId = internalContentType.getParameter("start");
alanb@368 138 }
alanb@368 139 return rootId;
alanb@368 140 }
alanb@368 141
alanb@368 142 public void setRootId(String rootId) {
alanb@368 143 this.rootId = rootId;
alanb@368 144 }
alanb@368 145
ohair@286 146 public static class Builder {
ohair@286 147 public String contentType;
ohair@286 148 public String soapAction;
ohair@286 149 public String accept;
ohair@286 150 public String charset;
ohair@286 151 public ContentTypeImpl build() {
ohair@286 152 return new ContentTypeImpl(contentType, soapAction, accept, charset);
ohair@286 153 }
ohair@286 154 }
ohair@286 155 }

mercurial