matsukaz's blog

Agile, node.js, ruby, AWS, cocos2d-xなどなどいろいろやってます

Spring Web Services まとめ その5

エンドポイントマッピング(Chapter5)

サービスの入力メッセージとendpointの実装をマッピングするためには、エンドポイントマッピングを利用する。
エンドポイントマッピングとしては、ペイロードを元にマッピングするPayloadRootQNameEndpointMappingや、SOAP Actionを元にマッピングするSoapActionEndpointMapping*1などがあらかじめ用意されている。以下は、それぞれのマッピングの定義例である。

  • PayloadRootQNameEndpointMappingの場合
<beans>
    <bean id="endpointMapping" class="org.springframework.ws.server.endpoint.mapping.PayloadRootQNameEndpointMapping">
        <property name="mappings">
            <props>
                <prop key="{http://samples}orderRequest">getOrderEndpoint</prop>
                <prop key="{http://samples}order">createOrderEndpoint</prop>
            </props>
        </property>
    </bean>

    <bean id="getOrderEndpoint" class="samples.GetOrderEndpoint">
        <constructor-arg ref="orderService"/>
    </bean>

    <bean id="createOrderEndpoint" class="samples.CreateOrderEndpoint">
        <constructor-arg ref="orderService"/>
    </bean>
<beans>
  • SoapActionEndpointMappingの場合
<beans>
    <bean id="endpointMapping" class="org.springframework.ws.soap.server.endpoint.mapping.SoapActionEndpointMapping">
        <property name="mappings">
            <props>
                <prop key="http://samples/RequestOrder">getOrderEndpoint</prop>
                <prop key="http://samples/CreateOrder">createOrderEndpoint</prop>
            </props>
        </property>
    </bean>

    <bean id="getOrderEndpoint" class="samples.GetOrderEndpoint">
        <constructor-arg ref="orderService"/>
    </bean>

    <bean id="createOrderEndpoint" class="samples.CreateOrderEndpoint">
        <constructor-arg ref="orderService"/>
    </bean>
</beans>

また、その4で利用した@Endpointアノテーションもエンドポイントマッピングの1種である。@Endpointアノテーションは、PayloadRootAnnotationMethodEndpointMappingまたはSoapActionAnnotationMethodEndpointMappingを利用している。

*1:SOAP ActionはSOAP 1.1の仕様。SOAP 2.0の場合はSoapActionEndpointMappingは利用できない