@WebserviceクラスではSpringBeanAutowiringSupportを拡張していますが、自動配線はSpring 2.5、tomcat6では機能しません。
何も注入されません。
classpathcontextを使用して、mainメソッドでこれらのBeanの自動配線をテストしましたが、すべてが正常に注入されています。ただし、jax-wsエンドポイントは対象外です。
アイデアはありますか?
私は解決策を見つけました。問題は、SpringがクラスのBeanを自動配線しないことです@WebService
(他のフォーラムで見られるように、これは現在のバグである可能性があります)。
解決策:
Beanを注入するためにアノテーションを使用するorg.springframework.beans.factory.config.AutowireCapableBeanFactory.class
代わりに使用します(例など)。@Autowired
@Service
@Repository
それで:
含む@Resource
WebServiceContext
@Resource
private WebServiceContext context;
あなたの豆を手に入れるためにそれを使ってください
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);
}
//...
}
myDAO
この後、メソッドでオブジェクトを使用できます@WebMethod
。
他の人と同じかどうかはわかりません。web.xmlのリスナーの順序を変更することで、うまくいきました。WSServletContextListenerの前にContextLoaderListenerを置くと、問題が解決しました。
私はあなたがこの設定要素を使用していると推測しています:
<context:annotation-config />
ただし、@ Endpointアノテーションのサポートを有効にするには、次の要素を追加する必要があります。
<context:component-scan base-package="" />
Webサービスでこのようなエンドポイントを簡単に構成するには、Metro、Axis2、apache-cxfなどのリファレンス実装を使用した方がよいでしょう。