`
seawavenews
  • 浏览: 231494 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
文章分类
社区版块
存档分类
最新评论

Web Service 开发(VBA连接Tomcat)

阅读更多

一、 java-java实现WebService访问(来自网络)

一、axis安装
1.环境
J2SE SDK 1.5
Servlet Container: 我使用Tomcat 6.0
2.到 http://ws.apache.org/axis/
          网站下载axis安装包
3.解压缩安装包,将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方式

二、编写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 + " timeMoon.";
serviceHandler.setOption("accesses", numAccesses);

System.out.println(result);
} catch (Exception e) {
throw AxisFault.makeFaultEnvelope;
}
}
}
3..编写wsdd文件
deploy.wsdd
<deployment xmlns="http://xml.apache.org/axis/wsdd/"
xmlns:java="http://xml.apache.org/axis/wsdd/providers/java">
  
<handler name="print" type="java:LogHandler"/>
<service name="sayhello" provider="java:RPC">
<requestFlow>
<handler type="print"/>
</requestFlow>
<parameter name="className" value="server.SayHello"/>
<parameter name="allowedMethods" value="*"/>
</service>
</deployment>

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);
}
}
}

二、 VBA-java实现WebService访问(TOMCAT上Web Service开发攻略)
 

首先,要搭建一个环境, 笔者搭建的环境是: Windows2000 Server(中文版)+TOMCAT4<o:p></o:p>

1 http://jakarta.apache.org/下载TOMCAT4,安装,并且配置好。启动TOMCAT4,在浏览器中输入http://localhost:8080。可以看到首页面,表示TOMCAT4已经配置好了。

2 http://xml.apache.org/dist/axis/1_1RC1/下载AXIS,解压缩到$TOMCAT_HOME/webapps/axis下面去。<o:p></o:p>

在浏览器中运行http://localhost:8080/axis/index.html ,测试是否可以运行。

接下来,我们开始开发一个Web Service应用。编辑一个java文件

CalcService.java

public class CalcService {<o:p></o:p>

  public int add(int p1, int p2) {<o:p></o:p>

  <o:p></o:p>

    return p1 + p2;<o:p></o:p>

  }<o:p></o:p>

 <o:p></o:p>

  public int subtract(int p1, int p2) {<o:p></o:p>

 <o:p></o:p>

    return p1 - p2;<o:p></o:p>

  }<o:p></o:p>

}

复制CalcService.java文件到$TOMCAT_HOME/webapps/axis目录下,改名为CalcService.jws。在浏览器中,输入http://localhost:8080/axis/CalcService.jws,得到提示信息如下:

AxisCalcService.jws包装后,提供了一个WSDL的接口外露信息。可以输入http://localhost:8080/axis/CalcService.jws?WSDL 察看WSDL的接口信息。通过WSDL接口,我们可以遍写一个VB程序来调用。

测试步骤如下:

1 http://www.microsoft.com上下载SOAP TOOLKIT 3.0,安装。

2 VB6中新建一个工程,添加一个FORM,FROM的界面如下。

3 分别在两个按钮cmdAddcmdMinus中写上如下代码

Private Sub cmdAdd_Click()<o:p></o:p>

    '测试add方法<o:p></o:p>

    On Error Resume Next<o:p></o:p>

    Dim SoapClient As Object<o:p></o:p>

    <o:p></o:p>

    Set SoapClient = CreateObject("MSSOAP.SoapClient30")<o:p></o:p>

    Call SoapClient.MSSoapInit2(Text1.Text, "", "", "CalcService", "")<o:p></o:p>

    If Err.Number <> 0 Then<o:p></o:p>

        MsgBox SoapClient.FaultString, vbExclamation<o:p></o:p>

        Exit Sub<o:p></o:p>

    End If<o:p></o:p>

    ' Now the client can call an operation listed in the portType element<o:p></o:p>

    ' specified when calling mssoapinit().<o:p></o:p>

    Text4.Text = CStr(SoapClient.Add(Val(Text2.Text), Val(Text3.Text)))<o:p></o:p>

    <o:p></o:p>

    If Err.Number <> 0 Then<o:p></o:p>

        MsgBox SoapClient.FaultString, vbExclamation<o:p></o:p>

        Exit Sub<o:p></o:p>

    End If<o:p></o:p>

End Sub<o:p></o:p>

 <o:p></o:p>

Private Sub cmdMinus_Click()<o:p></o:p>

    '测试substract方法<o:p></o:p>

    On Error Resume Next<o:p></o:p>

    Dim SoapClient As Object<o:p></o:p>

    <o:p></o:p>

    Set SoapClient = CreateObject("MSSOAP.SoapClient30")<o:p></o:p>

    Call SoapClient.MSSoapInit2(Text1.Text, "", "", "CalcService", "")<o:p></o:p>

    If Err.Number <> 0 Then<o:p></o:p>

        MsgBox SoapClient.FaultString, vbExclamation<o:p></o:p>

        Exit Sub<o:p></o:p>

    End If<o:p></o:p>

    ' Now the client can call an operation listed in the portType element<o:p></o:p>

    ' specified when calling mssoapinit().<o:p></o:p>

    Text7.Text = CStr(SoapClient.subtract(Val(Text5.Text), Val(Text6.Text)))<o:p></o:p>

    <o:p></o:p>

    If Err.Number <> 0 Then<o:p></o:p>

        MsgBox SoapClient.FaultString, vbExclamation<o:p></o:p>

        Exit Sub<o:p></o:p>

    End If<o:p></o:p>

End Sub

其中需要注意的是,MSSoapInit2方法简单地说明如下:

HRESULT MSSoapInit2(<o:p></o:p>
          [in] VARIANT par_WSDLFile, <o:p></o:p>
          [in] VARIANT par_WSMLFile, <o:p></o:p>
          [in] BSTR par_ServiceName, <o:p></o:p>
          [in] BSTR par_Port, <o:p></o:p>
          [in] BSTR par_Namespace);<o:p></o:p>
 <o:p></o:p>
par_WSDLFile                  WSDL文件的位置,本例中为
http://localhost:8080/axis/CalcService.jws?wsdl
par_WSMLFile                  本例中为空
par_ServiceName              本例中为空
par_Port                     服务端口号,可以从wsdl文件中找到。<o:p></o:p>
par_Namespace                本例中为空

关于Microsoft SOAP TOOLKIT 3.0的详细说明,我会以后,专门写文章介绍。

4 运行,并且测试。

总结,应用Web Service技术,我们已经看到了,用VB编写的程序一样可以享用JAVA技术,当然也可以享用.NET技术,当然java编写的应用一样可以享用VB6或.NET开发的WebService。这项技术的应用必将给信息系统的结构模式带来全新的改变。

 


分享到:
评论

相关推荐

    VBA Call WebService

    3. **SoapToolkit的使用**:在VBA中,通常会创建一个SoapClient对象,然后设置其属性,如URL指向Web服务的WSDL(Web Service Description Language)文件,定义服务的命名空间和方法名。接着,通过调用对象的方法,...

    Excel通过VBA连接Oracle数据库

    在Excel中通过Visual Basic for Applications (VBA) 连接Oracle数据库是一种强大的自动化工具,能够让你轻松地从大型数据库中提取、处理和分析数据。VBA是Excel内置的编程环境,允许用户创建自定义功能和宏,以实现...

    vba连接各种数据库字符串

    VBA 连接各种数据库字符串 VBA 连接各种数据库字符串是指使用 VBA 语言连接不同的数据库类型,例如 OLE DB Provider for ODBC、SQL Server、Oracle、Microsoft Jet 等。为了实现数据的互通和交换,VBA 提供了多种...

    vba连接DB2的方法(ODBC)

    VBA 连接 DB2 数据库使用 ODBC 的方法 DB2 是 IBM 公司开发的关系数据库管理系统,广泛应用于大型企业和政府机构中。连接 DB2 数据库是许多企业应用系统的关键步骤,而 VBA 则是 Excel、Word 等 Office 软件的编程...

    VBA连接SQLSERVER数据库实例.doc

    在本文中,我们将深入探讨如何使用VBA(Visual Basic for Applications)通过ADO(ActiveX Data Objects)连接到SQL Server数据库并执行数据查询。这个过程在Excel中尤其常见,因为VBA是Excel内置的编程环境,允许...

    VBA连接SQL数据库的代码

    ### VBA连接SQL数据库的代码知识点解析 #### 一、VBA与SQL数据库连接的基本原理 在本案例中,我们探讨的是如何通过VBA(Visual Basic for Applications)来实现与SQL Server数据库的有效连接及数据查询操作。对于...

    EXCEL VBA 连接SAP实例

    EXCEL VBA 连接SAP,并通过BAPI读取数据

    vba连接访问数据库(access)

    在“vba连接访问数据库(access)”这个主题中,我们将探讨如何通过VBA代码与Access数据库进行交互,这对于数据处理、报告生成以及自动化工作流程非常有用。 首先,我们需要了解Access数据库的基本结构。Access...

    AutoCAD2013二次开发VBA插件.zip

    2. **数据交换**:利用VBA可以连接外部数据库,将设计数据导入或导出到AutoCAD,方便项目管理和协同工作。 3. **自定义界面**:创建自定义工具栏和菜单,使常用功能触手可及,提高工作效率。 4. **定制对象行为**...

    ArcGIS二次开发VBA

    **ArcGIS二次开发VBA**是GIS(地理信息系统)领域中的一个重要话题,它涉及使用Visual Basic for Applications(VBA)编程语言来扩展和定制Esri的ArcGIS平台。VBA是一种脚本语言,广泛用于自动化任务,创建自定义...

    Excel VBA 连接MySQL

    使用Excel中的VBA连接MySQL数据库,并进行增删查找等基本操作!很详细的资料,希望能够帮助大家。

    VBA开发,连接mysql数据库

    根据给定的信息,本文将详细解释如何通过VBA(Visual Basic for Applications)连接MySQL数据库进行数据操作,并基于示例代码具体分析其实现方法。 ### VBA连接MySQL数据库的知识点 #### 1. VBA与MySQL简介 - **...

    AutoCAD 2014 二次开发 VBA 基础与实例.zip

    本教程"AutoCAD 2014 二次开发 VBA 基础与实例"专注于利用VBA进行AutoCAD的二次开发,适合初学者入门。VBA在AutoCAD中的应用主要体现在以下几个方面: 1. **基本概念与环境设置**:首先,你需要了解VBA的基本概念,...

    word vba 如何连接sql数据库

    VBA(Visual Basic for Applications)是微软公司开发的一种编程语言,广泛应用于 Office 软件中,如 Word、Excel、PowerPoint 等。VBA 可以与数据库集成,实现数据交互和处理。本文将详细介绍如何使用 VBA 连接 SQL...

    excel 调用barTender打印条码 VBA 调用BarTender打印标签BarTender二次开发 VBA 条码打印

    excel 调用barTender打印条码 VBA 调用BarTender打印标签BarTender二次开发 VBA 条码打印 VBA二维码打印 Excel条码打印 Excel二维码打印 1. 商品跟踪:二维码标签可让制造商和供应商跟踪货物的生产和出货情况。...

    cadvba二次开发初级教程

    cadvba二次开发初级教程 本教程旨在帮助初级水平的CAD二次开发人员快速入门,教程涵盖了基本概念、开发工具、编程基础等方面的知识。 1. 什么是 Autocad VBA? VBA(Visual Basic for Applications)是一种功能...

    vba数据库连接文件

    vba数据库连接文件

    EXCEL VBA连接数据库查询示例代码.txt

    一个简易的vba连接数据库并根据sql语句进行查询的excel报表,对刚入门的新手是入门教程

    AutoCAD VBA开发手册,cadvba教程,Visual Basic

    AutoCAD VBA开发手册是一本专门针对CAD二次开发的教程,主要聚焦于使用Visual Basic for Applications(VBA)这一编程工具。VBA是Microsoft Office套件中的一个强大工具,也被集成在AutoCAD中,允许用户自定义CAD...

Global site tag (gtag.js) - Google Analytics