Axis2 설정 가이드#

  • 포괄적인 설정 (axis2.xml)[1]
  • 서비스 설정 (services.xml)[2]
  • 모듈 설정 (module.xml)[3]

포괄적인 설정[#1]#

  • Parameter[11]
  • Transport Receiver[12]
  • Transport Sender[13]
  • Phase Order[14]
  • Module References[15]
  • Listeners (Observers)[16]

Parameter[#11]#

Axis2.xml 의 파라미터는 AxisConfiguration의 프라퍼티로 변형될것이다. 즉 org.apache.axis2.engine.AxisConfiguration 클래스를 통해 접근가능하다. 설정형태는 다음과 같다.

<parameter name="name of the parameter">parameter value</parameter>

Transport Receiver[#12]#

Axis2가 작동하는데는 기초적인 Transport(수송자)에 의존한다. 서로 다른 transport receivers를 가질 필요가 있다. 추가하는 방법은 다음과 같다.

<transportReceiver name="http" class="org.apache.axis2.transport.http.SimpleHTTPServer">
  <parameter name="port" >6060</parameter>
</transportReceiver> 

'transportReceiver' 요소의 name속성은 transport receiver의 이름이다. name속성의 값은 HTTP, TCP, SMTP, CommonsHTTP등이 될 수 있다. 시스템을 시작하거나 transport를 클라이언트에 셋팅할때, 적절한 transport값을 사용할 수 있다. class속성에는 실제 구현물을 명시한다. 특정 transport는 파라미터를 가지며 해당 transport receiver를 통해 접근가능하다.

Transport Sender[#13]#

transport receiver처럼 transport sender를 등록할 수 있다. sender는 메시지를 보내기 위해 사용된다. Apache Tomcat에서 Axis2를 사용한다면, Axis2는 HTTP 대신에 메시지를 보내기 위해 TCP transport sender를 사용할 수 있다.

<transportSender name="http" class="org.apache.axis2.transport.http.CommonsHTTPTransportSender">
        <parameter name="PROTOCOL" locked="xsd:false">HTTP/1.0</parameter>
</transportSender> 

Phase Order[#14]#

일련의 실행 단계 순서를 명시하는 것은 phaseOrder 요소를 통해 설정된다. 대략 다음과 같은 형태가 될것이다.

<phaseOrder type="InFlow">
         <phase name="TransportIn"/>
         .
         .
</phaseOrder> 

가장 흥미로운 것은 여기서 핸들러를 등록할수 있다는 것이다. 특정 단계에 핸들러를 등록하고자 한다면, handler요소를 사용해서 직접 등록가능하다. Axis2의 어디서도 핸들러 체인을 위한 하드코딩 작업이 없다. 설정은 phaseOrder 요소를 통해 수행된다. 완전한 설정은 대개 다음과 같은 형태일것이다.

<phaseOrder type="InFlow">
        <!--   Global phases    -->
         <phase name="Transport">
            <handler name="RequestURIBasedDispatcher"
                     class="org.apache.axis2.engine.RequestURIBasedDispatcher">
                <order phase="Transport"/>
            </handler>

            <handler name="SOAPActionBasedDispatcher"
                     class="org.apache.axis2.engine.SOAPActionBasedDispatcher">
                <order phase="Transport"/>
            </handler>
        </phase>
        <phase name="Security"/>
        <phase name="PreDispatch"/>
        <phase name="Dispatch" class="org.apache.axis2.engine.DispatchPhase">
            <handler name="AddressingBasedDispatcher"
                     class="org.apache.axis2.engine.AddressingBasedDispatcher">
                <order phase="Dispatch"/>
            </handler>

            <handler name="SOAPMessageBodyBasedDispatcher"
                     class="org.apache.axis2.engine.SOAPMessageBodyBasedDispatcher">
                <order phase="Dispatch"/>
            </handler>

            <handler name="InstanceDispatcher"
                     class="org.apache.axis2.engine.InstanceDispatcher">
                <order phase="Dispatch"/>
            </handler>
        </phase>
        <!--   Global phases   -->
        <!--   After the Dispatch phase module author or service author can add any phase he wants    -->
        <phase name="OperationInPhase"/>
    </phaseOrder>
    <phaseOrder type="OutFlow">
        <!--   user can add his own phases to this area  -->
        <phase name="OperationOutPhase"/>
        <!--  Global phases  -->
        <!--  these phases will run irrespective of the service  -->
        <phase name="MessageOut"/>
        <phase name="PolicyDetermination"/>
    </phaseOrder>
    <phaseOrder type="InFaultFlow">
        <phase name="PreDispatch"/>
        <phase name="Dispatch" class="org.apache.axis2.engine.DispatchPhase">
            <handler name="RequestURIBasedDispatcher"
                     class="org.apache.axis2.engine.RequestURIBasedDispatcher">
                <order phase="Dispatch"/>
            </handler>

            <handler name="SOAPActionBasedDispatcher"
                     class="org.apache.axis2.engine.SOAPActionBasedDispatcher">
                <order phase="Dispatch"/>
            </handler>

            <handler name="AddressingBasedDispatcher"
                     class="org.apache.axis2.engine.AddressingBasedDispatcher">
                <order phase="Dispatch"/>
            </handler>

            <handler name="SOAPMessageBodyBasedDispatcher"
                     class="org.apache.axis2.engine.SOAPMessageBodyBasedDispatcher">
                <order phase="Dispatch"/>
            </handler>
            <handler name="InstanceDispatcher"
                     class="org.apache.axis2.engine.InstanceDispatcher">
                <order phase="Dispatch"/>
            </handler>
        </phase>
        <!--      user can add his own phases to this area  -->
        <phase name="OperationInFaultPhase"/>
    </phaseOrder>
    <phaseOrder type="OutFaultFlow">
        <!--      user can add his own phases to this area  -->
        <phase name="OperationOutFaultPhase"/>
        <phase name="PolicyDetermination"/>
        <phase name="MessageOut"/>
    </phaseOrder>

type : 이 속성은 flow(흐름)의 타입을 표현한다. 다음 값중 하나가 될수 있다.

  • InFlow
  • OutFlow
  • InFaultFlow
  • OutFaultFlow

여기에 추가적으로 phaseOrder 요소 내부에서 허용되는 자식 요소는 일련의 실행에서 사용가능한 단계를 나타내는 phase요소 뿐이다. phaseOrder 요소 내부에 단계를 나타내는 방법은 다음과 같다.

<phase name="Transport"/>

name : 단계명

phaseOrder를 변경할때 유지해야할 한가지가 있다.

phaseOrder 타입이 "InFlow" 와 "InFaultFlow" 인 경우

  • All the phases that are above the "Dispatch" phase, including the "Dispatch" phase, are known as "Global phases" . You can add any number of new phases here and they will be considered global.
  • In these two phaseOrder types, the phases added after the "Dispatch" phase are known as "Operation phases".

phaseOrder 타입이 "OutFlow" 와 "OutFaultFlow" 인 경우

  • All the phases that are below the "MessageOut" phase, including the "MessageOut" phase, are known as "Global phases". You can add new phases according to your requirement.
  • The phases added before the "MessageOut" phase are known as "Operation phases".

Module References[#15]#

모듈을 사용하고자 한다면, axis2.xml 에 module 요소를 추가하는 것으로 가능하다. 다음과 같은 형태가 될것이다.

<module ref="addressing"/>  

ref : 사용될 모듈명.

Listeners (Observers)[#16]#

Axis2에서 AxisConfiguration 은 감지기능을 가진다. 그래서 observers 를 등록할수 있다. AxisConfiguration에 어떤 변경이 가해지면 자동적으로 그 정보가 전달된다. 현재 observers 는 다음과 같은 정보를 전달할수 있다.

  • 서비스 디플로이하기
  • 서비스 제거하기
  • 서비스 활성화/비활성화하기
  • 모듈 디플로이
  • 모듈 제거

Observers를 등록하는 것은 RSS피드 생성과 같은 기능을 추가하기 위해 유용하다. Observers를 등록하는 방법은 다음과 같다.

<listener class="org.apache.axis2.ObserverIMPL">
    <parameter name="RSS_URL" >http://127.0.0.1/rss</parameter>
</listener>

class: observer의 실제 구현 클래스, 이 구현 클래스는 AxisObserver 인터페이스를 구현해야만 한다.

서비스 설정[#2]#

각각의 서비스 압축 파일은 META-INF 디렉토리에 services.xml파일을 가질 필요가 있다. 간단한 형태의 services.xml파일은 다음과 같을것이다.

<service name="name of the service" scope="name of the scope" class="full qualifide name the service lifecycle class"   targetNamespace="target namespase for the service">
    <description> The description of the service  </description>  

    <transports> 
       <transport>HTTP</transport>
    </transports>
    
    <schema schemaNamespace="schema namespace"/> 
     
    <messageReceivers>
            <messageReceiver mep="http://www.w3.org/2004/08/wsdl/in-out"
                             class="org.apache.axis2.rpc.receivers.RPCMessageReceiver"/>
    </messageReceivers>
     
     <parameter name="ServiceClass" locked="xsd:false">org.apache.axis2.sample.echo.EchoImpl</parameter>
    
    <operation name="echoString" mep="operation MEP"
        <actionMapping>Mapping to action</actionMapping>
        <module ref=" a module name "/>
        <messageReceiver class="org.apache.axis2.receivers.RawXMLINOutMessageReceiver"/>
    </operation>
  </service>
  

name: .aar파일이 하나의 서비스만을 가진다면 서비스명은 압축파일의 이름이 될것이다. 하지만 하나 이상의 서비스를 가진다면 name속성에 정의된 값이 서비스명이 된다.

scope: (선택가능한 속성) 디플로이된 서비스가 얼마나 사용가능한지에 대한 시간적인 주기. "Application", "SOAPSession", "TransportSession", "Request" 과 같은 다양한 타입을 가질수 있고 디폴트는 "Request" 이다.

class: (선택가능한 속성) 서비스 생명주기 구현체 클래스의 패키지 경로를 포함한 전체 이름. ServiceLifeCycle 클래스는 시스템을 시작하고 종료할때 어떤 추가적인 작업을 수행하고자 할때 유용하다.

targetNamespace: (선택가능한 속성) 서비스의 대상 명명공간. WSDL을 생성할때 사용된다. 이 값을 지정하지 않는다면, 서비스 구현 클래스의 패키지 명이 자동적으로 명명공간으로 사용될것이다.

description: (선택가능) Axis2 웹-관리자 모듈을 통해 서비스에 대한 상세설명을 보여주고자 한다면, 상세설명을 여기에 적으면 된다.

transports : (선택가능) 서비스에 사용할 transport. transport 요소가 존재하지 않는다면, 서비스는 시스템에서 사용가능한 모든 transports에서 사용될것이다. transport 자식 요소는 transport 접두사(axis2.xml 에 지정된 transport의 이름)를 지정한다.

parameters: services.xml 은 가장 상위 레벨의 많은 파라미터를 가질수 있고 모든 파라미터는 관련 AxisService의 서비스 프라퍼티로 변형된다. services.xml 에는 자바 클래스를 지정하는 ServiceClass라고 불리는 필수 파라미터가 있다. MessageReceiver가 이 클래스를 로딩한다.

operations : 서비스 구현 클래스가 자바라면, 서비스안의 모든 public 메소드가 사용가능하다. 사용자가 그 메소드를 오버라이드하고자 한다면, operation 태그를 추가하여 오버라이드한다. 자바가 아니거나 서비스 클래스가 없다면, 서비스에서 사용하고자 하는 모든 기능은 services.xml에 표시해야만 한다.

<operation name="echoString">
  <module ref=" a module name "/>
  <messageReceiver class="org.apache.axis2.receivers.RawXMLINOutMessageReceiver"/>
</operation>

필수 속성은 오퍼레이션의 이름을 나타내는 "name"뿐이다. 어떤 오퍼레이션은 모듈 참조뿐 아니라 많은 수의 파라미터도 가질수 있다. 가장 흥미로운 것은 오퍼레이션마다 사용자정의된 message receiver(메시지 수신자)를 등록할수 있다는 것이다. 그리고 나서 등록된 message receiver(메시지 수신자)는 관련 오퍼레이션을 위한 message receiver(메시지 수신자)가 될것이다. message receiver를 지정하지 않는다면, 디폴트 message receiver가 이 오퍼레이션을 수행할것이다.

모듈 설정[#3]#

모듈의 상세설명은 module.xml을 사용하여 명시된다. 각각의 모듈 압축 파일은 사용가능한 모듈이 되도록 META-INF디렉토리에 module.xml을 넣을 필요가 있다.

다음은 매우 간단한 module.xml 이다.

<module class="org.apache.module.Module1Impl">
    <InFlow>
        .
        .
    </InFlow>
    <OutFlow>
        .
        .
    </OutFlow>

    <OutFaultFlow>
        .   
        .
    </OutFaultFlow>

    <InFaultFlow>
        .         
        .
    </InFaultFlow>

    <operation name="creatSeq" mep="MEP_URI_IN_OUT">
        <messageReceiver class="org.apache.axis2.receivers.RawXMLINOutMessageReceiver"/>
        <parameter name="para1" locked="xsd:true">10</parameter>
    </operation>
</module>

class: (Optional attribute) Indicates the module implementation class. A module may or may not contain a module implementation class since the module can also be a collection of handlers. If a module contains an implementation class that implements the org.apache.axis2.modules.Module interface at deployment, its init(); method will be called.

parameter: A module can contain any number of parameters and all the listed parameters in the module.xml will be transformed into the corresponding AxisModule of the module.

flow: Defining of handlers in a module has to be done inside flows. There are four types of flows as listed below.

You can add any number of handlers into a flow, and those handlers will be available in the corresponding chains at runtime, when they are engaged.

  • InFlow
  • OutFlow
  • InFaultFlow
  • OutFaultFlow

operations: 모듈이 서비스에 사용될때 module.xml에 operation태그를 추가하여 오퍼레이션을 추가할수 있다. 지정된 오퍼레이션의 메소드는 services.xml의 operation과 같다.

handler: handler 요소는 필수 속성과 선택가능 속성들로 구성된다. 핸들러를 정의하는 방법은 다음과 같다.

<handler name="handler1" class="handlerClass ">
            <order phase="userphase1" />
</handler>

필수 속성

name: 핸들러 이름.
class: 핸들러 구현체 클래스
phase: 일련의 실행시 핸들러가 남게되는 단계의 명칭

선택가능 속성_

phaseLast: 이 핸들러가 특정 단계에서 마지막 핸들러임을 표시
phaseFirst: 이 핸들러가 특정 단계에서 첫 핸들러임을 표시
before : 현재 핸들러가 앞에서 작동할 핸들러가 지정한 핸들러 앞에서 호출되어야 함을 표시
after: 현재 핸들러가 뒤에서 작동할 핸들러가 지정한 핸들러 뒤에서 호출되어야 함을 표시

Add new attachment

Only authorized users are allowed to upload new attachments.
« This page (revision-9) was last changed on 12-Jul-2007 21:34 by DongGukLee