Сертификат подписанта Java-мыла Coldfusion WSS4J исчез после первой подписи

Я пытался решить эту проблему в течение нескольких месяцев. Я решил несколько проблем с моим java-объектом, обновив WSS4J до последней версии, и все мои тестовые примеры работают с использованием Coldfusion JRE для тестирования внутри Eclipse. Когда я экспортирую банку и добавляю ее в путь к классам в Coldfusion и перезагружаю Coldfusion, объект подпишет запрос SOAP в первый раз и после этого начнет выдавать ошибки. Он всегда будет подписывать первый запрос. Я пробовал JavaLoader также каждый раз пытаться загружать его из банки, но это тоже не работает.

Вот код Coldfusion:

<cfset Soap = "<?xml version='1.0' encoding='UTF-8'?><soap:Envelope xmlns:soap='http://schemas.xmlsoap.org/soap/envelope/' xmlns:xsd='http://www.w3.org/2001/XMLSchema' xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance'> <soap:Body> <test1></test1> </soap:Body> </soap:Envelope>">

<cfloop from="1" to="5" index="i">
    <cfset Signer = CreateObject("java","com.soapsigner.SoapSigner").init(Soap)>
    <cfdump var="#Signer.getLastError()#">
    <cfdump var="#Signer.getXML()#">
    <br  /><br /><br />
</cfloop>

<cfabort> 

Вот код Java с использованием WSS4J 2.0.1

package com.soapsigner;

import java.io.PrintWriter;
import java.io.StringReader;
import java.io.StringWriter;
import java.util.Properties;

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;

import org.apache.log4j.ConsoleAppender;
import org.apache.log4j.Level;
import org.apache.log4j.Logger;
import org.apache.log4j.PatternLayout;
import org.apache.wss4j.common.crypto.Crypto;
import org.apache.wss4j.common.crypto.Merlin;
import org.apache.wss4j.dom.WSConstants;
import org.apache.wss4j.dom.message.WSSecHeader;
import org.apache.wss4j.dom.message.WSSecSignature;
import org.apache.wss4j.dom.message.WSSecTimestamp;
import org.w3c.dom.Document;
import org.xml.sax.InputSource;

public class SoapSigner {
    private Crypto crypto;
    private WSSecSignature sig;
    private WSSecTimestamp time;
    private WSSecHeader header; 
    private String alias;
    private String password;
    private String keyFile;
    private String keyFileType;
    private Document signedDoc;
    private String lastError;
    {
        Logger rootLogger = Logger.getRootLogger();
        rootLogger.setLevel(Level.INFO);
        rootLogger.addAppender(new ConsoleAppender(
                   new PatternLayout("%-6r [%p] %c - %m%n")));
    }
    static { org.apache.xml.security.Init.init(); }

    //constructor
    public SoapSigner(String XML){
        try {           
            alias = "myalias";
            password = "mypassword";
            keyFile = "/keystore/keystore.pkcs";
            keyFileType = "pkcs12";
            sig = new WSSecSignature(); 
            time = new WSSecTimestamp();
            header = new WSSecHeader();
            signedDoc = null;
            lastError = "";         

            Merlin merlin = new Merlin(getCryptoProperties(), null, null);
            crypto = merlin;            

            signDocument(xmlToDoc(XML));
            /*testing
            System.out.println(getXML());
            System.out.println(getLastError());
            */
        } catch (Exception e) {
            setLastError(e);
        }
    }

    //properties
    public Properties getCryptoProperties(){
        Properties cryptoProperties = new Properties();
        cryptoProperties.setProperty("org.apache.ws.security.crypto.merlin.keystore.alias", alias);       
        cryptoProperties.setProperty("org.apache.ws.security.crypto.merlin.keystore.password", password);
        cryptoProperties.setProperty("org.apache.ws.security.crypto.merlin.keystore.type", keyFileType);
        cryptoProperties.setProperty("org.apache.ws.security.crypto.merlin.keystore.file", keyFile);        
        return cryptoProperties;        
    }

    //sign the document
    public void signDocument(Document doc){             
        try {   
            header.setMustUnderstand(true);
            sig.setSignatureAlgorithm(WSConstants.C14N_EXCL_OMIT_COMMENTS);
            sig.setSignatureAlgorithm(WSConstants.RSA);
            sig.setUserInfo(alias, password);
            sig.setKeyIdentifierType(WSConstants.BST_DIRECT_REFERENCE); 
            header.insertSecurityHeader(doc);
            sig.build(doc, crypto, header);
            time.build(doc, header);
            signedDoc = doc;
        } catch (Exception e) {         
            setLastError(e);
        }           
    }

    //get the signed document
    public Document getDocument(){      
        return signedDoc;       
    }

    //get the signed xml
    public String getXML(){
        return getStringFromDoc(getDocument()).trim();
    }

    //get last error
    public String getLastError(){
        return lastError;
    }

    //set last error
    private void setLastError(Throwable e){
        StringWriter sw = new StringWriter();
        e.printStackTrace(new PrintWriter(sw));
        lastError += "     NEXT ERROR     "+sw.toString();
        e.printStackTrace();
    }   

    //document to string
    public String getStringFromDoc(Document doc){
        try
        {
           DOMSource domSource = new DOMSource(doc);
           StringWriter writer = new StringWriter();
           StreamResult result = new StreamResult(writer);
           TransformerFactory tf = TransformerFactory.newInstance();
           Transformer transformer = tf.newTransformer();
           transformer.transform(domSource, result);
           writer.flush();
           return writer.toString();
        }
        catch(Exception e)
        {
           setLastError(e);
           return null;
        }
    }

    //string to document
    public Document xmlToDoc(String XML){   
        try {
            DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
            dbf.setNamespaceAware(true);
            DocumentBuilder db;     
            db = dbf.newDocumentBuilder();      
            InputSource is = new InputSource();
            is.setCharacterStream(new StringReader(XML));
            Document doc = db.parse(is);
        return doc;
        } catch (Exception e) {
            setLastError(e);
            return null;
        }       
    }

    //main
    public static void main(String[] args){
        /*testing, these test cases work
        String XML1 = "<?xml version='1.0' encoding='UTF-8'?><soap:Envelope xmlns:soap='http://schemas.xmlsoap.org/soap/envelope/' xmlns:xsd='http://www.w3.org/2001/XMLSchema' xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance'> <soap:Body> <test1></test1> </soap:Body> </soap:Envelope>";  
        String XML2 = "<?xml version='1.0' encoding='UTF-8'?><soap:Envelope xmlns:soap='http://schemas.xmlsoap.org/soap/envelope/' xmlns:xsd='http://www.w3.org/2001/XMLSchema' xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance'> <soap:Body> <test2></test2> </soap:Body> </soap:Envelope>";  
        new SoapSigner(XML1);       
        new SoapSigner(XML2);      
        */
    }
}

Ошибка, которую я получаю во втором цикле:

org.apache.wss4j.common.ext.WSSecurityException: No message with ID "noUserCertsFound" found in resource bundle "org/apache/xml/security/resource/xmlsecurity" at
org.apache.wss4j.dom.message.WSSecSignature.getSigningCerts(WSSecSignature.java:823) at
org.apache.wss4j.dom.message.WSSecSignature.prepare(WSSecSignature.java:167) at 
org.apache.wss4j.dom.message.WSSecSignature.build(WSSecSignature.java:375) at    
com.soapsigner.SoapSigner.signDocument(SoapSigner.java:91) at com.soapsigner.SoapSigner.<init>(SoapSigner.java:63) at 
sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) at 
sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source) at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source) at
java.lang.reflect.Constructor.newInstance(Unknown Source) at 
coldfusion.runtime.java.JavaProxy.CreateObject(JavaProxy.java:166) at 
coldfusion.runtime.java.JavaProxy.invoke(JavaProxy.java:80) at
coldfusion.runtime.CfJspPage._invoke(CfJspPage.java:2483) at 
cfindex2ecfm836201788.runPage(C:\ColdFusion11\cfusion\wwwroot\testsite\index.cfm:4) at
coldfusion.runtime.CfJspPage.invoke(CfJspPage.java:246) at    
coldfusion.tagext.lang.IncludeTag.handlePageInvoke(IncludeTag.java:734) at
coldfusion.tagext.lang.IncludeTag.doStartTag(IncludeTag.java:570) at 
coldfusion.filter.CfincludeFilter.invoke(CfincludeFilter.java:65) at
coldfusion.filter.IpFilter.invoke(IpFilter.java:45) at 
coldfusion.filter.ApplicationFilter.invoke(ApplicationFilter.java:487) at 
coldfusion.filter.RequestMonitorFilter.invoke(RequestMonitorFilter.java:42) at
coldfusion.filter.MonitoringFilter.invoke(MonitoringFilter.java:40) at
coldfusion.filter.PathFilter.invoke(PathFilter.java:141) at 
coldfusion.filter.LicenseFilter.invoke(LicenseFilter.java:30) at
coldfusion.filter.ExceptionFilter.invoke(ExceptionFilter.java:94) at
coldfusion.filter.ClientScopePersistenceFilter.invoke
(ClientScopePersistenceFilter.java:28) at
coldfusion.filter.BrowserFilter.invoke(BrowserFilter.java:38) at 
coldfusion.filter.NoCacheFilter.invoke(NoCacheFilter.java:58) at
coldfusion.filter.GlobalsFilter.invoke(GlobalsFilter.java:38) at 
coldfusion.filter.DatasourceFilter.invoke(DatasourceFilter.java:22) at
coldfusion.filter.CachingFilter.invoke(CachingFilter.java:62) at 
coldfusion.CfmServlet.service(CfmServlet.java:219) at 
coldfusion.bootstrap.BootstrapServlet.service(BootstrapServlet.java:89) at   
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter
(ApplicationFilterChain.java:303) at    
org.apache.catalina.core.ApplicationFilterChain.doFilter
(ApplicationFilterChain.java:208) at   
coldfusion.monitor.event.MonitoringServletFilter.doFilter
(MonitoringServletFilter.java:42) at 
coldfusion.bootstrap.BootstrapFilter.doFilter(BootstrapFilter.java:46) at 
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter
(ApplicationFilterChain.java:241) at
org.apache.catalina.core.ApplicationFilterChain.doFilter
(ApplicationFilterChain.java:208) at    
coldfusion.inspect.weinre.MobileDeviceDomInspectionFilter.doFilter
(MobileDeviceDomInspectionFilter.java:121) at   
coldfusion.bootstrap.BootstrapFilter.doFilter(BootstrapFilter.java:46) at 
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter
(ApplicationFilterChain.java:241) at 
org.apache.catalina.core.ApplicationFilterChain.doFilter
(ApplicationFilterChain.java:208) at 
org.apache.catalina.core.StandardWrapperValve.invoke
(StandardWrapperValve.java:220) at 
org.apache.catalina.core.StandardContextValve.invoke
(StandardContextValve.java:122) at 
org.apache.catalina.authenticator.AuthenticatorBase.invoke
(AuthenticatorBase.java:501) at 
org.apache.catalina.core.StandardHostValve.invoke
(StandardHostValve.java:170) at 
org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:98) at
org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:116) at
org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:422) at 
org.apache.coyote.ajp.AjpProcessor.process(AjpProcessor.java:198) at 
org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process
(AbstractProtocol.java:607) at 
org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:313) at 
java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source) at 
java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source) at 
java.lang.Thread.run(Unknown Source)

В зависимости от того, как я загружаю банки, я также получаю эту ошибку:

org.apache.wss4j.common.ext.WSSecurityException: No certificates for user 1 were found for signature
    at org.apache.wss4j.dom.message.WSSecSignature.getSigningCerts(WSSecSignature.java:823)
    at org.apache.wss4j.dom.message.WSSecSignature.prepare(WSSecSignature.java:167)
    at org.apache.wss4j.dom.message.WSSecSignature.build(WSSecSignature.java:375)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
    at java.lang.reflect.Method.invoke(Unknown Source)
    at coldfusion.runtime.StructBean.invoke(StructBean.java:508)
    at coldfusion.runtime.CfJspPage._invoke(CfJspPage.java:2553)
    at cfindex2ecfm836201788.runPage(C:\ColdFusion11\cfusion\wwwroot\testsite\index.cfm:36)
    at coldfusion.runtime.CfJspPage.invoke(CfJspPage.java:246)
    at coldfusion.tagext.lang.IncludeTag.handlePageInvoke(IncludeTag.java:734)
    at coldfusion.tagext.lang.IncludeTag.doStartTag(IncludeTag.java:570)
    at coldfusion.filter.CfincludeFilter.invoke(CfincludeFilter.java:65)
    at coldfusion.filter.IpFilter.invoke(IpFilter.java:45)
    at coldfusion.filter.ApplicationFilter.invoke(ApplicationFilter.java:487)
    at coldfusion.filter.RequestMonitorFilter.invoke(RequestMonitorFilter.java:42)
    at coldfusion.filter.MonitoringFilter.invoke(MonitoringFilter.java:40)
    at coldfusion.filter.PathFilter.invoke(PathFilter.java:141)
    at coldfusion.filter.LicenseFilter.invoke(LicenseFilter.java:30)
    at coldfusion.filter.ExceptionFilter.invoke(ExceptionFilter.java:94)
    at coldfusion.filter.ClientScopePersistenceFilter.invoke(ClientScopePersistenceFilter.java:28)
    at coldfusion.filter.BrowserFilter.invoke(BrowserFilter.java:38)
    at coldfusion.filter.NoCacheFilter.invoke(NoCacheFilter.java:58)
    at coldfusion.filter.GlobalsFilter.invoke(GlobalsFilter.java:38)
    at coldfusion.filter.DatasourceFilter.invoke(DatasourceFilter.java:22)
    at coldfusion.filter.CachingFilter.invoke(CachingFilter.java:62)
    at coldfusion.CfmServlet.service(CfmServlet.java:219)
    at coldfusion.bootstrap.BootstrapServlet.service(BootstrapServlet.java:89)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:303)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
    at coldfusion.monitor.event.MonitoringServletFilter.doFilter(MonitoringServletFilter.java:42)
    at coldfusion.bootstrap.BootstrapFilter.doFilter(BootstrapFilter.java:46)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
    at coldfusion.inspect.weinre.MobileDeviceDomInspectionFilter.doFilter(MobileDeviceDomInspectionFilter.java:121)
    at coldfusion.bootstrap.BootstrapFilter.doFilter(BootstrapFilter.java:46)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:220)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:122)
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:501)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:170)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:98)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:116)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:422)
    at org.apache.coyote.ajp.AjpProcessor.process(AjpProcessor.java:198)
    at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:607)
    at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:313)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
    at java.lang.Thread.run(Unknown Source)

После изменения org.apache.xml.security.Init это ошибки после первого цикла:

org.apache.wss4j.common.ext.WSSecurityException: No certificates for user 1 were found for signature at
org.apache.wss4j.dom.message.WSSecSignature.getSigningCerts(WSSecSignature.java:823) at
org.apache.wss4j.dom.message.WSSecSignature.prepare(WSSecSignature.java:167) at
org.apache.wss4j.dom.message.WSSecSignature.build(WSSecSignature.java:375) at
com.soapsigner.SoapSigner.signDocument(SoapSigner.java:93) at com.soapsigner.SoapSigner.<init>(SoapSigner.java:65) at
 sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) at
sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source) at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source) at
java.lang.reflect.Constructor.newInstance(Unknown Source) at
coldfusion.runtime.java.JavaProxy.CreateObject(JavaProxy.java:166) at
coldfusion.runtime.java.JavaProxy.invoke(JavaProxy.java:80) at 
coldfusion.runtime.CfJspPage._invoke(CfJspPage.java:2483) at
cfindex2ecfm836201788.runPage(C:\ColdFusion11\cfusion\wwwroot\testsite\index.cfm:60) at coldfusion.runtime.CfJspPage.invoke(CfJspPage.java:246) at
coldfusion.tagext.lang.IncludeTag.handlePageInvoke(IncludeTag.java:734) at
coldfusion.tagext.lang.IncludeTag.doStartTag(IncludeTag.java:570) at coldfusion.filter.CfincludeFilter.invoke(CfincludeFilter.java:65) at
 coldfusion.filter.IpFilter.invoke(IpFilter.java:45) at
 coldfusion.filter.ApplicationFilter.invoke(ApplicationFilter.java:487) at
 coldfusion.filter.RequestMonitorFilter.invoke(RequestMonitorFilter.java:42) at
 coldfusion.filter.MonitoringFilter.invoke(MonitoringFilter.java:40) at
 coldfusion.filter.PathFilter.invoke(PathFilter.java:141) at
 coldfusion.filter.LicenseFilter.invoke(LicenseFilter.java:30) at 
 coldfusion.filter.ExceptionFilter.invoke(ExceptionFilter.java:94) at
    coldfusion.filter.ClientScopePersistenceFilter.invoke(ClientScopePersistenceFilter.java:28) at 
coldfusion.filter.BrowserFilter.invoke(BrowserFilter.java:38) at
coldfusion.filter.NoCacheFilter.invoke(NoCacheFilter.java:58) at
coldfusion.filter.GlobalsFilter.invoke(GlobalsFilter.java:38) at 
coldfusion.filter.DatasourceFilter.invoke(DatasourceFilter.java:22) at
coldfusion.filter.CachingFilter.invoke(CachingFilter.java:62) at 
coldfusion.CfmServlet.service(CfmServlet.java:219) at 
coldfusion.bootstrap.BootstrapServlet.service(BootstrapServlet.java:89) at        
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter
(ApplicationFilterChain.java:303) at     
org.apache.catalina.core.ApplicationFilterChain.doFilter
(ApplicationFilterChain.java:208) at 
coldfusion.monitor.event.MonitoringServletFilter.doFilter
(MonitoringServletFilter.java:42) at 
coldfusion.bootstrap.BootstrapFilter.doFilter(BootstrapFilter.java:46) at    
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter
(ApplicationFilterChain.java:241) at    
org.apache.catalina.core.ApplicationFilterChain.doFilter
(ApplicationFilterChain.java:208) at 
coldfusion.inspect.weinre.MobileDeviceDomInspectionFilter.doFilter
(MobileDeviceDomInspectionFilter.java:121) at 
coldfusion.bootstrap.BootstrapFilter.doFilter
(BootstrapFilter.java:46) at 
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter
ApplicationFilterChain.java:241) at 
org.apache.catalina.core.ApplicationFilterChain.doFilter
(ApplicationFilterChain.java:208) at 
org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:220) at 
org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:122) at
 org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:501) at
 org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:170) at 
 org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:98) at
 org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:116) at
 org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:422) at 
 org.apache.coyote.ajp.AjpProcessor.process(AjpProcessor.java:198) at 
org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:607) at 
 org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:313)
 at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source) at
 java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source) at
 java.lang.Thread.run(Unknown Source)

person Silas    schedule 23.09.2014    source источник


Ответы (1)


Вместо:

статический { org.apache.xml.security.Init.init(); }

пытаться:

статический { org.apache.wss4j.dom.WSSConfig.init(); }

person Colm O hEigeartaigh    schedule 24.09.2014
comment
Спасибо за помощь. Я изменил их, и они все еще работают в Eclipse, но делают то же самое в Coldfusion. Я обновил свое исходное сообщение самой новой ошибкой, потому что она отличается от предыдущих. - person Silas; 24.09.2014
comment
Есть ли способ создать тестовый пример, который я могу использовать для воспроизведения проблемы? Если да, то создайте новый WSS4J JIRA + прикрепите его туда. В противном случае вы можете попробовать с последним кодом WSS4J 2.0.2-SNAPSHOT (или подождать, пока 2.0.2 не выйдет на следующей неделе или около того) + протестировать его, чтобы увидеть, было ли оно исправлено. - person Colm O hEigeartaigh; 25.09.2014
comment
Я пытался найти загрузку 2.0.2, но не могу найти. У вас есть ссылка на него? Я могу попробовать проверить это. Я мог бы создать тестовый пример на вашем сайте, но я думаю, что проблема может быть больше связана с тем, как Coldfusion обрабатывает банки. Я использую JRE, которую Coldfusion запускает в Eclipse, и она отлично работает. Я запускаю Soap Signer в Coldfusion, и он терпит неудачу. Если я создам там тестовый пример с файлами Jar и Coldfusion, сможет ли кто-нибудь протестировать его на сервере Coldfusion? - person Silas; 25.09.2014
comment
2.0.2 еще не выпущен. Вы можете загрузить файлы SNAPSHOT здесь: repository.apache.org/content /groups/snapshots/org/apache/wss4j — у меня нет доступа к серверу Coldfusion. - person Colm O hEigeartaigh; 26.09.2014