`
xueyong
  • 浏览: 61281 次
  • 来自: ...
社区版块
存档分类
最新评论

利用webservice获得xml信息可能出现一些影响

    博客分类:
  • jave
阅读更多
场景:服务端使用java开发,发布web服务,客户端使用delphi开发展示数据,两者通过webservice来通讯。

在测试中,客户端请求一个xml文档(该文档存放于oracle数据库中,CLOB型),发现有时候能正常取到,有时候取到的数据以xml方式解析解析不了。

而我使用java客户端来请求该数据时,又能正常得到所有xml数据,和库中一样。为了彻底解决这个问题,写了一个测试的webservice接口。

java 代码
  1. public class TestService {   
  2.     public TestService() {   
  3.     }   
  4.   
  5.     public String getMessage() {   
  6.             return message;   
  7.     }   
  8. }  

这里的message其实是一个xml文档(由于不能贴在里,会丢信息原来信息无法阅读,所以在后面贴出)。

若message赋值为xml_a时,delphi客户端没有任何问题,能得到正常结果。xml_a内容如下:

xml 代码
  1. String xml_a =   
  2.     "<<!---->xml version=\"1.0\" encoding=\"UTF-8\"?>"
  3.         + " <bCCH_BCH_Message>xxyyzz"   
  4.         + " <message>"   
  5.         + "   <sfn_Prime>25sfn_Prime>"   
  6.         + "   <payload>"   
  7.         + "      <completeSIB_List>"   
  8.         + "         <element>"   
  9.         + "            <sib_Type>systemInformationBlockType7sib_Type>"   
  10.         + "            <sib_Data_variable>01 80 80sib_Data_variable>"   
  11.         + "         element>"   
  12.         + "         <element>"   
  13.         + "            <sib_Type>schedulingBlock1sib_Type>"   
  14.         + "            <sib_Data_fixed>08 0D B0 1D 05 80 C4 4C 06 A0sib_Data_fixed>"  
  15.         + "         element>"   
  16.         + "      completeSIB_List>"   
  17.         + "   payload>"   
  18.         + " message>"   
  19.         + " <xxyyzz1>xxyyzz123xxyyzz1>"   
  20.         + " <xxyyzz1>xxyyzz987xxyyzz1>"   
  21.         + " bCCH_BCH_Message>";   

用tcptrace工具得到的返回结果,<写为<,>为>,&为&,这是由于是传输的数据就是以XML,在这个xml文档内再包含其他xml内容时需要转义。

当xml_b(比较长)赋值给message时,如下:

xml 代码
  1. String xml_b =    
  2. "<!---->xml version=\"1.0\" encoding=\"UTF-8\"?>"   
  3.     + "<uL_DCCH_Message>                        "   
  4.     + "<xyz>"    
  5.     +"  <a>1a>"    
  6.     +"  <b>2b>"    
  7.     +"  <c>3c>"    
  8.     +"  <d>4d>"    
  9.     +"  <e>5e>"    
  10.     +"  <f>6f>"    
  11.     +"  <g>7g>"    
  12.     +"  <h>8h>"    
  13.     +"  <i>9i>"    
  14.     +"  <j>10j>"    
  15.     +"  <k>11k>"    
  16.     +"  <l>12l>"    
  17.     +"  <m>13m>"    
  18.     +"xyz>"   
  19.     + "   <message>"   
  20.     + "      <rrcConnectionSetupComplete>"   
  21.     + "         <rrc_TransactionIdentifier>0rrc_TransactionIdentifier>"   
  22.     + "         <startList>"   
  23.     + "            <element>"   
  24.     + "               <cn_DomainIdentity>cs_domaincn_DomainIdentity>"   
  25.     + "               <start_Value>00000000000000000100start_Value>"   
  26.     + "            element>"   
  27.     + "            <element>"   
  28.     + "               <cn_DomainIdentity>ps_domaincn_DomainIdentity>"   
  29.     + "               <start_Value>00000000000000010010start_Value>"   
  30.     + "            element>"   
  31.     + "         startList>"   
  32.     + "         <ue_RadioAccessCapability>"   
  33.     + "            <accessStratumReleaseIndicator>r99accessStratumReleaseIndicator>"   
  34.     + "            <pdcp_Capability>"   
  35.     + "               <losslessSRNS_RelocationSupport>falselosslessSRNS_RelocationSupport>"   
  36.     + "               <supportForRfc2507>"   
  37.     + "                  <notSupported/>"   
  38.     + "               supportForRfc2507>"   
  39.     + "            pdcp_Capability>"   
  40.     + "            <rlc_Capability>"   
  41.     + "               <totalRLC_AM_BufferSize>kb150totalRLC_AM_BufferSize>"   
  42.     + "               <maximumRLC_WindowSize>mws2047maximumRLC_WindowSize>"   
  43.     + "               <maximumAM_EntityNumber>am6maximumAM_EntityNumber>"   
  44.     + "            rlc_Capability>"   
  45.     + "            <transportChannelCapability>"   
  46.     + "               <dl_TransChCapability>"   
  47.     + "                  <maxNoBitsReceived>b6400maxNoBitsReceived>"   
  48.     + "                  <maxConvCodeBitsReceived>b6400maxConvCodeBitsReceived>"   
  49.     + "                  <turboDecodingSupport>"   
  50.     + "                     <supported>b6400supported>"   
  51.     + "                  turboDecodingSupport>"   
  52.     + "                  <maxSimultaneousTransChs>e8maxSimultaneousTransChs>"   
  53.     + "                  <maxSimultaneousCCTrCH_Count>1maxSimultaneousCCTrCH_Count>"   
  54.     + "                  <maxReceivedTransportBlocks>tb32maxReceivedTransportBlocks>"   
  55.     + "                  <maxNumberOfTFC>tfc128maxNumberOfTFC>"   
  56.     + "                  <maxNumberOfTF>tf64maxNumberOfTF>"   
  57.     + "               dl_TransChCapability>"   
  58.     + "               <ul_TransChCapability>"   
  59.     + "                  <maxNoBitsTransmitted>b6400maxNoBitsTransmitted>"   
  60.     + "                  <maxConvCodeBitsTransmitted>b6400maxConvCodeBitsTransmitted>"   
  61.     + "                  <turboEncodingSupport>"   
  62.     + "                     <supported>b6400supported>"   
  63.     + "                  turboEncodingSupport>"   
  64.     + "                  <maxSimultaneousTransChs>e8maxSimultaneousTransChs>"   
  65.     + "                  <modeSpecificInfo>"   
  66.     + "                     <fdd/>"   
  67.     + "                  modeSpecificInfo>"   
  68.     + "                  <maxTransmittedBlocks>tb32maxTransmittedBlocks>"   
  69.     + "                  <maxNumberOfTFC>tfc64maxNumberOfTFC>"   
  70.     + "                  <maxNumberOfTF>tf64maxNumberOfTF>"   
  71.     + "               ul_TransChCapability>"   
  72.     + "            transportChannelCapability>"   
  73.     + "            <rf_Capability>"   
  74.     + "               <fddRF_Capability>"   
  75.     + "                  <ue_PowerClass>3ue_PowerClass>"   
  76.     + "                  <txRxFrequencySeparation>mhz190txRxFrequencySeparation>"   
  77.     + "               fddRF_Capability>"   
  78.     + "            rf_Capability>"   
  79.     + "            <physicalChannelCapability>"   
  80.     + "               <fddPhysChCapability>"   
  81.     + "                  <downlinkPhysChCapability>"   
  82.     + "                     <maxNoDPCH_PDSCH_Codes>1maxNoDPCH_PDSCH_Codes>"   
  83.     + "                     <maxNoPhysChBitsReceived>b9600maxNoPhysChBitsReceived>"   
  84.     + "                     <supportForSF_512>falsesupportForSF_512>"   
  85.     + "                     <supportOfPDSCH>falsesupportOfPDSCH>"   
  86.     + "                     <simultaneousSCCPCH_DPCH_Reception>"   
  87.     + "                        <notSupported/>"   
  88.     + "                     simultaneousSCCPCH_DPCH_Reception>"   
  89.     + "                  downlinkPhysChCapability>"   
  90.     + "                  <uplinkPhysChCapability>"   
  91.     + "                     <maxNoDPDCH_BitsTransmitted>b9600maxNoDPDCH_BitsTransmitted>"   
  92.     + "                     <supportOfPCPCH>falsesupportOfPCPCH>"   
  93.     + "                  uplinkPhysChCapability>"   
  94.     + "               fddPhysChCapability>"   
  95.     + "            physicalChannelCapability>"   
  96.     + "            <ue_MultiModeRAT_Capability>"   
  97.     + "               <multiRAT_CapabilityList>"   
  98.     + "                  <supportOfGSM>falsesupportOfGSM>"   
  99.     + "                  <supportOfMulticarrier>falsesupportOfMulticarrier>"   
  100.     + "               multiRAT_CapabilityList>"   
  101.     + "               <multiModeCapability>fddmultiModeCapability>"   
  102.     + "            ue_MultiModeRAT_Capability>"   
  103.     + "            <securityCapability>"   
  104.     + "               <cipheringAlgorithmCap>uea1 uea0cipheringAlgorithmCap>"   
  105.     + "               <integrityProtectionAlgorithmCap>uia1integrityProtectionAlgorithmCap>"   
  106.     + "            securityCapability>"   
  107.     + "            <ue_positioning_Capability>"   
  108.     + "               <standaloneLocMethodsSupported>falsestandaloneLocMethodsSupported>"   
  109.     + "               <ue_BasedOTDOA_Supported>falseue_BasedOTDOA_Supported>"   
  110.     + "               <networkAssistedGPS_Supported>noNetworkAssistedGPSnetworkAssistedGPS_Supported>"   
  111.     + "               <supportForUE_GPS_TimingOfCellFrames>falsesupportForUE_GPS_TimingOfCellFrames>"   
  112.     + "               <supportForIPDL>falsesupportForIPDL>"   
  113.     + "            ue_positioning_Capability>"   
  114.     + "            <measurementCapability>"   
  115.     + "               <downlinkCompressedMode>"   
  116.     + "                  <fdd_Measurements>truefdd_Measurements>"   
  117.     + "               downlinkCompressedMode>"   
  118.     + "               <uplinkCompressedMode>"   
  119.     + "                  <fdd_Measurements>truefdd_Measurements>"   
  120.     + "               uplinkCompressedMode>"   
  121.     + "            measurementCapability>"   
  122.     + "         ue_RadioAccessCapability>"   
  123.     + "      rrcConnectionSetupComplete>"   
  124.     + "   message>"   
  125.     + "uL_DCCH_Message>";   

每次delphi客户端得到的结果解析不了。后用tcptrace工具截获请求和webservice返回的结果,得出结果是:实际的xml文档被夹在CDATAT标记中间,并没有(<写为<,>为>,&为&)转义。这也是delphi获得的结果,delphi对获得的串类型没有作任何处理,所以无法解析,除非去掉首尾CDATAT部分。而java的客户端可以得到的结果(去掉了CDATAT标记),即不包含CDATAT部分。问题出现在各自的SOAP引擎(根据SOAP规范生成请求应答)或消息的解析上(解析以xml传过来的数据)。

 查了一下XML资料查到类似的一段:

若果XML文档中包含XML或HTML时,那么<和>和&分别写成<和>和&来转义;若包含的XML文档过长,把整个XML或HTML包在CDATA标记里,避免转义造成XML文档膨胀过大,尤其通过网络来传输的xml尤为重要。

再对照前面给出的2各XML文档,区别就是长度。若过长websphere就使用CDATA标记,若不太长则使用转义。到底多长才使用CDATA标记,没找到相关的说明。

但delphi却没有这么灵活,无法处理这种情况。我同事只好每次得到XML信息,先判断是否有CDATA标记,有就去头截尾。

分享到:
评论

相关推荐

    WebService依赖jar以及xml.zip

    有时,XML文件也可能包含SOAP绑定、服务位置、消息格式等配置信息。 为了使用这些资源,你需要按照以下步骤操作: 1. 解压文件:将"WebService依赖jar以及xml.zip"解压缩到本地文件夹。 2. 引入依赖:在你的Java...

    WebService的一些封装技巧.pdf

    参数param通过Serializer.DeserializeToObject反序列化得到blogId,再利用blogId通过AppBlog的LoadBlog方法加载博客文章信息。最后,使用Serializer.SerializeToBinary方法将对象序列化为字节数组返回给客户端。这...

    WebService获得天气预报demo Delphi7

    【WebService获得天气预报demo Delphi7】是一个基于Delphi7开发的应用程序,它演示了如何通过使用WebService接口来获取特定城市的天气预报信息。这个项目主要关注的是如何在Delphi7中实现对网络服务的调用,以及如何...

    VC++中WebService服务的调用

    2. **利用ATL创建和调用WebService**:ATL提供了更高级别的抽象,使得调用WebService变得更加简单。ATL可以自动生成客户端代理类,这些类封装了与WebService交互的细节。通过ATL COM Wizard,你可以为指定的WSDL生成...

    lua实现调用webservice

    ### Lua 实现调用 WebService 的方法 #### 一、通过 gSOAP 实现 C/C++ 调用 Web Service gSOAP 是一个强大的工具包,它简化了使用 C/C++ 语言开发 Web 服务和客户端的过程。通过 gSOAP 的帮助,我们可以轻松地使用...

    webservice

    ### WebService 基本概念解析 #### 一、WebService 概述 WebService 是一种跨编程语言和操作系统...通过对 SOAP、WSDL 和 UDDI 的深入了解,我们可以更好地利用 WebService 技术来构建高效、可靠的分布式应用系统。

    WebService计算器的实例

    在C#中,我们可以利用.NET Framework的ASP.NET WebService(也称为ASMX)来创建WebService。首先,我们需要新建一个ASMX文件,这将为我们提供一个空的WebService类。接下来,我们将在这个类中定义计算器的各种操作,...

    WebService基本理论知识

    【WebService基本理论知识】 Web Services是一种基于互联网的、允许不同系统之间进行交互和协作的应用程序组件。它们通过开放协议如HTTP(超文本传输协议)进行通信,并利用XML(可扩展标记语言)作为数据交换的...

    WebService之axis2案例

    WebService是一种基于XML(eXtensible Markup Language)的开放标准,用于在不同应用程序之间进行通信。它利用HTTP协议传输数据,使得任何平台上的应用程序都可以通过网络进行交互。Axis2是Apache软件基金会开发的一...

    WebService

    在本场景中,"IP地址通过WebService得到城市"指的是利用WebService服务来获取输入IP地址对应的城市信息。这在地理定位、网络安全、数据分析等领域有着广泛应用。 首先,我们需要理解IP地址的工作原理。IP(Internet...

    C++利用gsoap实现webService服务端代码

    7. **错误处理和调试**:在服务端开发过程中,要处理各种可能出现的错误,如网络通信错误、XML解析错误等。gSOAP提供了一些内置的错误处理机制,帮助开发者进行调试。 总之,通过C++和gSOAP,开发者可以轻松创建...

    .NET_Webservice数据压缩

    在Web服务中,我们可以将数据序列化为二进制形式,然后利用GZipStream进行压缩,再通过WebService发送到客户端。客户端接收到压缩数据后,可以使用相应的解压缩方法(如上面示例中的Decompress方法)来恢复原始数据...

    webservice教程和开发指南

    Web服务(Web Service)是一种基于互联网的、使用标准XML(Extensible Markup Language)进行通信的软件服务,允许不同系统间的应用程序进行交互。本教程将深入探讨Web服务的概念、原理及其实现,尤其关注在Java环境...

    勤哲Excel服务器WebService接口说明

    2. **配置安全性**:确保WebService的安全性得到适当配置,例如设置访问控制列表(ACL),限制特定IP地址或网络段对WebService的访问。 3. **监控与维护**:定期检查WebService的运行状态,确保其正常工作,并及时...

    android 用webservice连接后台数据库

    在提取这些知识点时,必须注意的是,尽管文章内容杂乱且包含一些扫描识别错误,但为了满足详细的知识点要求,应当尽可能地从中提取有用的信息,并对原文中的一些不相关或重复信息进行过滤。由于给定的内容片段并没有...

    天气webservice

    同时,你还需要处理可能出现的错误,比如网络问题、API调用超时、请求参数错误等。 此外,天气Web服务往往还支持其他高级功能,比如历史天气数据查询、空气质量指数、极端天气预警等。这些特性可以让应用变得更加...

    怎样提高WebService的性能(打印)

    【提高WebService性能的关键策略】 在Web服务(Web Services)开发中,性能优化是至关重要的,特别是在处理大量数据或高并发请求时。本文将深入探讨如何通过代码优化来提升WebService的性能,特别是针对提供的代码...

    Android axis调用Webservice

    - Web Service的响应同样以XML形式返回,通过解析XML(如使用`org.w3c.dom`或第三方库如Jsoup)得到所需数据。 - 将数据转化为Android应用中的模型对象,以便进一步处理和展示。 **三、示例代码片段** ```java /...

Global site tag (gtag.js) - Google Analytics