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.encoding; 27 28 import com.sun.istack.internal.Nullable; 29 import com.sun.istack.internal.NotNull; 30 31 /** 32 * @author Vivek Pandey 33 */ 34 public final class ContentTypeImpl implements com.sun.xml.internal.ws.api.pipe.ContentType { 35 private final @NotNull String contentType; 36 private final @NotNull String soapAction; 37 private String accept; 38 private final @Nullable String charset; 39 private String boundary; 40 private String boundaryParameter; 41 private String rootId; 42 private ContentType internalContentType; 43 44 public ContentTypeImpl(String contentType) { 45 this(contentType, null, null); 46 } 47 48 public ContentTypeImpl(String contentType, @Nullable String soapAction) { 49 this(contentType, soapAction, null); 50 } 51 52 public ContentTypeImpl(String contentType, @Nullable String soapAction, @Nullable String accept) { 53 this(contentType, soapAction, accept, null); 54 } 55 56 public ContentTypeImpl(String contentType, @Nullable String soapAction, @Nullable String accept, String charsetParam) { 57 this.contentType = contentType; 58 this.accept = accept; 59 this.soapAction = getQuotedSOAPAction(soapAction); 60 if (charsetParam == null) { 61 String tmpCharset = null; 62 try { 63 internalContentType = new ContentType(contentType); 64 tmpCharset = internalContentType.getParameter("charset"); 65 } catch(Exception e) { 66 //Ignore the parsing exception. 67 } 68 charset = tmpCharset; 69 } else { 70 charset = charsetParam; 71 } 72 } 73 74 /** 75 * Returns the character set encoding. 76 * 77 * @return returns the character set encoding. 78 */ 79 public @Nullable String getCharSet() { 80 return charset; 81 } 82 83 /** BP 1.1 R1109 requires SOAPAction too be a quoted value **/ 84 private String getQuotedSOAPAction(String soapAction){ 85 if(soapAction == null || soapAction.length() == 0){ 86 return "\"\""; 87 }else if(soapAction.charAt(0) != '"' && soapAction.charAt(soapAction.length() -1) != '"'){ 88 //surround soapAction by double quotes for BP R1109 89 return "\"" + soapAction + "\""; 90 }else{ 91 return soapAction; 92 } 93 } 94 95 @Override 96 public String getContentType() { 97 return contentType; 98 } 99 100 @Override 101 public String getSOAPActionHeader() { 102 return soapAction; 103 } 104 105 @Override 106 public String getAcceptHeader() { 107 return accept; 108 } 109 110 public void setAcceptHeader(String accept) { 111 this.accept = accept; 112 } 113 114 public String getBoundary() { 115 if (boundary == null) { 116 if (internalContentType == null) internalContentType = new ContentType(contentType); 117 boundary = internalContentType.getParameter("boundary"); 118 } 119 return boundary; 120 } 121 122 public void setBoundary(String boundary) { 123 this.boundary = boundary; 124 } 125 126 public String getBoundaryParameter() { 127 return boundaryParameter; 128 } 129 130 public void setBoundaryParameter(String boundaryParameter) { 131 this.boundaryParameter = boundaryParameter; 132 } 133 134 public String getRootId() { 135 if (rootId == null) { 136 if (internalContentType == null) internalContentType = new ContentType(contentType); 137 rootId = internalContentType.getParameter("start"); 138 } 139 return rootId; 140 } 141 142 public void setRootId(String rootId) { 143 this.rootId = rootId; 144 } 145 146 public static class Builder { 147 public String contentType; 148 public String soapAction; 149 public String accept; 150 public String charset; 151 public ContentTypeImpl build() { 152 return new ContentTypeImpl(contentType, soapAction, accept, charset); 153 } 154 } 155 }