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
10 import org.apache.axis.encoding.TypeMappingRegistry;
11 import org.apache.axis.enum.Use;
12 import org.seasar.remoting.axis.S2AxisConstants;
13 import org.seasar.remoting.axis.encoding.AutoRegisterTypeMappingImpl;
14 import org.seasar.remoting.client.connector.impl.URLBasedConnector;
15
16 /***
17 * @author koichik
18 */
19 public class AxisConnector extends URLBasedConnector {
20 protected Service service;
21
22 /***
23 * Axisサービスを設定します。
24 *
25 * @param service Axisサービス
26 */
27 public void setService(final Service service) {
28 this.service = service;
29
30 final TypeMappingRegistry tmr = (TypeMappingRegistry) service.getTypeMappingRegistry();
31 if (!(tmr.getTypeMapping(Use.DEFAULT.getEncoding()) instanceof AutoRegisterTypeMappingImpl)) {
32 final AutoRegisterTypeMappingImpl autoTM = new AutoRegisterTypeMappingImpl(null);
33 tmr.register(Use.DEFAULT.getEncoding(), autoTM);
34 }
35 }
36
37 /***
38 * Axisサービスを使用してリモートメソッドの呼び出しを実行し、その結果を返します。
39 *
40 * @param targetURL
41 * リモートオブジェクトのURL
42 * @param method
43 * 呼び出すメソッド
44 * @param args
45 * リモートオブジェクトのメソッド呼び出しに渡される引数値を格納するオブジェクト配列
46 * @return リモートオブジェクトに対するメソッド呼び出しからの戻り値
47 * @throws Throwable
48 * リモートオブジェクトに対するメソッド呼び出しからスローされる例外
49 */
50 protected Object invoke(final URL targetURL, final Method method, final Object[] args) throws Throwable {
51 final Call call = service.createCall();
52 call.setTargetEndpointAddress(targetURL.toString());
53 call.setOperationName(new QName(S2AxisConstants.OPERATION_NAMESPACE_URI, method.getName()));
54 return call.invoke(args);
55 }
56 }