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