alvinalexander.com | career | drupal | java | mac | mysql | perl | scala | uml | unix  

What this is

This file is included in the DevDaily.com "Java Source Code Warehouse" project. The intent of this project is to help you "Learn Java by Example" TM.

Other links

The source code

/*
 * Licensed to the Apache Software Foundation (ASF) under one
 * or more contributor license agreements. See the NOTICE file
 * distributed with this work for additional information
 * regarding copyright ownership. The ASF licenses this file
 * to you under the Apache License, Version 2.0 (the
 * "License"); you may not use this file except in compliance
 * with the License. You may obtain a copy of the License at
 *
 * http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing,
 * software distributed under the License is distributed on an
 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
 * KIND, either express or implied. See the License for the
 * specific language governing permissions and limitations
 * under the License.
 */

package sample.mtom.filetransfer.service;

import org.apache.axiom.attachments.Attachments;
import org.apache.axiom.om.*;
import org.apache.axis2.AxisFault;
import org.apache.axis2.context.OperationContext;
import org.apache.axis2.wsdl.WSDLConstants;

import javax.activation.DataHandler;
import javax.imageio.IIOImage;
import javax.imageio.ImageWriter;
import javax.imageio.stream.ImageOutputStream;
import javax.xml.namespace.QName;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.RandomAccessFile;
import java.util.Iterator;

public class MTOMService {
    private OperationContext opcts;

    private OMElement folder;
    private OMElement files;
    private OMElement file;
    private String folderName;

    public void setOperationContext(OperationContext oc) throws AxisFault {
        opcts = oc;
    }

    /**
     * @param element The OMElement handed by the Axis2 engine
     * @return An OMElement containing the response of the operation
     * @throws Exception
     */
    public OMElement uploadFileUsingMTOM(OMElement element) throws Exception {

        Iterator itr = element.getChildElements();
        folder = (OMElement) itr.next(); // Get the folderName element

        // Throw AxisFault if destination folder is null
        if (folder == null) throw new AxisFault("Destination Folder is null");

        folderName = folder.getText();

        // Create destination folder hierarchy if it does not exist
        File destFolder = new File(folderName);
        if (!destFolder.exists()) {
            destFolder.mkdirs();
        }

        files = (OMElement) itr.next(); // Get the files element
        itr = files.getChildElements(); // Get iterator for file elements


        int i = 1;
        String fileName;

        // loop through each file element
        while (itr.hasNext()) {
            file = (OMElement) itr.next(); // Get next file element

            // Throw AxisFault if the file element is null
            if (file == null) throw new AxisFault("File " + i + " is null");

            OMText binaryNode = (OMText) file.getFirstOMChild();
            binaryNode.setBinary(true);
            DataHandler dataHandler;
            dataHandler = (DataHandler) binaryNode.getDataHandler(); // Get corresponding DataHandler
            fileName = createFileName(i);
            writeData(dataHandler.getDataSource().getInputStream(), fileName);
            i++;
        }

        // Create response element
        OMFactory fac = OMAbstractFactory.getOMFactory(); // Get OMFactory
        OMNamespace ns = fac.createOMNamespace("urn://fakenamespace", "ns"); // Create a namespace
        OMElement ele = fac.createOMElement("response", ns); // Create response element
        ele.setText("" + (i - 1) + " File(s) Saved Successfully on Server at " + folderName);
        return ele;
    }


    /**
     * @param element The OMElement handed by the Axis2 engine
     * @return An OMElement containing the response of the operation
     * @throws Exception
     */
    public OMElement uploadFileUsingSwA(OMElement element) throws Exception {

        Iterator itr = element.getChildElements();

        folder = (OMElement) itr.next(); // Get the folderName element

        // Throw AxisFault if destination folder is null
        if (folder == null) throw new AxisFault("Destination Folder is null");

        folderName = folder.getText();

        // Create destination folder hierarchy if it does not exist
        File destFolder = new File(folderName);
        if (!destFolder.exists()) {
            destFolder.mkdirs();
        }

        files = (OMElement) itr.next(); // Get the files element
        itr = files.getChildElements(); // Get iterator for file elements

        // Get attachements from the MessageContext
        Attachments attachment = (opcts.getMessageContext(WSDLConstants.MESSAGE_LABEL_IN_VALUE)).getAttachmentMap();

        // loop through each file element
        int i = 1;
        String fileName;
        DataHandler dataHandler;
        while (itr.hasNext()) {
            file = (OMElement) itr.next();
            if (file == null) throw new AxisFault("File " + i + " is null");
            dataHandler = attachment.getDataHandler(file.getText()); // Get corresponding DataHandler
            fileName = createFileName(i);
            writeData(dataHandler.getDataSource().getInputStream(), fileName);
            i++;
        }

        // Create response element
        OMFactory fac = OMAbstractFactory.getOMFactory(); // Get OMFactory
        OMNamespace ns = fac.createOMNamespace("urn://fakenamespace", "ns"); // Create a namespace
        OMElement ele = fac.createOMElement("response", ns); // Create response element
        ele.setText("" + (i - 1) + " File(s) Saved Successfully on Server at " + folderName);
        return ele;

    }

    public OMElement sendReceiveUsingMTOM(OMElement element) {
        element.buildWithAttachments();
        element.detach();
        return element;
    }

    public OMElement sendReceiveUsingSwA(OMElement element) throws Exception {
        Attachments attachment = (opcts.getMessageContext(WSDLConstants.MESSAGE_LABEL_IN_VALUE)).getAttachmentMap();
        opcts.getMessageContext(WSDLConstants.MESSAGE_LABEL_OUT_VALUE).setAttachmentMap(attachment);
        element.buildWithAttachments();
        element.detach();
        return element;
    }


    private String createFileName(int count) {
        String fileName;
        fileName = folderName + "/" + file.getAttributeValue(
                new QName(file.getNamespace().getNamespaceURI(), "type"));

        if (new File(fileName).exists()) {
            fileName = folderName + "/copy(" + (count - 1) + ")" + file.getAttributeValue(
                    new QName(file.getNamespace().getNamespaceURI(), "type"));
            while (new File(fileName).exists()) {
                count ++;
                fileName = folderName + "/copy(" + (count - 1) + ")" + file.getAttributeValue(
                        new QName(file.getNamespace().getNamespaceURI(), "type"));
            }
        }

        return fileName;
    }

    /**
     * @param inStrm   An input stream linking to the data
     * @param fileName The absolute path of the file to which the data should be written
     * @throws Exception
     */
    private void writeData(InputStream inStrm, String fileName) throws Exception {
        RandomAccessFile raf = new RandomAccessFile(fileName, "rw");
        int b;
        while (true) {
            b = inStrm.read();
            if (b == -1) {
                break;
            }
            raf.writeByte(b);
        }
        inStrm.close();
        raf.close();
    }
}
... this post is sponsored by my books ...

#1 New Release!

FP Best Seller

 

new blog posts

 

Copyright 1998-2021 Alvin Alexander, alvinalexander.com
All Rights Reserved.

A percentage of advertising revenue from
pages under the /java/jwarehouse URI on this website is
paid back to open source projects.