学习Axis2笔记之四--创建pojo服务和客户端
2007-01-07 16:10
513 查看
首先确定已经安装好axis2 并把相应的war包放到servlet容器下,我用的是 tomcat.
容器自动部署war包,可以看到下面的目录结构:
我们做的服务放在services目录下就可以了。
第一步:创建服务 StockQuoteService.java
package samples.quickstart.service.pojo;
import java.util.HashMap;
public class StockQuoteService ...{
private HashMap map = new HashMap();
public double getPrice(String symbol) ...{
Double price = (Double) map.get(symbol);
if (price != null) ...{
return price.doubleValue();
}
return 42.00;
}
public void update(String symbol, double price) ...{
map.put(symbol, new Double(price));
}
public String echo(String name)...{
return "Hello,"+name+"!";
}
}
这个服务是一个POJO,不再解释。
第二步:创建服务描述 services.xml
<service name="StockQuoteService" scope="application" targetNamespace="http://quickstart.samples/">
<description>
Stock Quote Service
</description>
<messageReceivers>
<messageReceiver mep="http://www.w3.org/2004/08/wsdl/in-only"
class="org.apache.axis2.rpc.receivers.RPCInOnlyMessageReceiver"/>
<messageReceiver mep="http://www.w3.org/2004/08/wsdl/in-out"
class="org.apache.axis2.rpc.receivers.RPCMessageReceiver"/>
</messageReceivers>
<schema schemaNamespace="http://quickstart.samples/xsd"/>
<parameter name="ServiceClass">samples.quickstart.service.pojo.StockQuoteService</parameter>
</service>
在服务描述 services.xml 中定义了几个属性值。
第三步:组装成axis2服务的文件目录格式:
StockQuoteService
- META-INF
- services.xml
- samples
- quickstart
- service
- pojo
- StockQuoteService.class
文件夹名字为StockQuoteService,下面有两个子文件夹META-INF,samples分别存放服务描述XML和服务的CLASS。
第四步:将StockQuoteService文件夹拷到%TOMCAT_HOME%/webapps/axis2/WEB-INF/services下并启动TOMCAT,
这时访问:http://localhost:8080/axis2/rest/StockQuoteService/echo?name=World 看看是不是得到:
<ns:echoResponse>
<ns:return>Hello,World!</ns:return>
</ns:echoResponse>
yes! 说明服务已经配置成功了,接下来创建一个客户端访问服务:
客户端需要两个jar文件,可以在axis2安装目录的lib下找到,这两个是: axiom-api-1.2.jar,axis2-kernel-1.1.jar
AXIOMClient.java
package samples.quickstart.clients;
//axiom-api-1.2.jar
import org.apache.axiom.om.OMAbstractFactory;
import org.apache.axiom.om.OMElement;
import org.apache.axiom.om.OMFactory;
import org.apache.axiom.om.OMNamespace;
//axis2-kernel-1.1.jar
import org.apache.axis2.Constants;
import org.apache.axis2.addressing.EndpointReference;
import org.apache.axis2.client.Options;
import org.apache.axis2.client.ServiceClient;
public class AXIOMClient ...{
private static EndpointReference targetEPR =
new EndpointReference(
"http://localhost:8080/axis2/services/StockQuoteService");
public static OMElement getPricePayload(String symbol) ...{
OMFactory fac = OMAbstractFactory.getOMFactory();
OMNamespace omNs = fac.createOMNamespace(
"http://quickstart.samples/xsd", "tns");
OMElement method = fac.createOMElement("getPrice", omNs);
OMElement value = fac.createOMElement("symbol", omNs);
value.addChild(fac.createOMText(value, symbol));
method.addChild(value);
return method;
}
public static OMElement echoServie(String name)...{
OMFactory fac = OMAbstractFactory.getOMFactory();
OMNamespace omNs = fac.createOMNamespace(
"http://quickstart.samples/xsd", "tns");
OMElement method = fac.createOMElement("echo", omNs);
OMElement value = fac.createOMElement("name", omNs);
value.addChild(fac.createOMText(value, name));
method.addChild(value);
return method;
}
public static OMElement updatePayload(String symbol, double price) ...{
OMFactory fac = OMAbstractFactory.getOMFactory();
OMNamespace omNs = fac.createOMNamespace(
"http://quickstart.samples/xsd", "tns");
OMElement method = fac.createOMElement("update", omNs);
OMElement value1 = fac.createOMElement("symbol", omNs);
value1.addChild(fac.createOMText(value1, symbol));
method.addChild(value1);
OMElement value2 = fac.createOMElement("price", omNs);
value2.addChild(fac.createOMText(value2,
Double.toString(price)));
method.addChild(value2);
return method;
}
public static void main(String[] args) ...{
try ...{
OMElement echoServie = echoServie("Bene.Wu");
OMElement getPricePayload = getPricePayload("WSO");
OMElement updatePayload = updatePayload("WSO", 128.42);
Options options = new Options();
options.setTo(targetEPR);
options.setTransportInProtocol(Constants.TRANSPORT_HTTP);
ServiceClient sender = new ServiceClient();
sender.setOptions(options);
OMElement resultEcho = sender.sendReceive(echoServie);
String responseEcho = resultEcho.getFirstElement().getText();
System.err.println(responseEcho);
sender.fireAndForget(updatePayload);
System.err.println("done");
OMElement result = sender.sendReceive(getPricePayload);
String response = result.getFirstElement().getText();
System.err.println("Current price of WSO: " + response);
} catch (Exception e) ...{
e.printStackTrace();
}
}
}
运行一下,看看结果是不是:
Hello,Bene.Wu!
done
Current price of WSO: 128.42
哈,bingo! axis2一共有五种创建服务的方式和四种创建客户端的方式,我觉得只要选择自己适合的方式就可以了,没有必要纠缠在技术细节上。接下来我打算继续学习和研究axis2的一些实现细节以及OSGi插件在axis2中的应用。
axis2和OSGi一样 带来的不仅仅是服务实现技术,而是对软件架构的冲击。
我觉得SOA时代已经到来,你准备好了吗?
容器自动部署war包,可以看到下面的目录结构:
我们做的服务放在services目录下就可以了。
第一步:创建服务 StockQuoteService.java
package samples.quickstart.service.pojo;
import java.util.HashMap;
public class StockQuoteService ...{
private HashMap map = new HashMap();
public double getPrice(String symbol) ...{
Double price = (Double) map.get(symbol);
if (price != null) ...{
return price.doubleValue();
}
return 42.00;
}
public void update(String symbol, double price) ...{
map.put(symbol, new Double(price));
}
public String echo(String name)...{
return "Hello,"+name+"!";
}
}
这个服务是一个POJO,不再解释。
第二步:创建服务描述 services.xml
<service name="StockQuoteService" scope="application" targetNamespace="http://quickstart.samples/">
<description>
Stock Quote Service
</description>
<messageReceivers>
<messageReceiver mep="http://www.w3.org/2004/08/wsdl/in-only"
class="org.apache.axis2.rpc.receivers.RPCInOnlyMessageReceiver"/>
<messageReceiver mep="http://www.w3.org/2004/08/wsdl/in-out"
class="org.apache.axis2.rpc.receivers.RPCMessageReceiver"/>
</messageReceivers>
<schema schemaNamespace="http://quickstart.samples/xsd"/>
<parameter name="ServiceClass">samples.quickstart.service.pojo.StockQuoteService</parameter>
</service>
在服务描述 services.xml 中定义了几个属性值。
第三步:组装成axis2服务的文件目录格式:
StockQuoteService
- META-INF
- services.xml
- samples
- quickstart
- service
- pojo
- StockQuoteService.class
文件夹名字为StockQuoteService,下面有两个子文件夹META-INF,samples分别存放服务描述XML和服务的CLASS。
第四步:将StockQuoteService文件夹拷到%TOMCAT_HOME%/webapps/axis2/WEB-INF/services下并启动TOMCAT,
这时访问:http://localhost:8080/axis2/rest/StockQuoteService/echo?name=World 看看是不是得到:
<ns:echoResponse>
<ns:return>Hello,World!</ns:return>
</ns:echoResponse>
yes! 说明服务已经配置成功了,接下来创建一个客户端访问服务:
客户端需要两个jar文件,可以在axis2安装目录的lib下找到,这两个是: axiom-api-1.2.jar,axis2-kernel-1.1.jar
AXIOMClient.java
package samples.quickstart.clients;
//axiom-api-1.2.jar
import org.apache.axiom.om.OMAbstractFactory;
import org.apache.axiom.om.OMElement;
import org.apache.axiom.om.OMFactory;
import org.apache.axiom.om.OMNamespace;
//axis2-kernel-1.1.jar
import org.apache.axis2.Constants;
import org.apache.axis2.addressing.EndpointReference;
import org.apache.axis2.client.Options;
import org.apache.axis2.client.ServiceClient;
public class AXIOMClient ...{
private static EndpointReference targetEPR =
new EndpointReference(
"http://localhost:8080/axis2/services/StockQuoteService");
public static OMElement getPricePayload(String symbol) ...{
OMFactory fac = OMAbstractFactory.getOMFactory();
OMNamespace omNs = fac.createOMNamespace(
"http://quickstart.samples/xsd", "tns");
OMElement method = fac.createOMElement("getPrice", omNs);
OMElement value = fac.createOMElement("symbol", omNs);
value.addChild(fac.createOMText(value, symbol));
method.addChild(value);
return method;
}
public static OMElement echoServie(String name)...{
OMFactory fac = OMAbstractFactory.getOMFactory();
OMNamespace omNs = fac.createOMNamespace(
"http://quickstart.samples/xsd", "tns");
OMElement method = fac.createOMElement("echo", omNs);
OMElement value = fac.createOMElement("name", omNs);
value.addChild(fac.createOMText(value, name));
method.addChild(value);
return method;
}
public static OMElement updatePayload(String symbol, double price) ...{
OMFactory fac = OMAbstractFactory.getOMFactory();
OMNamespace omNs = fac.createOMNamespace(
"http://quickstart.samples/xsd", "tns");
OMElement method = fac.createOMElement("update", omNs);
OMElement value1 = fac.createOMElement("symbol", omNs);
value1.addChild(fac.createOMText(value1, symbol));
method.addChild(value1);
OMElement value2 = fac.createOMElement("price", omNs);
value2.addChild(fac.createOMText(value2,
Double.toString(price)));
method.addChild(value2);
return method;
}
public static void main(String[] args) ...{
try ...{
OMElement echoServie = echoServie("Bene.Wu");
OMElement getPricePayload = getPricePayload("WSO");
OMElement updatePayload = updatePayload("WSO", 128.42);
Options options = new Options();
options.setTo(targetEPR);
options.setTransportInProtocol(Constants.TRANSPORT_HTTP);
ServiceClient sender = new ServiceClient();
sender.setOptions(options);
OMElement resultEcho = sender.sendReceive(echoServie);
String responseEcho = resultEcho.getFirstElement().getText();
System.err.println(responseEcho);
sender.fireAndForget(updatePayload);
System.err.println("done");
OMElement result = sender.sendReceive(getPricePayload);
String response = result.getFirstElement().getText();
System.err.println("Current price of WSO: " + response);
} catch (Exception e) ...{
e.printStackTrace();
}
}
}
运行一下,看看结果是不是:
Hello,Bene.Wu!
done
Current price of WSO: 128.42
哈,bingo! axis2一共有五种创建服务的方式和四种创建客户端的方式,我觉得只要选择自己适合的方式就可以了,没有必要纠缠在技术细节上。接下来我打算继续学习和研究axis2的一些实现细节以及OSGi插件在axis2中的应用。
axis2和OSGi一样 带来的不仅仅是服务实现技术,而是对软件架构的冲击。
我觉得SOA时代已经到来,你准备好了吗?
相关文章推荐
- cxf学习笔记一:了解webservice的基本理论与创建服务端与客户端
- 一步一个脚印学习WCF之一WCF概要(中)之客户端与服务-WCF服务的创建与调用Demo
- node.js在windows下的学习笔记(5)---用NODE.JS创建服务器和客户端
- 学习笔记:web服务的创建及使用
- 转:CXF学习笔记一:如何创建、发布和访问基于CXF的服务
- Spring Cloud学习笔记2——客户端服务调用及负载均衡
- (学习Asp.net Ajax笔记一)使用 Microsoft AJAX Library 创建自定义客户端脚本之一
- Smart Client学习笔记(7) 使用多线程创建高响应智能客户端应用程序
- Quartz.NET 2.0 学习笔记(5) :实例创建Windows服务实现任务调度
- Quartz.NET 2.0 学习笔记(5) :实例创建Windows服务实现任务调度
- osgi学习笔记4之 web客户端调用已发布的接口服务
- ROS学习笔记十:用C++编写一个简单的服务和客户端
- Docker学习笔记(2)——创建实现SSH服务的Docker容器
- 【MongoDB学习笔记4】MongoDB管理客户端和创建数据库
- AngularJS学习笔记--服务的创建方法factory() service() provider()等
- CXF学习笔记一:如何创建、发布和访问基于CXF的服务
- twisted 学习笔记二:创建一个简单TCP客户端
- C#学习笔记19——Windows服务创建及安装
- Quartz.NET 2.0 学习笔记(5) :实例创建Windows服务实现任务调度 Quartz.NET 项目地址 http://quartznet.sourceforge.net/ Quar
- Quartz.NET 2.0 学习笔记(5) :实例创建Windows服务实现任务调度