3

@WebserviceクラスではSpringBeanAutowiringSupportを拡張していますが、自動配線はSpring 2.5、tomcat6では機能しません。

何も注入されません。

classpathcontextを使用して、mainメソッドでこれらのBeanの自動配線をテストしましたが、すべてが正常に注入されています。ただし、jax-wsエンドポイントは対象外です。

アイデアはありますか?

4

4 に答える 4

9

私は解決策を見つけました。問題は、SpringがクラスのBeanを自動配線しないことです@WebService(他のフォーラムで見られるように、これは現在のバグである可能性があります)。

解決策

Beanを注入するためにアノテーションを使用するorg.springframework.beans.factory.config.AutowireCapableBeanFactory.class代わりに使用します(例など)。@Autowired@Service@Repository

それで:

  1. 含む@Resource WebServiceContext

    @Resource
    private WebServiceContext context;  
    
  2. あなたの豆を手に入れるためにそれを使ってください

    MyDAO myDAO = null;
    ServletContext servletContext = (ServletContext) context
        .getMessageContext().get("javax.xml.ws.servlet.context");
    WebApplicationContext webApplicationContext = WebApplicationContextUtils
        .getRequiredWebApplicationContext(servletContext);
    myDAO = (MyDAO) webApplicationContext
        .getAutowireCapableBeanFactory().getBean("myDAO");
    

    MyDAOクラスは次のようになります。

    @Service
    @Qualifier("myDAO")    
    @Transactional
    public class MyDAO {
        private HibernateTemplate hibernateTemplate;
    
        @Required
        @Autowired
        public void setSessionFactory(SessionFactory sessionFactory) {
            this.hibernateTemplate = new HibernateTemplate(sessionFactory);
        }
    
        public MyInfo getMyInfo(Long id){
            return this.hibernateTemplate.get(MyInfo.class, id);
        }
    
        //...
    }
    
  3. myDAOこの後、メソッドでオブジェクトを使用できます@WebMethod

于 2010-11-24T14:20:59.270 に答える
4

他の人と同じかどうかはわかりません。web.xmlのリスナーの順序を変更することで、うまくいきました。WSServletContextListenerの前にContextLoaderListenerを置くと、問題が解決しました。

于 2012-08-01T13:01:14.163 に答える
1

私はあなたがこの設定要素を使用していると推測しています:

<context:annotation-config />

ただし、@ Endpointアノテーションのサポートを有効にするには、次の要素を追加する必要があります。

<context:component-scan base-package="" />
于 2010-05-31T11:24:16.110 に答える
0

Webサービスでこのようなエンドポイントを簡単に構成するには、Metro、Axis2、apache-cxfなどのリファレンス実装を使用した方がよいでしょう。

于 2014-02-11T12:03:40.263 に答える