Package com.cloud.bridge.io

Source Code of com.cloud.bridge.io.MTOMAwareResultStreamWriter

// 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 com.cloud.bridge.io;

import java.io.IOException;
import java.io.OutputStream;

import javax.xml.XMLConstants;
import javax.xml.namespace.QName;
import javax.xml.stream.XMLOutputFactory;
import javax.xml.stream.XMLStreamException;
import javax.xml.stream.XMLStreamWriter;

import org.apache.axiom.om.OMAbstractFactory;
import org.apache.axiom.om.OMFactory;
import org.apache.axis2.databinding.ADBBean;
import org.apache.axis2.databinding.ADBException;
import org.apache.axis2.databinding.utils.writer.MTOMAwareXMLSerializer;

/**
* Provide an MTOM aware serializable output stream writer to be consumed by implementors of the
* com.amazon.s3 Response ADB bean classes.
* This writer enables participation is StaX based builders and AXIOM om xml stream processing
* An instance of a MTOMAwareResultStreamWriter is a convenient argument to a com.amazon.s3 Response bean, as generated
* from the Amazon S3 WSDL using
* wsdl2java.sh -ss -sd -ssi -g -p com.amazon.s3 -ns2p "http://s3.amazonaws.com/doc/2006-03-01/"=com.amazon.s3 -uri cloud-AmazonS3.wsdl
* Such a bean implements a serialize method of the form
*          public void serialize(qualifiedName,omfactory, xmlWriter)
* where
* @param qualifiedName is the XML qualified name of the parent
* @param omfactory is an implementor of the AXIOM object model interface
* @param xmlWriter is an implementor of XMLStxreamWriter for writing plain XML
* A convenience constructor of MTOMAwareResultStreamWriter is of the form
*          MTOMAwareResultStreamWriter(nameOfResult, outputStream)
* where
* @param nameOfResult is the name used for the root (parent) tag by the serialization bean
* @param outputStream is the (servlet) output stream into which the bytes are written
* Addtionally, as a side effect, ensure that the org.apache.axis2.databinding classes which serialize the
* output of each fields have been initialized to be aware of any custom classes which override the default
* output xsd converter methods of Axis2's databinding.  Such a custom class is notified to the ADB framework
* (via its org.apache.axis2.databinding.utils.ConverterUtil class) by setting a System property,
* SYSTEM_PROPERTY_ADB_CONVERTERUTIL to name the custom class.
*/
public class MTOMAwareResultStreamWriter {

    // Standard XML prolog to add to the beginning of each XML document.
    public static final String XMLPROLOG = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>";
    private static final byte[] XMLPROLOGBYTES = XMLPROLOG.getBytes();

    // The XML namespace used in documents transported to and from the service
    public static final String S3XMLNS = "http://s3.amazonaws.com/doc/2006-03-01/";
    // Prefix to use to represent the default XML Namespace, defined by the Namespaces in XML 3 spec to be ""
    public static final String DEFAULT_NS_PREFIX = XMLConstants.DEFAULT_NS_PREFIX;

    private XMLStreamWriter xmlWriter = null;

    private MTOMAwareXMLSerializer mtomWriter = null;

    // A default instance of AXIOM object model factory suitable for constructing plain XML
    private OMFactory omfactory = OMAbstractFactory.getOMFactory();

    // The qualified name for use in the XML schema as defined by http://www.w3.org/TR/xmlschema-2/#QName
    private QName qualifiedName = null;

    // Usually bound to a servlet output stream
    private OutputStream outputStream = null;

    // Set the system property to notify the ADB framework of its custom class for system-wide side effect
    // at time of initialization of this class (executed once in any JVM running this application)
    static {
        System.setProperty(org.apache.axis2.databinding.utils.ConverterUtil.SYSTEM_PROPERTY_ADB_CONVERTERUTIL, "com.cloud.bridge.util.DatabindingConverterUtil");
    }

    /*
     * @params
     * @param nameOfResult Used as the tag description of the result written out when the requester serializes
     * @param outputStream  The stream capable of sinking bytes written at the time the requester is ready to serialize,
     * assumed to be a ServletOutputStream
     * @param xmlOutputFactory  If passing a non-default factory, used to get an implementor of XmlStreamWriter
     * @throw XMLStreamException
     */
    public MTOMAwareResultStreamWriter(String nameOfResult, OutputStream outputStream, XMLOutputFactory xmlOutputFactory) throws XMLStreamException {
        this.outputStream = outputStream;
        // Create an implementor of xmlWriter for this instance
        xmlWriter = xmlOutputFactory.createXMLStreamWriter(outputStream);
        // Create an MTOM aware XML serializer for this instance
        // An MTOMAwareXMLSerializer wraps a xmlStreamWriter and implements writeDataHandler
        mtomWriter = new MTOMAwareXMLSerializer(xmlWriter);
        // Create a new qualified name passing in namespace URI (default), localpart, prefix (default)
        qualifiedName = new QName(S3XMLNS, nameOfResult, DEFAULT_NS_PREFIX);
    }

    /*
     * @params
     * @param nameOfResult Used as the tag description of the result written out when the requester serializes
     * @param outputStream  The stream capable of sinking bytes written at the time the requester is ready to serialize,
     * assumed to be a ServletOutputStream
     * Uses default implementor of XmlStreamWriter
     * @throw XMLStreamException
     */

    public MTOMAwareResultStreamWriter(String nameOfResult, OutputStream outputStream) throws XMLStreamException {
        this(nameOfResult, outputStream, XMLOutputFactory.newInstance());
    }

    // Housekeeping before consumption in a serialize call
    public void startWrite() throws IOException {
        outputStream.write(XMLPROLOGBYTES);

    }

    public void stopWrite() throws IOException, XMLStreamException {
        xmlWriter.flush();
        xmlWriter.close();
        outputStream.close();
    }

    // Cooperate with an instance of org.apache.axis2.databinding.ADBBean to provide serialization output of XML
    // An org.apache.axis2.databinding.ADBBean implements a serialize method which takes a QName and a XMLStreamWriter
    public void writeout(ADBBean dataBindingBean) throws ADBException, XMLStreamException {

        dataBindingBean.serialize(qualifiedName, omfactory, mtomWriter);
    }

}
TOP

Related Classes of com.cloud.bridge.io.MTOMAwareResultStreamWriter

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.