1

IBM WebSphereJax-WSRIフレームワーク。chunckHandlerがあります。1行のxml応答をクライアントに送信する必要があります。私はonelinexmlを作成します。デバッグすると、何が問題ないかがわかります-xmlは1行です。ただし、フレームワークを送信する前に、「きれいな印刷」出力を作成してください。署名に必要であり、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;
    }
4

1 に答える 1

0

SoapUI で作成したすべてのテスト。ただし、デフォルトでは、soapUI の応答は整形式です。これですべての問題。

SoapMessage のオプションの SOAP 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 のセキュリティ問題に役立ちます。

于 2012-07-31T12:40:20.170 に答える