我正在使用WSO2 DSS工具进行测试,希望在我的业务中使用它。 我的第一个概念证明,我遇到了编码和XML输出的问题。 我解释一下。
我在SQL Server中有一个简单的表:
CREATE TABLE [dbo].[USUARIOS] (
[nombre_usuario] varchar(20) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL,
[password] varchar(20) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL,
[entidad_persona] varchar(60) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL
) ON [PRIMARY];
DSS工具托管在Windows 2003上,并正确配置了DataSource。 数据服务XML是:
<data name="SQLServer_FRONTAL" transports="http https">
<description>Queries Frontales_WEB</description>
<config id="SQLSERVER">
<property name="carbon_datasource_name">SQLSERVER</property>
</config>
<query id="getUser" useConfig="SQLSERVER">
<sql>SELECT entidad_persona FROM dbo.USUARIOS WHERE nombre_usuario = :idUser</sql>
<result element="Users" escapeNonPrintableChar="true" rowName="User">
<element column="entidad_persona" name="entidad_persona" xsdType="string"/></result>
<param name="idUser" sqlType="STRING"/>
</query>
<operation name="getUser">
<call-query href="getUser"><with-param name="idUser" query-param="idUser"/></call-query>
</operation>
<resource method="GET" path="getUser"><call-query href="getUser"><with-param name="idUser" query-param="idUser"/>
</call-query>
</resource>
</data>
当我调用该操作并且列“entidad_persona”的值具有重音时,我得到XML错误。 如果它没有重音,那么回复是正确的。
示例:如果“entidad_persona”='Emilio Jiménez',那么在IE或FF浏览器中:
Error de lectura XML: mal formado
Ubicación: http://myserver:9764/services/SQLServer_FRONTAL/getUser?idUser=emiji
Número de línea 1, columna 100:
<Users xmlns="http://ws.wso2.org/dataservice"><User><entidad_persona>Emilio Jim�nez</entidad_persona></User></Users>
我认为SQL Server中的数据是Latin1或ISO-8859-1,DSS配置为处理UTF-8。
我可以在哪里更改DSS的配置以接受回复Latin1或ISO-8859-1?
启动时(wso2server.bat)观察到:-Dfile.encoding = UTF8
在catalina-server.xml中观察到URI-encoding =“UTF-8”
有哪些解决方案可以使用重音来获取XML字符串?
非常感谢你的帮助和时间,
此致
答案 0 :(得分:0)
我遇到了类似的问题。但是当我添加参数-Dfile.encoding = UTF8时,它就可以了。
但是现在当我尝试在DSS中执行更新操作时,如下所示,再次发生编码问题。仍在努力。
<![CDATA[
EXEC UpdateTaskMessageByTaskId ?, ?, ?;
]]>
</sql>
<result element="updateHumanTaskByIdResponse" >
<element name="result" column="result" xsdType="boolean"/>
</result>
<param name="taskId" ordinal="1" sqlType="INTEGER"/>
<param name="messageData" ordinal="2" sqlType="STRING"/>
<param name="lastUpdateTime" ordinal="3" sqlType="BIGINT"/>