axis2生成cdata(axis2 生成的客户端代码怎么调用)

本文目录
axis2 生成的客户端代码怎么调用
可以参考一下这个例子, 在编写客户端代码时,调用类似以下函数adb_getDepStringResponse_get_return ,返回一个axutil_base64_binary_t* 类型的指针数据 ,而不是对应于服务器端得返回类型为String的char *。在处理axutil_base64_binary_t* 类...
Axis2的具体使用
为了搞个Web Services,让我真是煞费苦心.还好最后用到了axis,在axis上发布Web Services是一件很轻松的事情.甚至不做配置的情况下都可以采用即时发布.就象JSP的发布
安装axis需要Servlet容器,我用的是Tomcat-5.0.28,下载Tomcat和axis我就不说了,下载后将axis解压后,将axis文件夹考到Tomcat的webapps下.
设置环境变量是非常重要的,设置环境变量:AXISCLASSPATH为:
%AXIS_LIB%axis.jar;%AXIS_LIB%commons-discovery-0.2.jar;%AXIS_LIB%commons-logging-1.0.4.jar;%AXIS_LIB%jaxrpc.jar;%AXIS_LIB%saaj.jar;%AXIS_LIB%log4j-1.2.8.jar;%AXIS_LIB%wsdl4j-1.5.1.jar;%AXIS_LIB%xml-apis.jar;%AXIS_LIB%xercesImpl.jar
设置AXIS_LIB为随便一个文件夹,将上面的一堆jar包搞进去.再将activation.jar, mail.jar, wsdl4j-1.5.1.jar搞到 %CATALINA_HOME%commonlib下.
***隐藏网址***
axis支持两种发布方式:(先启动Tomcat)
1.即时发布:直接使用java语言.jws文件,将它放到axis目录下.
实例:用文本器编写HelloWorld.jws
public class HelloWorld
{
public String helloWorld(){
System.out.println("Hello World!");
return "Hello World!";
}
}
***隐藏网址***
2.定制发布:将编译完的.class文件放到axisWEB-INF,要包含包的文件夹.然后编写.wsdd文件,用org.apache.axis.client.AdminClient来发布
实例:编写并编译文件Capacity.java.
package samples.capacity;
public class Capacity
{
public double convertGallon2Litre(double gallon,String user){
if("Andy".equals(user))
return gallon * 4.546;
else
return 0.0d;
}
}
将Capacity.class文件拷贝到axisWEB-INFclasses下(带着文件夹拷),编写deploy.wsdd文件
***隐藏网址***
《service name="Capacity" provider="java:RPC"》
《parameter name="className" value="samples.capacity.Capacity"/》
《parameter name="allowedMethods" value="*"/》
《/service》
《/deployment》
拷到Capacity.class所在的目录,在控制台切换到该目录执行:
java -cp %AXISCLASSPATH% org.apache.axis.client.AdminClient deploy.wsdd
显示如下信息说明发布完毕:
Processing file deploy.wsdd
《Admin》Doneprocessing《/Admin》
***隐藏网址***
调用Web Services:编写AXISTest.java文件:
package axisexercise;
import org.apache.axis.client.Call;
import org.apache.axis.client.Service;
import org.apache.axis.encoding.XMLType;
import javax.xml.rpc.ParameterMode;
public class AXISTest
{
public static void main(String args) throws Exception{
Service service = new Service();
Call call = ( Call ) service.createCall();
//////////访问即时发布的Distance服务
//设置访问点
***隐藏网址***
//设置操作名
call.setOperationName("convertMile2Kilometre");
//设置入口参数
call.addParameter("op1",XMLType.XSD_DOUBLE,ParameterMode.IN);
call.setReturnType( XMLType.XSD_DOUBLE );
Double d1 = new Double( 190 );
//调用服务
System.out.println(d1 + " 英里相当于 " + call.invoke(new Object {d1}) + " 公里!");
//////////访问定制发布的Capacity服务
call = ( Call ) service.createCall();
//设置访问点
***隐藏网址***
//设置操作名
call.setOperationName("convertGallon2Litre");
//设置入口参数
call.addParameter("op1",XMLType.XSD_DOUBLE,ParameterMode.IN);
call.addParameter("op2",XMLType.XSD_STRING,ParameterMode.IN);
call.setReturnType( XMLType.XSD_DOUBLE );
d1 = new Double( 10.00 );
String str1 = "ss";
//调用服务
System.out.println(d1 + " 加仑相当于 " + call.invoke( new Object {d1,str1} ) + " 升!");
}
}
编译:javac -classpath .;%AXISCLASSPATH% AXISTest.java
执行:java -classpath .;%CATALINA_HOME%commonlibwsdl4j-1.5.1.jar;%AXISCLASSPATH% axisexercise.AXISTest
显示如下结果:
log4j:WARN No appenders could be found for logger (org.apache.axis.i18n.ProjectResourceBundle).
log4j:WARN Please initialize the log4j system properly.
190.0 英里相当于 305.71 公里!
10.0 加仑相当于 0.0 升!
若将AXISTest.java中的str1改为Andy,则接过就是45.46升
axis2 wsdl生成java文件 参数类型与wsdl定义的不一样
webservice存在跨平台、跨语言的调用,axis为了适应这些变化,对类型都做了封装处理。
如果需要发布ws,安装帮助(网上的也行)一步步来,不要用axis通过wsdl自动生成的代码。
当然,webservice在不同语言间互相调用,不是很友好
所以,用了就不要纠结这个问题。
axis2问题,axis2 omelement对象怎么传递数组参数
Axis2是下一代 Apache Axis。Axis2 虽然由 Axis 1.x 处理程序模型提供支持,但它具有更强的灵活性并可扩展到新的体系结构。Axis2 基于新的体系结构进行了全新编写,而且没有采用 Axis 1.x 的常用代码。支持开发 Axis2 的动力是探寻模块化更强、灵活性更高和更有效的体系结构,这种体系结构可以很容易地插入到其他相关 Web 服务标准和协议(如 WS-Security、WS-ReliableMessaging 等)的实现中。
Apache Axis2 是Axis的后续版本,是新一代的SOAP引擎。
主要特点
1)采用名为 AXIOM(AXIs Object Model)的新核心 XML 处理模型,利用新的XML解析器提供的灵活性按需构造对象模型。
2)支持不同的消息交换模式。目前Axis2支持三种模式:In-Only、Robust-In和In-Out。In-Only消息交换模式只有SOAP请求,而不需要应答;Robust-In消息交换模式发送SOAP请求,只有在出错的情况下才返回应答;In-Out消息交换模式总是存在SOAP请求和应答。
3)提供阻塞和非阻塞客户端 API。
4)支持内置的 Web服务寻址 (WS-Addressing) 。
5)灵活的数据绑定,可以选择直接使用 AXIOM,使用与原来的 Axis 相似的简单数据绑定方法,或使用XMLBeans、JiBX 或 JAXB 2.0 等专用数据绑定框架。
6)新的部署模型,支持热部署。
7)支持HTTP,SMTP,JMS,TCP传输协议。
8)支持REST (Representational State Transfer)。
本段方式比较
其中前面两种都是从基本的代码开始写起的.后面三种是从WSDL生成代码框架.
Deploying POJOs
(Plain Old Java Objects)
JavaBean类需满足JavaBean规范,如采用标准的setter/getter方法设置成员变量.POJO只是普通的java类.可以认为,JavaBean类都是是POJO,但POJO类未必是JavaBean!
Building the service using AXIOM
需要我们在代码中,获取XML利用STAX进行获取相关返回值,和创建消息等.是一个比较底层的创建方式.比POJOS复杂.
SAX实际上是定义了一个拉式(pull)的xml解析器。 一般的解析xml是通过DOM或SAX形式。
DOM的问题是需要一次性读入整个XML,对于大型的xml效率低。STAX是基于事件, 当读取到文档的某个位置会触发到某个事件。而这个读取过程是不受控的, 就是必须一次读完(对这个不熟悉)。这就是所谓推(push)式的。即把整个文件推给client。
STAX也是类似于SAX的事件,但是是由client的next()来控制指针的前进, 是把文件的内容pull出来的。这大大增强了客户端的控制能力,例如写入和修改节点。
SAX:Simple API for XMLStAX(Streaming API for XML)是标准的XML处理API,它能够从应用程序的stream对象解析XML数据或把XML数据转换成stream对象。STAX是一个用Java实现的XML拉式解析器

更多文章:
blast premier春季赛(csgo战队vitality有谁)
2026年9月7日 21:50
全球新冠肺炎疫情背景下航运发展(盐田港复苏日志:半年历劫从“低谷”到“爆仓” 疫情之后巨轮如何越洋航行)
2026年9月7日 17:10
matlab求解带字母参数方程组(我想matlab求一个关于x,y的方程组 ab c d f e h m n 都是参数)
2026年9月7日 16:30
oracle中的循环语句(下面哪个不是oracle程序设计中的循环语句 a for)
2026年9月7日 15:30
电脑里2个系统怎么删除一个(电脑开机显示有两个系统,如何删除一个)
2026年9月7日 12:20
scrollthrough意思(“scroll”是什么意思)
2026年9月7日 08:00




