View Javadoc

    1   /*
    2    *
    3    * The Seasar Software License, Version 1.1
    4    *
    5    * Copyright (c) 2003-2004 The Seasar Project. All rights reserved.
    6    *
    7    * Redistribution and use in source and binary forms, with or
    8    * without modification, are permitted provided that the following
    9    * conditions are met:
    10   *
    11   * 1. Redistributions of source code must retain the above
    12   *    copyright notice, this list of conditions and the following
    13   *    disclaimer.
    14   *
    15   * 2. Redistributions in binary form must reproduce the above
    16   *    copyright notice, this list of conditions and the following
    17   *    disclaimer in the documentation and/or other materials provided
    18   *    with the distribution.
    19   *
    20   * 3. The end-user documentation included with the redistribution,
    21   *    if any, must include the following acknowledgement:
    22   *    "This product includes software developed by the
    23   *    Seasar Project (http://www.seasar.org/)."
    24   *    Alternately, this acknowledgement may appear in the software
    25   *    itself, if and wherever such third-party acknowledgements
    26   *    normally appear.
    27   *
    28   * 4. Neither the name "The Seasar Project" nor the names of its
    29   *    contributors may be used to endorse or promote products derived
    30   *    from this software without specific prior written permission of
    31   *    the Seasar Project.
    32   *
    33   * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR
    34   * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
    35   * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
    36   * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE SEASAR PROJECT
    37   * OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
    38   * INCIDENTAL,SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
    39   * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
    40   * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
    41   * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
    42   * WHETHER IN CONTRACT, STRICT LIABILITY,OR TORT (INCLUDING
    43   * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
    44   * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    45   */
    46  package org.seasar.remoting.axis.encoding;
    47
    48  import javax.xml.namespace.QName;
    49
    50  import org.apache.axis.encoding.TypeMapping;
    51  import org.apache.axis.encoding.TypeMappingImpl;
    52  import org.apache.axis.wsdl.toJava.Utils;
    53  import org.seasar.framework.util.ClassUtil;
    54
    55  /***
    56   * Java型とXML型のマッピングが未定義の場合に自動登録するタイプマッピングの実装です。 <br>
    57   * Java型からXML型へのタイプマッピングの自動登録はスーパークラスの機能(デフォルトでは無効にされています)をそのまま使います。
    58   *
    59   * @author koichik
    60   */
    61  public class AutoRegisterTypeMappingImpl extends TypeMappingImpl {
    62      /***
    63       * 自動登録を有効にしてインスタンスを構築します。
    64       *
    65       * @param delegate
    66       *            委譲先のタイプマッピング
    67       */
    68      public AutoRegisterTypeMappingImpl(final TypeMapping delegate) {
    69          super(delegate);
    70          setDoAutoTypes(true);
    71      }
    72
    73      /***
    74       * XML型に対応するJava型を返します。 <br>
    75       * 指定のXML型がマッピングに登録されていなければ、XML型から変換したJava型の名前でスーパークラスから検索することにより、タイプマッピングが自動登録されます。
    76       *
    77       * @param xmlType
    78       *            XML型
    79       * @return Java型
    80       */
    81      public Class getClassForQName(final QName xmlType) {
    82          if (xmlType == null) {
    83              return null;
    84          }
    85
    86          Class javaType = super.getClassForQName(xmlType);
    87          if (javaType != null) {
    88              return javaType;
    89          }
    90
    91          final</strong> String packageName = Utils.makePackageName(xmlType.getNamespaceURI());
    92          final String className = xmlType.getLocalPart();
    93          try {
    94              javaType = ClassUtil.forName(packageName + "." + className);
    95          }
    96          catch (final Exception ignore) {
    97              return null;
    98          }
    99
    100         getTypeQName(javaType);
    101         return javaType;
    102     }
    103 }