|
What this is
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 |
Copyright 1998-2024 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.