1 package org.seasar.remoting.axis.connector;
2
3 import java.lang.reflect.Method;
4 import java.net.URL;
5
6 import javax.xml.namespace.QName;
7 import javax.xml.rpc.Call;
8 import javax.xml.rpc.Service;
9 import javax.xml.rpc.encoding.TypeMapping;
10
11 import org.apache.axis.constants.Use;
12 import org.apache.axis.encoding.TypeMappingDelegate;
13 import org.apache.axis.encoding.TypeMappingRegistry;
14 import org.seasar.remoting.axis.S2AxisConstants;
15 import org.seasar.remoting.common.connector.impl.TargetSpecificURLBasedConnector;
16
17 /***
18 * Webサービスを呼び出すコネクタの実装クラスです。
19 *
20 * @author koichik
21 */
22 public class AxisConnector extends TargetSpecificURLBasedConnector {
23 protected Service service;
24
25 /***
26 * Axisサービスを設定します。
27 *
28 * @param service
29 * Axisサービス
30 */
31 public void setService(final Service service) {
32 this.service = service;
33
34 final TypeMappingRegistry tmr = (TypeMappingRegistry) service.getTypeMappingRegistry();
35 TypeMapping tm = tmr.getTypeMapping(Use.DEFAULT.getEncoding());
36 ((TypeMappingDelegate) tm).setDoAutoTypes(true);
37 }
38
39 /***
40 * Axisサービスを使用してリモートメソッドの呼び出しを実行し、その結果を返します。
41 *
42 * @param targetURL
43 * リモートオブジェクトのURL
44 * @param method
45 * 呼び出すメソッド
46 * @param args
47 * リモートオブジェクトのメソッド呼び出しに渡される引数値を格納するオブジェクト配列
48 * @return リモートオブジェクトに対するメソッド呼び出しからの戻り値
49 * @throws Throwable
50 * リモートオブジェクトに対するメソッド呼び出しからスローされる例外
51 */
52 protected Object invoke(final URL targetURL, final Method method, final Object[] args)
53 throws Throwable {
54 final Call call = service.createCall();
55 call.setTargetEndpointAddress(targetURL.toString());
56 call.setOperationName(new QName(S2AxisConstants.OPERATION_NAMESPACE_URI, method.getName()));
57 return call.invoke(args);
58 }
59 }