在我的序列中,我正在将JSON请求转换为XML,这样我就可以对插入到表中的SQL Server存储过程进行dataServiceCall.这一切都很好,但是如果其中一个字段为null,它将作为空字符串("")而不是NULL插入.
当我查看发送到dataServiceCall的XML时,它看起来如下所示:
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
<soapenv:Body>
<InsertWebAppPath xmlns="http://ws.apache.org/ns/synapse">
<pathTemplate>/postmanTest</pathTemplate>
<label2>Postman Test</label2>
<icon>test</icon>
<isActive>false</isActive>
<label1>Postman Test</label1>
<label3 nil="true"/>
</InsertWebAppPath>
</soapenv:Body>
</soapenv:Envelope>
从JSON到XML的转换在Label3上添加了nil="true"属性,这是我所期望的.但是INSERT仍然以空字符串而不是NULL结束.我try 在我的查询中添加defaultValue#{NULL},这没有什么不同.
以下是我的顺序:
<property name="messageType" scope="axis2" type="STRING" value="text/xml"/>
<payloadFactory media-type="xml">
<format>
<InsertWebAppPath>$1</InsertWebAppPath>
</format>
<args>
<arg evaluator="json" expression="$"/>
</args>
</payloadFactory>
<dataServiceCall description="InsertWebAppPath" serviceName="myService">
<source type="body"/>
<target type="body"/>
</dataServiceCall>
和DBS文件:
<query id="InsertWebAppPath" useConfig="myDSS">
<sql>{ call InsertWebAppPath(?,?,?,?,?,?) }</sql>
<param type="IN" name="pathTemplate" paramType="SCALAR" sqlType="STRING" optional="false" />
<param type="IN" name="isActive" paramType="SCALAR" sqlType="BOOLEAN" optional="false" />
<param type="IN" defaultValue="#{NULL}" name="label1" paramType="SCALAR" sqlType="STRING" optional="true" />
<param type="IN" defaultValue="#{NULL}" name="label2" paramType="SCALAR" sqlType="STRING" optional="true" />
<param type="IN" defaultValue="#{NULL}" name="label3" paramType="SCALAR" sqlType="STRING" optional="true" />
<param type="IN" defaultValue="#{NULL}" name="icon" paramType="SCALAR" sqlType="STRING" optional="true" />
</query>
<operation name="InsertWebAppPath">
<call-query href="InsertWebAppPath">
<with-param name="pathTemplate" query-param="pathTemplate" />
<with-param name="isActive" query-param="isActive" />
<with-param name="label1" query-param="label1" />
<with-param name="label2" query-param="label2" />
<with-param name="label3" query-param="label3" />
<with-param name="icon" query-param="icon" />
</call-query>
</operation>
存储过程直接插入值,不进行任何操作.我还确认,如果我在WSO2之外使用NULL来调用它,它将会工作.