`

axis2 webservice学习笔记二

阅读更多

使用简单java类型构建webservice
示例代码如下:


service端
/**
* 使用简单的java类型构建webservice
*
* @time 下午6:45:28
* @author retacn yue
* @Email zhenhuayue@sina.com
*/
public class HelloJava {


public String sayHello(String name) throws XMLStreamException {
StringBuffer sb = new StringBuffer();
sb.append("hello ");
sb.append(name);
return sb.toString();
}


}






<service name="HelloJava" >
<parameter name="ServiceClass"


locked="false">cn.yue.axis2service.jstyle.HelloJava</parameter>
<messageReceivers>
<messageReceiver
mep="http://www.w3.org/2004/08/wsdl/in-out"
class="org.apache.axis2.rpc.receivers.RPCMessageReceiver"/>
</messageReceivers>
<actionMapping>urn:sayHello</actionMapping>
</service>




客户端
/**
* 阻塞回调
*
* @time 下午3:27:21
* @author retacn yue
* @Email zhenhuayue@sina.com
*/
public class HelloJavaNonBlockCB implements AxisCallback {
private boolean complete = false;


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


().getFirstElement();
//此处第二个参数用return
OMElement result = element.getFirstChildWithName(new QName


("http://jstyle.axis2service.yue.cn", "return"));
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;
}
}




**
* service端用java的简单类型
*
* 非阻塞(异步)全双工
*
* @time 下午4:04:55
* @author retacn yue
* @Email zhenhuayue@sina.com
*/
public class HelloJavaDualNonBlock {
private static EndpointReference endpointReference = new EndpointReference


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


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


("http://jstyle.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;
HelloJavaNonBlockCB blockCB = new HelloJavaNonBlockCB();


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) {
HelloJavaDualNonBlock client = new HelloJavaDualNonBlock();
client.sayHello();
}


}






soap ui生成的客户端
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"


xmlns:jst="http://jstyle.axis2service.yue.cn">
<soapenv:Header/>
<soapenv:Body>
<jst:sayHello>
<!--Optional:-->
<jst:name>yuezhenhua</jst:name>
</jst:sayHello>
</soapenv:Body>
</soapenv:Envelope>




java 代码实现
OMFactory factory = OMAbstractFactory.getOMFactory();
OMNamespace namespace = factory.createOMNamespace


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








复杂类型的webservcie


service端


示例代码如下:


/**
*
* @time 下午7:50:05
* @author retacn yue
* @Email zhenhuayue@sina.com
*/
public class Person implements Serializable, Cloneable {
private static final long serialVersionUID = 1L;
private String name = "";
private String age = "";


public String getName() {
return name;
}


public void setName(String name) {
this.name = name;
}


public String getAge() {
return age;
}


public void setAge(String age) {
this.age = age;
}


protected Object clone() {
Object object = null;
try {
object = super.clone();
} catch (CloneNotSupportedException e) {
e.printStackTrace();
object = null;
}
return object;
}
}






/**
* java复杂类型
*
*
*
* @time 下午7:53:21
* @author retacn yue
* @Email zhenhuayue@sina.com
*/
public class PersonService {
public OMElement getPersons(OMElement person) {
Person person2 = new Person();
List<Person> persons = new ArrayList<Person>();
person2.setAge("28");
person2.setName("yuezhenhua");


persons.add((Person) person2.clone());


person2.setAge("22");
person2.setName("zhansan");
persons.add((Person) person2.clone());


OMElement element = BeanUtil.getOMElement(new QName("root"),


persons.toArray(), new QName("person"), false, null);
return element;
}
}




<service name="PersonService" >
<parameter name="ServiceClass"


>cn.yue.axis2service.javacomplextype.PersonService</parameter>
<operation name="getPersons">
<actionMapping>urn:getPersons</actionMapping>
<messageReceiver


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






客户端
/**
*
* @time 下午7:50:05
* @author retacn yue
* @Email zhenhuayue@sina.com
*/
public class Person implements Serializable, Cloneable {
private static final long serialVersionUID = 1L;
private String name = "";
private String age = "";


public String getName() {
return name;
}


public void setName(String name) {
this.name = name;
}


public String getAge() {
return age;
}


public void setAge(String age) {
this.age = age;
}


protected Object clone() {
Object object = null;
try {
object = super.clone();
} catch (CloneNotSupportedException e) {
e.printStackTrace();
object = null;
}
return object;
}
}








/**
* 阻塞回调
*
* @time 下午3:27:21
* @author retacn yue
* @Email zhenhuayue@sina.com
*/
public class GetPersonNonBlockCB implements AxisCallback {


@Override
public void onMessage(MessageContext msgContext) {
OMElement result = msgContext.getEnvelope().getBody


().getFirstElement();
System.out.println("result=" + result);


if (null == result) {
return;
}


@SuppressWarnings("rawtypes")
Iterator iterator = result.getChildElements();
while (iterator.hasNext()) {
OMNode omNode = (OMNode) iterator.next();
if (omNode.getType() == OMNode.ELEMENT_NODE) {
OMElement element = (OMElement) omNode;
if (element.getLocalName().toLowerCase().equals


("person")) {
try {
Person person = (Person)


BeanUtil.processObject(element, Person.class, null, true, new DefaultObjectSupplier


(), null);
System.out.println("person name=" +


person.getName() + " \n person age=" + person.getAge());
} catch (AxisFault e) {
e.printStackTrace();
}
}


}
}
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() {
synchronized (this) {
this.notify();
}
}


}




/**
* service端用java的简单类型
*
* 非阻塞(异步)全双工
*
* @time 下午4:04:55
* @author retacn yue
* @Email zhenhuayue@sina.com
*/
public class GetPersonDualNonBlock {
private static EndpointReference endpointReference = new EndpointReference


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


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


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


try {
sender = new ServiceClient();
sender.setOptions(options);
// 寻址
sender.engageModule(Constants.MODULE_ADDRESSING);
OMFactory factory = OMAbstractFactory.getOMFactory();


OMNamespace namespace = factory.createOMNamespace


("http://javacomplextype.axis2service.yue.cn", "");
OMElement method = factory.createOMElement("getPersons",


namespace);
OMElement person = factory.createOMElement("person",


namespace);
person.setText("");
method.addChild(person);
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) {
GetPersonDualNonBlock client = new GetPersonDualNonBlock();
client.getPersons();
}
}


分享到:
评论

相关推荐

    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个人学习笔记

    axis2学习笔计

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

    Axis学习笔记(网页转贴)

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

    webservice入门学习代码笔记

    6. **工具与框架**:在学习过程中,可能会用到各种工具和框架,例如Apache Axis、CXF、Gson、JAXB等,它们可以帮助简化Web服务的开发和测试。 7. **安全性**: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