Java 优化web服务的XML响应
在web服务的性能测试中,我们发现响应产生的流量大大超出了我们的预期。我们正在查询数据库并加载由行和列组成的列表 列的类型为AnyType,因此响应中需要有类型信息。因此,web服务引擎(Axis2或JAXWS)多次添加大量命名空间信息。请参见以下示例响应: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
<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上看起来像是一个你必须付费的工具。