wso2 / micro-integrator

The cloud-native configuration driven runtime that helps developers implement composite microservices.

Home Page:https://wso2.com/integration/

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

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