[Server]

HelloWord.java
import java.util.HashMap;
import java.util.Map;

public class HelloWorld {

	public HelloWorld() {
	}

	public String getHelloWorld(String name, int value) {
		return "Hello World to " + name + "(" + value + ")";
	}
	
	public Map getHashMap(String name, String value) {
		Map map = new HashMap();
		map.put("string", name);
		map.put("int", value); 
		return map;
	}
}


두 인터페이스 함수를 만들고 HelloWord.java 파일을 HelloWord.jws 로 파일을 변경한다.


[Client]

ClientTest.java
import java.net.MalformedURLException;
import java.net.URL;
import java.rmi.RemoteException;
import java.util.Map;

import javax.xml.namespace.QName;
import javax.xml.rpc.ServiceException;

import org.apache.axis.client.Call;
import org.apache.axis.client.Service;

public class ClientTest {

	public static void main(String[] args) throws ServiceException, MalformedURLException, RemoteException {
		Service service = new Service();
		Call call = (Call)service.createCall();
		call.setTargetEndpointAddress(new URL("http://localhost:8081/TEST_AXIS/HelloWorld.jws"));
		call.setOperationName(new QName("http://soapinterop.org/", "getHelloWorld"));
		String returnValue = (String)call.invoke(new Object[]{"String Test", 1});
		System.out.println(returnValue);
		
		call.setOperationName(new QName("http://soapinterop.org/", "getHashMap"));
		Map returnMap = (Map)call.invoke(new Object[]{"test1", "test1"});
		System.out.println(returnMap);
	}

}


아래와 같이 테스트도 가능
http://localhost:8081/TEST_AXIS/HelloWorld.jws?method=getHelloWorld&name=2342352345&value=1
http://localhost:8081/TEST_AXIS/HelloWorld.jws?method=getHashMap&name=2342352345&value=1


[Server Auth]
AuthTest.java
public class AuthTest {
	public String getString(String value){
		return "auth test: " + value;
	}
}


[Client Auth]
ClientAuthTest.java
import java.net.MalformedURLException;
import java.net.URL;
import java.rmi.RemoteException;

import javax.xml.namespace.QName;
import javax.xml.rpc.ServiceException;

import org.apache.axis.client.Call;
import org.apache.axis.client.Service;


public class ClientAuthTest {

	public static void main(String[] args) throws ServiceException, MalformedURLException, RemoteException {
		Service service = new Service();
		Call call = (Call)service.createCall();
		call.setTargetEndpointAddress(new URL("http://localhost:8081/TEST_AXIS/auth/AuthTest.jws"));
		
		call.setUsername("wsuser");
		call.setPassword("wspwd");
		
		call.setOperationName(new QName("http://soapinterop.org/", "getString"));
		String returnValue = (String)call.invoke(new Object[]{"String Test"});
		System.out.println(returnValue);
	}
}

tomcat-users.xml
// $TOMCAT_HOME/cont/tomcat-users.xml 추가



web.xml
// 해당 Context/web.xml 에 추가

	
		
			Protected
      		
      		/auth/*
		
   
		
			
			wsuser
		
	

	
	
		BASIC
		Protected Web Services
	

패키지는 java 파일에서 지정하지 않고, jws 파일만 해당 디렉토리에 저장하여 접근한다.
예) http://localhost:8081/TEST_AXIS/auth/AuthTest.jws?method=getString&value=11

java 파일이 없거나 jar일 경우, 즉 class 만 있을 경우 jws 방법을 이용할 수 없다.
그럴 경우 wsdl 을 생성하는 방법으로 해결 한다.
굳이 jws 방법으로 해야 한다면 해당 jar 및 class 를 사용하는 interface java를 생성하여 처리하면 되겠다.

참고자료
http://www.ibm.com/developerworks/kr/library/ws-sec1.html
http://cafe251.daum.net/_c21_/bbs_search_read?grpid=19VVx&fldid=Ki0S&contentval=00008zzzzzzzzzzzzzzzzzzzzzzzzz&nenc=rZc2_1ntyEMM3NSIvBc.2w00&dataid=8&fenc=w5lwmbf1XmU0&docid=CDb9MIhS

+ Recent posts