WebService应用
1. JDK6增加了对WS的支持
下面是WebService的一个简单的服务应用:
Java代码
import javax.jws.*;
import javax.jws.soap.*;
@WebService(targetNamespace="http://localhost:7070/Ebay")
@SOAPBinding(style = SOAPBinding.Style.RPC)
public class HelloService
{
public static void main(String [] args)
{
Endpoint.publish("http://localhost:7070/Ebay",new HelloService());
}
@WebMethod
public void sayHello()
{
System.out.println("hello");
}
}
2. Axis安装配置
<2> 安装并配置Tomcat;
<3> 从官方网站http://ws.apache.org/axis下载最新的Axis项目打包文件,并将webapps下axis目录拷贝到Tomcat的webapps目录下;
<4> 验证Axis的安装;
<5> 浏览所发布的服务。
3. 服务器端开发
<1> 即时发布
使用即时发布首先需要一个实现服务功能的Java源文件,将其扩展名改为.jws(Java Web Service的缩写),然后将该文件放到Tomcat下面的webapps\axis目录下即可。但是JWS的web服务发布是一个很简单的Web服务发布方式,在页面中你不能使用包,而且由于代码是在运行期被编译的,所以在部署之后,你也很难找到错误所在。
<2> 定制发布
② 编译生成的class文件应该放在Tomcat下的webapps\axis\WEB-INF\classes\下面
③ 编写deploy.wsdd 文件描述服务的名称,入口等信息
④ 切换到命令航下,执行
java org.apache.axis.client.AdminClient –p 8085 deploy.wsdd
4. 调用web服务
<1> DLL动态接口调用方式(Dynamic Invocation Interface)
try {
String endpoint =
"http://localhost:8080/axis/services/test1";
//实例化一个服务对象service
Service service = new Service();
//创建一个空的调用对象Call,设置Call的操作名称,目标地址,传入参数等等
//执行调用后即可得到返回的结果
Call
call = (Call) service.createCall();
call.setTargetEndpointAddress( new java.net.URL(endpoint) );
call.setOperationName(new QName("http://soapinterop.org/", "add3") );
// Call to addParameter/setReturnType as described in user-guide.html
//call.addParameter("testParam",
// org.apache.axis.Constants.XSD_STRING,
// javax.xml.rpc.ParameterMode.IN);
//call.setReturnType(org.apache.axis.Constants.XSD_STRING);
Integer ret = (Integer) call.invoke( new Object[] { 1,3 } );
System.out.println( ret);
} catch (Exception e) {
System.err.println(e.toString());
}
}
<2> 动态代理方式(Dynamic Proxy)
动态代理需要一个本地的接口作为代理
Java代码
public String getMessage() throws RemoteException;
}
public static void main(String[] args) throws Exception {
String wsdlUrl = "http://localhost:8080/axis/test/Test.jws?wsdl";
String nameSpaceUri = "http://soapinterop.org/";
String serviceName = "Test1Service";
String portName = "Test1";
ServiceFactory serviceFactory = ServiceFactory.newInstance();
Service service = serviceFactory.createService(
new URL(wsdlUrl), new QName(nameSpaceUri,serviceName));
ITestDynameicProxy proxy = (ITestDynameicProxy)service.getPort(
new QName(nameSpaceUri,portName),ITestDynameicProxy.class);
System.out.println(proxy.getMessage());
}
通过输入wsdl地址,命名空间地址和服务名,用服务工厂创建出一个服务实例,再通过设置端口名得到一个服务类型的服务代理对象,通过该代理,就可以直接访问web服务了。
<3> 静态方式(Stubs)
① 按常规方式发布一个WebService
② 得到wsdl文件
* 通过web页面直接另存为
* 通过Java2WSDL工具类生成
(java org.apache.axis.wsdl.Java2WSDL -o demo1.wsdl
-l http://localhost:8080/axis/services/demo
-n http://www.itcast.cn/test.Demo)
③ 利用WSDL2Java工具类生成客户端调用代码
(java org.apache.axis.wsdl.WSDL2Java demo.wsdl -p client)
④ 在生成的代码基础上,进行客户端的调用
Java代码
DemoServiceLocator demoService = new DemoServiceLocator();
Demo demo = demoService.getdemo();
System.out.println(demo.getMessage());
}