본문 바로가기

Programming!

Spring with Axis2 로 웹서비스. P_00

 결합성만으로 따지면 CXF(구 XFire)를 사용하고 싶었지만, 파워빌더와의 호환성으로 Axis2 를 사용하게 되었습니다.
 간단하게 샘플을 만들었던 내용을 적습니다. 그러니 태클 사절.!

필수.
1. Axis2 : http://ws.apache.org/axis2/
2. axis2-spring-1.4.x.jar : Spring
3. axis2-jaxws-api-1.4.x.jar : Annotations

시작.
- .aar(Axis2 achieve) 를 직접 만들지는 않겠습니다.
1. Axis2.xml 을 어딘가에 위치 시킵니다. 그렇다고 아무곳이나...ㅡㅡ;
2. WEB-INF/services/FRWebservice 폴더를 만들고, 다음과 같은 구조로 하위구조를 생성합니다.
../FRWebservice/META-INF
../FRWebservice/META-INF/MANIFEST.MF
../FRWebservice/META-INF/services.xml

이것이 사실상 끝입니다. ㅡㅡ; 그럼 서비스를 올리기 위한 소스를 만들고 디플로이 하겠습니다.

- interface : SProdWebService.java
public interface SProdWebService {
  public String helloWs(String msg);
}

- class : SProdWebServiceImpl.java
...
@WebService(serviceName = "SProdWebService")
public class SProdWebServiceImpl implements SProdWebService  {
  public String helloWs(String msg) {
    return msg+" 나 웹서비스야!";
  }
}
위의 소스를 FRWebservice/META-INF/services.xml 파일에 등록합니다.
<?xml version="1.0" encoding="UTF-8"?>
<serviceGroup>
 <service name="SProdWebService">
  <parameter
   name="ServiceObjectSupplier"
   locked="false"> org.apache.axis2.extensions.spring.receivers.SpringServletContextObjectSupplier</parameter>
  <parameter
   name="SpringBeanName"
   locked="false"> sProdWebService</parameter>
  <!-- parameter name="ServiceTCCL" locked="false">composite</parameter -->
  <messageReceivers>
   <messageReceiver
    mep="http://www.w3.org/2004/08/wsdl/in-only"
    class="org.apache.axis2.rpc.receivers.RPCInOnlyMessageReceiver" />
   <messageReceiver
    mep="http://www.w3.org/2004/08/wsdl/in-out"
    class="org.apache.axis2.rpc.receivers.RPCMessageReceiver" />
  </messageReceivers>
 </service>
</serviceGroup>

빨간색으로 표기된 부분을 보시면
 <service name="SProdWebService"> <-- 서비스명 입니다. Url의 http://localhost/services/SProdWebService?wsdl 이죠.
 <parameter name="ServiceObjectSupplier" <-- 제공되는 Spring 연계부분입니다.
 <parameter name="SpringBeanName" locked="false"> sProdWebService</parameter>
<-- ApplicationContext-xxxx.xml 에서 지정된 bean id 를 입력합니다.
<bean id="sProdWebService".../>

자 그럼 웹으로 처리 하기 위해서 servlet 매핑을 해줘야 겠군요. web.xml에 Axis2를 추가합니다.
 <!--
 <servlet>
  <servlet-name>AxisServlet</servlet-name>
  <servlet-class>org.wso2.spring.ws.servlet.SpringAxis2Servlet</servlet-class>
  <load-on-startup>1</load-on-startup>
 </servlet>
-->
 <servlet>
  <servlet-name>AxisServlet</servlet-name>
  <servlet-class>org.apache.axis2.transport.http.AxisServlet</servlet-class>
  <init-param>
   <param-name>axis2.xml.path</param-name>
   <param-value>/WEB-INF/spring/config/axis2.xml</param-value>
  </init-param>
  <load-on-startup>1</load-on-startup>
 </servlet>
 <servlet-mapping>
  <servlet-name>AxisServlet</servlet-name>
  <url-pattern>/services/*</url-pattern>
 </servlet-mapping>
모든것이 끝났고 톰캣 기동을 하시면, wsdl 을 보실 수 있지 않을까요?


다음번에는 직접 시연과 Annotations 과 관련된 내용으로 해보겠습니다.