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 로 파일을 변경한다.
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