axis2_1.6.2 웹 엔 드 와 클 라 이언 트 구축

9801 단어 axis2

   참고 자료:
     http://blog.csdn.net/apei830/article/details/5448897
axis 2 홈 페이지
   http://axis.apache.org/axis2/java/core/docs/pojoguide.html
  1.먼저 웹 엔 드 를 구축 하고 서비스 플랫폼 을 구축한다.
     여기  http://axis.apache.org/axis2/java/core/download.cgi  다운로드 하 다. axis2-1.6.2-war.zip  
             그리고 안에 있 는... axis 2-web 폴 더 를 새로 만 든 자바 웹 의 WerRoot 아래로 복사 합 니 다. 
                 axis 2\\WEB-INF\lib 가방 안의 jar 를 lib 아래 에 복사 합 니 다. 
   b.그리고 웹.xml 파일 에 Axis Servlet 설정 을 추가 하고 프로젝트 의 첫 페이지 를 수정 합 니 다.
   
<?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.AXIS 2 의 프레임 워 크 에 제공 하고 자 하 는 서 비 스 를 설명 합 니 다. 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 파일 의 위 치 는 프로젝트 의 웹-inf 아래 에 만 놓 으 면 됩 니 다. 물론 여러 가지 방치 방식 이 있 습 니 다. 
services.xml 의 파일 위치 에 대해 저 는 Asix Servlet 소스 코드 를 보 았 습 니 다. services.xml 의 배치 위치 에 대한 다음 단락 이 있 습 니 다.
물론 중간 에 많은 전환 을 거 쳐 결국 WarBasedAxis Configurator 클래스 에 이런 방법 이 있 습 니 다. 
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);
		}
	}

위 에 그 방법 봐. 웹-inf 에서 services.xml 파일 을 가 져 오 는 거 죠. 그리고 호출
axisConfig.addServiceGroup(serviceGroup);

axisConfig.addServiceGroup 추가 aaxService 추가
붙다 디 렉 터 리 구 조 는 다음 과 같 습 니 다.
axis2_1.6.2之构建web端和客户端
위 를 몇 걸음 지나가다 프로젝트 발표 테스트 
 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();
		}
	}

}

자,학습 의 발걸음 을 기록 하 겠 습 니 다.

좋은 웹페이지 즐겨찾기