001    /*
002     * Licensed to the Apache Software Foundation (ASF) under one
003     * or more contributor license agreements.  See the NOTICE file
004     * distributed with this work for additional information
005     * regarding copyright ownership.  The ASF licenses this file
006     * to you under the Apache License, Version 2.0 (the
007     * "License"); you may not use this file except in compliance
008     * with the License.  You may obtain a copy of the License at
009     *
010     *  http://www.apache.org/licenses/LICENSE-2.0
011     *
012     * Unless required by applicable law or agreed to in writing,
013     * software distributed under the License is distributed on an
014     * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
015     * KIND, either express or implied.  See the License for the
016     * specific language governing permissions and limitations
017     * under the License.
018     */
019    
020    package javax.xml.rpc.encoding;
021    
022    import javax.xml.namespace.QName;
023    
024    /**
025     * The <code>javax.xml.rpc.encoding.TypeMapping</code> is the base
026     * interface for the representation of a type mapping. A TypeMapping
027     * implementation class may support one or more encoding styles.
028     * <p>
029     * For its supported encoding styles, a TypeMapping instance
030     * maintains a set of tuples of the type {Java type,
031     * <code>SerializerFactory</code>,
032     * <code>DeserializerFactory</code>, XML type}.
033     *
034     * @version $Rev: 467553 $ $Date: 2006-10-25 00:01:51 -0400 (Wed, 25 Oct 2006) $
035     */
036    public interface TypeMapping {
037    
038        /**
039         * Returns the encodingStyle URIs (as String[]) supported by
040         * this TypeMapping instance. A TypeMapping that contains only
041         * encoding style independent serializers and deserializers
042         * returns <code>null</code> from this method.
043         *
044         * @return  Array of encodingStyle URIs for the supported
045         *    encoding styles
046         */
047        public String[] getSupportedEncodings();
048    
049        /**
050         * Sets the encodingStyle URIs supported by this TypeMapping
051         * instance. A TypeMapping that contains only encoding
052         * independent serializers and deserializers requires
053         * <code>null</code> as the parameter for this method.
054         *
055         * @param encodingStyleURIs Array of encodingStyle URIs for the
056         * supported encoding styles
057         */
058        public void setSupportedEncodings(String[] encodingStyleURIs);
059    
060        /**
061         * Checks whether or not type mapping between specified XML
062         * type and Java type is registered.
063         *
064         * @param javaType Class of the Java type
065         * @param xmlType Qualified name of the XML data type
066         * @return boolean; <code>true</code> if type mapping between the
067         *      specified XML type and Java type is registered;
068         *      otherwise <code>false</code>
069         */
070        public boolean isRegistered(Class javaType, QName xmlType);
071    
072        /**
073         * Registers SerializerFactory and DeserializerFactory for a
074         * specific type mapping between an XML type and Java type.
075         * This method replaces any existing registered SerializerFactory
076         * DeserializerFactory instances.
077         *
078         * @param javaType Class of the Java type
079         * @param xmlType Qualified name of the XML data type
080         * @param sf SerializerFactory
081         * @param dsf DeserializerFactory
082         *
083         * @throws javax.xml.rpc.JAXRPCException if there are any errors that
084         *              prevent registration
085         */
086        public void register(Class javaType, QName xmlType, SerializerFactory sf,
087                             DeserializerFactory dsf);
088    
089        /**
090         * Gets the SerializerFactory registered for the specified
091         * pair of Java type and XML data type.
092         *
093         * @param javaType Class of the Java type
094         * @param xmlType Qualified name of the XML data type
095         *
096         * @return Registered SerializerFactory or <code>null</code>
097         *    if there is no registered factory
098         */
099        public SerializerFactory getSerializer(Class javaType, QName xmlType);
100    
101        /**
102         * Gets the DeserializerFactory registered for the specified pair
103         * of Java type and XML data type.
104         *
105         * @param javaType Class of the Java type
106         * @param xmlType Qualified name of the XML data type
107         *
108         * @return Registered SerializerFactory or <code>null</code>
109         *     if there is no registered factory
110         */
111        public DeserializerFactory getDeserializer(Class javaType, QName xmlType);
112    
113        /**
114         * Removes the SerializerFactory registered for the specified
115         * pair of Java type and XML data type.
116         *
117         * @param javaType Class of the Java type
118         * @param xmlType Qualified name of the XML data type
119         *
120         * @throws javax.xml.rpc.JAXRPCException if there is any error that prevents
121         *              removal of the registered SerializerFactory
122         */
123        public void removeSerializer(Class javaType, QName xmlType);
124    
125        /**
126         * Removes the DeserializerFactory registered for the specified
127         * pair of Java type and XML data type.
128         *
129         * @param javaType Class of the Java type
130         * @param xmlType Qualified name of the XML data type
131         *
132         * @throws javax.xml.rpc.JAXRPCException if there is any error in removing
133         *              the registered DeserializerFactory
134         */
135        public void removeDeserializer(Class javaType, QName xmlType);
136    }
137