1

JBossログインモジュールを作成しましたが、完全に正常に機能しています。以下のサンプル:

public class UserLoginModule extends UsernamePasswordLoginModule {
   private static UserService userService;

   @Override
   public void initialize(Subject subject, CallbackHandler callbackHandler,
                      Map<String, ?> sharedState, Map<String, ?> options) {
   super.initialize(subject, callbackHandler, sharedState, options);
   String wsdlUrl = (String) options.get("wsdlURL");
   UserService.initialize(wsdlUrl);
   userService = new UserService();
}

@Override
protected boolean validatePassword(String inputPassword, 
                                  String expectedPassword) {
    boolean result = false;

    try {
       String response =
       userService.getUserPort().checkOperator(getUsername(), inputPassword);

       if(RESULT_OK.equals(response)) {
          result = true;
       } else {
             result = false;
       }
    } catch(Exception e) {
        log.error("Error when invoking UserService!", e);
    }
        return result;
   }
}

このモジュールは、JBossのcommon/libディレクトリにデプロイされます。システムがユーザーの認証を試み、validatePasswordメソッドを呼び出すと、すべて問題ありません。

ここで、Webアプリケーション(カスタムログインモジュールを使用するものと同じ)にあるサーブレットからUserServiceを呼び出そうとすると、例外がスローされます。

java.lang.ClassCastException: com.sun.xml.bind.v2.runtime.JAXBContextImpl cannot be cast to com.sun.xml.internal.bind.api.JAXBRIContext
    com.sun.xml.internal.ws.fault.SOAPFaultBuilder.<clinit>(SOAPFaultBuilder.java:533)
    com.sun.xml.internal.ws.client.sei.SyncMethodHandler.invoke(SyncMethodHandler.java:107)
    com.sun.xml.internal.ws.client.sei.SyncMethodHandler.invoke(SyncMethodHandler.java:78)
    com.sun.xml.internal.ws.client.sei.SEIStub.invoke(SEIStub.java:107)
    $Proxy173.unblockOperator(Unknown Source)
    pl.servlet.UserServlet.doPost(UserServlet.java:93)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:637)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
    org.jboss.web.tomcat.filters.ReplyHeaderFilter.doFilter(ReplyHeaderFilter.java:96)

サーブレットは次のようになります。

public class UserServlet extends HttpServlet {
    private static Logger logger = Logger.getLogger(UserServlet.class.getName());
    private static UserService userService;

    @Override
    public void init() throws ServletException {
        super.init();
        userService = new UserService();
    }


    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) 
    throws  ServletException, IOException {
        doPost(req, resp);
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) 
    throws ServletException, IOException {
        String result = null;
        String login = req.getParameter("login");
        result = userService.getUserPort().unblockOperator(login);
    }
}

JBoss5.1EAPを使用しています。それを修正する方法はありますか?私のWebアプリケーション(サーブレットを含むもの)のWEB-INFディレクトリは空です-そこにjarファイルはありません。

4

1 に答える 1

3

システムプロパティの設定を試すことができます

javax.xml.bind.JAXBContext=com.sun.xml.internal.bind.v2.ContextFactor

これにより、jre によって提供されるデフォルトの contextfactory が選択されます

于 2012-08-01T04:49:10.007 に答える