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 추가
붙다 디 렉 터 리 구 조 는 다음 과 같 습 니 다.
위 를 몇 걸음 지나가다 프로젝트 발표 테스트
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();
}
}
}
자,학습 의 발걸음 을 기록 하 겠 습 니 다.