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.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 }