You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

WSO2 Micro Integrator dateTime与STRING类型不匹配错误排查求助

问题:WSO2 Micro Integrator数据服务日期类型不匹配错误

问题场景

使用WSO2 Micro Integrator的Data Service向数据库保存数据时,通过Payload Factory构造请求传递参数,触发了日期类型不匹配的错误。

相关配置

1. Payload Factory配置

<payloadFactory media-type="json">
    <format>                            
        {
            "_postauthor": {
                "id": "$1",                                     
                "name": "$2",
                "birth_date": "$3"
            }
        }
    </format>
    <args>
        <arg evaluator="json" expression="$.id"/>
        <arg evaluator="xml" expression="get-property('name')"/>
        <arg evaluator="json" expression="$.birth_date"/>                                
    </args>
</payloadFactory>
<property name="messageType" value="application/json" scope="axis2"/>

2. 数据服务定义

<data name="RESTDataService" transports="http https">
  <description>AdastraApp REST Data service </description>
  <config id="AdastraAppDataSource">
    ...
  </config>
  <resource method="POST" path="author">
    <description />
    <call-query href="CreateAuthor">
      <with-param name="id" query-param="id" />      
      <with-param name="name" query-param="name" />
      <with-param name="birth_date" query-param="birth_date" />      
    </call-query>
  </resource>
  <query id="CreateAuthor" useConfig="AdastraAppDataSource">
    <sql>INSERT INTO authors (id, name, birth_date) VALUES (:id, :name, CAST(:birth_date AS DATETIME))</sql>
    <param type="IN" name="id" optional="false" paramType="SCALAR" sqlType="STRING" defaultValue="NULL" />
    <param type="IN" name="name" optional="true" paramType="SCALAR" sqlType="STRING" defaultValue="NULL" />
    <param type="IN" name="birth_date" optional="true" paramType="SCALAR" sqlType="TIMESTAMP" defaultValue="NULL" />
  </query>
</data>

3. 请求负载

{
    "_postauthor": {
        "id": "001482af-b42f-41b8-884d-6109954d81f9",
        "name": "Madeline Miller",
        "birth_date": "1978-01-01T00:00:00.000Z"
    }
}

错误日志

[2025-02-05 03:15:09,478] ERROR {GsonXMLStreamReader} - Value type miss match, Expected value type - 'dateTime', but found - 'STRING'
[2025-02-05 03:15:09,478] ERROR {ServerWorker} - Error processing POST request for : /services/RESTDataService/author. java.lang.IllegalArgumentException: Value type miss match, Expected value type - 'dateTime', but found - 'STRING'
at org.apache.axis2.json.gson.GsonXMLStreamReader.nextValue(GsonXMLStreamReader.java:750)
at org.apache.axis2.json.gson.GsonXMLStreamReader.readValue(GsonXMLStreamReader.java:625)
at org.apache.axis2.json.gson.GsonXMLStreamReader.stateTransition(GsonXMLStreamReader.java:531)
at org.apache.axis2.json.gson.GsonXMLStreamReader.next(GsonXMLStreamReader.java:177)
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.OMSerializableImpl.build(OMSerializableImpl.java:78)

问题原因

数据服务中birth_date参数定义为sqlType="TIMESTAMP",但Payload Factory构造的JSON请求里,birth_date被双引号包裹为字符串类型,WSO2的JSON解析器(GsonXMLStreamReader)无法自动将字符串转换为dateTime/TIMESTAMP类型,触发类型不匹配错误。

解决方案

方案1:修改Payload Factory,传递无引号的日期值

去掉Payload Factory格式中birth_date值的双引号,让JSON解析器自动识别为日期类型:

<payloadFactory media-type="json">
    <format>                            
        {
            "_postauthor": {
                "id": "$1",                                     
                "name": "$2",
                "birth_date": $3
            }
        }
    </format>
    <args>
        <arg evaluator="json" expression="$.id"/>
        <arg evaluator="xml" expression="get-property('name')"/>
        <arg evaluator="json" expression="$.birth_date"/>                                
    </args>
</payloadFactory>
<property name="messageType" value="application/json" scope="axis2"/>

注意:确保传入的birth_date是符合ISO 8601标准的日期字符串(如1978-01-01T00:00:00.000Z)。

方案2:修改数据服务参数类型

将数据服务中birth_date的sqlType改为STRING,通过SQL的CAST转换处理日期:

<param type="IN" name="birth_date" optional="true" paramType="SCALAR" sqlType="STRING" defaultValue="NULL" />

内容的提问来源于stack exchange,提问作者Pospi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.14 13:03:24