首页 文章

问题检索带有重音WSO2 DSS DataServices的字符串

提问于
浏览
0

我正在使用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字符串?

非常感谢您的帮助和时间,

问候,

1 回答

  • 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"/>
    

相关问题