Address Endpoint encoding attribute not working
TomasTokaMrazek opened this issue · comments
Address Endpoint definition should allow setting encoding
attribute according to documentation.
It's not used correctly in Axis2 nor in Integration Studio, which does not have proper field for encoding and even removes the attribute in source view.
In class Axis2FlexibleMEPClient
the usage is in method send()
.
//get the endpoint encoding attribute
String strCharSetEncoding = "";
if (endpoint.getCharSetEncoding() != null) {
strCharSetEncoding = ";" + endpoint.getCharSetEncoding();
}
And later in the same method.
//ESBJAVA-3447, Appending charset, if exist in property
ContentType contentType = new ContentType(trpContentType);
if (contentType.getParameter(HTTPConstants.CHAR_SET_ENCODING) != null) {
strCharSetEncoding = "; charset=" + contentType.getParameter(HTTPConstants.CHAR_SET_ENCODING);
}
With this code, it's expected, that the value of the encoding
attribute should be charset=UTF-8
in order to properly set Content-Type as application/soap+xml;charset=UTF-8
. However, if I do just that, SOAPMessageFormatter
fails due to unknown encoding. Which is understandable, as the encoding value should be only UTF-8
. In order to fix this issue, Axis2FlexibleMEPClient
needs to be fixed as follows.
//get the endpoint encoding attribute
String strCharSetEncoding = "";
if (endpoint.getCharSetEncoding() != null) {
strCharSetEncoding = "; charset=" + endpoint.getCharSetEncoding();
}
SOAPMessageFormatter exception.
[2024-04-10 12:50:11,164] ERROR {Axis2Sender} - {proxy:SDX-IDM-Service} Unexpected error during sending message out. java.io.UnsupportedEncodingException: charset=UTF-8 org.apache.axis2.AxisFault: java.io.UnsupportedEncodingException: charset=UTF-8
at org.apache.axis2.AxisFault.makeFault(AxisFault.java:430)
at org.apache.axis2.transport.http.SOAPMessageFormatter.writeTo(SOAPMessageFormatter.java:82)
at org.apache.synapse.transport.passthru.PassThroughHttpSender.sendRequestContent(PassThroughHttpSender.java:424)
at org.apache.synapse.transport.passthru.PassThroughHttpSender.invoke(PassThroughHttpSender.java:283)
at org.apache.axis2.engine.AxisEngine.send(AxisEngine.java:442)
at org.apache.synapse.core.axis2.DynamicAxisOperation$DynamicOperationClient.send(DynamicAxisOperation.java:206)
at org.apache.synapse.core.axis2.DynamicAxisOperation$DynamicOperationClient.executeImpl(DynamicAxisOperation.java:188)
at org.apache.axis2.client.OperationClient.execute(OperationClient.java:149)
at org.apache.synapse.core.axis2.Axis2FlexibleMEPClient.send(Axis2FlexibleMEPClient.java:675)
at org.apache.synapse.core.axis2.Axis2Sender.sendOn(Axis2Sender.java:86)
at org.apache.synapse.core.axis2.Axis2SynapseEnvironment.send(Axis2SynapseEnvironment.java:591)
at org.apache.synapse.endpoints.AbstractEndpoint.send(AbstractEndpoint.java:423)
at org.apache.synapse.endpoints.AddressEndpoint.send(AddressEndpoint.java:79)
at org.apache.synapse.endpoints.ResolvingEndpoint.sendMessage(ResolvingEndpoint.java:82)
at org.apache.synapse.endpoints.ResolvingEndpoint.send(ResolvingEndpoint.java:59)
at org.apache.synapse.mediators.builtin.CallMediator.handleNonBlockingCall(CallMediator.java:387)
at org.apache.synapse.mediators.builtin.CallMediator.mediate(CallMediator.java:200)
at org.apache.synapse.mediators.AbstractListMediator.mediate(AbstractListMediator.java:110)
at org.apache.synapse.mediators.AbstractListMediator.mediate(AbstractListMediator.java:72)
at org.apache.synapse.config.xml.AnonymousListMediator.mediate(AnonymousListMediator.java:37)
at org.apache.synapse.mediators.filters.FilterMediator.mediate(FilterMediator.java:205)
at org.apache.synapse.mediators.AbstractListMediator.mediate(AbstractListMediator.java:110)
at org.apache.synapse.mediators.AbstractListMediator.mediate(AbstractListMediator.java:72)
at org.apache.synapse.mediators.template.TemplateMediator.mediate(TemplateMediator.java:136)
at org.apache.synapse.mediators.template.InvokeMediator.mediate(InvokeMediator.java:170)
at org.apache.synapse.mediators.template.InvokeMediator.mediate(InvokeMediator.java:93)
at org.apache.synapse.mediators.AbstractListMediator.mediate(AbstractListMediator.java:110)
at org.apache.synapse.mediators.AbstractListMediator.mediate(AbstractListMediator.java:72)
at org.apache.synapse.config.xml.AnonymousListMediator.mediate(AnonymousListMediator.java:37)
at org.apache.synapse.mediators.filters.FilterMediator.mediate(FilterMediator.java:205)
at org.apache.synapse.mediators.AbstractListMediator.mediate(AbstractListMediator.java:110)
at org.apache.synapse.mediators.AbstractListMediator.mediate(AbstractListMediator.java:72)
at org.apache.synapse.mediators.base.SequenceMediator.mediate(SequenceMediator.java:158)
at org.apache.synapse.mediators.base.SequenceMediator.mediate(SequenceMediator.java:214)
at org.apache.synapse.mediators.AbstractListMediator.mediate(AbstractListMediator.java:110)
at org.apache.synapse.mediators.AbstractListMediator.mediate(AbstractListMediator.java:72)
at org.apache.synapse.config.xml.AnonymousListMediator.mediate(AnonymousListMediator.java:37)
at org.apache.synapse.config.xml.SwitchCase.mediate(SwitchCase.java:69)
at org.apache.synapse.mediators.filters.SwitchMediator.mediate(SwitchMediator.java:134)
at org.apache.synapse.mediators.AbstractListMediator.mediate(AbstractListMediator.java:110)
at org.apache.synapse.mediators.AbstractListMediator.mediate(AbstractListMediator.java:72)
at org.apache.synapse.mediators.base.SequenceMediator.mediate(SequenceMediator.java:158)
at org.apache.synapse.core.axis2.ProxyServiceMessageReceiver.receive(ProxyServiceMessageReceiver.java:240)
at org.apache.axis2.engine.AxisEngine.receive(AxisEngine.java:180)
at org.apache.synapse.transport.passthru.ServerWorker.processEntityEnclosingRequest(ServerWorker.java:470)
at org.apache.synapse.transport.passthru.ServerWorker.run(ServerWorker.java:186)
at org.apache.axis2.transport.base.threads.NativeWorkerPool$1.run(NativeWorkerPool.java:172)
at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1136)
at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635)
at java.base/java.lang.Thread.run(Thread.java:840)
Caused by: javax.xml.stream.XMLStreamException: java.io.UnsupportedEncodingException: charset=UTF-8
at com.ctc.wstx.stax.WstxOutputFactory.createSW(WstxOutputFactory.java:274)
at com.ctc.wstx.stax.WstxOutputFactory.createXMLStreamWriter(WstxOutputFactory.java:134)
at org.apache.axiom.util.stax.wrapper.XMLOutputFactoryWrapper.createXMLStreamWriter(XMLOutputFactoryWrapper.java:66)
at org.apache.axiom.om.util.StAXUtils$5.run(StAXUtils.java:397)
at java.base/java.security.AccessController.doPrivileged(AccessController.java:569)
at org.apache.axiom.om.util.StAXUtils.createXMLStreamWriter(StAXUtils.java:395)
at org.apache.axiom.om.impl.MTOMXMLStreamWriter.<init>(MTOMXMLStreamWriter.java:128)
at org.apache.axiom.om.impl.llom.OMSerializableImpl.serializeAndConsume(OMSerializableImpl.java:191)
at org.apache.axis2.transport.http.SOAPMessageFormatter.writeTo(SOAPMessageFormatter.java:78)
... 48 more
Caused by: java.io.UnsupportedEncodingException: charset=UTF-8
at java.base/sun.nio.cs.StreamEncoder.forOutputStreamWriter(StreamEncoder.java:67)
at java.base/java.io.OutputStreamWriter.<init>(OutputStreamWriter.java:99)
at com.ctc.wstx.stax.WstxOutputFactory.createSW(WstxOutputFactory.java:270)
... 56 more