[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