梓聪's profile传说中的16号PhotosBlogListsMore Tools Help

Blog


    January 13

    jws笔记(3)

    做service的业务的时候,必然是有好多类的,在服务端类Test.jws里面如何去调用这些类呢?
    只要把这些类编译完生成的class文件放到E:\tomcat4.1\webapps\axis\WEB-INF\classes下即可。打成jar包也行(没试过,应该好使,呵呵)。

    jws笔记(2)

    使用.Net来创建client也很简单,我使用C#。
    创建一个新的Windows应用,添加一个Label和一个Button,在参照的地方,添加一个web参照(Web Reference),在URL处输入http://localhost:8000/axis/Test.jws?wsdl,Web参照名输入wtest。
    Button的Click事件响应:
            private void button1_Click(object sender, System.EventArgs e)
            {
                // Create a TestService object
                wtest.TestService s = new wtest.TestService();
                
                try
                {
                    this.label1.Text = s.getPzc().ToString();
                }
                catch (System.Web.Services.Protocols.SoapException ex)
                {
                    MessageBox.Show(ex.Message);
                }
            }

    TestService定义在Reference.cs里面,TestService有各种接口。
    仔细看看\project\Web References\Reference.cs,会有很多发现

    jws的学习资料

    网上有好多学习的资料,备忘于此:
     
        ----IBM的,java作服务端,给出了VB和VC的client实现。
        ----最简单的server搭建,给出了简单的java的service和clent的实现。
        ----IBM的,相关知识的概念性的描述。
        ----某个人的Blog,里面有好多文章都不错(Java web service,Spring,Hibernate等等),很不错。

    jws笔记(1)

    在浏览器访问http://localhost:8000/axis/Test.jws?wsdl(或者访问http://localhost:8000/axis/Test.jws,然后点击页面下面的链接生成wsdl文件)这个的时候,页面响应的时候,会生成一个wsdl文件的内容,利用wsdl2java这个工具(Eclipse插件),可以跟据这个wsdl文件的内容生成4个java类(相当于客户端),可以进行调用。
    在用wsdl2java工具生成代码时,把刚才页面响应的wsdl文件内容拷贝另存为a.wsdl文件,值得注意的是,把xml头标签(<?xml ....?>)删除掉,把所有非ASCII删除掉,否则,生成代码会失败(会有提示)。
    生成的4个类,2个是interface,2个是实现类,很像EJB(不太懂)的那些interface和实现类,可能都是基于RMI(只知道名字的意思,哈哈)吧。以后再好好研究这些类
    使用那两个实现类去调用web service的方法:
        System.out.println(new TestSoapBindingStub(new java.net.URL(endpoint),new TestServiceLocator()).getName());
    其中:getName()是web service提供的一个方法。
    仔细看看这两个实现类的方法,会发现调用方式和那个简单的例子是很类似的,呵呵。
    ---------------------------------------------------------------------------------------------------------------------------
    纠正一下,并不一定生成4个类,更复杂的服务,可能会更多,但是***BindingStub.java和***Locator.java是主要关注的。

    如何开始一个Java web service?

    这是一个很不错的例子,简单易懂:
    这是那个例子的内容:
    Axis是Apache的一个开源web service引擎。它目前最为成熟的开源web service引擎之一。下面我主要介绍一下如何使用该Axis开发您的web service 服务。
      
      1、安装 
      以tomcat4.1为服务器,下面说明如何安装axis:
      
      1.解压下载后的包,将包中axis目录复制到tomcat目录下的webapps目录下;
      
      2.将axis/WEB-INF/lib目录下类文件复制到tomcat目录下的common/lib目录下;
      
      3.重新启动tomcat;
      
      4.访问http://localhost:8080/axis/happyaxis.jsp,如果能访问,表示安装成功;
      
      2、开发webservice服务
      
      a.编写普通类文件,如下所示:
      //文件名:Test.java
      import java.util.*;
      
      public class Test
      {
      //fields
      private String name="gaga";
      private int age=20;
      private List items=new ArrayList();
      
      
      //method at here.
      public String getName()
       {
      return name;
      }
      
      public int getAge()
       {
      return age;
      }
      
      public List getItems()
       {
      return items;
      }
      }
      将本文件(Test.java)复制到Axis目录下,并将其更名为Test.jws; 
      
      b.访问http://localhost:8080/axis/Test.jws,Axis就会编译该文件,并将其部署到系统中,下面你就可以开发web service的客户端程序了; 
      
      3、开发客户端程序 
      
      下面是客户端程序:
      import org.apache.axis.client.*;
      import org.apache.axis.client.Call;
      import org.apache.axis.client.Service;
      
      import javax.xml.namespace.QName;
      
      
      public class TestWebService
      {
      
      public static void main(String args[])
       {
      
      System.out.println("Start invoking....");
      
      try {
      String endpoint =
      "http://localhost:8080/axis/Test.jws";
      //你写的那个文件
      Service service = new Service();
      Call call = (Call)
       service.createCall();
      call.setTargetEndpointAddress
      ( new java.net.URL(endpoint) );
      call.setOperationName("getAge");
       //填写你要调用的方法名称
      int ret =Integer.parseInt
      (("" + call.invoke( new Object[] {} )));
      
      System.out.println(ret);
      
      } catch (Exception e) {
      System.err.println(e.toString());
      }
      System.out.println("Finished the invoking."); 
      }
      }
      关于业务调用封装到服务端程序里,然后部署就可以了,就这么简单。

    1.在这里下载axis:http://ws.apache.org/axis/(现在的最新版本是1.3 final)

    2.对于上面的例子,当写客户端程序的时候,假设使用Eclipse,需要把例子里面提到的“axis/WEB-INF/lib目录下类文件(jar包)”都拷到工程里,并且设置classpath。

    January 12

    WebService:wsdl2java

    key words:
    1.Java Web Service。
    2.Eclipse(2.x) plugin
    3.wsdl
     
    一个Eclipse的插件,根据.wsdl文件来生成.java类。
    例如,我的webservice地址是http://localhost:8000/axis/Test.jws
    那么,用这个插件生成的4个文件的packagelocalhost.axis.Test_jws
    4个文件分别是:
        public interface Test extends java.rmi.Remote
        public interface TestService extends javax.xml.rpc.Service
        public class TestServiceLocator extends org.apache.axis.client.Service implements localhost.axis.Test_jws.TestService
        public class TestSoapBindingStub extends org.apache.axis.client.Stub implements localhost.axis.Test_jws.Test