很多内容都是从网上找的,自己做过了一些验证,写下来,当然里面还是有很多要进行修改过优化的。
1 环境
a JDK1.5,tomcat5.5.
b 到 http://ws.apache.org/Axis/网站下载Axis安装包的安装包。我下载的是axis-1_4 版本,解压后可以直接到webapps目录
下面将axis直接copy到tomcat的webapps下面。
这时启动tomcat,我的端口是 8899 。可以访问下测试 http://localhost:8899/axis
只是就可以启动了,页面中有个Validation 可以直接点进去看看,里面会提示你少的jar包,最好是将包都给下载全了,
都放到axis应用的WEB-INF下的lib下面,再启动看看,知道都OK了,就好了,为的是防止以后出现乱七八糟的问题。
当然这些jar包,在我们写客户端验证的时候,都要导入到我们的工程中。
c 设置下AXISPATH路径,我直接将Axis下的包都给配置上了。
2 好了,开始下面是三种方式。
如果不想再axis上直接开发,我们可以建立自己的web应用。这时简单点,将axis下面的jar包和web.xml放到我们
自己建立的工程中就好了。可以启动下试试。
Axis支持三种web service的部署和开发,分别为:
1、Dynamic Invocation Interface ( DII)
2、Stubs方式
3、Dynamic Proxy方式
==========================================================
编写DII(Dynamic Invocation Interface )方式web服务
1.新建包com.qdl.server,编 写服务端程序SayHello
package com.qdl.server;
public class SayHello
{
public String getName(String name)
{
return "hello "+name;
}
}
2、 将源码拷贝到WebRoot下,重命名为 SayHello.jws (注意不烤上面的package声明,这样的话会生成带包路径的,下面的访问就有问题,具体
还不知道怎么回事)
3、访问连接http://localhost/webservice/SayHello.jws?wsdl, 页面显示Axis自动生成的wsdl,同时会在WEB-INF下创建jwsClasses文件夹,在此生成SayHello.class文件
4。 写个客户端的测试程序
public static void main(String[] args) throws ServiceException, MalformedURLException, RemoteException {
String endpoint = "http://localhost:8899/axis/SayHello.jws";
Service service = new Service();
Call call = (Call) service.createCall();
call.setTargetEndpointAddress(new java.net.URL(endpoint));
call.setOperationName(new QName(endpoint,"getName"));
String ret = (String) call.invoke(new String[]{"lambert"});
System.out.println(ret);
}
OK,可以看到结果了。
编写Dynamic Proxy方式访问服务
1、编写部署服务端程序,同上边DII方式,本次仍使用上边部署的SayHello
2、新建包com.qdl.dao编写代理接口
package com.qdl.dao;
import java.rmi.Remote;
public interface HelloClientInterface extends Remote {
public String getName(String name) throws java.rmi.RemoteException;
}
3 编写并执行客户端程序TestHelloClient.java
package com.qdl.client;
import java.net.URL;
import javax.xml.namespace.QName;
import javax.xml.rpc.ServiceFactory;
import javax.xml.rpc.Service;
import com.qdl.dao.HelloClientInterface;
public class TestHelloClient {
public static void main(String[] args) {
try {
String wsdlUrl = "http://localhost/webservice/SayHello.jws?wsdl";
String nameSpaceUri = "http://localhost/webservice/SayHello.jws";
//注意下面的serviceName和portName,
//http://localhost/webservice/SayHello.jws?wsdl页面的xml最下端有
String serviceName = "SayHelloService";
String portName = "SayHello";
ServiceFactory serviceFactory = ServiceFactory.newInstance();
Service afService = serviceFactory.createService(new URL(wsdlUrl), new QName(nameSpaceUri, serviceName));
HelloClientInterface proxy = (HelloClientInterface) afService.getPort(new QName(nameSpaceUri, portName), HelloClientInterface.class);
System.out.println("返回信息是:" + proxy.getName("zhangsan"));
} catch (Exception ex) {
ex.printStackTrace();
}
}
}
东西查不多,就是通过一个接口来处理了。
编写wsdd发布web服务,编写stub client访问web服务(定制发布服务)
先写deploy.wsdd
<deployment xmlns="http://xml.apache.org/axis/wsdd/" xmlns:java="" target="_blank">http://xml.apache.org/axis/wsdd/providers/java">
<service name="HelloWorld" provider="java:RPC">
<parameter name="className" value="HelloWorld"/>
<parameter name="allowedMethods" value="sayHello"/>
</service>
</deployment>
在DOS下转换目录到%TOMCAT_HOME%/webapps/axis/WEB-INF,命令:
java -cp %AXISCLASSPATH% org.apache.axis.client.AdminClient deploy.wsdd
你会发现目录下多了一个server-config.wsdd文件,这就是AXIS的配置文件,以后所有的服务发布描述都会在里面找到
(这里有时候会报一堆错误,查了下:可以这样在deploy.wsdd 前面,添加端口 -p 8899 tomcat的)
java org.apache.axis.client.AdminClient -lhttp://地址:端口/context模块/services/AdminService deploy.wsdd
这一命令主要是把deploy.wsdd的service配置到server-config.wsdd中,同时更新内存
注意:上面命令的前提是要把axis的jar包配置到系统classpath环境变量中,否则报找不到类的错误
生成 client stub文件
将SayHello.java拷贝到WebRoot下 (前面已经拷贝),重命名为SayHello.jws,
执行下面的命令生存client stub
java org.apache.axis.wsdl.WSDL2Java -p com.qdl.client http://localhost/webservice/SayHello.jws?wsdl
此时在文件夹WEB-INF下com.qdl.client下生成的stub client文件列表为:
1.SayHello_PortType.java
2.SayHelloService.java。
3.SayHelloServiceLocator.java
4.SayHelloSoapBindingStub.java
把com包整体剪到src下编译
5。客户端的测试程序。
public static void main(String[] args){
//访问定制发布的服务
try{
SayHelloService service = new SayHelloServiceLocator();
SayHello_PortType client = service.getSayHello();
String retValue = client.getName("zhangsan");
System.out.println("返回的信息是:"+retValue);
}catch (Exception e){
System.err.println("Execution failed. Exception: " + e);
}
}
=========================================
上面的只是小例子,只是说明意思。初步学习。有待深入、