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.connector; 47 48 import java.lang.reflect.Method; 49 import java.net.URL; 50 51 import javax.xml.namespace.QName; 52 import javax.xml.rpc.Call; 53 import javax.xml.rpc.Service; 54 import javax.xml.rpc.encoding.TypeMapping; 55 56 import org.apache.axis.constants.Use; 57 import org.apache.axis.encoding.TypeMappingDelegate; 58 import org.apache.axis.encoding.TypeMappingRegistry; 59 import org.seasar.remoting.axis.S2AxisConstants; 60 import org.seasar.remoting.common.connector.impl.TargetSpecificURLBasedConnector; 61 62 /*** 63 * Webサービスを呼び出すS2Remotingコネクタの実装クラスです。 64 * 65 * @author koichik 66 */ 67 public class AxisConnector extends TargetSpecificURLBasedConnector { 68 //instance fields 69 protected Service service; 70 71 /*** 72 * Axisサービスを設定します。 73 * 74 * @param service 75 * Axisサービス 76 */ 77 public void setService(final Service service) { 78 this.service = service; 79 80 final TypeMappingRegistry tmr = (TypeMappingRegistry) service.getTypeMappingRegistry(); 81 TypeMapping tm = tmr.getTypeMapping(Use.DEFAULT.getEncoding()); 82 ((TypeMappingDelegate) tm).setDoAutoTypes(true); 83 } 84 85 /*** 86 * Axisサービスを使用してリモートメソッドの呼び出しを実行し、その結果を返します。 87 * 88 * @param targetURL 89 * リモートオブジェクトのURL 90 * @param method 91 * 呼び出すメソッド 92 * @param args 93 * リモートオブジェクトのメソッド呼び出しに渡される引数値を格納するオブジェクト配列 94 * @return リモートオブジェクトに対するメソッド呼び出しからの戻り値 95 * @throws Throwable 96 * リモートオブジェクトに対するメソッド呼び出しからスローされる例外 97 */ 98 protected Object invoke(final URL targetURL, final Method method, final Object[] args) 99 throws Throwable { 100 final Call call = service.createCall(); 101 call.setTargetEndpointAddress(targetURL.toString()); 102 call.setOperationName(new QName(S2AxisConstants.OPERATION_NAMESPACE_URI, method.getName())); 103 return call.invoke(args); 104 } 105 }