1
2
3
4
5
6
7
8
9
10
11
12
13 package com.eviware.soapui.impl.wsdl.actions.request;
14
15 import java.awt.event.ActionEvent;
16 import java.io.StringReader;
17 import java.io.StringWriter;
18
19 import javax.swing.AbstractAction;
20 import javax.xml.parsers.DocumentBuilder;
21 import javax.xml.parsers.DocumentBuilderFactory;
22
23 import org.apache.ws.security.message.WSSecHeader;
24 import org.apache.ws.security.message.WSSecTimestamp;
25 import org.w3c.dom.Document;
26 import org.xml.sax.InputSource;
27
28 import com.eviware.soapui.impl.wsdl.WsdlRequest;
29 import com.eviware.soapui.support.UISupport;
30 import com.eviware.soapui.support.xml.XmlUtils;
31
32 /***
33 * Prompts to add a WSS Timestamp Token to the specified WsdlRequests
34 * requestContent
35 *
36 * @author Ole.Matzura
37 */
38
39 public class AddWSTimestampAction extends AbstractAction
40 {
41 private final WsdlRequest request;
42
43 public AddWSTimestampAction( WsdlRequest request )
44 {
45 super( "Add WS-Timestamp" );
46 this.request = request;
47 }
48
49 public void actionPerformed( ActionEvent e )
50 {
51 String req = request.getRequestContent();
52
53 try
54 {
55 String ttlString = UISupport.prompt( "Add WS-Timestamp", "Specify Time-To-Live value", "60" );
56 if( ttlString == null )
57 return;
58
59 int ttl = 0;
60 try
61 {
62 ttl = Integer.parseInt( ttlString );
63 }
64 catch( Exception ex )
65 {
66 }
67
68 DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
69 dbf.setNamespaceAware( true );
70 DocumentBuilder db = dbf.newDocumentBuilder();
71 Document doc = db.parse( new InputSource( new StringReader( req ) ) );
72 WSSecTimestamp addTimestamp = new WSSecTimestamp();
73 addTimestamp.setTimeToLive( ttl );
74
75 StringWriter writer = new StringWriter();
76 WSSecHeader secHeader = new WSSecHeader();
77 secHeader.insertSecurityHeader( doc );
78 XmlUtils.serializePretty( addTimestamp.build( doc, secHeader ), writer );
79 request.setRequestContent( writer.toString() );
80 }
81 catch( Exception e1 )
82 {
83 UISupport.showErrorMessage( e1 );
84 }
85 }
86 }