使用axis2 services.xml 发布web service

    之前转的使用Pojo来发布webservice,使用有限制,不能发布带包的Pojo,所以找了使用services.xml发布项目的方式.

package service;

public class MyService
{
    public String getHello(String name)
    {
        return "您好 !" + name;
    }
    public void update(String data)
    {
        System.out.println("<" + data + ">已经更新");
    }
}

解压axis2-1.6.2-war.zip解压得到axis2.war,在解压axis2.war,进入WEB-INF目录下,将con,lib,modules文件夹复制到工程路径下的WEB-INF下,新建一个services文件夹,在建一个名称文件为myservice(可任意取),在建一个META-INF文件夹,在MEAT-INF文件夹下创建services.xml;

使用axis2 services.xml 发布web service

配置与该类相应的services.xml;

<?xml version="1.0" encoding="UTF-8"?>
<service name="myService">
	<description>
		Web Service例子
	</description>
	<parameter name="ServiceClass">
		service.MyService
	</parameter>
	<operation name="getHello">
		<messageReceiver class="org.apache.axis2.rpc.receivers.RPCMessageReceiver" />
	</operation>
	<operation name="update">
		<messageReceiver
			class="org.apache.axis2.rpc.receivers.RPCInOnlyMessageReceiver" />
	</operation>
</service>
service name ="myService" 就是你请求的服务名:如我的工程名为axis2demo,请求路径为 http://localhost/axis2demo/services/ myService?wsdl   parameter里面的是包+类名;operation 则是对应的方法名,若该方法有返回值,则可以设置 messageReceiver的方式为org.apache.axis2.rpc.receivers.RPCMessageReceiver; 没返回值的可以设置为org.apache.axis2.rpc.receivers.RPCInOnlyMessageReceiver


如果有多个类的情况下

package service
public class MyService1
{
    public String getName()  
    { 
        return " mr zhou";
    }
}

可以创建

<?xml version="1.0" encoding="UTF-8"?>
<serviceGroup>
 <service name="myService">
  <description>
   Web Service例子
  </description>
  <parameter name="ServiceClass">
   service.MyService
  </parameter>
  <operation name="getHello">
   <messageReceiver class="org.apache.axis2.rpc.receivers.RPCMessageReceiver" />
  </operation>
  <operation name="update">
   <messageReceiver
    class="org.apache.axis2.rpc.receivers.RPCInOnlyMessageReceiver" />
  </operation>
 </service>
 <service name="myService1">
  <description>
   Web Service例子
  </description>
  <parameter name="ServiceClass">
   service.MyService1
  </parameter>
  <operation name="getName">
   <messageReceiver class="org.apache.axis2.rpc.receivers.RPCMessageReceiver" />
  </operation>
 </service>
</serviceGroup>

 最后配置我们的web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
	xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
	id="WebApp_ID" version="2.5">
	<display-name>axis2demo</display-name>
	<welcome-file-list>
		<welcome-file>index.html</welcome-file>
	</welcome-file-list>

	<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>/services/*</url-pattern>
	</servlet-mapping>

</web-app>

重起我们的服务,输入http://localhost/axis2demo/services/myService?wsdl 就ok啦,

若我们要取得执行的方法可以通过RCP方式调用在webservice发布的方法

package service;
import javax.xml.namespace.QName;

import org.apache.axis2.addressing.EndpointReference;
import org.apache.axis2.client.Options;
import org.apache.axis2.rpc.client.RPCServiceClient;

public class RPCClient {
	public static void main(String[] args) throws Exception {
		// 使用RPC方式调用WebService
		RPCServiceClient serviceClient = new RPCServiceClient();
		Options options = serviceClient.getOptions();
		// 指定调用WebService的URL
		EndpointReference targetEPR = new EndpointReference(
				"http://localhost/axis2demo/services/myService");
		options.setTo(targetEPR);
		// 指定getName方法返回值的数据类型的Class对象
		Class[] classes = new Class[] { String.class };
		// 指定要调用的getName方法及WSDL文件的命名空间
		QName opAddEntry = new QName("http://service",
				"getHello");
		Object[] opAddEntryArgs = new Object[] {"周顺得" };
		// 调用getGreeting方法并输出该方法的返回值
		System.out.println(serviceClient.invokeBlocking(opAddEntry,
				opAddEntryArgs, classes)[0]);
		
		
		
		// 使用RPC方式调用WebService
		Options options1 = serviceClient.getOptions();
		// 指定调用WebService的URL
		EndpointReference targetEPR1 = new EndpointReference(
				"http://localhost/axis2demo/services/myService1");
		options1.setTo(targetEPR1);
	 	// 指定getName方法返回值的数据类型的Class对象
		Class[] classes1 = new Class[] { String.class };
		// 指定要调用的getName方法及WSDL文件的命名空间
		QName opAddEntry1 = new QName("http://service",
				"getName");
		Object[] opAddEntryArgs1 = new Object[] {null };
		// 调用getGreeting方法并输出该方法的返回值
		System.out.println(serviceClient.invokeBlocking(opAddEntry1,
				opAddEntryArgs1, classes1)[0]);
		
		 
	}

}

写的不怎么全面,其中一些参数大家可以在网上查查资料!

 

 

你可能感兴趣的:(webservice,axis2,axis2)