1
2
3
4
5
6
7
8
9
10
11
12
13 package com.eviware.soapui.support.editor.inspectors.wsrm;
14
15 import java.beans.PropertyChangeEvent;
16 import java.beans.PropertyChangeListener;
17
18 import org.apache.log4j.Logger;
19 import org.apache.xmlbeans.XmlException;
20 import org.apache.xmlbeans.XmlObject;
21 import org.apache.xmlbeans.XmlOptions;
22
23 import com.eviware.soapui.config.WsrmVersionTypeConfig;
24 import com.eviware.soapui.impl.wsdl.WsdlInterface;
25 import com.eviware.soapui.impl.wsdl.WsdlRequest;
26 import com.eviware.soapui.impl.wsdl.support.wsmc.WsmcInjection;
27 import com.eviware.soapui.impl.wsdl.support.wsrm.WsrmContainer;
28 import com.eviware.soapui.impl.wsdl.support.wsrm.WsrmSequence;
29 import com.eviware.soapui.impl.wsdl.support.wsrm.WsrmUtils;
30 import com.eviware.soapui.model.iface.Submit;
31 import com.eviware.soapui.model.iface.SubmitContext;
32 import com.eviware.soapui.model.iface.SubmitListener;
33 import com.eviware.soapui.support.components.SimpleBindingForm;
34 import com.eviware.soapui.support.editor.xml.XmlInspector;
35
36
37
38
39
40
41
42
43
44
45
46
47
48 public class WsdlRequestWsrmInspector extends AbstractWsrmInspector implements XmlInspector, PropertyChangeListener,
49 SubmitListener
50 {
51 private final WsdlRequest request;
52
53 public WsdlRequestWsrmInspector( WsdlRequest request )
54 {
55 super( request );
56
57 request.addSubmitListener( this );
58 this.request = request;
59 }
60
61 public void buildContent( SimpleBindingForm form )
62 {
63 form.addSpace( 5 );
64 form.appendCheckBox( "wsrmEnabled", "Enable WS-Reliable Messaging", "Enable/Disable WS-Reliable Messaging" );
65 form.addSpace( 5 );
66
67 form.appendComboBox( "version", "WS-RM Version", new String[] { WsrmVersionTypeConfig.X_1_0.toString(),
68 WsrmVersionTypeConfig.X_1_1.toString(), WsrmVersionTypeConfig.X_1_2.toString() },
69 "The property for managing WS-RM version" );
70
71 form.appendTextField( "ackTo", "Acknowledgment to",
72 "The acknowledgment endpoint reference, will be generated if left empty" );
73
74 form.addSpace( 5 );
75 }
76
77 public void propertyChange( PropertyChangeEvent arg0 )
78 {
79
80
81 }
82
83 public void afterSubmit( Submit submit, SubmitContext context )
84 {
85 WsrmContainer container = ( WsrmContainer )submit.getRequest();
86 if( request.getWsrmConfig().isWsrmEnabled() )
87 {
88 String content = submit.getResponse().getContentAsString();
89 XmlOptions options = new XmlOptions();
90 try
91 {
92 XmlObject xml = XmlObject.Factory.parse( content );
93
94 String namespaceDeclaration = "declare namespace wsrm='" + request.getWsrmConfig().getVersionNameSpace()
95 + "';";
96 XmlObject result[] = xml.selectPath( namespaceDeclaration + "//wsrm:AcknowledgementRange", options );
97
98 if( result.length > 0 )
99 {
100 for( int i = 0; i < result.length; i++ )
101 {
102 String upper = result[i].selectAttribute( null, "Upper" ).getDomNode().getNodeValue();
103 String lower = result[i].selectAttribute( null, "Lower" ).getDomNode().getNodeValue();
104
105 if( lower == upper )
106 {
107 Logger.getLogger( "wsrm" ).info(
108 "Acknowledgment for message " + upper + " received for identifier: "
109 + request.getWsrmConfig().getSequenceIdentifier() );
110 }
111 else
112 {
113 Logger.getLogger( "wsrm" ).info(
114 "Acknowledgment for messages " + lower + " to " + upper + " received for identifier: "
115 + request.getWsrmConfig().getSequenceIdentifier() );
116 }
117 }
118 }
119 }
120 catch( XmlException e )
121 {
122
123 e.printStackTrace();
124 }
125 }
126 if( container.getWsrmConfig().isWsrmEnabled() )
127 {
128 WsdlInterface iface = request.getOperation().getInterface();
129 WsrmUtils utils = new WsrmUtils( iface.getSoapVersion() );
130 utils.closeSequence( request.getEndpoint(), iface.getSoapVersion(), request.getWsrmConfig()
131 .getVersionNameSpace(), request.getWsrmConfig().getUuid(), request.getWsrmConfig()
132 .getSequenceIdentifier(), 1l, request.getOperation() );
133 }
134 }
135
136 public boolean beforeSubmit( Submit submit, SubmitContext context )
137 {
138 WsrmContainer container = ( WsrmContainer )submit.getRequest();
139 if( container.getWsrmConfig().isWsrmEnabled() )
140 {
141 WsdlInterface iface = request.getOperation().getInterface();
142 WsrmUtils utils = new WsrmUtils( iface.getSoapVersion() );
143
144 WsrmSequence sequence = utils.createSequence( request.getEndpoint(), iface.getSoapVersion(), request
145 .getWsrmConfig().getVersionNameSpace(), request.getWsrmConfig().getAckTo(), 0l, request.getOperation(),
146 ( ( WsdlRequest )submit.getRequest() ).getWsaConfig().getTo() );
147
148 request.getWsrmConfig().setSequenceIdentifier( sequence.getIdentifier() );
149 request.getWsrmConfig().setUuid( sequence.getUuid() );
150
151 if( request.getWsrmConfig().getVersion() != WsrmVersionTypeConfig.X_1_0.toString() )
152 {
153 WsmcInjection receiveInjection = new WsmcInjection( request.getEndpoint(), request.getOperation(), iface
154 .getSoapVersion(), request.getWsrmConfig().getUuid() );
155 request.setAfterRequestInjection( receiveInjection );
156 }
157
158 }
159 return true;
160 }
161
162 }