public
class HelloClient {
public
static
void main(String[] args) {
try {
String endpoint =
"http://localhost:8080/axis/HelloService.jws";
Service service = new Service();
Call call = null;
call = (Call) service.createCall();
call.setOperationName(new QName(
"http://localhost:8080/axis/HelloService.jws", "getName"));
call.setTargetEndpointAddress(new java.net.URL(endpoint));
String ret = (String) call.invoke(new Object[] { "fengshan" });
System.out.println("return value is " + ret);
} catch (Exception ex) {
ex.printStackTrace();
}
}
}
总结:dii方式比较简单,服务器端暴露一个类,客户端经过固定的方式(套路来访问服务器提供的服务)
服务器:写一个类,里面有一个业务方法,而后将后缀名字从java改为jws
客户端:1.构造链接地址:http://localhost:8080/axis/HelloService.jws (ip+路径+类名.jws)
2.构造vservice对象,掉用service对象的createCall()方法返回call对象
3.调用call对象的etOperationName()方法设置访问webservice资源的参数
4.调用call对象的invoke()方法,而且传递对象数组,字符串类型,(经过wsdl能够观察出request和response的参数,根据这些表述,来设置请求参数和接受返回数据)
使用Stubs方式:
1.服务器端仍然使用HelloService.java,编译后将他放在axis\WEB-INF\classes下
2.编写deploy.wsdd文件,声明服务器端须要发布的webservice的名字,和她的方法(放在web-inf目录下)
deploy.wsdd
内容
:
<
deployment
xmlns
="http://xml.apache.org/axis/wsdd/"
xmlns:java
="http://xml.apache.org/axis/wsdd/providers/java"
>
<
service
name
="HelloService"
provider
="java:RPC"
>
<
parameter
name
="className"
value
="HelloService"
/>
<
parameter
name
="allowedMethods"
value
="*"
/> <!---这里也能够填写须要暴露的方法的名字->
</
service
>
</
deployment
>
3.切换到deploy.wsdd所在目录,运行java org.apache.axis.client.AdminClient deploy.wsdd,若是部署成功,会输出<Admin>Done processing</Admin>信息。能够点击http://localhost:8080/axis浏览器中List来查看所发布的服务。
4.
接下来客户端测试该服务。
首先,在环境变量中设置
CLASSPATH
,加入如下
jar
:
%AXIS_LIB%\axis.jar;
%AXIS_LIB%\axis-ant.jar;
%AXIS_LIB%\commons-discovery.jar;
%AXIS_LIB%\commons-logging.jar;
%AXIS_LIB%\jaxrpc.jar;
%AXIS_LIB%\saaj.jar;
%AXIS_LIB%\log4j-
1.2.8
.jar;
%AXIS_LIB%\wsdl4j.jar
能够经过如下命令查看是否设置好了
CLASSPATH
:
Echo %CLASSPATH%
。
Axis
提供了实现WSDL2Java
的命令行工具org.apache.axis.wsdl.WSDL2Java
,利用这个工具能够从WSDL
地址处生成Java
代码。命令以下:(
在axis
目录下)
java org.apache.axis.wsdl.WSDL2Java -Nhttp://localhost:8080/axis/services/HelloService=com http://localhost:8080/axis/services/HelloService?wsdl
会在com
(由上述命令行中参数设定)包下生成HelloService.java
、HelloServiceService.java
、HelloServiceServiceLocator.java
和HelloServiceSoapBindingStub.java
四个文件。
5.
编写测试类(
在axis
目录下)
public
class HelloClient
{
public
static
void main(String[] args)
{
try
{
com.HelloServiceServiceLocator locator=
new com.HelloServiceServiceLocator();
com.HelloService service=locator.getHelloService();
System.out.println(service.getName(
"fengshan"));
}
catch(Exception e)
{
System.err.println(
"Execution failed.Exception:"+e);
}
}
}
总结:Stubs方式主要是服务器端使用deploy.wsdd 文件,写好须要暴露的webservice的名字和其中的方法,使用 java org.apache.axis.client.AdminClient deploy.wsdd 将她部署在服务器上供外界调用,而外界使用 java org.apache.axis.wsdl.WSDL2Java -Nhttp://localhost:8080/axis/services/HelloService=com http://localhost:8080/axis/services/HelloService?wsdl 将远端的webservice映射成本地类,供本身使用
使用步骤:
1.
在得到自动映射的4个类之后,new一个 loctor对象,这个对象实现了 一个接口(HelloServiceService ),调用接口种的方法getHelloService()得到一个service对象,而后用这个对象调用webservice暴露的方法会获得一个返回值(String).
咱们本身也能够简单写一个客户端来调用: