java - 如何在 SOAPHandler 中发送 xml 而不进行任何转换

标签 java web-services websphere jax-ws handlers

IBM WebSphere Jax-WS RI 框架。 我有一个 chunkHandler。 我需要向客户端发送一行 xml 响应。 我制作oneline xml。调试显示一切正常 - xml 是单行的。 但在发送之前,框架会生成一个“ pretty-print ”输出。 它需要签名,并且不需要任何 xml 转换。 一般问题:如何在 SOAPHandler 中发送 xml 数据而不进行任何转换。

public class SignHandler implements SOAPHandler<SOAPMessageContext>{


        private String makeOneLineXml(String xml) throws IOException{
            BufferedReader br = new BufferedReader(new StringReader(xml));
            String line=null;
            StringBuilder sb = new StringBuilder();

            while((line=br.readLine())!= null){
                sb.append(line.trim());
            }
            return sb.toString();

        }

 public boolean handleMessage(SOAPMessageContext context) {


    Boolean isRequest = (Boolean) context.get(MessageContext.MESSAGE_OUTBOUND_PROPERTY);

    //for response message only, true for outbound messages, false for inbound
    if(isRequest){

    try{
        SOAPMessage soapMsg = context.getMessage();
        SOAPEnvelope soapEnv = soapMsg.getSOAPPart().getEnvelope();
        SOAPHeader soapHeader = soapEnv.getHeader();                   
        Document orig = soapEnv.getOwnerDocument();
        orig = 
// I need  send to client one-line-xml
        XmlUtils.deserialize(makeOneLineXml(XmlUtils.serializeNode(signedSoap, false, false)));
        soapMsg.saveChanges();



           //tracking
           soapMsg.writeTo(System.out); // In CONSOLE ALL ok. Xml is one line

        }catch(SOAPException e){
            System.err.println(e);
        }catch(IOException e){
            System.err.println(e);
        }

        }

      //continue other handler chain
      return true;
    }

最佳答案

我在 SoapUI 中进行的所有测试。但默认情况下,soapUI 响应是 pretty-print 格式的。 一切问题都在于此。

要替换 SoapMessage 中的可选肥皂 xml,您可以使用以下命令:

 private SOAPMessage makeSOAPMessage(String msg)
        {
        try {

            SOAPMessage message = MessageFactory.newInstance().createMessage();

            StringReader sReader = new StringReader(msg);                        

            message.getSOAPPart().setContent(new StreamSource(sReader));
            message.saveChanges();
             return message;
        }
        catch (Exception e) {
            return null;
        }
        }   
.....................

 context.setMessage(makeSOAPMessage(yours_xml_string));

此后,您将在客户端收到此 xml_string。 它对于 xmldsig、​​jax-wss 安全问题很有用。

关于java - 如何在 SOAPHandler 中发送 xml 而不进行任何转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11719756/

相关文章:

java - 为什么我在 Hackerrank 上的这段代码中因超时而被终止?我的最后一次迭代没有发生?

java - Highcharts/Highstock 无效日期问题

java - 如何将两个 forEach() 循环替换为 Java Stream?

java - 限制 Web 服务访问内部 IP 地址

objective-c - iOS 解析Webservice数据

java - 如何增加线程超时以允许长时间运行的线程在 z/os 的 websphere 上完成而不会异常结束

java - 将文件中的整数存储到数组中并查找平均 JAVA

web-services - #!在 URL 中,它是什么意思?

java - 在 Java 中获取应用程序服务器名称或 ip 和端口

ssl - 如何在 websphere 应用程序服务器 liberty v. 8.5.5.0 中生成新的 SSL 证书