0

Spring Web サービス プロジェクトがあります。サービスを 2 つの異なる wsdl に分割しました。

<ws:dynamic-wsdl id="myDefinitionOne"
    portTypeName="Test" locationUri="http://server/basedirectory/subdirectoryone">
    <ws:xsd location="/WEB-INF/schemas/my-schema-one.xsd" />
</ws:dynamic-wsdl>

<ws:dynamic-wsdl id="myDefinitionTwo"
    portTypeName="Test" locationUri="http://server/basedirectory/subdirectorytwo">
    <ws:xsd location="/WEB-INF/schemas/my-schema-two.xsd" />
</ws:dynamic-wsdl>

これは JBoss AS 7.1.1 で実行されています。私が理解できないのは、「http://myserver/basedirectory/ subdirectoryone /」では myDefinitionOne wsdl のみにアクセスでき、「http://myserver/basedirectory」では myDefinitionTwo wsdl のみにアクセスできると考えていたことです。 /サブディレクトリ2 /'

ただし、どちらの URL からも両方の wsdl にアクセスできます。

私は SoapUI を実行しており、eiter URL から両方のサービス セットのエンド ポイント テストを実行できます。

私の目的は、URLの認証を分離することでした.両方の場所から両方にアクセスできる場合、これはできません。

これもIISで実行しています。

これについての私の理解を手伝ってくれる人はいますか?


コメントに基づいて、これは私の web.xml ファイルにあるものです

これは私のweb.xmlにあるものです

<servlet>
    <servlet-name>webservices</servlet-name>
    <servlet-class>org.springframework.ws.transport.http.MessageDispatcherServlet</servlet-class>
    <init-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>/WEB-INF/ws-config.xml</param-value>
    </init-param>
</servlet>

<servlet-mapping>
    <servlet-name>webservices</servlet-name>
    <url-pattern>/subdirectoryone/*</url-pattern>
</servlet-mapping>

<servlet>
    <servlet-name>webservices-auth</servlet-name>
    <servlet-class>org.springframework.ws.transport.http.MessageDispatcherServlet</servlet-class>
    <init-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>/WEB-INF/ws-config.xml</param-value>
    </init-param>
</servlet>

<servlet-mapping>
    <servlet-name>webservices-auth</servlet-name>
    <url-pattern>/subdirectorytwo/*</url-pattern>
</servlet-mapping>

それで、これは正しく指定されていませんか?

4

1 に答える 1

0

ws:dynamic-wsdlこれは、タイプのスキーマを指定して、Spring-WSサービスのwsdlを提供するための単なる方法です。エンドポイント自体は、で記述したものと実際には関連付けられていませんws:dynamic-wsdl。これが、どのlocationUriを配置しても、ファイルで指定したものMessageDispatcherServletに基づいてSpring-WSによって処理される理由です。servlet-mappingweb.xml

Spring-WSは、ペイロードまたはsoapactionに基づいてエンドポイントメソッドを検索します。

更新に基づくMessageDispatcherServlet基本的に2つは同じ構成を指しているため 、アプローチは機能しません。したがって、たとえば、リクエストが/ subdirectory1 / *に到達すると、最初のMessageDispatcherServletによってインターセプトされ、ある時点でペイロードをチェックし、内部でペイロードからエンドポイントへのマッピングをチェックして、ディスパッチする正しいエンドポイントを見つけます。への呼び出し。/ subdirectory1/*または/subdirectory2/ *のどちらにリクエストを送信しても、まったく同じことが起こります。

どうしてもこれを行う必要がある場合は、2つのspring-ws構成ファイル(ws-config1.xmlとws-config2.xmlなど)を作成し、<component-scan/>ある場合は削除して、関連するエンドポイントBeanを各構成に明示的に追加してください。ファイル。これは機能します。

于 2012-12-13T13:22:56.577 に答える