Axis開発webserviceの簡単な例


blog移行先:
http://www.micmiu.com
本稿は主にAxis開発webserviceの簡単な例の詳細なプロセスとステップを記録する.
Axis公式サイト:
http://ws.apache.org/axis/
最新の1.4のカバンは公式サイトでダウンロードできます.
axis-bin-1_4.zip
解凍後の
axis-1_4\webapps\下のaxisディレクトリは%TOMCATまでテストしました.HOME%/Webapps/カタログ下
tomcatを起動してブラウザに入力します.
http://localhost:8082/axis下図のように見えます(ps:本人のtomcatポートは8082です)
Axis开发webservice的简单实例
上の図のをクリックしてください
Validatoainリンクは、ページ上ですでにあるカバンと足りないカバンの情報を提示します.ヒントによって必要なカバンを全部ダウンロードして、これらの種類のカバンをコピーします.
%tomcathome%/webapps/axis/WEB-INF/lib/ディレクトリの下でtomcatを再起動して、ValidationページではErrとWarningのメッセージが見えなくなるまで.
ヒントが足りない場合
xmlsec.jarに行けます
http://santuario.apache.org/dist/java-library/ダウンロード
Axisは三つのウェブserviceをサポートするクライアントアクセス方式で、それぞれ:
  • Dynamic Invocation Interface(DII)
  • Dynamic Proxy方式
  • Stubs方式
  • PS:多くの資料を見て、上記の方式をWeb Servcieの3つの「配置と開発方法は、個人的には妥当ではないと思います.
    axisの展開とweb serviceを発表する方法を紹介します.
    一、JWS
    JWS(Java Web Service)は、最も簡単な方法です.Axisは、通常のJava類のソースファイルの拡張子を.jwsに変更し、簡単なcopyをAXIS uHOMEに変更することができます.このようにAxisは自動的にコンパイルします.jwsファイルは、自動的にJava Web Servieのサービスに追加されます.具体的なプロセスは以下の通りです.
        1.Eclipseまたはテキストエディタでjava類SayHello.java(
    この類にはパッケージ名が含まれていません)
    public class SayHello{
    	public String sayMsg(String name){
    		return "Hello,"+name;
    	}
    }
       2.上のクラス(SayHello.java)のcopyを%tomcathomes/webapps/axis/カタログの下に、クラスのソースファイルだけが必要です.
    このディレクトリに来たクラスではなく、名前を変更します.
    SayHello.jws
       3.ブラウザの入力を開く:http://localhost:8082/axis/SayHello.jws 見えます

    上の図Click to see the WSDLのリンクをクリックすると、生成したwsdlが見られます.
       4.クライアント
    Dynamic Invocation Interface(DII)方式は以下のように実現されています.
    import org.apache.axis.client.Call;
    import org.apache.axis.client.Service;
    
    /**
     * axis client
     * @author Michael sun
     */
    public class TestClient {
    
        /**
         * @param args
         * @throws Exception
         */
        public static void main(String[] args) throws Exception {
            String wsdlUrl = "http://localhost:8082/axis/SayHello.jws";
            // String wsdlUrl=”http://localhost:8080/axis/SayHello.jws?wsdl”
            Service s = new Service();
            Call call = (Call) s.createCall();
            call.setOperationName("sayMsg");//           
            call.setTargetEndpointAddress(wsdlUrl);//      wsdl
            String val = (String) call.invoke(new Object[] { "My Michael Sun" });
            System.out.println("  webservice        :" + val);
        }
    }
       5.クライアント
    Dynamic Proxy方式は以下の通り実現される.
     
    public interface SayHelloInterface extends java.rmi.Remote {
    
        public String sayMsg(String name) throws java.rmi.RemoteException;
    
    }
    import java.net.URL;
    
    import javax.xml.namespace.QName;
    import javax.xml.rpc.Service;
    import javax.xml.rpc.ServiceFactory;
    
    /**
     * test Dynamic Proxy client
     * @author Michael sun
     */
    public class TestProxyClient {
    
        /**
         * @param args
         * @throws Exception
         */
        public static void main(String[] args) throws Exception {
            String wsdlname = "http://localhost:8088/axis/SayHello.jws?wsdl";
            //     
            String namespaceUrl = "http://localhost:8088/axis/SayHello.jws";
            //    
            String serviceName = "SayHelloService";
            //   
            String portName = "SayHello";
            //       
            ServiceFactory service = ServiceFactory.newInstance();
            //       
            Service s = service.createService(new URL(wsdlname), new QName(
                    namespaceUrl, serviceName));
    
            SayHelloInterface proxy = (SayHelloInterface) s.getPort(new QName(
                    namespaceUrl, portName), SayHelloInterface.class);
            System.out.println(proxy.sayMsg("Blue boy!"));
        }
    }
    
    二、WSDD(Web Service Deployment Descriptor)ファイルリリースWeb Service
        1.カスタムパラメータbeanとserverのコードは以下の通りです.
       
    package wsaxis.bean;
    
    /**
     * bean
     * @author Michael sun
     */
    public class UserBean {
    
        private String userName;
    
        private Integer age;
    
        /**
         * @return the userName
         */
        public String getUserName() {
            return userName;
        }
    
        /**
         * @return the age
         */
        public Integer getAge() {
            return age;
        }
    
        /**
         * @param pUserName the userName to set
         */
        public void setUserName(String pUserName) {
            userName = pUserName;
        }
    
        /**
         * @param pAge the age to set
         */
        public void setAge(Integer pAge) {
            age = pAge;
        }
    
    }
    
    package wsaxis;
    
    import wsaxis.bean.UserBean;
    
    /**
     * axis server
     * @author Michael sun
     */
    public class MessageService {
    
        /**
         * getBeanStr
         * @param bean
         * @return String
         */
        public String getBeanStr(UserBean bean) {
            return "You Name:" + bean.getUserName() + " , You Age:" + bean.getAge();
        }
    
        /**
         * checkUser
         * @param bean
         * @return String
         */
        public String checkUser(UserBean bean) {
            if ("Michael".equals(bean.getUserName())) {
                return "Michael welcome to axis ";
            } else {
                return bean.getUserName() + " can't access this ws";
            }
    
        }
    
    }
    
        2.deploy.wsddとundeploy.wddファイルの作成は以下の通りである.
        WSDDファイルの説明は参照できます.
    http://www.oio.de/axis-wsdd/
    <deployment name="test" xmlns="http://xml.apache.org/axis/wsdd/" 
        xmlns:java="http://xml.apache.org/axis/wsdd/providers/java">
      <service name="MessageService" provider="java:RPC" style="rpc" use="encoded">
        <parameter name="className" value="wsaxis.MessageService"/>
        <parameter name="allowedMethods" value="*"/>
     		<typeMapping xmlns:ns1="http://wsaxis.michael.com" qname="ns1:userBean" 
     			type="java:wsaxis.bean.UserBean"
     			serializer="org.apache.axis.encoding.ser.BeanSerializerFactory"
     			deserializer="org.apache.axis.encoding.ser.BeanDeserializerFactory"
    	    encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"
    	   />
      </service>
    </deployment>
    
    <undeployment
        xmlns="http://xml.apache.org/axis/wsdd/">
      <!-- Services from MessageService WSDL service -->
      <service name="MessageService"/>
    </undeployment>
       3.上に書いた二つのクラスのクラスのクラスをコピーします.
    %tomcat%/axis/WEB-INF/class/ディレクトリの下で、完全なディレクトリ構造をコピーして、二つのwsddファイルをコピーします.
    %tomcats%/axis/WEB-INF/ディレクトリの下で、コンソールを開けて%tomcatHome%/axis/WEB-INF/ディレクトリの下に入ります.
    >java-Djava.ext.dirs=lib org.apache.axis.client.AdminClint-p 8082 deploy.wdd
        -sパラメータはAxisServletがあるアプリケーションパスを指定しています.
    >java-Djava.ext.dirs=lib org.apache.axis.client.AdminClint-p 8082-s/axis/servlet/AxisServlet deploy.wdd
       -lパラメータ指定先アプリケーションのURL
    >java-Djava.ext.dirs=lib org.apache.axis.client.AdminClint–lhttp://localhost:8082/axis/services/MessageService deploy.wsdd
    このコマンドはこのサービスをリリースします.成功したらコンソールの下でヒントがあります.
    Processing file deploy.wsdd
    <Admin>Dune processing
    同時に発表した後に%tomcathome%/axis/目次の下でできて、もう一つのserver-config.wddファイルがあります.
    ブラウザに入力:http://localhost:8082/axis/services/MessageService下の図が見えます
    Axis开发webservice的简单实例
      5.clientの生成方法:
      コンソールを開いて入る
    %tomcat%/axis/WEB-INF/ディレクトリの下:
    >java-Djava.ext.dirs=lib org.apache.axis.wsdl.WSDL 2 Java-p clienthttp://localhost:8082/axis/services/MessageService?wsdl
    現在のディレクトリの下でclientフォルダを作成します.このディレクトリのファイルはクライアントのソースです.
      6.WSDDファイルを通じてリリースされたwebserviceをアンインストールする:
      コンソールを開いて入る
    %tomcat%/axis/WEB-INF/ディレクトリの下:
    >java-Djava.ext.dirs=lib org.apache.axis.client.AdminClint undeploy.wdd
    デフォルト8080ポートでない場合はパラメータ-pを追加する必要があります.
    >java-Djava.ext.dirs=lib org.apache.axis.client.AdminClint-p 8082 undeploy.wdd
    PS:java-Djava.ext.dirs=libもjava-cp"lib\*"を使うことができます.
      7.クライアントのStubs方式は以下の通り実現される.
    import java.net.URL;
    
    import javax.xml.namespace.QName;
    
    import org.apache.axis.client.Call;
    import org.apache.axis.client.Service;
    import org.apache.axis.encoding.ser.BeanDeserializerFactory;
    import org.apache.axis.encoding.ser.BeanSerializerFactory;
    
    import stubclient.UserBean;
    
    /**
     * test stub client
     * @author Michael sun
     */
    public class TestStubClient {
    
        /**
         * @param args
         * @throws Exception
         */
        public static void main(String[] args) throws Exception {
            QName qname = new QName("http://wsaxis.michael.com", "user");
            Service s = new Service();
            Call call = (Call) s.createCall();
            //     bean      .    
            call.registerTypeMapping(UserBean.class, qname,
                    new BeanSerializerFactory(UserBean.class, qname),
                    new BeanDeserializerFactory(UserBean.class, qname));
            //          .
            call.setOperationName("getBeanStr");
    
            //              .
            call.setTargetEndpointAddress(new URL(
                    "http://localhost:8082/axis/services/MessageService?wsdl"));
            //      UserBean,  UserBean   client UserBean
            UserBean u = new UserBean();
            u.setAge(28);
            u.setUserName("Michael");
            //     ,     
            String str = (String) call.invoke(new Object[] { u });
    
            System.out.println("web service     :" + str);
    
        }
    
    }