1

Java EE 5 (GlassFish v2、Metro 2.1.1) アプリケーションを Java EE 6 (GlassFish 3.1.2、Metro 2.2.1-1) に変換しようとしています。セキュリティが JAXRPCSecuirty に基づいている Web サービス クライアントに問題があります。JAXRPCSecurity 構成:

private final static String SECURITY_CONFIG =
    "<?xml version=\"1.0\" encoding=\"UTF-8\"?> "+
    "<xwss:JAXRPCSecurity xmlns:xwss=\"http://java.sun.com/xml/ns/xwss/config\">                " +
    "   <xwss:Service>                                                                          " +
    "       <xwss:SecurityConfiguration dumpMessages=\"true\">                      " +
    "           <xwss:Sign includeTimestamp=\"false\">                                          " +
    "               <xwss:X509Token certificateAlias=\"certificate_alias\" />                       " +
    "               <xwss:CanonicalizationMethod disableInclusivePrefix=\"true\" />             " + 
    "               <xwss:SignatureTarget type=\"xpath\" value=\"//SOAP-ENV:Body\">             " +
    "                 <xwss:Transform algorithm=\"http://www.w3.org/2001/10/xml-exc-c14n#\"     " +
    "                                 disableInclusivePrefix=\"true\" />                        " +
    "               </xwss:SignatureTarget>                                                     " +
    "           </xwss:Sign>                                                                    " +
    "       </xwss:SecurityConfiguration>                                                       " +
    "   </xwss:Service>                                                                         " +
    "   <xwss:SecurityEnvironmentHandler>                                                       " +
    "      SecurityCallbackHandler                                                              " +
    "   </xwss:SecurityEnvironmentHandler>                                                      " +
    "</xwss:JAXRPCSecurity>";

そして、この構成をWebサービスクライアントに設定する方法:

public void configureSecurity() throws SITAWebServiceException {        
    String JAXRPCSecurityXML = completeJAXRPCSecurityXML(alias, keyStore, callbackHandler, dumpMessage);

    byte[] JAXRPCSecurityXMLBytes = convertJAXRPSecurityXMLToBytes(JAXRPCSecurityXML);

    XWSSecurityConfiguration sc = createXWSSecurityConfiguration(JAXRPCSecurityXMLBytes);

    ((BindingProvider) port).getRequestContext().put(XWSSecurityConfiguration.MESSAGE_SECURITY_CONFIGURATION, sc);      
}

private XWSSecurityConfiguration createXWSSecurityConfiguration(final byte[] JAXRPCSecurityXML) throws SITAWebServiceException {
    InputStream is = new ByteArrayInputStream(JAXRPCSecurityXML);
    try {
        return new SecurityConfiguration(is);
    } catch (XWSSecurityException e) {
        throw new SITAWebServiceException("XWSSecurityConfiguration problem.", e);
    } finally {
        closeInputStream(is);
    }
}

GlassFish v2 と Metro 2.1.1 では、すべて正常に動作します。しかし、GlassFish 3 は OSGi ベースの Metro (webservices-api-osgi および webservice-osgi) を使用し、パッケージcom.sun.xml.xwssのクラスは表示されなくなった (エクスプロートされていない) ため、常に次の例外が発生します。

java.lang.NoClassDefFoundError: com/sun/xml/xwss/XWSSecurityConfiguration

パッケージcom.sun.xml.xwssをエクスポートする方法、またはJAXRPCSecurityを他の/より良いものに変更する方法はありますか?

ありがとう。

4

0 に答える 0