2

そのため、Spring と jax-ws の統合は簡単なことではないことをすでに学びました。Spring Bean を jax-ws サービスに注入したいのですが、何らかの理由でデプロイ中に例外が発生します。

 Exception while loading the app : java.lang.IllegalStateException: ContainerBase.addChild: start: org.apache.catalina.LifecycleException: java.lang.IllegalArgumentException: javax.servlet.ServletException: com.sun.enterprise.container.common.spi.util.InjectionException: Error creating managed object for class: class org.springframework.web.context.ContextLoaderListener|#]

これは私のjax-ws構成です:

<wss:binding url="/ws/users">
    <wss:service>
        <ws:service bean="#usersWs"/>
    </wss:service>
</wss:binding>

<bean id="usersWs" class="love.service.endpoint.implementations.UserServiceImpl" />

そして、これは私のサービスです:

@WebService
public class UserServiceImpl implements UserService{

@EJB
private DBManager dbmanager;

@Override
@WebMethod
public boolean addUser(String name, String password, String email) {

    return false;
}

@Override
@WebMethod
public boolean isUsernameAvailable(String username) {
    return dbmanager.isLoginAvailable(username);
}

@Override
@WebMethod
public boolean isEmailAvailable(String email) {
    return dbmanager.isEmailAvailable(email);
}

}

そして最後に私のBean設定:

    <bean id="dbmanager" class="love.commons.database.DBManager" scope="request">
    <aop:scoped-proxy/>    
</bean>

また、いくつかのコントローラーに Bean を注入してみましたが、完全にうまく機能します。@EJB を @Autowired に置き換えると、アプリケーションは起動しますが、サービスはまだ機能しません。メッセージを送信しようとしたとき、私の唯一の応答は次のとおりでした。

    <S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/">
   <S:Body>
      <S:Fault xmlns:ns4="http://www.w3.org/2003/05/soap-envelope">
         <faultcode>S:Server</faultcode>
         <faultstring>Error creating bean with name 'scopedTarget.dbmanager': Scope 'request' is not active for the current thread; consider defining a scoped proxy for this bean if you intend to refer to it from a singleton; nested exception is java.lang.IllegalStateException: No thread-bound request found: Are you referring to request attributes outside of an actual web request, or processing a request outside of the originally receiving thread? If you are actually operating within a web request and still receive this message, your code is probably running outside of DispatcherServlet/DispatcherPortlet: In this case, use RequestContextListener or RequestContextFilter to expose the current request.</faultstring>
      </S:Fault>
   </S:Body>
</S:Envelope>
4

0 に答える 0