ISO-8859-1 Input to UTF-8 Output via VFS - esb

We receive a XML file (not well-formed) encoded as ISO-8859-1 on a Linux system. An ESB Proxy picks this up and uses a Sequence to forward with SAMBA VFS to a Windows share.
On Windows certain characters are not displayed properly because I can't get it to encode as UTF-8. I have tried several approaches all without success. Using xxd these are the characters I have problems with:
0000b70: 4c55 45ef bfbd 5344 204a 503c 2f69 7373 LUEï.½SD JP</iss
0000bf0: 5445 4749 4320 5641 4c55 45ef bfbd 5344 TEGIC VALUEï.½SD
The half symbol. The proxy is:
<?xml version="1.0" encoding="UTF-8"?>
<proxy xmlns="http://ws.apache.org/ns/synapse" name="Proxy" transports="vfs" statistics="enable" trace="disable" startOnLoad="true">
<target faultSequence="ErrorSequence">
<inSequence>
<property name="OUT_ONLY" value="true"/>
<clone sequential="true">
<target sequence="Sequence"/>
</clone>
</inSequence>
</target>
<parameter name="transport.vfs.ActionAfterProcess">MOVE</parameter>
<parameter name="transport.PollInterval">60</parameter>
<parameter name="transport.vfs.MoveAfterProcess">file:///data/process</parameter>
<parameter name="transport.vfs.FileURI">file:///data/incoming</parameter>
<parameter name="transport.vfs.MoveAfterFailure">file:///data/failed</parameter>
<parameter name="transport.vfs.FileNamePattern">security.*</parameter>
<parameter name="transport.vfs.ContentType">text/plain; charset="UTF-8"</parameter>
<parameter name="transport.vfs.ActionAfterFailure">MOVE</parameter>
<description/>
</proxy>
The sequence is:
<sequence xmlns="http://ws.apache.org/ns/synapse" name="Sequence" onError="ErrorSequence" trace="enable">
<xslt key="UTF8Convert">
<property name="encoding" value="UTF-8"></property>
<property name="messageType" value="text/xml"></property>
<property name="ContentType" value="text/xml; charset=UTF-8</property>
</xslt>
<property xmlns:ns="http://org.apache.synapse/xsd" name="filename" expression="(get-property('transport', 'FILE_NAME'))"></property>
<property name="transport.vfs.ContentType" value="text/xml; charset="UTF-8"" scope="transport" type="STRING"></property
<property xmlns:ns="http://org.apache.synapse/xsd" name="transport.vfs.ReplyFileName" expression="get-property('filename')" scope="transport"></property>
<property name="OUT_ONLY" value="true"></property>
<property xmlns:ns="http://org.apache.synapse/xsd" name="serverurl" expression="fn:concat('vfs:smb://',fn:normalize-space(get-property('DOMAIN')),'\',fn:normalize-space(get-property('USERNAME')),':',fn:normalize-space(get-property('PWD')),'#',fn:normalize-space(get-property('DESTINATION')),'/',fn:normalize-space(get-property('DIR')),'/')"></property>
<header xmlns:ns="http://org.apache.synapse/xsd" name="To" expression="fn:concat(get-property('serverurl'),get-property('filename'))"></header>
<send>
<endpoint>
<default></default>
</endpoint>
</send>
</sequence>
The XSLT is:
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:output method="xml" version="1.0" encoding="UTF-8"></xsl:output>
<xsl:template match="#*|node()">
<xsl:copy>
<xsl:apply-templates select="#*|node()"></xsl:apply-templates>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
The trace log is like this:
00:35:09,924 [-] [vfs-Worker-18] INFO TRACE_LOGGER Start : Sequence<ApexXMLToEPMSequence>
00:35:09,924 [-] [vfs-Worker-18] INFO TRACE_LOGGER Setting the onError handler : ErrorSequence for the sequence : Sequence
00:35:09,924 [-] [vfs-Worker-18] INFO TRACE_LOGGER Sequence <SequenceMediator> ::mediate()
00:35:09,925 [-] [vfs-Worker-18] INFO TRACE_LOGGER Mediation started from mediator position : 0
00:35:09,925 [-] [vfs-Worker-18] INFO TRACE_LOGGER Start : XSLT mediator
00:35:09,927 [-] [vfs-Worker-18] INFO TRACE_LOGGER Setting parameter 'encoding' to 'UTF-8'
00:35:09,927 [-] [vfs-Worker-18] INFO TRACE_LOGGER Setting parameter 'messageType' to 'text/xml'
00:35:09,927 [-] [vfs-Worker-18] INFO TRACE_LOGGER Setting parameter 'ContentType' to 'text/xml; charset=UTF-8'
00:35:09,927 [-] [vfs-Worker-18] INFO TRACE_LOGGER output method: xml; encoding: UTF-8
00:35:09,927 [-] [vfs-Worker-18] INFO TRACE_LOGGER Using org.apache.synapse.util.jaxp.StreamSourceBuilder
00:35:09,932 [-] [vfs-Worker-18] INFO TRACE_LOGGER Transformation completed - processing result
00:35:09,933 [-] [vfs-Worker-18] INFO TRACE_LOGGER Replace node with result
00:35:09,933 [-] [vfs-Worker-18] INFO TRACE_LOGGER End : XSLT mediator
00:35:09,933 [-] [vfs-Worker-18] INFO TRACE_LOGGER Start : Property mediator
00:35:09,933 [-] [vfs-Worker-18] INFO TRACE_LOGGER Setting property : filename at scope : default to : security.2016046.113132 (i.e. result of expression : (get-property('transport', 'FILE_NAME')))
00:35:09,933 [-] [vfs-Worker-18] INFO TRACE_LOGGER End : Property mediator
00:35:09,933 [-] [vfs-Worker-18] INFO TRACE_LOGGER Start : Property mediator
00:35:09,933 [-] [vfs-Worker-18] INFO TRACE_LOGGER Setting property : transport.vfs.ContentType at scope : transport to : text/xml; charset="UTF-8" (i.e. constant : text/xml; charset="UTF-8")
00:35:09,933 [-] [vfs-Worker-18] INFO TRACE_LOGGER End : Property mediator
00:35:09,933 [-] [vfs-Worker-18] INFO TRACE_LOGGER Start : Property mediator
00:35:09,934 [-] [vfs-Worker-18] INFO TRACE_LOGGER Setting property : transport.vfs.ReplyFileName at scope : transport to : security.2016046 (i.e. result of expression : get-property('filename'))
00:35:09,934 [-] [vfs-Worker-18] INFO TRACE_LOGGER End : Property mediator
00:35:09,934 [-] [vfs-Worker-18] INFO TRACE_LOGGER Start : Property mediator
00:35:09,934 [-] [vfs-Worker-18] INFO TRACE_LOGGER Setting property : OUT_ONLY at scope : default to : true (i.e. constant : true)
00:35:09,934 [-] [vfs-Worker-18] INFO TRACE_LOGGER End : Property mediator
00:35:09,934 [-] [vfs-Worker-18] INFO TRACE_LOGGER Start : Property mediator
00:35:09,934 [-] [vfs-Worker-18] INFO TRACE_LOGGER Setting property : serverurl at scope : default to : vfs:smb://AC\user:passw#eserver/folder/ (i.e. result of expression : fn:concat('vfs:smb://',fn:normalize-space(get-property('DOMAIN')),'\',fn:normalize-space(get-property('USERNAME')),':',fn:normalize-space(get-property('PWD')),'#',fn:normalize-space(get-property('DESTINATION')),'/', fn:normalize-space(get-property('DIR')),'/'))
00:35:09,934 [-] [vfs-Worker-18] INFO TRACE_LOGGER End : Property mediator
00:35:09,934 [-] [vfs-Worker-18] INFO TRACE_LOGGER Start : Header mediator
00:35:09,934 [-] [vfs-Worker-18] INFO TRACE_LOGGER Set SOAP header : To to : vfs:smb://AC\user:passw#server/folder/security.2016046
00:35:09,934 [-] [vfs-Worker-18] INFO TRACE_LOGGER End : Header mediator
00:35:09,934 [-] [vfs-Worker-18] INFO TRACE_LOGGER Start : Send mediator
00:35:09,934 [-] [vfs-Worker-18] INFO TRACE_LOGGER Sending message through endpoint : null resolving to address = vfs:smb://AC\user:passw#server/folder/security.2016046
00:35:09,934 [-] [vfs-Worker-18] INFO TRACE_LOGGER SOAPAction: urn:mediate
00:35:09,934 [-] [vfs-Worker-18] INFO TRACE_LOGGER WSA-Action: urn:mediate
00:35:09,935 [-] [vfs-Worker-18] INFO TRACE_LOGGER End : Send mediator
00:35:09,935 [-] [vfs-Worker-18] INFO TRACE_LOGGER End : Sequence <Sequence>
The output on Windows shows as the input above with no coding to UTF-8. How do I make the ESB re-encode please?

If your xml file is encoded as ISO-8859-1, why do you configure your VFS proxy to read it as UTF-8 with : <parameter name="transport.vfs.ContentType">text/plain; charset="UTF-8"</parameter> ?
It seems that you read it as UTF-8 and write it as UTF-8
If you want to force output encoding with VFS, try to set a property named "CHARACTER_SET_ENCODING" before send

If you try to decode ISO-8859-1 encoded files using UTF-8, you will end up with some symbolic character representations (like accented characters). So best thing is Send the file as it is.
Use the VFS parameter like below,
<parameter name="transport.vfs.ContentType">text/plain; charset=iso-8859-1</parameter>
Add the following property and try your scenario.
<property name="messageType" value="text/plain; charset=iso-8859-1" scope="axis2"/>

Related

Spring Integration : error while inseting records in database with jdbc outbound gateway

I'm trying to insert data in the mysql database with jdbc outbound gateway but getting this error
nested exception is java.sql.SQLException: Invalid argument value:
java.io.NotSerializableException
App-config.xml is
<int-jdbc:inbound-channel-adapter
id="jdbcExtractor"
data-source="dataSource"
query="select * from Persons"
row-mapper="personRowMapeer"
channel="dataChannel">
<int:poller
fixed-delay="10000">
</int:poller>
</int-jdbc:inbound-channel-adapter>
<int:service-activator id="beanParser" input-channel="dataChannel" output-channel="JdbcChannel" ref="extractData" method="extractJdbcData" ></int:service-activator>
<int:channel id="JdbcChannel"></int:channel>
<int:channel id="testReply"></int:channel>
<int-jdbc:outbound-gateway
request-channel="JdbcChannel"
reply-channel="testReply"
request-sql-parameter-source-factory="requestSource"
reply-sql-parameter-source-factory="replySource"
data-source="dataSource"
update="insert into Persons (PersonID,LastName,FirstName,Address,City) values (:PersonID, :LastName, :FirstName, :Address, :City)"
query="select * from Persons where PersonID = :PersonID"
id="outboundInsert" >
</int-jdbc:outbound-gateway>
<bean id="personRowMapeer" class="com.example.SpringIntegrationDemo.test.PersonRowMapper"></bean>
<bean name="extractData" class="com.example.SpringIntegrationDemo.test.ExtractData"></bean>
<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName" value="com.mysql.jdbc.Driver" />
<property name="url" value="jdbc:mysql://localhost/demo" />
<property name="username" value="*****" />
<property name="password" value="*****" />
</bean>
<bean id="requestSource" class="org.springframework.integration.jdbc.ExpressionEvaluatingSqlParameterSourceFactory">
<property name="parameterExpressions">
<map>
<entry key="PersonID" value="payload.personId"/>
<entry key="LastName" value="payload.lastName"/>
<entry key="FirstName" value="payload.firstName"/>
<entry key="Address" value="payload.address" />
<entry key="City" value="payload.city" />
</map>
</property>
</bean>
<bean id="replySource" class="org.springframework.integration.jdbc.ExpressionEvaluatingSqlParameterSourceFactory">
<property name="parameterExpressions">
<map>
<entry key="PersonID" value="payload.personId"/>
</map>
</property>
</bean>
Extractor Class :
public class ExtractData implements Serializable {
/**
*
*/
private static final long serialVersionUID = -6405067378057426543L;
public PersonVo extractJdbcData(List<PersonVo> personVos) {
System.out.println("Printing the result set "+personVos.size());
return personVos.get(3);
}
}
I have added Serializable part later in the code.
RowMapper is already in place.
below is the full stack trace
2018-08-20 22:43:04.032 INFO 9086 --- [ main] c.e.S.SpringIntegrationDemoApplication : Starting SpringIntegrationDemoApplication on pratik-HP-Pavilion-g6-Notebook-PC with PID 9086 (/home/pratik/Documents/workspace-sts-3.9.5.RELEASE/SpringIntegrationDemo/target/classes started by pratik in /home/pratik/Documents/workspace-sts-3.9.5.RELEASE/SpringIntegrationDemo)
2018-08-20 22:43:04.036 INFO 9086 --- [ main] c.e.S.SpringIntegrationDemoApplication : No active profile set, falling back to default profiles: default
2018-08-20 22:43:04.097 INFO 9086 --- [ main] s.c.a.AnnotationConfigApplicationContext : Refreshing org.springframework.context.annotation.AnnotationConfigApplicationContext#143640d5: startup date [Mon Aug 20 22:43:04 IST 2018]; root of context hierarchy
2018-08-20 22:43:04.424 INFO 9086 --- [ main] o.s.b.f.xml.XmlBeanDefinitionReader : Loading XML bean definitions from URL [file:/home/pratik/Documents/workspace-sts-3.9.5.RELEASE/SpringIntegrationDemo/target/classes/app-config.xml]
2018-08-20 22:43:04.704 INFO 9086 --- [ main] o.s.i.config.IntegrationRegistrar : No bean named 'integrationHeaderChannelRegistry' has been explicitly defined. Therefore, a default DefaultHeaderChannelRegistry will be created.
2018-08-20 22:43:05.201 INFO 9086 --- [ main] faultConfiguringBeanFactoryPostProcessor : No bean named 'errorChannel' has been explicitly defined. Therefore, a default PublishSubscribeChannel will be created.
2018-08-20 22:43:05.203 INFO 9086 --- [ main] faultConfiguringBeanFactoryPostProcessor : No bean named 'taskScheduler' has been explicitly defined. Therefore, a default ThreadPoolTaskScheduler will be created.
2018-08-20 22:43:05.454 INFO 9086 --- [ main] trationDelegate$BeanPostProcessorChecker : Bean 'org.springframework.transaction.annotation.ProxyTransactionManagementConfiguration' of type [org.springframework.transaction.annotation.ProxyTransactionManagementConfiguration$$EnhancerBySpringCGLIB$$978e7c27] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying)
2018-08-20 22:43:05.559 INFO 9086 --- [ main] trationDelegate$BeanPostProcessorChecker : Bean 'org.springframework.integration.config.IntegrationManagementConfiguration' of type [org.springframework.integration.config.IntegrationManagementConfiguration$$EnhancerBySpringCGLIB$$2803756] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying)
2018-08-20 22:43:05.794 INFO 9086 --- [ main] o.s.s.c.ThreadPoolTaskScheduler : Initializing ExecutorService 'taskScheduler'
2018-08-20 22:43:05.888 INFO 9086 --- [ main] o.s.j.d.DriverManagerDataSource : Loaded JDBC driver: com.mysql.jdbc.Driver
2018-08-20 22:43:06.659 INFO 9086 --- [ main] o.s.j.e.a.AnnotationMBeanExporter : Registering beans for JMX exposure on startup
2018-08-20 22:43:06.671 INFO 9086 --- [ main] o.s.c.support.DefaultLifecycleProcessor : Starting beans in phase 0
2018-08-20 22:43:06.672 INFO 9086 --- [ main] o.s.i.endpoint.EventDrivenConsumer : Adding {service-activator:beanParser} as a subscriber to the 'dataChannel' channel
2018-08-20 22:43:06.672 INFO 9086 --- [ main] o.s.integration.channel.DirectChannel : Channel 'application.dataChannel' has 1 subscriber(s).
2018-08-20 22:43:06.672 INFO 9086 --- [ main] o.s.i.endpoint.EventDrivenConsumer : started beanParser
2018-08-20 22:43:06.672 INFO 9086 --- [ main] o.s.i.endpoint.EventDrivenConsumer : Adding {jdbc:outbound-gateway:outboundInsert} as a subscriber to the 'JdbcChannel' channel
2018-08-20 22:43:06.672 INFO 9086 --- [ main] o.s.integration.channel.DirectChannel : Channel 'application.JdbcChannel' has 1 subscriber(s).
2018-08-20 22:43:06.672 INFO 9086 --- [ main] o.s.i.endpoint.EventDrivenConsumer : started outboundInsert
2018-08-20 22:43:06.672 INFO 9086 --- [ main] o.s.i.endpoint.EventDrivenConsumer : Adding {logging-channel-adapter:_org.springframework.integration.errorLogger} as a subscriber to the 'errorChannel' channel
2018-08-20 22:43:06.673 INFO 9086 --- [ main] o.s.i.channel.PublishSubscribeChannel : Channel 'application.errorChannel' has 1 subscriber(s).
2018-08-20 22:43:06.673 INFO 9086 --- [ main] o.s.i.endpoint.EventDrivenConsumer : started _org.springframework.integration.errorLogger
2018-08-20 22:43:06.673 INFO 9086 --- [ main] o.s.c.support.DefaultLifecycleProcessor : Starting beans in phase 1073741823
2018-08-20 22:43:06.676 INFO 9086 --- [ main] o.s.i.e.SourcePollingChannelAdapter : started jdbcExtractor
2018-08-20 22:43:06.691 INFO 9086 --- [ main] c.e.S.SpringIntegrationDemoApplication : Started SpringIntegrationDemoApplication in 2.993 seconds (JVM running for 3.91)
Printing the result set 8
2018-08-20 22:43:06.755 INFO 9086 --- [ask-scheduler-1] o.s.b.f.xml.XmlBeanDefinitionReader : Loading XML bean definitions from class path resource [org/springframework/jdbc/support/sql-error-codes.xml]
2018-08-20 22:43:06.830 ERROR 9086 --- [ask-scheduler-1] o.s.integration.handler.LoggingHandler : org.springframework.messaging.MessageHandlingException: error occurred in message handler [org.springframework.integration.jdbc.JdbcOutboundGateway#0]; nested exception is org.springframework.dao.TransientDataAccessResourceException: PreparedStatementCallback; SQL [insert into Persons (PersonID,LastName,FirstName,Address,City) values (?, ?, ?, ?, ?)Invalid argument value: java.io.NotSerializableException; nested exception is java.sql.SQLException: Invalid argument value: java.io.NotSerializableException, failedMessage=GenericMessage [payload=com.example.SpringIntegrationDemo.vo.PersonVo#158c1a9d, headers={id=3be9637d-1c7a-fb51-e416-438fd8ab9e41, timestamp=1534785186707}]
at org.springframework.integration.support.utils.IntegrationUtils.wrapInHandlingExceptionIfNecessary(IntegrationUtils.java:184)
at org.springframework.integration.handler.AbstractMessageHandler.handleMessage(AbstractMessageHandler.java:175)
at org.springframework.integration.dispatcher.AbstractDispatcher.tryOptimizedDispatch(AbstractDispatcher.java:116)
at org.springframework.integration.dispatcher.UnicastingDispatcher.doDispatch(UnicastingDispatcher.java:132)
at org.springframework.integration.dispatcher.UnicastingDispatcher.dispatch(UnicastingDispatcher.java:105)
at org.springframework.integration.channel.AbstractSubscribableChannel.doSend(AbstractSubscribableChannel.java:73)
at org.springframework.integration.channel.AbstractMessageChannel.send(AbstractMessageChannel.java:445)
at org.springframework.integration.channel.AbstractMessageChannel.send(AbstractMessageChannel.java:394)
at org.springframework.messaging.core.GenericMessagingTemplate.doSend(GenericMessagingTemplate.java:181)
at org.springframework.messaging.core.GenericMessagingTemplate.doSend(GenericMessagingTemplate.java:160)
at org.springframework.messaging.core.GenericMessagingTemplate.doSend(GenericMessagingTemplate.java:47)
at org.springframework.messaging.core.AbstractMessageSendingTemplate.send(AbstractMessageSendingTemplate.java:108)
at org.springframework.integration.handler.AbstractMessageProducingHandler.sendOutput(AbstractMessageProducingHandler.java:426)
at org.springframework.integration.handler.AbstractMessageProducingHandler.produceOutput(AbstractMessageProducingHandler.java:336)
at org.springframework.integration.handler.AbstractMessageProducingHandler.sendOutputs(AbstractMessageProducingHandler.java:227)
at org.springframework.integration.handler.AbstractReplyProducingMessageHandler.handleMessageInternal(AbstractReplyProducingMessageHandler.java:115)
at org.springframework.integration.handler.AbstractMessageHandler.handleMessage(AbstractMessageHandler.java:158)
at org.springframework.integration.dispatcher.AbstractDispatcher.tryOptimizedDispatch(AbstractDispatcher.java:116)
at org.springframework.integration.dispatcher.UnicastingDispatcher.doDispatch(UnicastingDispatcher.java:132)
at org.springframework.integration.dispatcher.UnicastingDispatcher.dispatch(UnicastingDispatcher.java:105)
at org.springframework.integration.channel.AbstractSubscribableChannel.doSend(AbstractSubscribableChannel.java:73)
at org.springframework.integration.channel.AbstractMessageChannel.send(AbstractMessageChannel.java:445)
at org.springframework.integration.channel.AbstractMessageChannel.send(AbstractMessageChannel.java:394)
at org.springframework.messaging.core.GenericMessagingTemplate.doSend(GenericMessagingTemplate.java:181)
at org.springframework.messaging.core.GenericMessagingTemplate.doSend(GenericMessagingTemplate.java:160)
at org.springframework.messaging.core.GenericMessagingTemplate.doSend(GenericMessagingTemplate.java:47)
at org.springframework.messaging.core.AbstractMessageSendingTemplate.send(AbstractMessageSendingTemplate.java:108)
at org.springframework.integration.endpoint.SourcePollingChannelAdapter.handleMessage(SourcePollingChannelAdapter.java:227)
at org.springframework.integration.endpoint.AbstractPollingEndpoint.doPoll(AbstractPollingEndpoint.java:290)
at org.springframework.integration.endpoint.AbstractPollingEndpoint$Poller.lambda$run$0(AbstractPollingEndpoint.java:391)
at org.springframework.integration.util.ErrorHandlingTaskExecutor.lambda$execute$0(ErrorHandlingTaskExecutor.java:57)
at org.springframework.core.task.SyncTaskExecutor.execute(SyncTaskExecutor.java:50)
at org.springframework.integration.util.ErrorHandlingTaskExecutor.execute(ErrorHandlingTaskExecutor.java:55)
at org.springframework.integration.endpoint.AbstractPollingEndpoint$Poller.run(AbstractPollingEndpoint.java:385)
at org.springframework.scheduling.support.DelegatingErrorHandlingRunnable.run(DelegatingErrorHandlingRunnable.java:54)
at org.springframework.scheduling.concurrent.ReschedulingRunnable.run(ReschedulingRunnable.java:93)
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
at java.util.concurrent.FutureTask.run(FutureTask.java:266)
at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$201(ScheduledThreadPoolExecutor.java:180)
at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:293)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
at java.lang.Thread.run(Thread.java:748)
Caused by: org.springframework.dao.TransientDataAccessResourceException: PreparedStatementCallback; SQL [insert into Persons (PersonID,LastName,FirstName,Address,City) values (?, ?, ?, ?, ?)Invalid argument value: java.io.NotSerializableException; nested exception is java.sql.SQLException: Invalid argument value: java.io.NotSerializableException
at org.springframework.jdbc.support.SQLStateSQLExceptionTranslator.doTranslate(SQLStateSQLExceptionTranslator.java:110)
at org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:72)
at org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:81)
at org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:81)
at org.springframework.jdbc.core.JdbcTemplate.translateException(JdbcTemplate.java:1402)
at org.springframework.jdbc.core.JdbcTemplate.execute(JdbcTemplate.java:620)
at org.springframework.jdbc.core.JdbcTemplate.update(JdbcTemplate.java:850)
at org.springframework.jdbc.core.JdbcTemplate.update(JdbcTemplate.java:871)
at org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate.update(NamedParameterJdbcTemplate.java:317)
at org.springframework.integration.jdbc.JdbcMessageHandler.executeUpdateQuery(JdbcMessageHandler.java:198)
at org.springframework.integration.jdbc.JdbcOutboundGateway.handleRequestMessage(JdbcOutboundGateway.java:136)
at org.springframework.integration.handler.AbstractReplyProducingMessageHandler.handleMessageInternal(AbstractReplyProducingMessageHandler.java:109)
at org.springframework.integration.handler.AbstractMessageHandler.handleMessage(AbstractMessageHandler.java:158)
... 41 more
Caused by: java.sql.SQLException: Invalid argument value: java.io.NotSerializableException
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1078)
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:989)
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:975)
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:920)
at com.mysql.jdbc.PreparedStatement.setSerializableObject(PreparedStatement.java:4414)
at com.mysql.jdbc.PreparedStatement.setObject(PreparedStatement.java:4085)
at org.springframework.jdbc.core.StatementCreatorUtils.setValue(StatementCreatorUtils.java:411)
at org.springframework.jdbc.core.StatementCreatorUtils.setParameterValueInternal(StatementCreatorUtils.java:232)
at org.springframework.jdbc.core.StatementCreatorUtils.setParameterValue(StatementCreatorUtils.java:147)
at org.springframework.jdbc.core.PreparedStatementCreatorFactory$PreparedStatementCreatorImpl.setValues(PreparedStatementCreatorFactory.java:278)
at org.springframework.jdbc.core.PreparedStatementCreatorFactory$PreparedStatementCreatorImpl.createPreparedStatement(PreparedStatementCreatorFactory.java:236)
at org.springframework.jdbc.core.JdbcTemplate.execute(JdbcTemplate.java:603)
... 48 more
Caused by: java.io.NotSerializableException: java.lang.Object
at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1184)
at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:348)
at com.mysql.jdbc.PreparedStatement.setSerializableObject(PreparedStatement.java:4403)
... 55 more
Is there something am I doing incorrectly ?
The problem not with the whole ExtractData or even its PersonVo. There is something wrong with your parameters for the INSERT:
<entry key="PersonID" value="payload.personId"/>
<entry key="LastName" value="payload.lastName"/>
<entry key="FirstName" value="payload.firstName"/>
<entry key="Address" value="payload.address" />
<entry key="City" value="payload.city" />
Some of these values extracted from the PersonVo is not compatible with plain conversion to the JDBC types.

WSO2 - ESB Pass through Proxy Post Request Failure

Hi guys can you help me out with my WSO2 - ESB problem.
I am experiencing the following error in our UAT environment but not in my SIT environment. I need a hint on why this is happening so I can change my CAR file or add the proper configuration to our server if needed.
For some reason when the Client doing a Post request I am experiencing a timeout error. Upon checking the logs I see that their is an error that states that the Payload could not be written as JSON. This does not happen in a GET request so I am at a lost. I can also confirm that the request is being sent in the back end using either GET/POST.
Please note that the following servers does not exist so app03/app04 so failure to connect to those server is expected (We only have 2 UAT servers but 4 in our PRD environment).
What I do not understand is why this only happens in Post request and if i need to modify my code or set something in the WSO2-ESB server.
For any clarification or additional information please do not hesitate to ask.
Thanks for your help
Carbon Logs
TID: [-1234] [] [2017-09-22 09:12:03,608] INFO {org.apache.synapse.mediators.builtin.LogMediator} - Request: Target URL = /services/XXXX-ws_PS/payments/validate, Client IP = 172.22.222.156, Request ID = urn:uuid:0df0d876-6093-4479-9537-70bbbdf4d649 {org.apache.synapse.mediators.builtin.LogMediator}
TID: [-1234] [] [2017-09-22 09:12:04,029] INFO {org.apache.synapse.mediators.builtin.LogMediator} - Response: To = /services/XXXX-ws_PS/payments/validate, IP = 172.22.222.156, RequestID = urn:uuid:0df0d876-6093-4479-9537-70bbbdf4d649 {org.apache.synapse.mediators.builtin.LogMediator}
TID: [-1234] [] [2017-09-22 09:12:04,029] ERROR {org.apache.synapse.commons.json.JsonUtil} - #writeAsJson. Payload could not be written as JSON. MessageID: urn:uuid:3b69a0e3-f6b3-4e49-8d14-23d7596c2366 {org.apache.synapse.commons.json.JsonUtil}
TID: [-1234] [] [2017-09-22 09:12:04,029] ERROR {org.apache.synapse.transport.passthru.PassThroughHttpSSLSender} - Failed to submit the response {org.apache.synapse.transport.passthru.PassThroughHttpSSLSender}
org.apache.axis2.AxisFault: Payload could not be written as JSON.
at org.apache.synapse.commons.json.JsonUtil.writeAsJson(JsonUtil.java:263)
at org.apache.synapse.commons.json.JsonStreamFormatter.writeTo(JsonStreamFormatter.java:61)
at org.apache.synapse.transport.passthru.PassThroughHttpSender.submitResponse(PassThroughHttpSender.java:555)
at org.apache.synapse.transport.passthru.PassThroughHttpSender.invoke(PassThroughHttpSender.java:264)
at org.apache.axis2.engine.AxisEngine.send(AxisEngine.java:442)
at org.apache.synapse.core.axis2.Axis2Sender.sendBack(Axis2Sender.java:222)
at org.apache.synapse.core.axis2.Axis2SynapseEnvironment.send(Axis2SynapseEnvironment.java:531)
at org.apache.synapse.mediators.builtin.SendMediator.mediate(SendMediator.java:118)
at org.apache.synapse.mediators.AbstractListMediator.mediate(AbstractListMediator.java:97)
at org.apache.synapse.mediators.AbstractListMediator.mediate(AbstractListMediator.java:59)
at org.apache.synapse.mediators.base.SequenceMediator.mediate(SequenceMediator.java:158)
at org.apache.synapse.core.axis2.Axis2SynapseEnvironment.injectMessage(Axis2SynapseEnvironment.java:337)
at org.apache.synapse.core.axis2.SynapseCallbackReceiver.handleMessage(SynapseCallbackReceiver.java:554)
at org.apache.synapse.core.axis2.SynapseCallbackReceiver.receive(SynapseCallbackReceiver.java:188)
at org.apache.axis2.engine.AxisEngine.receive(AxisEngine.java:180)
at org.apache.synapse.transport.passthru.ClientWorker.run(ClientWorker.java:261)
at org.apache.axis2.transport.base.threads.NativeWorkerPool$1.run(NativeWorkerPool.java:172)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
at java.lang.Thread.run(Thread.java:745)
TID: [-1234] [] [2017-09-22 09:12:04,042] ERROR {org.apache.synapse.core.axis2.Axis2Sender} - <?xml version='1.0' encoding='utf-8'?><soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"><soapenv:Body/></soapenv:Envelope> Unexpected error sending message back {org.apache.synapse.core.axis2.Axis2Sender}
org.apache.axis2.AxisFault: Failed to submit the response
at org.apache.synapse.transport.passthru.PassThroughHttpSender.handleException(PassThroughHttpSender.java:613)
at org.apache.synapse.transport.passthru.PassThroughHttpSender.invoke(PassThroughHttpSender.java:266)
at org.apache.axis2.engine.AxisEngine.send(AxisEngine.java:442)
at org.apache.synapse.core.axis2.Axis2Sender.sendBack(Axis2Sender.java:222)
at org.apache.synapse.core.axis2.Axis2SynapseEnvironment.send(Axis2SynapseEnvironment.java:531)
at org.apache.synapse.mediators.builtin.SendMediator.mediate(SendMediator.java:118)
at org.apache.synapse.mediators.AbstractListMediator.mediate(AbstractListMediator.java:97)
at org.apache.synapse.mediators.AbstractListMediator.mediate(AbstractListMediator.java:59)
at org.apache.synapse.mediators.base.SequenceMediator.mediate(SequenceMediator.java:158)
at org.apache.synapse.core.axis2.Axis2SynapseEnvironment.injectMessage(Axis2SynapseEnvironment.java:337)
at org.apache.synapse.core.axis2.SynapseCallbackReceiver.handleMessage(SynapseCallbackReceiver.java:554)
at org.apache.synapse.core.axis2.SynapseCallbackReceiver.receive(SynapseCallbackReceiver.java:188)
at org.apache.axis2.engine.AxisEngine.receive(AxisEngine.java:180)
at org.apache.synapse.transport.passthru.ClientWorker.run(ClientWorker.java:261)
at org.apache.axis2.transport.base.threads.NativeWorkerPool$1.run(NativeWorkerPool.java:172)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
at java.lang.Thread.run(Thread.java:745)
Caused by: org.apache.axis2.AxisFault: Payload could not be written as JSON.
at org.apache.synapse.commons.json.JsonUtil.writeAsJson(JsonUtil.java:263)
at org.apache.synapse.commons.json.JsonStreamFormatter.writeTo(JsonStreamFormatter.java:61)
at org.apache.synapse.transport.passthru.PassThroughHttpSender.submitResponse(PassThroughHttpSender.java:555)
at org.apache.synapse.transport.passthru.PassThroughHttpSender.invoke(PassThroughHttpSender.java:264)
... 16 more
TID: [-1234] [] [2017-09-22 09:12:04,047] ERROR {org.apache.synapse.mediators.builtin.LogMediator} - Error: To = /services/XXXX-ws_PS/payments/validate, IP = 172.22.222.156, RequestID = urn:uuid:0df0d876-6093-4479-9537-70bbbdf4d649 {org.apache.synapse.mediators.builtin.LogMediator}
TID: [-1234] [] [2017-09-22 09:12:20,541] INFO {org.apache.synapse.mediators.builtin.LogMediator} - Request: Target URL = /services/XXXX-ws_PS/institutions/details/00239, Client IP = 172.22.222.156, Request ID = urn:uuid:e5aca458-03a6-41b3-81b5-d409c5eaa66a {org.apache.synapse.mediators.builtin.LogMediator}
TID: [-1] [] [2017-09-22 09:12:20,542] WARN {org.apache.synapse.transport.passthru.ConnectCallback} - Connection refused or failed for : app03.XXXX.uat.XXX.com.ph:50209 {org.apache.synapse.transport.passthru.ConnectCallback}
TID: [-1234] [] [2017-09-22 09:12:20,542] WARN {org.apache.synapse.endpoints.EndpointContext} - Endpoint : AnonymousEndpoint with address https://app03.XXXX.uat.XXX.com.ph:50209/XXXX-ws/ will be marked SUSPENDED as it failed {org.apache.synapse.endpoints.EndpointContext}
TID: [-1234] [] [2017-09-22 09:12:20,542] WARN {org.apache.synapse.endpoints.EndpointContext} - Suspending endpoint : AnonymousEndpoint with address https://app03.XXXX.uat.XXX.com.ph:50209/XXXX-ws/ - last suspend duration was : 300000ms and current suspend duration is : 300000ms - Next retry after : Fri Sep 22 09:17:20 PHT 2017 {org.apache.synapse.endpoints.EndpointContext}
TID: [-1234] [] [2017-09-22 09:12:20,542] WARN {org.apache.synapse.endpoints.LoadbalanceEndpoint} - Endpoint [XXXX-ws_LBEP] Detect a Failure in a child endpoint : AnonymousEndpoint {org.apache.synapse.endpoints.LoadbalanceEndpoint}
TID: [-1] [] [2017-09-22 09:12:20,545] WARN {org.apache.synapse.transport.passthru.ConnectCallback} - Connection refused or failed for : app04.XXXX.uat.XXX.com.ph:50209 {org.apache.synapse.transport.passthru.ConnectCallback}
TID: [-1234] [] [2017-09-22 09:12:20,545] WARN {org.apache.synapse.endpoints.EndpointContext} - Endpoint : AnonymousEndpoint with address https://app04.XXXX.uat.XXX.com.ph:50209/XXXX-ws/ will be marked SUSPENDED as it failed {org.apache.synapse.endpoints.EndpointContext}
TID: [-1234] [] [2017-09-22 09:12:20,546] WARN {org.apache.synapse.endpoints.EndpointContext} - Suspending endpoint : AnonymousEndpoint with address https://app04.XXXX.uat.XXX.com.ph:50209/XXXX-ws/ - last suspend duration was : 300000ms and current suspend duration is : 300000ms - Next retry after : Fri Sep 22 09:17:20 PHT 2017 {org.apache.synapse.endpoints.EndpointContext}
TID: [-1234] [] [2017-09-22 09:12:20,546] WARN {org.apache.synapse.endpoints.LoadbalanceEndpoint} - Endpoint [XXXX-ws_LBEP] Detect a Failure in a child endpoint : AnonymousEndpoint {org.apache.synapse.endpoints.LoadbalanceEndpoint}
TID: [-1234] [] [2017-09-22 09:12:20,785] INFO {org.apache.synapse.mediators.builtin.LogMediator} - Response: To = /services/XXXX-ws_PS/institutions/details/00239, IP = 172.22.222.156, RequestID = urn:uuid:e5aca458-03a6-41b3-81b5-d409c5eaa66a {org.apache.synapse.mediators.builtin.LogMediator}
TID: [-1] [] [2017-09-22 09:15:03,802] WARN {org.apache.synapse.transport.passthru.SourceHandler} - Connection time out after request is read: http-incoming-49847 Socket Timeout : 180000 Remote Address : h02610a24.ho.ad.XXX/172.22.222.156:58409 {org.apache.synapse.transport.passthru.SourceHandler}
TID: [-1234] [] [2017-09-22 09:30:09,430] INFO {org.apache.synapse.mediators.builtin.LogMediator} - To: /, MessageID: urn:uuid:d233e911-f717-4d42-a24c-eca0e7c32768, Direction: request, Envelope: <?xml version='1.0' encoding='utf-8'?><soapenv:Envelope xmlns:soapenv="http://www.w3.org/2003/05/soap-envelope"><soapenv:Body/></soapenv:Envelope> {org.apache.synapse.mediators.builtin.LogMediator}
TID: [-1] [] [2017-09-22 09:47:24,248] ERROR {org.apache.synapse.transport.passthru.SourceHandler} - I/O error: Unrecognized SSL message, plaintext connection? {org.apache.synapse.transport.passthru.SourceHandler}
javax.net.ssl.SSLException: Unrecognized SSL message, plaintext connection?
at sun.security.ssl.EngineInputRecord.bytesInCompletePacket(EngineInputRecord.java:156)
at sun.security.ssl.SSLEngineImpl.readNetRecord(SSLEngineImpl.java:868)
at sun.security.ssl.SSLEngineImpl.unwrap(SSLEngineImpl.java:781)
at javax.net.ssl.SSLEngine.unwrap(SSLEngine.java:624)
at org.apache.http.nio.reactor.ssl.SSLIOSession.doUnwrap(SSLIOSession.java:245)
at org.apache.http.nio.reactor.ssl.SSLIOSession.doHandshake(SSLIOSession.java:280)
at org.apache.http.nio.reactor.ssl.SSLIOSession.isAppInputReady(SSLIOSession.java:410)
at org.apache.http.impl.nio.reactor.AbstractIODispatch.inputReady(AbstractIODispatch.java:119)
at org.apache.http.impl.nio.reactor.BaseIOReactor.readable(BaseIOReactor.java:159)
at org.apache.http.impl.nio.reactor.AbstractIOReactor.processEvent(AbstractIOReactor.java:338)
at org.apache.http.impl.nio.reactor.AbstractIOReactor.processEvents(AbstractIOReactor.java:316)
at org.apache.http.impl.nio.reactor.AbstractIOReactor.execute(AbstractIOReactor.java:277)
at org.apache.http.impl.nio.reactor.BaseIOReactor.execute(BaseIOReactor.java:105)
at org.apache.http.impl.nio.reactor.AbstractMultiworkerIOReactor$Worker.run(AbstractMultiworkerIOReactor.java:586)
at java.lang.Thread.run(Thread.java:745)
TID: [-1234] [] [2017-09-22 10:00:14,936] INFO {org.apache.synapse.mediators.builtin.LogMediator} - To: /, MessageID: urn:uuid:d5e87ee5-d83b-4ded-8110-b64dd01ce08f, Direction: request, Envelope: <?xml version='1.0' encoding='utf-8'?><soapenv:Envelope xmlns:soapenv="http://www.w3.org/2003/05/soap-envelope"><soapenv:Body/></soapenv:Envelope> {org.apache.synapse.mediators.builtin.LogMediator}
Proxy Code
<?xml version="1.0" encoding="UTF-8"?>
<proxy name="XXXX-ws_PS" startOnLoad="true" transports="https http" xmlns="http://ws.apache.org/ns/synapse">
<target>
<inSequence>
<property description="targetURL" expression="get-property('To')" name="targetURL" scope="default" type="STRING"/>
<property description="clientIP" expression="get-property('axis2','REMOTE_ADDR')" name="clientIP" scope="default" type="STRING"/>
<property description="requestID" expression="get-property('MessageID')" name="requestID" scope="default" type="STRING"/>
<log description="requestLog" level="custom">
<property expression="get-property('targetURL')" name="Request: Target URL"/>
<property expression="get-property('clientIP')" name="Client IP"/>
<property expression="get-property('requestID')" name="Request ID"/>
</log>
<send description="">
<endpoint key="XXXX-ws_LBEP"/>
</send>
</inSequence>
<outSequence>
<log description="resposeLog" level="custom">
<property expression="get-property('targetURL')" name="Response: To"/>
<property expression="get-property('clientIP')" name="IP"/>
<property expression="get-property('requestID')" name="RequestID"/>
</log>
<send/>
</outSequence>
<faultSequence>
<log category="ERROR" description="errorLog" level="custom">
<property expression="get-property('targetURL')" name="Error: To"/>
<property expression="get-property('clientIP')" name="IP"/>
<property expression="get-property('requestID')" name="RequestID"/>
</log>
</faultSequence>
</target>
</proxy>
Endpoint Code
<?xml version="1.0" encoding="UTF-8"?>
<endpoint name="XXXX-ws_LBEP" xmlns="http://ws.apache.org/ns/synapse">
<loadbalance algorithm="org.apache.synapse.endpoints.algorithms.RoundRobin">
<endpoint>
<http uri-template="https://app01.XXXX.uat.XXX.com.ph:50209/XXXX-ws/">
<timeout>
<duration>600000</duration>
<responseAction>fault</responseAction>
</timeout>
<suspendOnFailure>
<initialDuration>300000</initialDuration>
<progressionFactor>1.0</progressionFactor>
<maximumDuration>1800000</maximumDuration>
</suspendOnFailure>
<markForSuspension>
<retriesBeforeSuspension>3</retriesBeforeSuspension>
<retryDelay>30000</retryDelay>
</markForSuspension>
</http>
</endpoint>
<endpoint>
<http uri-template="https://app02.XXXX.uat.XXX.com.ph:50209/XXXX-ws/">
<timeout>
<duration>600000</duration>
<responseAction>fault</responseAction>
</timeout>
<suspendOnFailure>
<initialDuration>300000</initialDuration>
<progressionFactor>1.0</progressionFactor>
<maximumDuration>1800000</maximumDuration>
</suspendOnFailure>
<markForSuspension>
<retriesBeforeSuspension>3</retriesBeforeSuspension>
<retryDelay>30000</retryDelay>
</markForSuspension>
</http>
</endpoint>
<endpoint>
<http uri-template="https://app03.XXXX.uat.XXX.com.ph:50209/XXXX-ws/">
<timeout>
<duration>600000</duration>
<responseAction>fault</responseAction>
</timeout>
<suspendOnFailure>
<initialDuration>300000</initialDuration>
<progressionFactor>1.0</progressionFactor>
<maximumDuration>1800000</maximumDuration>
</suspendOnFailure>
<markForSuspension>
<retriesBeforeSuspension>3</retriesBeforeSuspension>
<retryDelay>30000</retryDelay>
</markForSuspension>
</http>
</endpoint>
<endpoint>
<http uri-template="https://app04.XXXX.uat.XXX.com.ph:50209/XXXX-ws/">
<timeout>
<duration>600000</duration>
<responseAction>fault</responseAction>
</timeout>
<suspendOnFailure>
<initialDuration>300000</initialDuration>
<progressionFactor>1.0</progressionFactor>
<maximumDuration>1800000</maximumDuration>
</suspendOnFailure>
<markForSuspension>
<retriesBeforeSuspension>3</retriesBeforeSuspension>
<retryDelay>30000</retryDelay>
</markForSuspension>
</http>
</endpoint>
</loadbalance>
</endpoint>
The use of 'targetURL' is not correct. Instead define the endpoint in the <send> So something like
<send>
<endpoint key="XXXX-ws_LBEP" />
</send>

Error when trying to create custom Json to XML transformer in Mule

I'm trying to create a custom Json to XML conversion in mule (custom transformer), its just a one to one direct mapping values, not a complex transformation.
here is my flow:
<?xml version="1.0" encoding="UTF-8"?>
<mule xmlns:metadata="http://www.mulesoft.org/schema/mule/metadata" xmlns:json="http://www.mulesoft.org/schema/mule/json" xmlns:http="http://www.mulesoft.org/schema/mule/http" xmlns="http://www.mulesoft.org/schema/mule/core" xmlns:doc="http://www.mulesoft.org/schema/mule/documentation"
xmlns:spring="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-current.xsd
http://www.mulesoft.org/schema/mule/core http://www.mulesoft.org/schema/mule/core/current/mule.xsd
http://www.mulesoft.org/schema/mule/json http://www.mulesoft.org/schema/mule/json/current/mule-json.xsd
http://www.mulesoft.org/schema/mule/http http://www.mulesoft.org/schema/mule/http/current/mule-http.xsd">
<http:listener-config name="HTTP_Listener_Configuration" host="0.0.0.0" port="8081" basePath="/test" doc:name="HTTP Listener Configuration"/>
<flow name="test_finalFlow">
<http:listener config-ref="HTTP_Listener_Configuration" path="/" doc:name="HTTP"/>
<json:json-to-xml-transformer metadata:id="57c0cd3d-ece4-48fe-9adf-79fc36a31b12" doc:name="JSON to XML"/>
<logger level="INFO" doc:name="Logger"/>
</flow>
</mule>
I'm using theses files to configure my Json to XML component
jsonFile.json:
{
"inData": "value"
}
xml file: outData.xml
<?xml version='1.0' encoding='UTF-8'?>
<root>
<outData>someValue</outData>
</root>
setting the metadata:
right now when I deploy the application I do not have any problem,
but when I use postman to send a POST data with payload I got these errors:
and this is the full output of the console:
*******************************************************************************************************
* - - + APPLICATION + - - * - - + DOMAIN + - - * - - + STATUS + - - *
*******************************************************************************************************
* test_final * default * DEPLOYED *
*******************************************************************************************************
ERROR 2017-01-17 21:23:29,014 [[test_final].HTTP_Listener_Configuration.worker.01] org.mule.exception.DefaultMessagingExceptionStrategy:
********************************************************************************
Message : java.io.IOException: Illegal character: <i> (javax.xml.stream.XMLStreamException)
Payload : org.glassfish.grizzly.utils.BufferInputStream#526ed3db
Transformer : JsonToXml{this=6993c8df, name='JsonToString', ignoreBadInput=false, returnClass=SimpleDataType{type=java.lang.String, mimeType='text/xml', encoding='null'}, sourceTypes=[SimpleDataType{type=java.lang.String, mimeType='*/*', encoding='null'}, SimpleDataType{type=java.io.InputStream, mimeType='*/*', encoding='null'}, SimpleDataType{type=[B, mimeType='*/*', encoding='null'}, SimpleDataType{type=java.io.Reader, mimeType='*/*', encoding='null'}, SimpleDataType{type=java.net.URL, mimeType='*/*', encoding='null'}, SimpleDataType{type=java.io.File, mimeType='*/*', encoding='null'}]}
Element : /test_finalFlow/processors/0 # test_final:test_final.xml:13 (JSON to XML)
Element XML : <json:json-to-xml-transformer metadata:id="57c0cd3d-ece4-48fe-9adf-79fc36a31b12" doc:name="JSON to XML"></json:json-to-xml-transformer>
--------------------------------------------------------------------------------
Root Exception stack trace:
java.io.IOException: Illegal character: <i>
at de.odysseus.staxon.json.stream.impl.Yylex.yylex(Yylex.java:641)
at de.odysseus.staxon.json.stream.impl.Yylex.nextSymbol(Yylex.java:271)
at de.odysseus.staxon.json.stream.impl.JsonStreamSourceImpl.next(JsonStreamSourceImpl.java:107)
at de.odysseus.staxon.json.stream.impl.JsonStreamSourceImpl.peek(JsonStreamSourceImpl.java:250)
at de.odysseus.staxon.json.JsonXMLStreamReader.consume(JsonXMLStreamReader.java:128)
at de.odysseus.staxon.json.JsonXMLStreamReader.consume(JsonXMLStreamReader.java:161)
at de.odysseus.staxon.base.AbstractXMLStreamReader.initialize(AbstractXMLStreamReader.java:216)
at de.odysseus.staxon.json.JsonXMLStreamReader.<init>(JsonXMLStreamReader.java:65)
at de.odysseus.staxon.json.JsonXMLInputFactory.createXMLStreamReader(JsonXMLInputFactory.java:139)
at de.odysseus.staxon.json.JsonXMLInputFactory.createXMLStreamReader(JsonXMLInputFactory.java:120)
at de.odysseus.staxon.json.JsonXMLInputFactory.createXMLStreamReader(JsonXMLInputFactory.java:44)
at org.mule.module.json.transformers.JsonToXml.doTransform(JsonToXml.java:55)
at org.mule.transformer.AbstractTransformer.transform(AbstractTransformer.java:415)
at org.mule.transformer.AbstractTransformer.transform(AbstractTransformer.java:366)
at org.mule.DefaultMuleMessage.transformMessage(DefaultMuleMessage.java:1589)
at org.mule.DefaultMuleMessage.applyAllTransformers(DefaultMuleMessage.java:1488)
at org.mule.DefaultMuleMessage.applyTransformers(DefaultMuleMessage.java:1462)
at org.mule.DefaultMuleMessage.applyTransformers(DefaultMuleMessage.java:1454)
at org.mule.transformer.AbstractTransformer.process(AbstractTransformer.java:114)
at org.mule.execution.ExceptionToMessagingExceptionExecutionInterceptor.execute(ExceptionToMessagingExceptionExecutionInterceptor.java:27)
at org.mule.execution.MessageProcessorNotificationExecutionInterceptor.execute(MessageProcessorNotificationExecutionInterceptor.java:108)
at org.mule.execution.MessageProcessorExecutionTemplate.execute(MessageProcessorExecutionTemplate.java:44)
at org.mule.processor.BlockingProcessorExecutor.executeNext(BlockingProcessorExecutor.java:98)
at org.mule.processor.BlockingProcessorExecutor.execute(BlockingProcessorExecutor.java:59)
at org.mule.execution.ExceptionToMessagingExceptionExecutionInterceptor.execute(ExceptionToMessagingExceptionExecutionInterceptor.java:27)
at org.mule.execution.MessageProcessorExecutionTemplate.execute(MessageProcessorExecutionTemplate.java:44)
at org.mule.processor.BlockingProcessorExecutor.executeNext(BlockingProcessorExecutor.java:98)
at org.mule.processor.BlockingProcessorExecutor.execute(BlockingProcessorExecutor.java:59)
at org.mule.processor.AsyncInterceptingMessageProcessor.process(AsyncInterceptingMessageProcessor.java:102)
at org.mule.execution.ExceptionToMessagingExceptionExecutionInterceptor.execute(ExceptionToMessagingExceptionExecutionInterceptor.java:27)
at org.mule.execution.MessageProcessorNotificationExecutionInterceptor.execute(MessageProcessorNotificationExecutionInterceptor.java:108)
at org.mule.execution.MessageProcessorExecutionTemplate.execute(MessageProcessorExecutionTemplate.java:44)
at org.mule.processor.BlockingProcessorExecutor.executeNext(BlockingProcessorExecutor.java:98)
at org.mule.processor.BlockingProcessorExecutor.execute(BlockingProcessorExecutor.java:59)
at org.mule.construct.DynamicPipelineMessageProcessor.process(DynamicPipelineMessageProcessor.java:55)
at org.mule.execution.ExceptionToMessagingExceptionExecutionInterceptor.execute(ExceptionToMessagingExceptionExecutionInterceptor.java:27)
at org.mule.execution.MessageProcessorNotificationExecutionInterceptor.execute(MessageProcessorNotificationExecutionInterceptor.java:108)
at org.mule.execution.MessageProcessorExecutionTemplate.execute(MessageProcessorExecutionTemplate.java:44)
at org.mule.processor.BlockingProcessorExecutor.executeNext(BlockingProcessorExecutor.java:88)
Any idea about what causing the error ?
java.io.IOException: Illegal character: i ?
Note:
I'm trying to create this custom transformer because I'm using just Mule server 3.8.1 CE right now , I'll get access soon to an enterprise edition version that's why I'm trying to deploy in a community edition server at this time.
please refer the below link for creating a custom json to xml transformer
https://docs.mulesoft.com/mule-user-guide/v/3.6/creating-custom-transformers

Get "^M" but "\n" when transfer Return Character from XML format to JSON format in wso2esb

I got the problem as title said when transferring Return Character from XML format to JSON format in wso2esb.
In ML format, the string is "1234
123", and when using the following code to transfer,
<payloadFactory media-type="json">
<format>
$1
</format>
<args>
<arg evaluator="json" expression="$.text"/>
</args>
</payloadFactory>
<property name="messageType" scope="axis2" type="STRING" value="application/json"/>
I got the result of "1234^M123". But in fact, it should be '\n', otherwise, the next Java application cannot wrapper the json message to object.(Exception: Illegal unquoted character ((CTRL-CHAR, code 13)): has to be escaped using backslash to be included in string value).
Here's the payload info just before "payloadFactory" as follows, and mentioned problem occurred for "comment" field:
INFO {org.apache.synapse.mediators.builtin.LogMediator} - To: , From: mailto:mail#dev.dev, WSAction: urn:mediate, SOAPAction: urn:mediate, MessageID: <1709772976.1.1481784107877#localhost>, Direction: request, Envelope: <?xml version='1.0' encoding='utf-8'?><soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"><soapenv:Body><text xmlns="http://ws.apache.org/commons/ns/payload">{"source":"test", "refNo":"202591", "comments":"1234
123" }
</text></soapenv:Body></soapenv:Envelope>
Could anybody help to the problem please?

WSO2 ESB array with single element json to json conversion brackets missing

I'm using wso2 esb 4.9 and created a proxy with payloadFactory element and call it with REST to start my BPMN process, but the problem is esb cannot convert single element json array , and esb drops json array's brackets. here is my proxy :
<?xml version="1.0" encoding="UTF-8"?>
<proxy xmlns="http://ws.apache.org/ns/synapse"
name="InformationIncome"
transports="https,http"
statistics="disable"
trace="disable"
startOnLoad="true">
<target>
<inSequence>
<log level="full"/>
<property name="FORCE_SC_ACCEPTED" value="true" scope="axis2"/>
<property name="OUT_ONLY" value="true"/>
<payloadFactory media-type="json">
<format>
{
"processDefinitionId":"myProcess:6:25188",
"variables": [
{
"name":"text",
"value":"$1"
}
]
}
</format>
<args>
<arg evaluator="json" expression="$.text"/>
</args>
</payloadFactory>
<header name="Authorization"
scope="transport"
expression="fn:concat('Basic ', base64Encode('admin:admin'))"/>
<log level="full"/>
<store messageStore="InformationIncomeMS"/>
</inSequence>
</target>
<description/>
</proxy>
And Here is the content of my request from soapUI :
{
"text" : "Hello"
}
And I found out my json becomes like this after payloadFactory:
{
"processDefinitionId":"myProcess:6:25188",
"variables": {
{
"name":"text",
"value":"Hello"
}
}
}
it seems esb json converter drops brackets of arrays with single element. Any ideas?
I tested above scenario with Postman, and it works properly. Please find steps as follows;
Add proxy and remove message store. (Because adding null message to message store giving following error)
[2016-07-11 13:46:53,291] ERROR - NativeWorkerPool Uncaught exception
java.lang.Error: Error: could not match input
at org.apache.synapse.commons.staxon.core.json.stream.impl.JsonScanner.zzScanError(JsonScanner.java:530)
at org.apache.synapse.commons.staxon.core.json.stream.impl.JsonScanner.yylex(JsonScanner.java:941)
at org.apache.synapse.commons.staxon.core.json.stream.impl.JsonScanner.nextSymbol(JsonScanner.java:310)
at org.apache.synapse.commons.staxon.core.json.stream.impl.JsonStreamSourceImpl.next(JsonStreamSourceImpl.java:149)
at org.apache.synapse.commons.staxon.core.json.stream.impl.JsonStreamSourceImpl.peek(JsonStreamSourceImpl.java:272)
at org.apache.synapse.commons.staxon.core.json.JsonXMLStreamReader.consume(JsonXMLStreamReader.java:129)
at org.apache.synapse.commons.staxon.core.json.JsonXMLStreamReader.consume(JsonXMLStreamReader.java:132)
at org.apache.synapse.commons.staxon.core.base.AbstractXMLStreamReader.hasNext(AbstractXMLStreamReader.java:446)
at org.apache.synapse.commons.staxon.core.base.AbstractXMLStreamReader.next(AbstractXMLStreamReader.java:456)
at javax.xml.stream.util.StreamReaderDelegate.next(StreamReaderDelegate.java:88)
at org.apache.axiom.om.impl.builder.StAXOMBuilder.parserNext(StAXOMBuilder.java:681)
at org.apache.axiom.om.impl.builder.StAXOMBuilder.next(StAXOMBuilder.java:214)
at org.apache.axiom.om.impl.llom.OMElementImpl.getNextOMSibling(OMElementImpl.java:336)
at org.apache.axiom.om.impl.OMNavigator._getFirstChild(OMNavigator.java:199)
at org.apache.axiom.om.impl.OMNavigator.updateNextNode(OMNavigator.java:140)
at org.apache.axiom.om.impl.OMNavigator.getNext(OMNavigator.java:112)
at org.apache.axiom.om.impl.SwitchingWrapper.updateNextNode(SwitchingWrapper.java:1113)
at org.apache.axiom.om.impl.SwitchingWrapper.(SwitchingWrapper.java:235)
at org.apache.axiom.om.impl.OMStAXWrapper.(OMStAXWrapper.java:74)
at org.apache.axiom.om.impl.llom.OMStAXWrapper.(OMStAXWrapper.java:52)
at org.apache.axiom.om.impl.llom.OMContainerHelper.getXMLStreamReader(OMContainerHelper.java:51)
at org.apache.axiom.om.impl.llom.OMElementImpl.getXMLStreamReader(OMElementImpl.java
Use Postman and invoke proxy service with "POST" command
Add json content in to body
Send it. ESB will print the message correctly with brackets.
As DilshaniS said :
Looks like this is a bug in WSO2 ESB 4.9.0 and reported an jira this link