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を他の/より良いものに変更する方法はありますか?
ありがとう。