com.sun.xml.ws.message.AttachmentUnmarshallerImpl Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of jaxws-rt Show documentation
Show all versions of jaxws-rt Show documentation
JAX-WS Runtime with module descriptor
/*
* Copyright (c) 1997, 2020 Oracle and/or its affiliates. All rights reserved.
*
* This program and the accompanying materials are made available under the
* terms of the Eclipse Distribution License v. 1.0, which is available at
* http://www.eclipse.org/org/documents/edl-v10.php.
*
* SPDX-License-Identifier: BSD-3-Clause
*/
package com.sun.xml.ws.message;
import com.sun.xml.ws.api.message.Attachment;
import com.sun.xml.ws.api.message.AttachmentSet;
import com.sun.xml.ws.encoding.MimeMultipartParser;
import com.sun.xml.ws.resources.EncodingMessages;
import jakarta.activation.DataHandler;
import jakarta.xml.bind.attachment.AttachmentUnmarshaller;
import jakarta.xml.ws.WebServiceException;
/**
* Implementation of {@link AttachmentUnmarshaller} that uses
* loads attachments from {@link AttachmentSet} directly.
*
* @author Vivek Pandey
* @see MimeMultipartParser
*/
public final class AttachmentUnmarshallerImpl extends AttachmentUnmarshaller {
private final AttachmentSet attachments;
public AttachmentUnmarshallerImpl(AttachmentSet attachments) {
this.attachments = attachments;
}
@Override
public DataHandler getAttachmentAsDataHandler(String cid) {
Attachment a = attachments.get(stripScheme(cid));
if(a==null)
throw new WebServiceException(EncodingMessages.NO_SUCH_CONTENT_ID(cid));
return a.asDataHandler();
}
@Override
public byte[] getAttachmentAsByteArray(String cid) {
Attachment a = attachments.get(stripScheme(cid));
if(a==null)
throw new WebServiceException(EncodingMessages.NO_SUCH_CONTENT_ID(cid));
return a.asByteArray();
}
/**
* The CID reference has 'cid:' prefix, so get rid of it.
*/
private String stripScheme(String cid) {
if(cid.startsWith("cid:")) // work defensively, in case the input is wrong
cid = cid.substring(4);
return cid;
}
}