axis2_1.6.2之构建web端和客户端

    

   参考资料:

    http://blog.csdn.net/apei830/article/details/5448897

axis2的官网

  http://axis.apache.org/axis2/java/core/docs/pojoguide.html


  1、先来构建web端,搭建服务平台

     a、从这 http://axis.apache.org/axis2/java/core/download.cgi 下载  axis2-1.6.2-war.zip  

             然后将里面的 axis2-web文件夹复制到你新建的java web的WerRoot下面  

                 将axis2\WEB-INF\lib包里面的jar复制到你的lib下  

   b、然后配置你的web.xml文件 加上AxisServlet配置 并且修改你项目的首页

   

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5" 
	xmlns="http://java.sun.com/xml/ns/javaee" 
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
	xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 
	http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
  <welcome-file-list>
    <welcome-file>/axis2-web/index.jsp</welcome-file>
  </welcome-file-list>
  
  <servlet>
  	<servlet-name>AxisServlet</servlet-name>
  	<servlet-class>org.apache.axis2.transport.http.AxisServlet</servlet-class>
  </servlet>
  
  <servlet-mapping>
  	<servlet-name>AxisServlet</servlet-name>
  	<url-pattern>/services/*</url-pattern>
  </servlet-mapping>
  
</web-app>

  c、构建你对外发布的服务 这里测试用的 如下  包含对外两个方法  

    一个输入文本 返回文本

 一个上传二进制文件 返回布尔值 

package com.undergrowth.ws.test;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;

import javax.activation.DataHandler;

public class WSTest {
	
	public String sayHello(String name){
		return name+"\tHello World\t"+"WebServices Axis2";
	}
	
	public  boolean uploadWithDataHandle(DataHandler dHandler,String fileName){
		
		FileOutputStream fos=null;
		try {
			File file=new File("d:/upload_res/");
			if(!file.exists()) file.mkdir();
			fos=new FileOutputStream(new File(file,fileName));
			writeFileToOutput(fos,dHandler.getInputStream());
			System.out.println("上传成功!");
			fos.close();
		} catch (Exception e) {
			// TODO: handle exception
			e.printStackTrace();
			return false;
		}finally{
			if(fos!=null){
				try {
					fos.close();
				} catch (IOException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
			}
		}
		
		return true;
	}

	private void writeFileToOutput(FileOutputStream fos, InputStream inputStream) throws IOException {
		// TODO Auto-generated method stub
		int n=0;
		byte[] data=new byte[1024*8];
		while((n=inputStream.read(data))!=-1){
			fos.write(data,0,n);
		}
	}
	
}

d、向AXIS2的框架描述你要提供的服务  即services.xml文件

<?xml version="1.0" encoding="UTF-8"?>
<serviceGroup>
       <service name="WSTest">
              <description>Web Service例子</description>
              <parameter name="ServiceClass">com.undergrowth.ws.test.WSTest</parameter>
              <messageReceivers>
                     <messageReceiver mep="http://www.w3.org/2004/08/wsdl/in-out" class="org.apache.axis2.rpc.receivers.RPCMessageReceiver" />
              </messageReceivers>
       </service>
</serviceGroup>

对于services.xml文件的位置 只用放在你项目的web-inf下面即可  当然还有很多种放置方式  

对于services.xml的文件位置 我查看了AsixServlet源码  有如下这么一段 关于services.xml的放置位置的

当然中间经过很多转换 最终是在  WarBasedAxisConfigurator类下有这么一个方法  

public void loadServices() {
		String repository = config.getInitParameter("axis2.repository.path");
		if (repository != null) {
			super.loadServices();
			log.debug((new StringBuilder()).append(
					"loaded services from path: ").append(repository)
					.toString());
			return;
		}
		String repository = config.getInitParameter("axis2.repository.url");
		if (repository != null) {
			loadServicesFromUrl(new URL(repository));
			log.debug((new StringBuilder())
					.append("loaded services from URL: ").append(repository)
					.toString());
			return;
		}
		loadServicesFromWebInf();
		if (config.getServletContext().getRealPath("") != null
				|| config.getServletContext().getRealPath("/") != null) {
			super.loadServices();
			log.debug("loaded services from webapp");
			return;
		}
		try {
			URL url = config.getServletContext().getResource("/WEB-INF/");
			if (url != null) {
				loadServicesFromUrl(url);
				log.debug("loaded services from /WEB-INF/ folder (URL)");
			}
		} catch (MalformedURLException e) {
			log.info(e.getMessage());
		}
		return;
	}


接下来有一个方法

private void loadServicesFromWebInf() {
		try {
			InputStream servicexml = config.getServletContext()
					.getResourceAsStream("/WEB-INF/services.xml");
			if (servicexml != null) {
				HashMap wsdlServices = new HashMap();
				ArchiveReader archiveReader = new ArchiveReader();
				String path = config.getServletContext()
						.getRealPath("/WEB-INF");
				if (path != null)
					archiveReader.processFilesInFolder(new File(path),
							wsdlServices);
				org.apache.axis2.description.AxisServiceGroup serviceGroup = DeploymentEngine
						.buildServiceGroup(servicexml, Thread.currentThread()
								.getContextClassLoader(), "annonServiceGroup",
								configContext, archiveReader, wsdlServices);
				axisConfig.addServiceGroup(serviceGroup);
			}
		} catch (AxisFault axisFault) {
			log.info(axisFault);
		} catch (FileNotFoundException e) {
			log.info(e);
		} catch (XMLStreamException e) {
			log.info(e);
		}
	}

看上面那个方法  就是从web-inf下面获取services.xml文件啊  然后调用

axisConfig.addServiceGroup(serviceGroup);

添加axisConfig.addServiceGroup  添加ajaxService


附  目录结构如下:

axis2_1.6.2之构建web端和客户端


e、经过上面几步  发布项目  测试 

 http://localhost:8888/Axis2Web/

http://localhost:8888/Axis2Web/services/WSTest?wsdl



2、构建客户端 客户端也有很多中方式 这里采用 RPCServiceClient 进行调用

调用HelloWorld

package com.undergrowth.webservices;

import javax.xml.namespace.QName;

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

public class RPCClientHelloWorld {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		
		try {
			//1.创建webServices客户端
			RPCServiceClient rpClient=new RPCServiceClient();
			rpClient.getOptions().setTo(new EndpointReference("http://localhost:8888/Axis2Web/services/WSTest"));
			//2.设置调用参数
			QName opEntryQNama=new QName("http://test.ws.undergrowth.com","sayHello");
			//输入参数
			Object[] opEntryArgs=new Object[]{"google"};
			//返回参数
			Class[] returnClassArgs=new Class[]{String.class};
			//3,进行调用
			System.out.println(rpClient.invokeBlocking(opEntryQNama, opEntryArgs, returnClassArgs)[0]);
		} catch (AxisFault e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}

}


调用文件上传

package com.undergrowth.webservices;

import javax.activation.DataHandler;
import javax.activation.FileDataSource;
import javax.xml.namespace.QName;

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

public class RPCClientUploadFile {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		
		try {
			//1.创建webServices客户端
			RPCServiceClient rpClient=new RPCServiceClient();
			rpClient.getOptions().setTo(new EndpointReference("http://localhost:8888/Axis2Web/services/WSTest"));
			//2.设置调用参数
			QName opEntryQNama=new QName("http://test.ws.undergrowth.com","uploadWithDataHandle");
			//输入参数
			Object[] opEntryArgs=new Object[]{new DataHandler(new FileDataSource("/csg.jpg")),"csg.jpg"};
			//返回参数
			Class[] returnClassArgs=new Class[]{Boolean.class};
			//3,进行调用
			System.out.println("上传结果为:"+rpClient.invokeBlocking(opEntryQNama, opEntryArgs, returnClassArgs)[0]);
		} catch (AxisFault e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}

}



好了 记录学习的脚步 


你可能感兴趣的:(axis2)