7

私はSpring Webサービスを初めて使用し、階乗サービスのサンプルプログラムを作成した後、疑問が残ります。これがSpring Webサービスの仕組みだと思います:


アプリケーションはサーバー上で実行され、リクエストを生成します --> リクエストは、web.xml で定義されているディスパッチャ サーブレットに送信されます --> ディスパッチャ サーブレットは [servlet-name]-servlet.xml を検索します --> ディスパッチャ サーブレットは、payloadroot を検索します。右のエンドポイント --> xml リクエストがエンド ポイントに移動 --> エンドポイントによってレスポンスが生成される


今、私の疑問は次のとおりです。

  1. エンドポイントに送信されるリクエストは、どのように XML 形式で送信されますか? XSD が xml の作成に役立つことは知っていますが、それはいつ行われますか?
  2. このプロセス全体で、wsdl はいつ構築されますか?

以下は Bean の定義、つまり :[servlet-name]-servlet.xmlファイルです。

<beans ...>
    <bean id="findFactorialService" class="springws.findFactorial.FindFactorialServiceImpl"/>

    <bean id="findFactorialServiceEndpoint" class="springws.findFactorial.endpoint.FindFactorialServiceEndpoint">
        <property name="findFactorialService" ref="findFactorialService" />
    </bean>

    <bean id="payloadMapping" class="org.springframework.ws.server.endpoint.mapping.PayloadRootQNameEndpointMapping">
            <property name="defaultEndpoint" ref="findFactorialServiceEndpoint" />
        </bean>

        <bean id="findFactorialSchema" class="org.springframework.xml.xsd.SimpleXsdSchema">
            <property name="xsd" value="/WEB-INF/findFactorialService.xsd"  />
        </bean>

        <bean id="findFactorial" class="org.springframework.ws.wsdl.wsdl11.DefaultWsdl11Definition">
            <property name="schema" ref="findFactorialSchema" />
            <property name="portTypeName" value="hello" />
            <property name="locationUri" value="http://localhost:7070/find-factorial-using-contractfirst/services" />
        </bean>
    </beans>
4

2 に答える 2

4
  1. XSD は xml を生成せず、検証に使用されます。また、サービスに送信する xml を作成する方法を理解するために、クライアントを作成する人々によっても使用されます。「リクエスト」とは、何らかのクライアントによってサービスに送信されるメッセージです。通常、リクエストがサービスに送信される方法は、http プロトコル (ワールド ワイド ウェブのプロトコル) を介して行われます。

  2. コードで、これはコントラクトファーストであることを意図していると述べています。これは、他のことを行う前に wsdl を記述する必要があることを意味します (ただし、通常、これはインターフェイスを記述する xsd と組み合わせて行われます)。その後、メッセージを処理するために wsdl といくつかの注釈を使用して Spring を構成できます。jaxb を使用してコード内の Java オブジェクトに直接自動的にバインドすることもできるため、着信 xml ペイロードを手動で解析する必要はありません。

これは古いですが、使用しているのと同じアプローチに従い、同じ非推奨のスプリング クラスを使用しています。

最近、多くの開発者が WS-* スタイルの Web サービスを避けて、REST ベースの Web サービスを支持しています。REST ベースの Web サービスは、spring-web と spring-mvc を使用して Java pojo にいくつかの単純な注釈を付けることで非常に簡単に実現できます。必要に応じて、Spring で xml ペイロードを xsd から生成された Java オブジェクトに自動的にバインドすることもできます。これにより、XML を実際に処理する必要がなくなります。

于 2013-06-08T03:01:21.023 に答える