Package org.apache.muse.ws.resource.properties.impl

Source Code of org.apache.muse.ws.resource.properties.impl.WsrpUtils

/*
* 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 org.apache.muse.ws.resource.properties.impl;

import java.lang.reflect.Array;

import javax.xml.namespace.QName;

import org.w3c.dom.Element;
import org.w3c.dom.Node;

import org.apache.muse.core.serializer.Serializer;
import org.apache.muse.core.serializer.SerializerRegistry;
import org.apache.muse.util.messages.Messages;
import org.apache.muse.util.messages.MessagesFactory;
import org.apache.muse.util.xml.XmlUtils;
import org.apache.muse.ws.addressing.soap.SoapFault;
import org.apache.muse.ws.resource.properties.WsrpConstants;
import org.apache.muse.ws.wsdl.WsdlUtils;

/**
*
* WsrpUtils is a set of convenience methods related to WS-RP v1.2.
*
* @author Dan Jemiolo (danj)
*
*/

public class WsrpUtils
{
    //
    // Used to lookup all exception messages
    //
    private static Messages _MESSAGES = MessagesFactory.get(WsrpUtils.class);

    /**
     *
     * Uses one of Muse's registered Serializers to convert the given object
     * into an XML element.
     *
     * @param property
     *        The property value to serialize.
     *
     * @param type
     *        The type whose registered Serializer will be used to parse
     *        the property value.
     *
     * @param qname
     *        The QName of the XML element that will represent the
     *        property value.
     *
     * @return The POJO representation of the given property value.
     *
     * @throws SoapFault
     *         <ul>
     *         <li>If the value could not be serialized.</li>
     *         </ul>
     *
     */
    public static Element convertToElement(Object property, Class type, QName qname)
        throws SoapFault
    {
        SerializerRegistry registry = SerializerRegistry.getInstance();
        Serializer ser = registry.getSerializer(type);       
        return ser.toXML(property, qname);
    }
   
    /**
     *
     * Uses Muse's registered Serializers to convert the given objects
     * into XML elements.
     *
     * @param properties
     *        The property values to serialize.
     *
     * @param type
     *        The type whose registered Serializer will be used to parse
     *        the property values.
     *
     * @param qname
     *        The QName of the XML elements that will represent the
     *        property values.
     *
     * @return An array with the POJO representation of the given property
     *         values. The array will be the same length as the one given.
     *         The order of the objects will be the same as the order of the
     *         values.
     *
     * @throws SoapFault
     *         <ul>
     *         <li>If any of the values could not be serialized.</li>
     *         </ul>
     *
     */
    public static Element[] convertToElements(Object[] properties, Class type, QName qname)
        throws SoapFault
    {
        SerializerRegistry registry = SerializerRegistry.getInstance();
        Serializer ser = registry.getSerializer(type);       
        Element[] xml = new Element[properties.length];
       
        for (int n = 0; n < properties.length; ++n)
            xml[n] = ser.toXML(properties[n], qname);
       
        return xml;
    }

    /**
     *
     * Uses one of Muse's registered Serializers to convert the given Element
     * into an instance of the given type.
     *
     * @param property
     *        The property value to deserialize.
     *
     * @param type
     *        The type whose registered Serializer will be used to parse
     *        the property value.
     *
     * @return The POJO representation of the given property value.
     *
     * @throws SoapFault
     *         <ul>
     *         <li>If the value could not be deserialized.</li>
     *         </ul>
     *
     */
    public static Object convertToObject(Element property, Class type)
        throws SoapFault
    {
        SerializerRegistry registry = SerializerRegistry.getInstance();
        Serializer deser = registry.getSerializer(type);
        return deser.fromXML(property);
    }

    /**
     *
     * Uses Muse's registered Serializers to convert the given Elements
     * into instances of the given type.
     *
     * @param properties
     *        The property values to deserialize.
     *
     * @param type
     *        The type whose registered Serializer will be used to parse
     *        the property values.
     *
     * @return An array with the POJO representation of the given property
     *         values. The array will be the same length as the one given.
     *         The order of the objects will be the same as the order of the
     *         values.
     *
     * @throws SoapFault
     *         <ul>
     *         <li>If any of the values could not be deserialized.</li>
     *         </ul>
     *
     */
    public static Object convertToObjects(Element[] properties, Class type)
        throws SoapFault
    {
        SerializerRegistry registry = SerializerRegistry.getInstance();
        Serializer deser = registry.getSerializer(type);
       
        Object objects = Array.newInstance(type, properties.length);
       
        for (int n = 0; n < properties.length; ++n)
            Array.set(objects, n, deser.fromXML(properties[n]));
       
        return objects;
    }

    /**
     *
     * Searches a WSDL document for the schema element name of a resource's
     * WS-RP document. The WS-RP document is defined in the WSDL's <em>types</em>
     * section and is an aggregate properties defined in other schemas (all
     * properties listed in the WS-RP definition use the <em>ref</em> attribute
     * to refer to their complete type definitions).
     *
     * @param wsdl
     *        The WSDL document that contains the WS-RP definition.
     *
     * @param portType
     *        The WSDL portType that has the name of the WS-RP definition.
     *
     * @return The QName of the WS-RP document element in <types/>. This element
     *         is a sequence of other XSD elements that use the <em>ref</em>
     *         attribute to define their types.
     *        
     * @see WsdlUtils#getElementDeclaration(Node, QName)
     *
     */
    public static QName getPropertiesName(Node wsdl, QName portType)
    {
        if (wsdl == null)
            throw new NullPointerException(_MESSAGES.get("NullWSDLDocument"));
       
        //
        // get the resource's portType from the WSDL
        //
        Element portTypeXML = WsdlUtils.getPortType(wsdl, portType);
       
        if (portTypeXML == null)
            throw new RuntimeException(_MESSAGES.get("NoPortTypesFound"));
       
        //
        // get the name of the WS-RP element
        //
        String definitionName =
            portTypeXML.getAttributeNS(WsrpConstants.NAMESPACE_URI, WsrpConstants.RESOURCE_PROPERTIES);
       
        if (definitionName == null || definitionName.length() == 0)
            throw new RuntimeException(_MESSAGES.get("NoPropertiesAttribute"));
       
        return XmlUtils.parseQName(definitionName, portTypeXML);
    }
}
TOP

Related Classes of org.apache.muse.ws.resource.properties.impl.WsrpUtils

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.