一、webservice搭建(这里我们采用axis2)
1、建立一个web应用项目,在web-inf目录下创建如下结构
这里的conf和modules目录可以忽略,主要是需要创建一个services目录,在其目录下有两个文件services.list和version-1.6.2.aar,这两个文件可以到axis2官网下载axis2-1.6.2-war.zip,在这个war包中web-inf目录下有我们需要的文件
2、在services目录下,再创建一个目录叫PHServices(自主命名),里面建立META-INF目录,最后配置我们需要的services.xml文件,services.xml内容如下
(1)其中name=“TransferService”代表的是webservice的名字,targetNamespace命名空间对应的是webservice实现类包名的反序
(2)在messageReceivers定义中,分别有mep= "http://www.w3.org/2004/08/wsdl/in-only"和mep= "http://www.w3.org/2004/08/wsdl/in-out",in-only代表的含义是在webservice接口中定义的方法是没有返回值的,也就是方法体声明的是void类型,in-out代表的则是方法体都是返回值的。
3、在web-inf目录下面创建一个applicationContext.xml文件,目的是定义webservice实现类对应的bean
4、引入axis2需要的jar文件(axis2-spring、axis2-jaxws、axiom-impl、axiom-api、axis2-adb、axis2-kernel、axis2-transport-http、axis2-transport-local、neethi、XmlSchema),即webservice服务搭建完毕。
二、采用axis2客户端调用webservice服务
1、可以直接通过webservice client生成客户端代码,调用webservice服务,这种方法简单,但是生成的代码不易于重用。
2、axis2异步调用webservice服务,直接上代码。
public class ClientTest {
private static EndpointReference targetEPR = new EndpointReference("http://172.16.1.201:2057/MessageService.svc?wsdl");
public static void main(String[] args) throws Exception {
ClientTest s = new ClientTest();
s.getResult();
}
public void getResult() throws Exception {
ServiceClient sender = new ServiceClient();
sender.setOptions(buildOptions());
OMElement method = sender.sendReceive(buildParam());
System.out.println(method.toString());
}
private static OMElement buildParam() {
OMFactory fac = OMAbstractFactory.getOMFactory();
OMNamespace omNs = fac.createOMNamespace("http://tempuri.org/", "ns");
OMElement method = fac.createOMElement("QueryRoadCondition", omNs);
OMElement value = fac.createOMElement("start", omNs);
value.setText("2013-12-30T17:58:00");
method.addChild(value);
OMElement value1 = fac.createOMElement("end", omNs);
value1.setText("2013-12-30T19:50:00");
method.addChild(value1);
return method;
}
private static Options buildOptions() {
Options options = new Options();
options.setSoapVersionURI(SOAP11Constants.SOAP_ENVELOPE_NAMESPACE_URI);
options.setAction("http://tempuri.org/IMessageService/QueryRoadCondition");
options.setTo(targetEPR);
options.setTransportInProtocol(Constants.TRANSPORT_HTTP);
return options;
}
}