`
sudalyl
  • 浏览: 100622 次
  • 性别: Icon_minigender_1
  • 来自: 苏州
社区版块
存档分类
最新评论

Java WebService之Axis学习(二):开发你的webservice

阅读更多

    上一次介绍了axis的安装,这次我们就来体会下如何利用axis开发webservice程序。

 

    Axis提供了两种webservice的发布方式:

    1.即时发布

    2.定制发布

 

1.即时发布

    即时发布是一种比较简单的发布方式,只要求我们将java源代码(*.java)的后缀改为jws并拷贝到部署目录下即可,(%TOMCAT_HOME%\webapps\axis)。下面就以我们最简单的sayhello程序说起:

 

public class HelloWorldJWS {
	public String sayHello(String name,int age){
		return "Server Response OK,your name is"+name+",your age is"+age;
	}
}
 

 

这是服务器端的代码,部署玩之后我们访问http://127.0.0.1:8080/axis/HelloWorldJWS.jws我们如果看到Click to see the WSDL 这个超链接,就说明已经发布成功了。点击进去就可以看到这个WebService 的 WSDL 描述文件。服务端的发布已经完成了,接下来就是编写客户端测试代码:

 

 

/**
 * @author :LYL
 *@date:2011-4-17,上午10:19:22
 */
package com.lyl.webservice;

import java.net.MalformedURLException;
import java.rmi.RemoteException;

import javax.xml.namespace.QName;
import javax.xml.rpc.ServiceException;

import org.apache.axis.client.Call;
import org.apache.axis.client.Service;


public class JwsClient {
	public static void main(String[] args) {
		String url="http://127.0.0.1:8080/axis/HelloWorldWSDD";
		Service service=new Service();
		try {
			Call call=(Call) service.createCall();
			call.setTargetEndpointAddress(new java.net.URL(url));
			call.setOperationName(new QName(url,"sayHello"));
			String result=(String)call.invoke(new Object[]{"sudalyl",22});
			System.out.println("result:"+result);
		} catch (ServiceException e) {
			e.printStackTrace();
		} catch (RemoteException e) {
			e.printStackTrace();
		} catch (MalformedURLException e) {
			e.printStackTrace();
		}
	}
}

 

    输出结果: result:Server Response OK, your name is sudalyl,your age is 22

    如果学过反射,这个方法大家很容易就看的懂,即时发布确实很简单,但是即时发布却牺牲了灵活性,他的服务端代码不能带有类包,这个是比较令人头疼的事。而且必须是把.java文件改名,如果你是一个编译好的class文件,那就比较难办了。

 

 

    2.定制发布

    比起即时发布,定制发布更加烦琐也更复杂,但是换来的却是更大的灵活性,因此在实际项目中定制发布还是不二的选择。定制发布需要你自己编写一个 WSDD ( Web Service Deployment Descriptor )文件,就是一个 XML 描述文件。废话不多说,我们来看代码 :

    首先是服务器端的

 

/**
 * @author :LYL
 *@date:2011-4-17,上午10:56:00
 */
package com.lyl.webservice;

public class HelloWorldWSDD {
	public String sayHello(String name,int age){
		return "Server Response OK, your name is "+name+",your age is "+age;
	}
	public String add(int a,int b){
		int temp=a+b;
		return "Server Response OK,a+b="+temp;
	}
}

 

    在 eclipse 下编译后按照包名拷到 %TOMCAT_HOME%\webapps\axis\WEB-INF\classes 目录下。然后我们来编写WSDD文件,并在%TOMCAT_HOME%\webapps\axis\WEB-INF 目录下建立这个文件。

 

<deployment xmlns="http://xml.apache.org/axis/wsdd/" xmlns:java="http://xml.apache.org/axis/wsdd/providers/java">

<service name = "HelloWorldWSDD" provider = "java:RPC">
    <parameter name="className" value="com.lyl.webservice.HelloWorldWSDD"/>
    <parameter name="allowedMethods" value ="*"/>
    <parameter name="scope" value="request"/>
</service>


</deployment>

 

     编写完配置发布文件之后,( Tomcat 服务必须处于启动状态) cmd 打开 windows 的控制台,进入:%TOMCAT_HOME%\webapps\axis\WEB-INF 目录下键入如下命令:java -Djava.ext.dirs=lib org.apache.axis.client.AdminClient deploy.wsdd之后控制台返回 Processing file deploy.wsdd 和 Done processing 这两段话即说明发布成功。(此时会在同级目录生成一个 server-config.wsdd 文件)在这里的 AdminClient 是 AXIS 提供的一个客户端管理工具。至于 java.ext.dirs 的含义可以去了解一下 classloader 和 JVM 类装载机制方面的知识。发布成功之后你可以通过访问http://localhost:8080/axis/servlet/AxisServlet 来查看你所有的定制发布的服务。

    下面看一下客户端代码:

 

package com.lyl.webservice;

import java.net.MalformedURLException;
import java.rmi.RemoteException;

import javax.xml.namespace.QName;
import javax.xml.rpc.ServiceException;

import org.apache.axis.client.Call;
import org.apache.axis.client.Service;


public class JwsClient {
	public static void main(String[] args) {
		String url="http://127.0.0.1:8080/axis/services/HelloWorldWSDD";
		Service service=new Service();
		try {
			Call call=(Call) service.createCall();
			call.setTargetEndpointAddress(new java.net.URL(url));
			call.setOperationName(new QName(url,"sayHello"));
			String result=(String)call.invoke(new Object[]{"sudalyl",22});
			System.out.println("result:"+result);
		} catch (ServiceException e) {
			e.printStackTrace();
		} catch (RemoteException e) {
			e.printStackTrace();
		} catch (MalformedURLException e) {
			e.printStackTrace();
		}
	}
}

 

     同样返回及时发布时的信息,成功!

 

    3.取消一个webservice

 

    刚才讲了怎么发布一个 WebService ,但是如何取消没有却没有提。其实取消一个已经发布WebService 也是非常简单的,我们就刚才的 HelloWorld 来做例子吧。发布 WebService 的时候们有一个 deploy.wsdd 文件,当然在取消发布的时候就会有一个 undeploy.wsdd 文件。这个文的内容也很简单, xml 的代码如下。

<undeployment xmlns = "http://xml.apache.org/axis/wsdd/" >
    < service name = "HelloWorldWSDD" />
</undeployment >

 写完这个 xml 文件之后,把它同样 copy 到 %TOMCAT_HOM\webapps\axis\WEB-INF 目录下,然后

D 打开控制台,在控制台输入一个我们很熟悉的命令:java -Djava.ext.dirs=lib org.apache.axis.client.AdminClient undeploy.wsdd运行成功就取消了。

 

1
3
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics