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 }