分享
 
 
 

在Axis中处理复杂的自定义的数据类型

王朝java/jsp·作者佚名  2006-01-09
窄屏简体版  字體: |||超大  

什么是Axis

Axis本质上是一个SOAP引擎,但Axis也不仅仅是一个SOAP引擎,可以称作是一个web services。由于本文重点不在于些,请您参考《Axis用户指南

您必需了解的知识

如果您是一个java,servlet和SOAP的新手,那您可能会遇到很多关于Axis的麻烦,所以这时不建议您编写Axis的客户和服务程序。当您基本了解了如下知识时,您就可以开始Axis之旅了。

Java的数据类型,类和编程概念的核心。

什么是线程(threads),竞态条件(race conditions),线程安全(thread safety)和同步(sychronization) 。

什么是classloader,什么是多等级classloader,和"ClassNotFoundException"异常的共同原因。

怎么样诊断来自己异常跟踪到的问题,NullPointerException(NPE)和其它共同异常是什么,并且知道怎么修改他们。

什么是web 应用;什么是servlet,类,类库和数据放在Web应用中的什么位置。

怎么启动您的应用服务,怎么发布一个web应用到应用服务上。

什么是网络,IP协议概念的核心和那些sockets API。特别是,什么是TCP/IP。

什么是HTTP。核心协议和错误代码,Http头和大部分的验证细节。

什么是XML。尽管您不需要了解怎么样解释她或是其它的技术,但要知道怎么制定好的样式并且正确的XML。

Axis的安装

由于我们在本文中使用Jbuilder 8开发,所以如何安装Axis并不重要。如果您想了解Axis的安装,请您参考《Axis安装说明

开始Jbuider 8和Axis之旅

1、打开Jbuider 8,建一个新工程Axistour,再建一个Web应用tour,这里使用tomcat-4.0.6-LE-jdk14;

2、建一个Web Services,选择web services configuration,OK后按向导的缺省操作进行;

3、 检验Axis工程。编译Axisour工程,选择tour/Root directory/index.html,右键菜单中选择:Web run using “Web Services Server”,其中引号中的Web Services Server指web services的名字,如果您在前面的向导第二步输入了其它的名字,这里应显示您输入的那个名字;

4、点击index.html中的链接,如果全部正常执行,表示您的Axis已正常工作。特别注意的是”Validate”链接:

5、检验完成开始编写Axis的服务端程序,建一个自己定义的复杂数据类型Data(Data.java),这个类必需是遵循java bean规范。代码如下:

package com.neusoft.axistour;

import java.util.HashMap;

public class Data {

private String author=null;

private String address=null;

private HashMap hmap=null;

public Data() {

}

public String getAddress(){

return address;

}

public void setAddress(String address){

this.address=address;

}

public String getAouthor(){

return author;

}

public void setAouthor(String author){

this.author=author;

}

public HashMap getHMap(){

return hmap;

}

public void setHMap(HashMap map){

this.hmap=map;

}

}

6、创建Axis 服务类,DataServices.java

package com.neusoft.axistour;

import java.util.HashMap;

public class DataServices {

public Data buildData(String address,String aouthor ){

Data data=new Data();

data.setAddress(address) ;

data.setAouthor(aouthor) ;

HashMap map=new HashMap();

map.put("key1","value1") ;

map.put("key2","value2") ;

map.put("key3","value3") ;

data.setMap(map);

return data;

}

}

7、选择DataServices.java,右键菜单中选择Export as a web services,按缺省的向导,完成Axis的导出,生成deploy.wsdd和wsdl,其中deploy.wsdd至关重要,而wsdl文件在这里并不重要;

8、到此您已完成Axis的服务程序,编译整个工程,启动web services;

9、测试wsdl,如果您的Http端口是8080(如果您本机的web服务不是8080,请改为您本机相应的端号,请访问如下URL:http://localhost:8080/tour/services/DataServices?wsdl

10、 Java客户端代码您可以参考向导产生的Junit测试类,所以这里不再说明。您可以运行Junit测试类:com.neusoft.axistour.generated. DataServicesServiceTestCase,如果正确,则测试成功。

11、 VB客户端代码,由于使用了自定义的数据类型,所以只能使用microsoft soap开发包的低端API,这里使用SOAP Toolkit 2.0,代码如下:

Option Explicit

Private Sub Command1_Click()

On Error GoTo ErrorHandler

Dim Serializer As SoapSerializer

Dim Reader As SoapReader

Dim Connector As SoapConnector

Dim Method As String

Dim Dom As MSXML2.DOMDocument30

Dim Elm As IXMLDOMElement

Method = Trim(Text2.Text)

If Method = "" Then

MsgBox "请输入方法名!"

Exit Sub

End If

Set Connector = New HttpConnector

Connector.Property("EndPointURL") = Text1.Text

'Connector.Property("SoapAction") = BASE_SOAP_ACTION_URI & Method

Connector.BeginMessage

Set Serializer = New SoapSerializer

Serializer.Init Connector.InputStream

Serializer.startEnvelope

Serializer.startBody

Serializer.startElement Method, "", "", ""

'方法的参数

Serializer.startElement "address"

Serializer.writeString "dalian"

Serializer.endElement

Serializer.startElement "aouthor"

Serializer.writeString "neusoft"

Serializer.endElement

Serializer.endElement

Serializer.endBody

Serializer.endEnvelope

Connector.EndMessage

Set Reader = New SoapReader

Reader.Load Connector.OutputStream

If Not Reader.Fault Is Nothing Then

MsgBox Reader.faultstring.Text, vbExclamation

Else

Text3.Text = Reader.Dom.xml

End If

Exit Sub

ErrorHandler:

MsgBox "ERROR: " & Err.Description, vbExclamation

Err.Clear

Exit Sub

End Sub

Private Sub Form_Load()

Text1.Text = "http://localhost:8080/tour/services/DataServices?wsdl"

Text2.Text = ""

Text3.Text = ""

End Sub

12、 VC代码,建一个Win32 Console Application:

#include "stdafx.h"

#include <stdio.h>

#import "msxml3.dll"

using namespace MSXML2;

//根据自己机器的情况修改下面语句中指定的路径

#import "C:\Program Files\Common Files\MSSoap\Binaries\mssoap1.dll"

exclude("IStream", "ISequentialStream", "_LARGE_INTEGER",

"_ULARGE_INTEGER", "tagSTATSTG", "_FILETIME")

using namespace MSSOAPLib;

void axisTourClient(){

ISoapSerializerPtr Serializer;

ISoapReaderPtr Reader;

ISoapConnectorPtr Connector;

// 联接services

Connector.CreateInstance(__uuidof(HttpConnector));

Connector->Property["EndPointURL"] = "http://localhost:8080/tour/services/DataServices?wsdl";

Connector->Connect();

// Begin message

Connector->BeginMessage();

// Create the SoapSerializer

Serializer.CreateInstance(__uuidof(SoapSerializer));

// Connect the serializer to the input stream of the connector

Serializer->Init(_variant_t((IUnknown*)Connector->InputStream));

// Build the SOAP Message

Serializer->startEnvelope("","","");

Serializer->startBody("");

Serializer->startElement("buildData","","","");

//参数

Serializer->startElement("address","","","");

Serializer->writeString( "dalian");

Serializer->endElement();

Serializer->startElement("aouthor","","","");

Serializer->writeString ("neusoft");

Serializer->endElement();

Serializer->endElement();

Serializer->endBody();

Serializer->endEnvelope();

Connector->EndMessage();

Reader.CreateInstance(__uuidof(SoapReader));

Reader->Load(_variant_t((IUnknown*)Connector->OutputStream), "");

// 显示结果

printf("Response: %s\n", (const char*)Reader->DOM->xml );

}

int main(int argc, char* argv[])

{

CoInitialize(NULL);

axisTourClient();

CoUninitialize();

return 0;

}

13、 到现在为止可以说您走出Axis之旅的第一步。

最后说明:

1、在Axis中,将自定义的复杂数据类型序列化成xml有两种方法,一种方法是前面使用的JavaBean方法,使用Axis提供的Bean序列化工厂(BeanSerializerFactory)来实现序列化;另一种方法是自己编写序列化工厂和反序列化工厂,这种方法这里将不做说明。另外其它web service产品也应提供这两种方法;

2、虽然前面曾说到wsdl不重要,这只是说在这里不重要,Axis会利用web-inf下的server-config.wsdd web服务发布描述文件(Web Service Deployment Descriptor)生成wsdl,其实wsdl依然是web services的核心描述;

3、如果生成的war包在某些版本的tomcat或其它web引擎中不能运行,请参考Axis的安装说明;

如果您的程序没有正常运行,请您通过msn和我联系:jlzzb@hotmial.com

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有