CXF 服务在服务器响应中禁用分块



我正在使用SOAP和JAXWS将.NET Web服务替换为Java CXF Web服务。 客户端是固定的,信不信由你,黑盒。 我正在尝试让服务使用 Java 服务和原始 .NET 客户端以相同的方式工作。 我尝试了许多方法,并确认对客户端的响应与 .NET 服务相同(字节(。 我尝试从 Java 服务返回 Windows 响应无济于事,这意味着我遇到了与传输相关的问题,可能是编码。 我注意到响应传输编码=[分块] - 我怀疑这可能是一个问题。我还没有找到在服务器上更改此设置的方法...但由于我无法修改客户端,因此需要解决方法。 我不熟悉 .NET API,但这是我收到的消息:

顺便说一句 - 来自客户端的错误[6] ERROR - [sweeper].[SweeperService.CollectSettingsInformation] <11501> (9990) There is an error in XML document (1, 2). at System.Xml.Serialization.XmlSerializer.Deserialize(XmlReader xmlReader, String encodingStyle, XmlDeserializationEvents events) at System.Xml.Serialization.XmlSerializer.Deserialize(TextReader textReader) at client.ReadMessageEnvelope(String xml) at client.Translate(String xml) at client.CollectSettingsInformation()

任何想法将不胜感激。

改编自其他几个类似的解决方案:

    public void handleMessage(Message message) {
    boolean isOutbound = false;
    isOutbound = message == message.getExchange().getOutMessage() || message == message.getExchange().getOutFaultMessage();
    if (isOutbound) {
        OutputStream os = message.getContent(OutputStream.class);
        CachedOutputStream cs = new CachedOutputStream();
        message.setContent(OutputStream.class, cs);
        message.getInterceptorChain().doIntercept(message);
        try {
            cs.flush();
            IOUtils.closeQuietly(cs);
            CachedOutputStream csnew = (CachedOutputStream) message.getContent(OutputStream.class);
            String currentEnvelopeMessage = IOUtils.toString(csnew.getInputStream(), "UTF-8");
            csnew.flush();
            IOUtils.closeQuietly(csnew);
            int bytes = Math.toIntExact(currentEnvelopeMessage.getBytes().length);
            HttpServletResponse response = (HttpServletResponse) message.get(AbstractHTTPDestination.HTTP_RESPONSE);
            if(null != response){
                log.debug("Setting Content Length: " + bytes);
                response.setContentLength(bytes);
            }
            InputStream replaceInStream = IOUtils.toInputStream(currentEnvelopeMessage, "UTF-8");
            os.flush();
            if (os instanceof CopyingOutputStream)
                ((CopyingOutputStream)os).copyFrom( replaceInStream );
            else
                IOUtils.copy(replaceInStream, os);
            replaceInStream.close();
            IOUtils.closeQuietly(replaceInStream);
            message.setContent(OutputStream.class, os);
            IOUtils.closeQuietly(os);
        } catch (IOException ioe) {
            log.warn("Unable to perform change.", ioe);
            throw new RuntimeException(ioe);
        }
    } 
}

相关内容

  • 没有找到相关文章

最新更新