View Javadoc
1   /*
2    * Copyright (c) 1997, 2012, Oracle and/or its affiliates. All rights reserved.
3    * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4    *
5    * This code is free software; you can redistribute it and/or modify it
6    * under the terms of the GNU General Public License version 2 only, as
7    * published by the Free Software Foundation.  Oracle designates this
8    * particular file as subject to the "Classpath" exception as provided
9    * by Oracle in the LICENSE file that accompanied this code.
10   *
11   * This code is distributed in the hope that it will be useful, but WITHOUT
12   * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
13   * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
14   * version 2 for more details (a copy is included in the LICENSE file that
15   * accompanied this code).
16   *
17   * You should have received a copy of the GNU General Public License version
18   * 2 along with this work; if not, write to the Free Software Foundation,
19   * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
20   *
21   * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
22   * or visit www.oracle.com if you need additional information or have any
23   * questions.
24   */
25  
26  package com.sun.xml.internal.ws.spi.db;
27  
28  import java.lang.reflect.Type;
29  
30  //TODO SOAPVersion WebServiceFeatureList
31  import com.sun.xml.internal.bind.util.Which;
32  
33  //TODO Packet AbstractMessageImpl
34  import com.sun.xml.internal.bind.marshaller.SAX2DOMEx;
35  
36  //TODO DOMHeader DOMMessage SAAJMessage StatefulInstanceResolver
37  import com.sun.xml.internal.bind.unmarshaller.DOMScanner;
38  
39  //TODO MtomCodec
40  import com.sun.xml.internal.bind.v2.runtime.output.Encoded;
41  
42  //TODO ExceptionBean
43  import com.sun.xml.internal.bind.marshaller.NamespacePrefixMapper;
44  
45  //TODO AbstractWrapperBeanGenerator
46  import com.sun.xml.internal.bind.v2.model.annotation.AnnotationReader;
47  import com.sun.xml.internal.bind.v2.model.annotation.RuntimeInlineAnnotationReader;
48  import com.sun.xml.internal.bind.v2.model.nav.Navigator;
49  
50  //TODO WSDLGenerator
51  import static com.sun.xml.internal.bind.v2.schemagen.Util.*;
52  
53  import com.sun.xml.internal.bind.api.impl.NameConverter;
54  import com.sun.xml.internal.bind.v2.model.nav.Navigator;
55  
56  import com.sun.istack.internal.NotNull;
57  import com.sun.istack.internal.Nullable;
58  /**
59   * BindingHelper
60   *
61   * @author shih-chang.chen@oracle.com
62   */
63  public class BindingHelper {
64      /**
65       * Computes a Java identifier from a local name.
66       *
67       * <p>
68       * This method faithfully implements the name mangling rule as specified in the JAXB spec.
69       *
70       * <p>
71       * In JAXB, a collision with a Java reserved word (such as "return") never happens.
72       * Accordingly, this method may return an identifier that collides with reserved words.
73       *
74       * <p>
75       * Use <tt>JJavaName.isJavaIdentifier(String)</tt> to check for such collision.
76       *
77       * @return
78       *      Typically, this method returns "nameLikeThis".
79       */
80      public static @NotNull String mangleNameToVariableName(@NotNull String localName) {
81          return NameConverter.standard.toVariableName(localName);
82      }
83  
84      /**
85       * Computes a Java class name from a local name.
86       *
87       * <p>
88       * This method faithfully implements the name mangling rule as specified in the JAXB spec.
89       *
90       * @return
91       *      Typically, this method returns "NameLikeThis".
92       */
93      public static @NotNull String mangleNameToClassName(@NotNull String localName) {
94          return NameConverter.standard.toClassName(localName);
95      }
96  
97      /**
98       * Computes a Java class name from a local name.
99       *
100      * <p>
101      * This method faithfully implements the name mangling rule as specified in the JAXB spec.
102      * This method works like {@link #mangleNameToClassName(String)} except that it looks
103      * for "getClass" and returns something else.
104      *
105      * @return
106      *      Typically, this method returns "NameLikeThis".
107      */
108     public static @NotNull String mangleNameToPropertyName(@NotNull String localName) {
109         return NameConverter.standard.toPropertyName(localName);
110     }
111 
112     /**
113      * Gets the parameterization of the given base type.
114      *
115      * <p>
116      * For example, given the following
117      * <pre><xmp>
118      * interface Foo<T> extends List<List<T>> {}
119      * interface Bar extends Foo<String> {}
120      * </xmp></pre>
121      * This method works like this:
122      * <pre><xmp>
123      * getBaseClass( Bar, List ) = List<List<String>
124      * getBaseClass( Bar, Foo  ) = Foo<String>
125      * getBaseClass( Foo<? extends Number>, Collection ) = Collection<List<? extends Number>>
126      * getBaseClass( ArrayList<? extends BigInteger>, List ) = List<? extends BigInteger>
127      * </xmp></pre>
128      *
129      * @param type
130      *      The type that derives from {@code baseType}
131      * @param baseType
132      *      The class whose parameterization we are interested in.
133      * @return
134      *      The use of {@code baseType} in {@code type}.
135      *      or null if the type is not assignable to the base type.
136      * @since 2.0 FCS
137      */
138     public static @Nullable Type getBaseType(@NotNull Type type, @NotNull Class baseType) {
139         return Utils.REFLECTION_NAVIGATOR.getBaseClass(type,baseType);
140     }
141 
142     public static <T> Class<T> erasure(Type t) {
143         return (Class<T>) Utils.REFLECTION_NAVIGATOR.erasure(t);
144     }
145 }