0

WSDLを持っている:

<definitions targetNamespace="http://MyWebService/" name="MyWebService">
    <types>
        <xsd:schema>
            <xsd:import namespace="http://MyWebService/" schemaLocation="http://localhost:8081/MyWebService?xsd=1"/>
        </xsd:schema>
    </types>
    <message name="doIt">
        <part name="Word" type="xsd:string"/>
        <part name="SomeParameters" type="tns:MapWrapper"/>
    </message>
    <message name="doItResponse">
        <part name="return" type="xsd:string"/>
    </message>
    <portType name="MyWebService">
        <operation name="doIt" parameterOrder="Word SomeParameters">
            <input message="tns:doIt"/>
            <output message="tns:doItResponse"/>
        </operation>
    </portType>
...
</definitions>

および関連するxsd:

<xs:schema version="1.0" targetNamespace="http://MyWebService/">
    <xs:complexType name="MapWrapper">
        <xs:sequence>
            <xs:element name="map">
                <xs:complexType>
                    <xs:sequence>
                        <xs:element name="entry" minOccurs="0" maxOccurs="unbounded">
                            <xs:complexType>
                                <xs:sequence>
                                    <xs:element name="key" minOccurs="0" type="xs:string"/>
                                    <xs:element name="value" minOccurs="0" type="xs:string"/>
                                </xs:sequence>
                            </xs:complexType>
                        </xs:element>
                    </xs:sequence>
                </xs:complexType>
            </xs:element>
        </xs:sequence>
    </xs:complexType>
</xs:schema>

WSの入力パラメーターを処理するために、このWebサービスを公開するための最良/最も簡単な方法は何でしょうか。ルートは次のようになります。(1)WS->(2)InputParameters->(3)inputParameters->(4)(2)のパラメーターに応じた処理ステップ。

私はラクダ-example-cxfから知識を得ようとしました。しかし、たくさんのことが混ざり合って、imoを理解するのが難しくなっています。

いくつかのJavaDSLコードスニペットがいいでしょう。

4

1 に答える 1

1

最も簡単な方法は、を使用してラクダのルートを作成することSpringです。例:カスタムBeanを作成し、実際のエンドポイントにルーティングする前にメッセージを変更したい場合は、次のようにすることができます。

public class CustomProcessor {

    public void processDoIt(Exchange exchange) {
        DoIt smth = exchange.getIn().getBody(DoIt.class); //Your message's body              
    }

}

そして春を使ったラクダのルート:

<bean id="processor" class="your.custom.CustomProcessor"/>

<camel:camelContext trace="true" id="camelContext" >

    <camel:route id="camelRoute">
        <camel:from uri="cxf:bean:yourWebServiceListenerEndpoint?dataFormat=POJO&amp;synchronous=true" />
        <camel:choice>
            <camel:when>
                <camel:simple>${headers.operationName} == 'doIt'</camel:simple>
                <camel:bean ref="processor" method="processDoIt"/>
            </camel:when>
        </camel:choice>
        <camel:to uri="cxf:bean:yourWebServiceTargetEndpoint"/>
    </camel:route>

</camel:camelContext>

操作名に応じて、ラクダはメッセージを対応するプロセッサにルーティングします。また、メッセージを別の場所にルーティングすることもできます。それはあなた次第です。これは、それがどのように行われるかの一例にすぎません。

参照:

于 2013-02-15T21:58:16.930 に答える