web service(dii,proxy,stub)
来源:百度文库 编辑:神马文学网 时间:2024/04/29 05:14:24
一、axis安装
1.环境
J2SE SDK 1.3 or 1.4: 我使用 1.4.2
Servlet Container: 我使用Tomcat 5.0
2.到 http://ws.apache.org/axis/网站下载axis安装包
3.解压缩安装包,将AXIS_UNZIP_PATH\axis-version\webapps下的axis包拷贝到TOMCAT_HOME\webapps\下,
以下约定AXIS_HOME为该TOMCAT_HOME\webapps\axis目录
4.启动tomcat,访问http://localhost:8080/axis 检查安装是否成功
5.以上步骤执行成功,可以开发webservice例子了
axis支持三种web service的部署和开发,分别为:
1。Dynamic Invocation Interface ( DII)
2。 Stubs方式
3。Dynamic Proxy方式
以下逐一讲述web service在axis上的部署和开发,设置classpath
set CLASSPATH=.;%AXIS_HOME%\lib\axis.jar;%AXIS_HOME%\lib\axis-ant.jar;%AXIS_HOME%\lib\commons-discovery-0.2.jar;%AXIS_HOME%\lib\commons-logging-1.0.4.jar;%AXIS_HOME%\lib\jaxrpc.jar;%AXIS_HOME%\lib\saaj.jar;%AXIS_HOME%\lib\wsdl4j-1.5.1.jar;%AXIS_HOME%\lib\log4j-1.2.8.jar;E:/thirdparty/activation/activation.jar;E:/thirdparty/activation/mail.jar
二、编写DII(Dynamic Invocation Interface )方式web服务
1.编写服务端程序HelloClient
public class HelloClient {
public String getName(String name)
{
return "hello "+name;
}
}
2.将源码拷贝到AXIS_HOME下,重命名为 HelloClient.jws
3.访问连接http://localhost:8080/axis/HelloClient.jws?wsdl,页面显示axis自动生成的wsdl
4.编写访问服务的客户端 TestHelloClient.java
import org.apache.axis.client.Call;
import org.apache.axis.client.Service;
import javax.xml.namespace.QName;
import javax.xml.rpc.ServiceException;
import java.net.MalformedURLException;
import java.rmi.RemoteException;
public class SayHelloClient2 {
public static void main(String[] args) {
try {
String endpoint = "http://localhost:8080/axis/HelloClient.jws";
Service service = new Service();
Call call = null;
call = (Call) service.createCall();
call.setOperationName(new QName(
"http://localhost:8080/axis/HelloClient.jws", "getName"));
call.setTargetEndpointAddress(new java.net.URL(endpoint));
String ret = (String) call.invoke(new Object[] {"zhangsan"});
System.out.println("return value is " + ret);
} catch (Exception ex) {
ex.printStackTrace();
}
}
}
三、编写Dynamic Proxy方式访问服务
1.编写部署服务端程序,同上边DII方式,本次仍使用上边部署的HelloClient
2.编写代理接口
public interface HelloClientInterface extends java.rmi.Remote {
public String getName(String name) throws java.rmi.RemoteException;
}
3.编写并执行客户端程序TestHelloClient.java
import javax.xml.rpc.Service;
import javax.xml.rpc.ServiceFactory;
import java.net.URL;
import javax.xml.namespace.QName;
public class TestHelloClient {
public static void main(String[] args) {
try
{
String wsdlUrl = "http://localhost:8080/axis/HelloClient.jws?wsdl";
String nameSpaceUri = "http://localhost:8080/axis/HelloClient.jws";
String serviceName = "HelloClientService";
String portName = "HelloClient";
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("return value is "+proxy.getName("john") ) ;
}catch(Exception ex)
{
ex.printStackTrace() ;
}
}
}
四、编写wsdd发布web服务,编写stub client访问web服务
1.编写服务端程序server,SayHello.java,编译server.SayHello.java
package server;
public class SayHello {
public String getName(String name)
{
return "hello "+name;
}
}
2.编写LogHandler.java
import org.apache.axis.AxisFault;
import org.apache.axis.Handler;
import org.apache.axis.MessageContext;
import org.apache.axis.handlers.BasicHandler;
import java.util.Date;
public class LogHandler extends BasicHandler {
public void invoke(MessageContext msgContext) throws AxisFault
{
/** Log an access each time we get invoked.
*/
try {
Handler serviceHandler = msgContext.getService();
Integer numAccesses =
(Integer)serviceHandler.getOption("accesses");
if (numAccesses == null)
numAccesses = new Integer(0);
numAccesses = new Integer(numAccesses.intValue() + 1);
Date date = new Date();
String result = date + ": service " +
msgContext.getTargetService() +
" accessed " + numAccesses + " time.";
serviceHandler.setOption("accesses", numAccesses);
System.out.println(result);
} catch (Exception e) {
throw AxisFault.makeFault;
}
}
}
3..编写wsdd文件
deploy.wsdd
xmlns:java="http://xml.apache.org/axis/wsdd/providers/java">
3.将编译后的文件拷贝到AXIS_HOME/WEB-INF/classes下,如:D:\tomcat\webapps\axis\WEB-INF\classes
4.发布服务:
java org.apache.axis.client.AdminClient deploy.wsdd
5.生成client stub文件
a:方式1
将SayHello.java拷贝到AXIS_HOME/下,重命名为SayHello.jws,执行下面的命令生存client stub
java org.apache.axis.wsdl.WSDL2Java -p client http://localhost:8080/axis/services/SayHello.jws?wsdl
b:方式2
执行如下命令生成SayHello.wsdl
java org.apache.axis.wsdl.Java2WSDL -oSayHello.wsdl -lhttp://localhost:8080/axis/services/SayHello -nsayhello server.SayHello
执行如下命令生成client stub
java org.apache.axis.wsdl.WSDL2Java SayHello.wsdl -p client
生成的stub client文件列表为:
1。SayHello.java
2。SayHelloService.java。
3。SayHelloServiceLocator.java
4。SayHelloSoapBindingStub.java
6.编写客户端程序,编译并执行
public class SayHelloClient {
public static void main(String[] args) {
try {
SayHelloService service = new client.
SayHelloServiceLocator();
client.SayHello_PortType client = service.getSayHello();
String retValue=client.getName("zhangsan");
System.out.println(retValue);
} catch (Exception e) {
System.err.println("Execution failed. Exception: " + e);
}
}
}
1.环境
J2SE SDK 1.3 or 1.4: 我使用 1.4.2
Servlet Container: 我使用Tomcat 5.0
2.到 http://ws.apache.org/axis/网站下载axis安装包
3.解压缩安装包,将AXIS_UNZIP_PATH\axis-version\webapps下的axis包拷贝到TOMCAT_HOME\webapps\下,
以下约定AXIS_HOME为该TOMCAT_HOME\webapps\axis目录
4.启动tomcat,访问http://localhost:8080/axis 检查安装是否成功
5.以上步骤执行成功,可以开发webservice例子了
axis支持三种web service的部署和开发,分别为:
1。Dynamic Invocation Interface ( DII)
2。 Stubs方式
3。Dynamic Proxy方式
以下逐一讲述web service在axis上的部署和开发,设置classpath
set CLASSPATH=.;%AXIS_HOME%\lib\axis.jar;%AXIS_HOME%\lib\axis-ant.jar;%AXIS_HOME%\lib\commons-discovery-0.2.jar;%AXIS_HOME%\lib\commons-logging-1.0.4.jar;%AXIS_HOME%\lib\jaxrpc.jar;%AXIS_HOME%\lib\saaj.jar;%AXIS_HOME%\lib\wsdl4j-1.5.1.jar;%AXIS_HOME%\lib\log4j-1.2.8.jar;E:/thirdparty/activation/activation.jar;E:/thirdparty/activation/mail.jar
二、编写DII(Dynamic Invocation Interface )方式web服务
1.编写服务端程序HelloClient
public class HelloClient {
public String getName(String name)
{
return "hello "+name;
}
}
2.将源码拷贝到AXIS_HOME下,重命名为 HelloClient.jws
3.访问连接http://localhost:8080/axis/HelloClient.jws?wsdl,页面显示axis自动生成的wsdl
4.编写访问服务的客户端 TestHelloClient.java
import org.apache.axis.client.Call;
import org.apache.axis.client.Service;
import javax.xml.namespace.QName;
import javax.xml.rpc.ServiceException;
import java.net.MalformedURLException;
import java.rmi.RemoteException;
public class SayHelloClient2 {
public static void main(String[] args) {
try {
String endpoint = "http://localhost:8080/axis/HelloClient.jws";
Service service = new Service();
Call call = null;
call = (Call) service.createCall();
call.setOperationName(new QName(
"http://localhost:8080/axis/HelloClient.jws", "getName"));
call.setTargetEndpointAddress(new java.net.URL(endpoint));
String ret = (String) call.invoke(new Object[] {"zhangsan"});
System.out.println("return value is " + ret);
} catch (Exception ex) {
ex.printStackTrace();
}
}
}
三、编写Dynamic Proxy方式访问服务
1.编写部署服务端程序,同上边DII方式,本次仍使用上边部署的HelloClient
2.编写代理接口
public interface HelloClientInterface extends java.rmi.Remote {
public String getName(String name) throws java.rmi.RemoteException;
}
3.编写并执行客户端程序TestHelloClient.java
import javax.xml.rpc.Service;
import javax.xml.rpc.ServiceFactory;
import java.net.URL;
import javax.xml.namespace.QName;
public class TestHelloClient {
public static void main(String[] args) {
try
{
String wsdlUrl = "http://localhost:8080/axis/HelloClient.jws?wsdl";
String nameSpaceUri = "http://localhost:8080/axis/HelloClient.jws";
String serviceName = "HelloClientService";
String portName = "HelloClient";
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("return value is "+proxy.getName("john") ) ;
}catch(Exception ex)
{
ex.printStackTrace() ;
}
}
}
四、编写wsdd发布web服务,编写stub client访问web服务
1.编写服务端程序server,SayHello.java,编译server.SayHello.java
package server;
public class SayHello {
public String getName(String name)
{
return "hello "+name;
}
}
2.编写LogHandler.java
import org.apache.axis.AxisFault;
import org.apache.axis.Handler;
import org.apache.axis.MessageContext;
import org.apache.axis.handlers.BasicHandler;
import java.util.Date;
public class LogHandler extends BasicHandler {
public void invoke(MessageContext msgContext) throws AxisFault
{
/** Log an access each time we get invoked.
*/
try {
Handler serviceHandler = msgContext.getService();
Integer numAccesses =
(Integer)serviceHandler.getOption("accesses");
if (numAccesses == null)
numAccesses = new Integer(0);
numAccesses = new Integer(numAccesses.intValue() + 1);
Date date = new Date();
String result = date + ": service " +
msgContext.getTargetService() +
" accessed " + numAccesses + " time.";
serviceHandler.setOption("accesses", numAccesses);
System.out.println(result);
} catch (Exception e) {
throw AxisFault.makeFault;
}
}
}
3..编写wsdd文件
deploy.wsdd
3.将编译后的文件拷贝到AXIS_HOME/WEB-INF/classes下,如:D:\tomcat\webapps\axis\WEB-INF\classes
4.发布服务:
java org.apache.axis.client.AdminClient deploy.wsdd
5.生成client stub文件
a:方式1
将SayHello.java拷贝到AXIS_HOME/下,重命名为SayHello.jws,执行下面的命令生存client stub
java org.apache.axis.wsdl.WSDL2Java -p client http://localhost:8080/axis/services/SayHello.jws?wsdl
b:方式2
执行如下命令生成SayHello.wsdl
java org.apache.axis.wsdl.Java2WSDL -oSayHello.wsdl -lhttp://localhost:8080/axis/services/SayHello -nsayhello server.SayHello
执行如下命令生成client stub
java org.apache.axis.wsdl.WSDL2Java SayHello.wsdl -p client
生成的stub client文件列表为:
1。SayHello.java
2。SayHelloService.java。
3。SayHelloServiceLocator.java
4。SayHelloSoapBindingStub.java
6.编写客户端程序,编译并执行
public class SayHelloClient {
public static void main(String[] args) {
try {
SayHelloService service = new client.
SayHelloServiceLocator();
client.SayHello_PortType client = service.getSayHello();
String retValue=client.getName("zhangsan");
System.out.println(retValue);
} catch (Exception e) {
System.err.println("Execution failed. Exception: " + e);
}
}
}
web service(dii,proxy,stub)
Free Proxy List - web proxy, 代理服务器列表
Okproxy - Free Web Proxy,online proxy server
Web Service“四长两短”
XML Web Service 基础
什么是Web Service
动态加载Web Service
Web Service入门
XML Web Service
Web Service入门
Web Service Software Factory
XML Web Service 基础
Web Service入门
Web Service 入门学习
Web service简介
Web service是什么?
什么是Web service?
web proxy-最好的在线代理
使用JWSDP完成Web Service
什么时候应该使用Web Service
典型的Web Service结构
编写一个Web service客户端
Web Service学习笔记之-
Web Service Definition Language (WSDL)