`

axis2 webservice学习笔记一

阅读更多

axis2 webservice


axis 包括以下几部分
消息子系统
传输框架子系统
数据编码子系统


下载axis2
地址如下:
http://axis.apache.org/axis2/java/core/download.cgi




环境搭建
1 eclipse 新建工程axis2webservice
2 axis2-1.6.2-bin\axis2-1.6.2\webapp\axis2-web整个文件夹放到webcontent目录下
3 添加servlet解析所用jar包
javax.servlet.jsp.jar
servlet-api-2.5.jar
4 WEB-INF下新建service文件夹
5 repository\modules目录放到WEB-INF目录下




service服务端


示例代码helloworld
1
/**
* axis2webservice的service端
*
* @time 上午11:36:53
* @author retacn yue
* @Email zhenhuayue@sina.com
*/
public class HelloWorld {
public OMElement sayHello(OMElement element) {
element.build();
element.detach();


return element;
}
}


2 在service目录中新建与工程同名文件夹HelloWorld
并在该目录下添加service.xml
示例代码如下:
<service name="HelloWorld" >
<parameter name="ServiceClass"


locked="xsd:false">cn.yue.axis2service</parameter>
<operation name="sayHello">
<actionMapping>urn:sayHello</actionMapping>
<messageReceiver


class="org.apache.axis2.receivers.RawXMLINOutMessageReceiver"/>
</operation>
</service>




3修改web.xml文件
<servlet>
<servlet-name>AxisServlet</servlet-name>
<servlet-class>
org.apache.axis2.transport.http.AxisServlet
</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>


<servlet-mapping>
<servlet-name>AxisServlet</servlet-name>
<url-pattern>/servlet/AxisServlet</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>AxisServlet</servlet-name>
<url-pattern>*.jws</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>AxisServlet</servlet-name>
<url-pattern>/services/*</url-pattern>
</servlet-mapping>

<servlet>
<servlet-name>AxisAdminServlet</servlet-name>
<servlet-class>org.apache.axis2.transport.http.AxisAdminServlet</servlet-


class>
<load-on-startup>100</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>AxisAdminServlet</servlet-name>
<url-pattern>/axis2-admin/*</url-pattern>
</servlet-mapping>

注:
org.apache.axis2.transport.http.AxisAdminServlet找不到类
直接导原码




4将工程部署到tomcat
http://localhost:8089/axis2-web/


客户端
四种不同类型客户端
1 block 阻塞式客户端
/**
* 传统客户端(阻塞式)
*
* @time 下午1:49:52
* @author retacn yue
* @Email zhenhuayue@sina.com
*/
public class HelloWorldClient {
private static EndpointReference endpointReference = new EndpointReference


("http://localhost:8089/services/HelloWorld");


public void sayHello() {
Options options = new Options();
options.setAction("urn:sayHello");
options.setTo(endpointReference);


ServiceClient sender = null;


try {
sender = new ServiceClient();
sender.setOptions(options);
OMFactory factory = OMAbstractFactory.getOMFactory();
OMNamespace namespace = factory.createOMNamespace


("http://axis2service.yue.cn", "");


OMElement method = factory.createOMElement("sayHello",


namespace);
OMElement name = factory.createOMElement("name", namespace);
name.setText("yue");
method.addChild(name);
method.build();


OMElement response = sender.sendReceive(method);
System.out.println(response);
OMElement element = response.getFirstChildWithName(new


QName("http://axis2service.yue.cn", "name"));
System.out.println(element.getText());
} catch (AxisFault e) {
System.out.println("error");
e.printStackTrace();
}


}


/**
* @param args
*/
public static void main(String[] args) {
HelloWorldClient client = new HelloWorldClient();
client.sayHello();
}


}
2 non block 非阻塞式客户端
/**
*
* @time 下午3:27:21
* @author retacn yue
* @Email zhenhuayue@sina.com
*/
public class HelloWorldNonBlockCB implements AxisCallback {
private boolean complete = false;


@Override
public void onMessage(MessageContext msgContext) {
System.out.println(msgContext.getEnvelope().getBody());
OMElement element = msgContext.getEnvelope().getBody


().getFirstElement();
OMElement result = element.getFirstChildWithName(new QName


("http://axis2service.yue.cn", "name"));
System.out.println(result.getText());
synchronized (this) {
this.notify();
}
}


@Override
public void onFault(MessageContext msgContext) {
System.out.println(msgContext.getEnvelope().getBody().getFault


().toString());
synchronized (this) {
this.notify();
}
}


@Override
public void onError(Exception e) {
e.printStackTrace();
synchronized (this) {
this.notify();
}
}


@Override
public void onComplete() {
this.complete = true;
synchronized (this) {
this.notify();
}
}


public boolean isComplete() {
return complete;
}


}






/**
* 非阻塞式
*
* @time 下午3:37:31
* @author retacn yue
* @Email zhenhuayue@sina.com
*/
public class HelloWorldClient2 {
private static EndpointReference endpointReference = new EndpointReference


("http://localhost:8089/services/HelloWorld");


public void sayHello() {
OMFactory factory = OMAbstractFactory.getOMFactory();
OMNamespace namespace = factory.createOMNamespace


("http://axis2service.yue.cn", "");
OMElement method = factory.createOMElement("sayHello", namespace);
OMElement name = factory.createOMElement("name", namespace);
name.setText("zhenhua");
method.addChild(name);
method.build();


Options options = new Options();
options.setTo(endpointReference);
ServiceClient sender = null;


try {
HelloWorldNonBlockCB blockCB = new HelloWorldNonBlockCB();
sender = new ServiceClient();
sender.setOptions(options);
sender.sendReceiveNonBlocking(method, blockCB);
synchronized (blockCB) {
try {
blockCB.wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
} catch (AxisFault e) {
e.printStackTrace();
} finally {
if (null != sender) {
try {
sender.cleanup();
} catch (AxisFault e) {
e.printStackTrace();
}
}
}
}


public static void main(String[] args) {
HelloWorldClient2 client2 = new HelloWorldClient2();
client2.sayHello();
}


}






4 双工非阻塞
在客户端打开一个监听
设置客户端为双工全开
寻址
engageModule(Constants.MODULE_ADDRESSING);
/**
* 非阻塞全双工
*
* @time 下午4:04:55
* @author retacn yue
* @Email zhenhuayue@sina.com
*/
public class HelloWorldDualNonBlock {
private static EndpointReference endpointReference = new EndpointReference


("http://localhost:8089/services/HelloWorld");


public void sayHello() {
OMFactory factory = OMAbstractFactory.getOMFactory();
OMNamespace namespace = factory.createOMNamespace


("http://axis2service.yue.cn", "");
OMElement method = factory.createOMElement("sayHello", namespace);
OMElement name = factory.createOMElement("name", namespace);
name.setText("yuezhenhua");
method.addChild(name);
method.build();


Options options = new Options();
options.setTo(endpointReference);
//设置客户端为双工全开
options.setTransportInProtocol(Constants.TRANSPORT_HTTP);
//在客户端打开一个监听
options.setUseSeparateListener(true);
options.setAction("urn:sayHello");


ServiceClient sender = null;
HelloWorldNonBlockCB blockCB = new HelloWorldNonBlockCB();


try {
sender = new ServiceClient();
//寻址
sender.engageModule(Constants.MODULE_ADDRESSING);
sender.setOptions(options);
sender.sendReceiveNonBlocking(method, blockCB);
synchronized (blockCB) {
try {
blockCB.wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
} catch (AxisFault e) {
e.printStackTrace();
} finally {
try {
if (null != sender) {
sender.cleanup();
}
} catch (AxisFault e) {
e.printStackTrace();
}


}
}


public static void main(String[] args) {
HelloWorldDualNonBlock client = new HelloWorldDualNonBlock();
client.sayHello();
}


}


axis2-1.6.2-bin\axis2-1.6.2\conf目录下的axis2.xml文件放到service端的WEB-INF目录下

分享到:
评论

相关推荐

    webservice学习笔记doc文档

    在本学习笔记中,主要介绍了使用Apache Axis2框架来开发和测试Web Service的过程。Apache Axis2是Apache SOAP栈的一个实现,提供了简单且高效的Web Service开发工具。 首先,开发者需要在Eclipse集成开发环境中搭建...

    Axis2,CXF版本学习笔记

    当我们谈论“Axis2,CXF版本学习笔记”时,这通常涉及到两个主要的Java Web服务框架:Apache Axis2和Apache CXF。这两个框架都用于构建和部署SOAP(简单对象访问协议)和RESTful(Representational State Transfer)...

    WebService学习笔记0001

    【WebService学习笔记0001】 在IT领域,WebService是一种基于开放标准(如XML、SOAP、WSDL和UDDI)的互操作性技术,它允许不同系统间的应用程序通过网络进行通信。本学习笔记将围绕WebService的核心概念、工作原理...

    axis1.4学习文档

    axis1.4 webservice个人学习笔记

    Axis学习笔记(网页转贴)

    **Axis学习笔记(网页转贴)** Axis是一个开源的Java库,主要用于创建和使用Web服务。它是Apache软件基金会的一部分,广泛应用于开发基于SOAP(简单对象访问协议)的Web服务。本学习笔记将深入探讨Axis在Web服务开发...

    axis2学习笔计

    标题“Axis2学习笔记”揭示了本篇内容主要围绕Apache Axis2框架展开,这是一个用于构建Web服务和客户端的开源工具。Axis2是基于Axis1的升级版,它提供了更高效、模块化和可扩展的架构,使得开发和部署Web服务变得...

    webservice入门学习代码笔记

    Web服务(WebService)是一种基于网络的、分布式的模块化组件,它允许不同系统之间的应用程序进行交互和通信。这种技术基于开放标准,如XML(可扩展标记语言)、SOAP(简单对象访问协议)、WSDL(Web服务描述语言)...

    axis学习资料汇总

    axis学习资料汇总: Axis实例与分析详解; Axis学习笔记.pdf; Tomcat5.0.28下AXIS完全安装手册.doc; Axis1.4 开发指南_V1.0.pdf; AXIS入门及应用.rar; Axis开发Web+Services.doc 等等

    axis开发资料

    项目收集的axis的相关资料~~ Axis.pdf ...AXIS学习笔记.txt WebService之axis的复杂对象传输方案.txt 使用Apache Axis部署 Web服务时的常见问题及其解决方法.txt 使用Axis开发Web Service程序.txt

    webservice 学习相关

    "新建 文本文档.txt"可能是一份简单的文本文件,可能包含笔记、命令行指令或者一些关键概念的解释,对于学习过程来说也是重要的参考资料。 "axis_百度百科.files"和"JAVA WebService实例 - 我的文章 - 阳光博客(IT...

    电信SP业务开发实例

    AXIS2是一个SOAP引擎,用于处理Web服务,其lib目录下的jar包是开发WebService业务的关键依赖。 配置环节,需要将AXIS2的bin目录添加到系统Path环境变量中,这样可以在命令行中直接调用AXIS2的相关工具。将axis2.war...

    webservices 资源

    文件名“63535299webservice-example.rar”可能包含了一个Web服务的示例代码,这可能是用Java或C#实现的一个基本服务,可以用来学习如何定义服务操作、处理请求和返回响应。 “105230312stock.rar”可能是一个关于...

Global site tag (gtag.js) - Google Analytics