https://issues.apache.org/bugzilla/show_bug.cgi?id=43685


René Nielsen <[EMAIL PROTECTED]> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
             Status|NEEDINFO                    |RESOLVED
         Resolution|                            |WORKSFORME




--- Comment #18 from René Nielsen <[EMAIL PROTECTED]>  2008-07-10 07:44:17 PST 
---
I'm happy to tell you that I have found the solution.

I have been using javax.xml.transform objects to convert my signed Document in
order to forward the content onto my servlet OutputStream. Result was invalid
Timestamp and body references due to differences in the digests.

A few days ago I read http://wiki.apache.org/ws/FrontPage/WsFx/wss4jFAQ, which
suggested that some formatting/alteration of the signed document was happening.

Thus I felt compelled to try different ways of streaming the document to the
OutputStream.

// Usecase XMLSerializer 
      // Fixed Timestamp reference issue, however, body reference is invalid
      org.apache.xml.serialize.OutputFormat format = new
org.apache.xml.serialize.OutputFormat(signedDoc);
      org.apache.xml.serialize.XMLSerializer serializer = new
org.apache.xml.serialize.XMLSerializer(out, format);
      serializer.serialize(doc.getDocumentElement());

The output still looks logical fine, but some formatting problem still exists
for the body element. Since I was signing and then streamed onto the network
without any intermediary steps I started to think up more ways to perform the
streaming step.

// Usecase DOM2Writer
      // Yields IOException on the client side. The message is received and
logged, but fails  due to "Unterminated value" which triggers the handlerFault
with bea exception trace for Unterminated value
      org.apache.ws.security.util.DOM2Writer domout = new
org.apache.ws.security.util.DOM2Writer();
      domout.serializeAsXML(doc, (Writer)new OutputStreamWriter(out),false);

// Usecase DOM2Writer with windows linefeed
      // Yields IOException on the client side. 
// Due to Unterminated value on client side see, DOM2Writer usecase... send
line termination      
org.apache.ws.security.util.DOM2Writer domout = new
org.apache.ws.security.util.DOM2Writer();
      domout.serializeAsXML(doc, (Writer)new OutputStreamWriter(out),false);    
// Due to Unterminated value on client side see, DOM2Writer... send line
termination
      out.write("\n\r".getBytes());
// YES, this worked fine! 

// Usecase Canonicalizer ( Perserves signed content(Idempotent), but let me use
the writeTo )
Canonicalizer c14n =
Canonicalizer.getInstance(Canonicalizer.ALGO_ID_C14N_OMIT_COMMENTS); 
byte[] canonicalMessage = c14n.canonicalizeSubtree(signedDoc);
ByteArrayInputStream in = new ByteArrayInputStream(canonicalMessage); 
MessageFactory factory = MessageFactory.newInstance(); 
((SOAPMessage)factory.createMessage(null, in)).writeTo(out); 
// YES, this worked fine! 

I don't think this is a bug anymore.

Thanks, for your time.


-- 
Configure bugmail: https://issues.apache.org/bugzilla/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
You are the assignee for the bug.

Reply via email to