首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何在Spring-WS中使用SOAP的直接流?

如何在Spring-WS中使用SOAP的直接流?
EN

Stack Overflow用户
提问于 2011-03-02 16:27:36
回答 3查看 5.7K关注 0票数 16

我们希望在webservice端点中启用有效负载的直接流式传输。我们必须处理大量的数据,并且希望在处理的同时流式传输数据。

我们在2.0.0版本中使用spring-ws-core,并使用PayloadRootQNameEndpointMapping作为端点映射器。作为消息工厂,我们使用AxiomSoapMessageFactory。我们实现了StreamingPayload和相应的writeTo(XMLStreamWriter writer)方法,我们使用它来编写我们的有效负载(根据spring-ws JIRA票据,SWS-352)。

这工作得很好,没有任何错误,但我们想要直接流!这显然是不可能的。我们做了一个简单的测试,我们流式传输一些数据来评估行为。

writer.writeStartElement("exampleResponse")

10000.times
{
    writer.writeStartElement("example")
    writer.writeEndElement()    
}

writer.writeEndElement()

我们假设这将直接流到消费者/客户端,因此soap标头已经写入我们的写入器,并在端点完成后关闭。不幸的是这是不可能的,流不能直接使用!流被包装在一个ByteArrayInputStream中,可以在spring-ws源代码中找到。

StreamingOMDataSource的实现显示了这一点(可以在springs FishEye中查看)。StreamingOMDataSource调用您的StreamingPayload实现,并为此提供一个编写器。

public XMLStreamReader getReader() throws XMLStreamException {
   ByteArrayOutputStream bos = new ByteArrayOutputStream();
   serialize(bos, null);

   ByteArrayInputStream bis = new ByteArrayInputStream(bos.toByteArray());
   return StAXUtils.createXMLStreamReader(bis);
}

如上所述,#serialize()方法使用ByteArrayOutputStream创建XMLStreamWriter,并调用有效负载以启用写入。

public void serialize(OutputStream output, OMOutputFormat format) 
       throws XMLStreamException
{
   XMLStreamWriter streamWriter;
   if ([...]) {
      // Create stream writer with defined charset
   }
   else {
       streamWriter = StAXUtils.createXMLStreamWriter(output);
   }
   serialize(streamWriter);
}

public void serialize(XMLStreamWriter xmlWriter) throws XMLStreamException {
   payload.writeTo(xmlWriter);
   xmlWriter.flush();
}

所以这对我来说是不可用的。是否可以实现直播流?对此有什么想法吗?提前谢谢你!

Spring :我终于为 WS创建了一个JIRA ticket (SWS-704)。如果你想看到它的实现,可以考虑在JIRA页面上观看/投票。希望我们至少能得到一个有用的回复。

EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5165055

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档