Java 优化web服务的XML响应

Java 优化web服务的XML响应,java,xml,web-services,namespaces,Java,Xml,Web Services,Namespaces,在web服务的性能测试中,我们发现响应产生的流量大大超出了我们的预期。我们正在查询数据库并加载由行和列组成的列表 列的类型为AnyType,因此响应中需要有类型信息。因此,web服务引擎(Axis2或JAXWS)多次添加大量命名空间信息。请参见以下示例响应: <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"> <soapenv:Body> <ns3

在web服务的性能测试中,我们发现响应产生的流量大大超出了我们的预期。我们正在查询数据库并加载由行和列组成的列表

列的类型为AnyType,因此响应中需要有类型信息。因此,web服务引擎(Axis2或JAXWS)多次添加大量命名空间信息。请参见以下示例响应:

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
   <soapenv:Body>
      <ns3:loadListResponse xmlns:ns3="http://example.com/test/service-types-1.0" 
      xmlns:ns2="http://example.com/lists/lists-types-1.0" >
         <ns3:value>
            <ns2:row>
               <ns2:column xsi:type="xs:int" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xs="http://www.w3.org/2001/XMLSchema">12345</ns2:column>
               <ns2:column xsi:type="xs:string" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xs="http://www.w3.org/2001/XMLSchema">XYZ</ns2:column>
               <ns2:column xsi:nil="true" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"/>
               <ns2:column xsi:type="xs:string" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xs="http://www.w3.org/2001/XMLSchema">ABC</ns2:column>
            </ns2:row>
            <ns2:row>
               <ns2:column xsi:type="xs:int" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xs="http://www.w3.org/2001/XMLSchema">32345</ns2:column>
               <ns2:column xsi:type="xs:string" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xs="http://www.w3.org/2001/XMLSchema">OPC</ns2:column>
               <ns2:column xsi:nil="true" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"/>
               <ns2:column xsi:type="xs:string" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xs="http://www.w3.org/2001/XMLSchema">QWE</ns2:column>
            </ns2:row>
             .
             .
             .
         </ns3:value>
      </ns3:loadListResponse>
   </soapenv:Body>
</soapenv:Envelope>

12345
XYZ
基础知识
32345
OPC
QWE
.
.
.
我想通过在顶部添加所需的名称空间并从每列中删除它们(通常每行大约有30列)来优化这个XML响应。结果应该如下所示:

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xmlns:xs="http://www.w3.org/2001/XMLSchema">
   <soapenv:Body>
      <ns3:loadListResponse xmlns:ns3="http://example.com/test/service-types-1.0" 
      xmlns:ns2="http://example.com/lists/lists-types-1.0" >
         <ns3:value>
            <ns2:row>
               <ns2:column xsi:type="xs:int" >12345</ns2:column>
               <ns2:column xsi:type="xs:string" >XYZ</ns2:column>
               <ns2:column xsi:nil="true" />
               <ns2:column xsi:type="xs:string" >ABC</ns2:column>
            </ns2:row>
            <ns2:row>
               <ns2:column xsi:type="xs:int" >32345</ns2:column>
               <ns2:column xsi:type="xs:string" >OPC</ns2:column>
               <ns2:column xsi:nil="true" />
               <ns2:column xsi:type="xs:string" >QWE</ns2:column>
            </ns2:row>
             .
             .
             .
         </ns3:value>
      </ns3:loadListResponse>
   </soapenv:Body>
</soapenv:Envelope>

12345
XYZ
基础知识
32345
OPC
QWE
.
.
.
你会怎么做那样的事

有没有办法告诉Axis2或JAXWS这样做


还是需要手动操作生成的XML?

您是否考虑过尝试以适当透明的方式压缩响应?这可能更容易做到,而且对所有重复的数据都非常有效。

您是否考虑过尝试以适当透明的方式压缩响应?这可能更容易做到,并且对所有重复的数据都非常有效。

轴1.x的示例

本指南解释了如何在ApacheAxis上使用SOAP压缩。请求和响应消息都被压缩。为了在客户端压缩和解压缩SOAP消息,使用了gzip的Axis扩展。服务器端的对应项是Servlet过滤器

轴1.x的一个示例

本指南解释了如何在ApacheAxis上使用SOAP压缩。请求和响应消息都被压缩。为了在客户端压缩和解压缩SOAP消息,使用了gzip的Axis扩展。服务器端的对应项是Servlet过滤器


如果您担心Web服务的传输和/或处理效率,您应该考虑启用:

快速信息集(或FI)是一种 规定 XML的二进制编码格式 信息集(XML信息集)作为 XML文档的替代方案 格式。其目的是提供更多信息 比 基于文本的XML格式

可以将FI看作是XML的gzip, 尽管金融机构的目标是优化两者 文件大小和处理 性能,而gzip优化 只有这个尺寸

它对高容量web服务的影响是巨大的,我现在在可能的情况下理所当然地使用它


由两个和./P>> P支持。如果您对Web服务的传输和/或处理效率有担忧,您应该考虑启用:

快速信息集(或FI)是一种 规定 XML的二进制编码格式 信息集(XML信息集)作为 XML文档的替代方案 格式。其目的是提供更多信息 比 基于文本的XML格式

可以将FI看作是XML的gzip, 尽管金融机构的目标是优化两者 文件大小和处理 性能,而gzip优化 只有这个尺寸

它对高容量web服务的影响是巨大的,我现在在可能的情况下理所当然地使用它


它得到和的支持。

是的,我们正在考虑这一点。在服务器端有一个apache,所以mod_deflate应该完成这项工作。。。但是.NET客户端需要能够处理压缩响应。是的,我们正在考虑这一点。在服务器端有一个apache,所以mod_deflate应该完成这项工作。。。但是.NET客户端需要能够处理压缩响应。我们有一个.NET客户端需要处理响应。。。这可以通过Fast Infoset实现吗?FastInfoset是microsoft的一项发明,所以这不应该是一个问题。它在.NET上看起来是一个你必须付费的应用程序。我们有一个.NET客户端需要处理响应。。。这可以通过Fast Infoset实现吗?FastInfoset是微软的一项发明,所以这不应该是一个问题。它在.NET上看起来像是一个你必须付费的工具。