그럼 실질적으로 한번 구현을 해보자.
SOAP Part2에서 마지막에 첨부시킨 간단한 Hello 웹 서비스를 바탕으로 코드생성법과 해당코드에 대한 간단한 설명과 함께....
web service를 구현하는 방식에는 2가지가 있는데
첫번째는 Java 파일을 coding한 후 해당 Java파일을 바탕으로 WSDL파일을 생성한 후 deploy 시키는 방법과
두번째는 WSDL 파일로 Java파일을 생성한 후 deploy시키는 방법이 있다. 첫번째 방법은 서비스제공자를 만들때 많이 쓰이며 두번째 방법은 서비스 요청자를 만들때 많이 쓰인다.
[ JAVA2WSDL ]
- STEP1. Java Class생성
Java 파일을 작성한 후 웹 서비스를 생성할때 작성할 Java파일은 Interface Class와 해당 Interface를 Implement한 Java Class파일 2개가 필요하다라고 문서에는 나와있는데 Interface파일만 있어도 가능하다.다음 파일을 작성 및 complie한 후 적절한 디렉토리에 배치한다. 여기서는 Tomcat\webapps\axis\WEB-INF\classes 에 배치하고 있다.
List1. Java Interface File
package webservice.hello;
public interface HelloIF extends java.rmi.Remote {
public String hello(java.lang.String name) throws java.rmi.RemoteException;
}
- STEP2. 구현된 Class로부터 WSDL생성.Axis 에서는 Axis.jar파일에 Java2Wsdl이라는 Class파일을 제공하고 있다. 해당 파일의 역할은 STEP1에서 구현한 2개의 Java Class로부터 WSDL파일을 생성하는 것인데 SOAP Part2에서 제공한 문서를 보면 사용법에 대한 자세한 사항이 나와있으니 참조하고.......다음과 같이 실행하자.
java org.apache.axis.wsdl.Java2WSDL -o c:\test\webservice\hello\Hello.wsdl
-l http://localhost:8080/axis/services/Hello -n http://hello.webservice -u literal -pwebservice.hello http://hello.webservice webservice.hello.HelloIF
부연해서 설명하자면 -l 옵션은 실제 웹서비스 URL경로를 지정하는데 WSDL문서를 받은 서비스요청자에서 실제 호출경로로 사용하므로 정확히 작성해야 한다. -n 옵션은 WSDL 문서에서 사용할 targetNamespace의 값을 설정한다. targetNamespace는 해당 문서에서 정의된 XML Element들을 식별하기 위한 것이다. 생성이 잘 되었다면 다음과 같을 것이다.
List2. Hello WSDL
<?xml version="1.0" encoding="UTF-8"?>
<wsdl:definitions
targetNamespace="http://hello.webservice"
xmlns:apachesoap="http://xml.apache.org/xml-soap"
xmlns:impl="http://hello.webservice"
xmlns:intf="http://hello.webservice"
xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
xmlns:wsdlsoap="http://schemas.xmlsoap.org/wsdl/soap/"
xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<!--WSDL created by Apache Axis version: 1.4 Built on Apr 22, 2006 (06:55:48 PDT)-->
<wsdl:message name="helloResponse">
<wsdl:part name="helloReturn" type="xsd:string"/>
</wsdl:message>
<wsdl:message name="helloRequest">
<wsdl:part name="in0" type="xsd:string"/>
</wsdl:message>
<wsdl:portType name="HelloIF">
<wsdl:operation name="hello" parameterOrder="in0">
<wsdl:input message="impl:helloRequest" name="helloRequest"/>
<wsdl:output message="impl:helloResponse" name="helloResponse"/>
</wsdl:operation>
</wsdl:portType>
<wsdl:binding name="HelloSoapBinding" type="impl:HelloIF">
<wsdlsoap:binding style="rpc" transport="http://schemas.xmlsoap.org/soap/http"/>
<wsdl:operation name="hello">
<wsdlsoap:operation soapAction=""/>
<wsdl:input >
<wsdlsoap:body namespace="http://hello.webservice" use="literal"/>
</wsdl:input>
<wsdl:output >
<wsdlsoap:body namespace="http://hello.webservice" use="literal"/>
</wsdl:output>
</wsdl:operation>
</wsdl:binding>
<wsdl:service name="HelloIFService">
<wsdl:port binding="impl:HelloSoapBinding" name="Hello">
<wsdlsoap:address location="http://localhost:8080/axis/service/Hello"/>
</wsdl:port>
</wsdl:service>
</wsdl:definitions>
List1 의 WSDL파일을 보면 portType의 name이 HelloIF, operation의 name이 hello인데 HelloIF.java의 class명과 method명과 일치함을 알 수 있다. targetNamespace는 -n 옵션에서 정의한 값이 설정되어 있고 location에는 -l 옵션에서 정의한 값이 설정되어 있다. Bold된 단어를 하나씩 비교해가면서 확인해보면 연관성을 알 수 있을 것이다.
- STEP3. WSDD파일 및 Java파일 생성WSDD(Web Service Deployment Descriptor)파일의 용도는 새로운 Handler, Chain 그리고 서비스를 올리기 위해 AdminClient에서 사용하는 설정파일이다. WSDD에 대한 자세한 사항은 해당 사이트를 참조하도록하자. AdminClient는 관리툴로서, Handler나 Chain같은 Axis리소스를 올리거나 내릴때 사용한다.
http://ws.apache.org/axis/java/reference.html#DeploymentWSDDReference
cmd#> java org.apache.axis.wsdl.WSDL2Java -o d:\ -d Application -s d:\Hello.wsdl
여기서는 d:\ 디렉토리에 wsdd파일 및 Java파일을 생성했다. 생성된 파일목록은 다음과 같다.
deploy.wsdd
undeploy.wsdd
HelloIF.java
HelloIFService.java
HelloIFServiceLocator.java
HelloSoapBindingImpl.java
HelloSoapBindingStub.java
java 파일에 대한 자세한 설명은 J2EE Web Service에서 자세히 다루기로 하고
deploy.wsdd 와 undeploy.wsdd파일은 말그대로 deploy, undeploy 설정파일이다. HelloIF를 implement한 것이 HelloSoapBindingImpl이므로 해당 파일의 hello 메소드에 관련 로직을 작성하면 된다.
- STEP4. 서비스 deploy
java org.apache.axis.client.AdminClient -lhttp://localhost:8080/axis/services/AdminService deploy.wsdd
서비스 deploy를 완료한 후 http://localhost:8080/axis/servlet/AxisServlet에서 해당 서비스에 대한 deploy완료여부를 확인할 수 있다. 아니면 http://localhost:8080/axis/services/Hello?wsdl 로 확인가능하다.
'SOAP' 카테고리의 다른 글
웹서비스 기본 개념 (0) | 2011.04.05 |
---|---|
JAVA로 SOAP 구축 관련 자료들 (0) | 2011.04.05 |
JAVA로 SOAP 구축하기(2) (0) | 2011.04.05 |
JAVA로 SOAP 구축하기(1) (0) | 2011.04.05 |
[SOAP강좌] Java 서버 - Delphi 클라이언트 (0) | 2011.04.05 |