I'm using WSO2
EI ver 6.6.0
, and I developed a mediator which is responsible for Signing SOAP Envelopes.
The code I'm using correctly works on Java SE, and I've tested it. But when I compile it and deploy it on the WSO2 EI
, it's not working.
The code has been thrown from this part of the code.
private static Document sign(Document doc, String Reference) throws Exception {
DOMSignContext dsc = null;
String providerName = System.getProperty("jsr105Provider", "org.jcp.xml.dsig.internal.dom.XMLDSigRI");
Provider provider = (Provider) Class.forName(providerName).newInstance();
// Below line throw exception!
XMLSignatureFactory fac = XMLSignatureFactory.getInstance("DOM", provider);
.
.
.
return doc;
}
Error
java.lang.ClassCastException: class org.jcp.xml.dsig.internal.dom.DOMXMLSignatureFactory cannot be cast to class javax.xml.crypto.dsig.XMLSignatureFactory (org.jcp.xml.dsig.internal.dom.DOMXMLSignatureFactory is in module java.xml.crypto of loader 'platform'; javax.xml.crypto.dsig.XMLSignatureFactory is in unnamed module of loader org.eclipse.osgi.internal.loader.EquinoxClassLoader @657e3cda)
at javax.xml.crypto.dsig.XMLSignatureFactory.findInstance(XMLSignatureFactory.java:202)
at javax.xml.crypto.dsig.XMLSignatureFactory.getInstance(XMLSignatureFactory.java:250)
at x.signer.util.Utils.sign(Utils.java:246)
at x.signer.util.Utils.insertSignSoap(Utils.java:233)
at x.signer.util.Utils.insertSignSayad(Utils.java:197)
at x.signer.Signer.mediate(Signer.java:37)
at org.apache.synapse.mediators.ext.ClassMediator.mediate(ClassMediator.java:94)
at org.apache.synapse.mediators.AbstractListMediator.mediate(AbstractListMediator.java:109)
at org.apache.synapse.mediators.AbstractListMediator.mediate(AbstractListMediator.java:71)
at org.apache.synapse.mediators.base.SequenceMediator.mediate(SequenceMediator.java:158)
at org.apache.synapse.rest.Resource.process(Resource.java:331)
at org.apache.synapse.rest.API.process(API.java:441)
at org.apache.synapse.rest.RESTRequestHandler.apiProcess(RESTRequestHandler.java:135)
at org.apache.synapse.rest.RESTRequestHandler.dispatchToAPI(RESTRequestHandler.java:113)
at org.apache.synapse.rest.RESTRequestHandler.process(RESTRequestHandler.java:71)
at org.apache.synapse.core.axis2.Axis2SynapseEnvironment.injectMessage(Axis2SynapseEnvironment.java:327)
at org.apache.synapse.core.axis2.SynapseMessageReceiver.receive(SynapseMessageReceiver.java:98)
at org.apache.axis2.engine.AxisEngine.receive(AxisEngine.java:180)
at org.apache.synapse.transport.passthru.ServerWorker.processNonEntityEnclosingRESTHandler(ServerWorker.java:368)
at org.apache.synapse.transport.passthru.ServerWorker.processEntityEnclosingRequest(ServerWorker.java:427)
at org.apache.synapse.transport.passthru.ServerWorker.run(ServerWorker.java:182)
at org.apache.axis2.transport.base.threads.NativeWorkerPool$1.run(NativeWorkerPool.java:172)
at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)
at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
at java.base/java.lang.Thread.run(Thread.java:834)
Example of input
<S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/">
<S:Body>
<InquiryCode xmlns="http://tempuri.org/">
<RequestCode>12345</RequestCode>
</InquiryCode>
</S:Body>
</S:Envelope>
I searched lots of similar issues and Stackoverflow questions, but most of them are unanswered, or the answered ones are not working for me like this one:
https://groups.google.com/g/fusefabric/c/1no0A5akFag
How to fix ClassCastException when XMLSignatureFactory used in a WSO2-AM Mediator?