0

@WebServiceおよび@SOAPBinding注釈で注釈が付けられたクラスにSpringBeanを注入しようとしています。

@WebService(targetNamespace = JAXWSMessageHandler.MY_URL)
@SOAPBinding(parameterStyle = SOAPBinding.ParameterStyle.BARE)
public class JAXWSMessageHandler {

    private StorageManager bufferContainer;

    public void setBufferContainer(StorageManager storageManager){
        this.bufferContainer = storageManager;

    }

次の例外が発生します。

Service class soap.service.JAXWSMessageHandler method setBufferContainer part {http://myurl/myproject/v1}setBufferContainer cannot be mapped to schema. Check for use of a JAX-WS-specific type without the JAX-WS service factory bean.

Springで使用される操作は、CXFによってWSDLで定義されることが期待されているようです。WebServiceクラスからビジネスクラスへの通信を可能にするシングルトンメディエータークラスでハックできると思いますが、それは私には良くないようで、適切に実行したいと思います。それを行うためのヒントはありますか?

4

2 に答える 2

1

JAX-WS は、アノテーション付きクラスのメソッド署名を Web サービス操作として解釈しています。私の推測では、(setter インジェクションの代わりに) コンストラクター インジェクションを使用すれば、問題は解決するでしょう。

于 2012-05-25T14:36:53.573 に答える
1

私はより良い解決策があると思います:

おそらく、@WebMethod を使用して、Web サービスで公開するメソッドに注釈を付けていますか?

セッター メソッドに @WebMethod アノテーションを追加して、属性 'exclude' を true に設定することもできます。これは、このメソッドが wsdl で定義されていないことを意味します。

@WebService(targetNamespace = JAXWSMessageHandler.MY_URL)
@SOAPBinding(parameterStyle = SOAPBinding.ParameterStyle.BARE)
public class JAXWSMessageHandler {

private StorageManager bufferContainer;

@WebMethod(exclude=true)
public void setBufferContainer(StorageManager storageManager){
    this.bufferContainer = storageManager;

}
于 2013-05-22T14:57:50.887 に答える