这两天没有什么事,想研究一下webservices,所以在网上看一些资料,终于完成了个简单的例子
在这之前首先要到apache网站上下载所需要的包,axis2-bin和axis2-war;
将下载的包进行解压,把axis2.war 复制到tomcat/webapps目录下,如果是用jboss也是一样,我在jboss里也试一下但没有成功,启动的时候报错了。启动tomcat,在浏览器里输入地址http://localhost/axis2,如果你出现的welcome的界面说明我你的第一步也成功了。我们服务发布以后点击services就可以看到。
需要说明的是axis1和axis2在tomcat上的发布还不样,axis1还需要将mail.jar/activation.jar/tools.jar(在jdk的lib下面)/xmlsec.jar拷贝到tomcat/lib目录下,
第二步就可写一个小的程序来测试下能不能将服务发布上去
public class MyWS {
public String ws(){
return "WS测试";
}
}
只是这样还不能将服务发布去,还需要进行一些配置,因为我建的是一个java project,所以需要在src下新建一个META-INF,在这个文件夹下面创建一个services.xml;
<?xml version="1.0" encoding="UTF-8"?>
<service name="MyWS">
<Description>WSTest</Description>//对这类进行描述,不支持中文
<parameter name="ServiceClass" locked="false">com.ouruan.ws.MyWS</parameter>
<operation name="ws">//方法名
<messageReceiver
class="org.apache.axis2.rpc.receivers.RPCMessageReceiver">
</messageReceiver>
</operation>
</service>
这个serivecs.xml的作用就是将我们需要发布的服务在这个文件里面进行一下声明和描述
现在就将这个项目导出成jar文件,但还需要把导出后的jar文件重命名成xx.aar文件才行,将这个aar文件放入到tomcat/axis2/WEB-INF/services目录下,启动tomcat,
http://localhost/axis2点击services就可以看到,说明我们服务就已经成功了!
下面写一段代码来测试一下
public class TestWS {
public static void main(String[] args) throws AxisFault {
RPCServiceClient reclient = new RPCServiceClient();
Options opt = new Options();
opt.setTo(new EndpointReference("http://localhost/axis2/services/MyWS"));//这个参数就是Service EPR地址
opt.setAction("urn:ws");//当你在页面点开我们发布成功的服务就可以看到一个xml文件在<wsdl:portType name="MyWSPortType">下面 wsaw:Action="urn:ws"
reclient.setOptions(opt);
OMElement element = reclient.invokeBlocking(new QName("http://ws.com","return"),new Object[]{});//这个地址就是你的类里的包路径,同样在那个xml文件中也可以找到targetNamespace="http://ws.com",参数return表示会返回结果,new Object[]{},是这个方法需要的参数。
Iterator values = element.getChildrenWithName(new QName("http://ws.com","return"));
while(values.hasNext()){
OMElement omEclement = (OMElement)values.next();
System.out.println(omEclement.getText());
}
}
运行的结果为"WS测试"
在这之前首先要到apache网站上下载所需要的包,axis2-bin和axis2-war;
将下载的包进行解压,把axis2.war 复制到tomcat/webapps目录下,如果是用jboss也是一样,我在jboss里也试一下但没有成功,启动的时候报错了。启动tomcat,在浏览器里输入地址http://localhost/axis2,如果你出现的welcome的界面说明我你的第一步也成功了。我们服务发布以后点击services就可以看到。
需要说明的是axis1和axis2在tomcat上的发布还不样,axis1还需要将mail.jar/activation.jar/tools.jar(在jdk的lib下面)/xmlsec.jar拷贝到tomcat/lib目录下,
第二步就可写一个小的程序来测试下能不能将服务发布上去
public class MyWS {
public String ws(){
return "WS测试";
}
}
只是这样还不能将服务发布去,还需要进行一些配置,因为我建的是一个java project,所以需要在src下新建一个META-INF,在这个文件夹下面创建一个services.xml;
<?xml version="1.0" encoding="UTF-8"?>
<service name="MyWS">
<Description>WSTest</Description>//对这类进行描述,不支持中文
<parameter name="ServiceClass" locked="false">com.ouruan.ws.MyWS</parameter>
<operation name="ws">//方法名
<messageReceiver
class="org.apache.axis2.rpc.receivers.RPCMessageReceiver">
</messageReceiver>
</operation>
</service>
这个serivecs.xml的作用就是将我们需要发布的服务在这个文件里面进行一下声明和描述
现在就将这个项目导出成jar文件,但还需要把导出后的jar文件重命名成xx.aar文件才行,将这个aar文件放入到tomcat/axis2/WEB-INF/services目录下,启动tomcat,
http://localhost/axis2点击services就可以看到,说明我们服务就已经成功了!
下面写一段代码来测试一下
public class TestWS {
public static void main(String[] args) throws AxisFault {
RPCServiceClient reclient = new RPCServiceClient();
Options opt = new Options();
opt.setTo(new EndpointReference("http://localhost/axis2/services/MyWS"));//这个参数就是Service EPR地址
opt.setAction("urn:ws");//当你在页面点开我们发布成功的服务就可以看到一个xml文件在<wsdl:portType name="MyWSPortType">下面 wsaw:Action="urn:ws"
reclient.setOptions(opt);
OMElement element = reclient.invokeBlocking(new QName("http://ws.com","return"),new Object[]{});//这个地址就是你的类里的包路径,同样在那个xml文件中也可以找到targetNamespace="http://ws.com",参数return表示会返回结果,new Object[]{},是这个方法需要的参数。
Iterator values = element.getChildrenWithName(new QName("http://ws.com","return"));
while(values.hasNext()){
OMElement omEclement = (OMElement)values.next();
System.out.println(omEclement.getText());
}
}
运行的结果为"WS测试"