1

SOAPメッセージのスキーマ検証に使用しているカスタムSOAPハンドラーがあります。Webサービスで動作します。他の人にも使用できるようにしたいと思います。検証自体を行うコードは非常に一般的です。実際に入力されるのは、検証に使用するスキーマの名前だけです。Springを使用してさまざまなサービスのSOAPハンドラーのさまざまなインスタンスを構成する方法/方法に頭を悩ませています。

Webサービスは次のように宣言されています。

@WebService(name = "MyService", ...)
@SOAPBinding(parameterStyle = SOAPBinding.ParameterStyle.BARE)
@HandlerChain(file="handler-chain.xml")
public interface MyService
{
   ....
}

ファイルは次のhandler-chain.xmlようになります。

<?xml version="1.0" encoding="UTF-8"?>
<handler-chains xmlns="http://java.sun.com/xml/ns/javaee">
  <handler-chain>
    <handler>
      <handler-name>com.ws.MyCustomSoapHandler</handler-name>
      <handler-class>com.ws.MyCustomSoapHandler</handler-class>
    </handler>
  </handler-chain>
</handler-chains>

カスタムSOAPハンドラー内には、次のものがあります。

public class MyCustomSoapHandler implements SOAPHandler<SOAPMessageContext>
{
    //assume getter/setter for this.
    private String schemaLocation = "schema/validation/service1.xsd";
    @Override
    public boolean handleMessage(SOAPMessageContext context)
    {
        ...
        //This is the only place where the schema needs to vary
        schema = schemaFactory.newSchema(this.getClass().getClassLoader().getResource(schemaLocation));

Springを使用してに基づいて複数のBeanを作成しMyCustomSoapHandler、それらに異なる値を与えることができることは知っていますschemaLocationが、それらのBeanをアプリケーションの正しいWebサービスに接続するにはどうすればよいですか?それは通り抜けるhandler-chain.xmlでしょうか?それともプログラムで行う必要がありますか?

4

1 に答える 1

0

SOAPハンドラーはWebSphereコンテナーによって作成され、Springによって管理されていないため、これが可能であるようには見えません(または、可能である場合は、機能させることができないようです)。そのため、ほとんどのロジックを使用して抽象ハンドラーを作成し、.propertiesファイルを使用して、さまざまなハンドラーに固有の詳細を構成しました。

于 2013-02-01T19:06:19.337 に答える