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 26package com.sun.xml.internal.ws.message; 27 28import com.sun.xml.internal.ws.api.message.Attachment; 29import com.sun.xml.internal.ws.api.message.AttachmentSet; 30import com.sun.xml.internal.ws.encoding.MimeMultipartParser; 31import com.sun.xml.internal.ws.resources.EncodingMessages; 32 33import javax.activation.DataHandler; 34import javax.xml.bind.attachment.AttachmentUnmarshaller; 35import javax.xml.ws.WebServiceException; 36 37/** 38 * Implementation of {@link AttachmentUnmarshaller} that uses 39 * loads attachments from {@link AttachmentSet} directly. 40 * 41 * @author Vivek Pandey 42 * @see MimeMultipartParser 43 */ 44public final class AttachmentUnmarshallerImpl extends AttachmentUnmarshaller { 45 46 private final AttachmentSet attachments; 47 48 public AttachmentUnmarshallerImpl(AttachmentSet attachments) { 49 this.attachments = attachments; 50 } 51 52 @Override 53 public DataHandler getAttachmentAsDataHandler(String cid) { 54 Attachment a = attachments.get(stripScheme(cid)); 55 if(a==null) 56 throw new WebServiceException(EncodingMessages.NO_SUCH_CONTENT_ID(cid)); 57 return a.asDataHandler(); 58 } 59 60 @Override 61 public byte[] getAttachmentAsByteArray(String cid) { 62 Attachment a = attachments.get(stripScheme(cid)); 63 if(a==null) 64 throw new WebServiceException(EncodingMessages.NO_SUCH_CONTENT_ID(cid)); 65 return a.asByteArray(); 66 } 67 68 /** 69 * The CID reference has 'cid:' prefix, so get rid of it. 70 */ 71 private String stripScheme(String cid) { 72 if(cid.startsWith("cid:")) // work defensively, in case the input is wrong 73 cid = cid.substring(4); 74 return cid; 75 } 76 77} 78