You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cxf.apache.org by dk...@apache.org on 2008/08/06 04:43:20 UTC
svn commit: r683089 - in /cxf/trunk:
rt/bindings/soap/src/main/java/org/apache/cxf/binding/soap/
rt/bindings/soap/src/main/java/org/apache/cxf/binding/soap/interceptor/
rt/bindings/soap/src/test/java/org/apache/cxf/binding/soap/
rt/frontend/jaxws/src/m...
Author: dkulp
Date: Tue Aug 5 19:43:19 2008
New Revision: 683089
URL: http://svn.apache.org/viewvc?rev=683089&view=rev
Log:
[CXF-1733] Merge SoapActionOut and SoapPreProtocolOut nterceptors to
make sure the action and content types are properly set.
Modified:
cxf/trunk/rt/bindings/soap/src/main/java/org/apache/cxf/binding/soap/SoapBindingFactory.java
cxf/trunk/rt/bindings/soap/src/main/java/org/apache/cxf/binding/soap/interceptor/SoapActionOutInterceptor.java
cxf/trunk/rt/bindings/soap/src/main/java/org/apache/cxf/binding/soap/interceptor/SoapPreProtocolOutInterceptor.java
cxf/trunk/rt/bindings/soap/src/test/java/org/apache/cxf/binding/soap/SoapActionInterceptorTest.java
cxf/trunk/rt/bindings/soap/src/test/java/org/apache/cxf/binding/soap/SoapBindingFactoryTest.java
cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/DispatchImpl.java
cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/handler/soap/SOAPHandlerInterceptor.java
cxf/trunk/rt/javascript/src/test/java/org/apache/cxf/javascript/GreeterClientTest.java
cxf/trunk/testutils/src/main/resources/wsdl/hello_world_soap12.wsdl
Modified: cxf/trunk/rt/bindings/soap/src/main/java/org/apache/cxf/binding/soap/SoapBindingFactory.java
URL: http://svn.apache.org/viewvc/cxf/trunk/rt/bindings/soap/src/main/java/org/apache/cxf/binding/soap/SoapBindingFactory.java?rev=683089&r1=683088&r2=683089&view=diff
==============================================================================
--- cxf/trunk/rt/bindings/soap/src/main/java/org/apache/cxf/binding/soap/SoapBindingFactory.java (original)
+++ cxf/trunk/rt/bindings/soap/src/main/java/org/apache/cxf/binding/soap/SoapBindingFactory.java Tue Aug 5 19:43:19 2008
@@ -49,7 +49,6 @@
import org.apache.cxf.binding.soap.interceptor.Soap12FaultInInterceptor;
import org.apache.cxf.binding.soap.interceptor.Soap12FaultOutInterceptor;
import org.apache.cxf.binding.soap.interceptor.SoapActionInInterceptor;
-import org.apache.cxf.binding.soap.interceptor.SoapActionOutInterceptor;
import org.apache.cxf.binding.soap.interceptor.SoapHeaderInterceptor;
import org.apache.cxf.binding.soap.interceptor.SoapHeaderOutFilterInterceptor;
import org.apache.cxf.binding.soap.interceptor.SoapOutInterceptor;
@@ -342,7 +341,6 @@
sb.getInInterceptors().add(new StaxInInterceptor());
sb.getInInterceptors().add(new SoapActionInInterceptor());
- sb.getOutInterceptors().add(new SoapActionOutInterceptor());
sb.getOutInterceptors().add(new AttachmentOutInterceptor());
sb.getOutInterceptors().add(new StaxOutInterceptor());
sb.getOutInterceptors().add(new SoapHeaderOutFilterInterceptor());
Modified: cxf/trunk/rt/bindings/soap/src/main/java/org/apache/cxf/binding/soap/interceptor/SoapActionOutInterceptor.java
URL: http://svn.apache.org/viewvc/cxf/trunk/rt/bindings/soap/src/main/java/org/apache/cxf/binding/soap/interceptor/SoapActionOutInterceptor.java?rev=683089&r1=683088&r2=683089&view=diff
==============================================================================
--- cxf/trunk/rt/bindings/soap/src/main/java/org/apache/cxf/binding/soap/interceptor/SoapActionOutInterceptor.java (original)
+++ cxf/trunk/rt/bindings/soap/src/main/java/org/apache/cxf/binding/soap/interceptor/SoapActionOutInterceptor.java Tue Aug 5 19:43:19 2008
@@ -19,22 +19,16 @@
package org.apache.cxf.binding.soap.interceptor;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-
-import org.apache.cxf.binding.soap.Soap11;
-import org.apache.cxf.binding.soap.Soap12;
-import org.apache.cxf.binding.soap.SoapBindingConstants;
import org.apache.cxf.binding.soap.SoapMessage;
-import org.apache.cxf.binding.soap.model.SoapOperationInfo;
-import org.apache.cxf.helpers.CastUtils;
import org.apache.cxf.interceptor.Fault;
-import org.apache.cxf.message.Message;
import org.apache.cxf.phase.Phase;
-import org.apache.cxf.service.model.BindingOperationInfo;
+
+/**
+ * This has been merged into the SoapPreProtocolOutInterceptor
+ * to make sure the content type is set properly only once.
+ */
+@Deprecated
public class SoapActionOutInterceptor extends AbstractSoapInterceptor {
public SoapActionOutInterceptor() {
@@ -42,64 +36,7 @@
}
public void handleMessage(SoapMessage message) throws Fault {
- if (!(message == message.getExchange().getInMessage())) {
- setSoapAction(message);
- }
- }
-
- private void setSoapAction(SoapMessage message) {
- BindingOperationInfo boi = message.getExchange().get(BindingOperationInfo.class);
-
- // The soap action is set on the wrapped operation.
- if (boi != null && boi.isUnwrapped()) {
- boi = boi.getWrappedOperation();
- }
-
- String action = getSoapAction(message, boi);
-
- if (message.getVersion() instanceof Soap11) {
- Map<String, List<String>> reqHeaders = CastUtils.cast((Map)message.get(Message.PROTOCOL_HEADERS));
- if (reqHeaders == null) {
- reqHeaders = new HashMap<String, List<String>>();
- }
-
- if (reqHeaders.size() == 0) {
- message.put(Message.PROTOCOL_HEADERS, reqHeaders);
- }
-
- if (!reqHeaders.containsKey(SoapBindingConstants.SOAP_ACTION)) {
- reqHeaders.put(SoapBindingConstants.SOAP_ACTION, Collections.singletonList(action));
- }
- } else if (message.getVersion() instanceof Soap12 && !"\"\"".equals(action)) {
- String ct = (String) message.get(Message.CONTENT_TYPE);
-
- if (ct.indexOf("action=\"") == -1) {
- ct = new StringBuilder().append(ct)
- .append("; action=").append(action).toString();
- message.put(Message.CONTENT_TYPE, ct);
- }
- }
- }
-
- private String getSoapAction(SoapMessage message, BindingOperationInfo boi) {
- // allow an interceptor to override the SOAPAction if need be
- String action = (String) message.get(SoapBindingConstants.SOAP_ACTION);
-
- // Fall back on the SOAPAction in the operation info
- if (action == null) {
- if (boi == null) {
- action = "\"\"";
- } else {
- SoapOperationInfo soi = (SoapOperationInfo) boi.getExtensor(SoapOperationInfo.class);
- action = soi == null ? "\"\"" : soi.getAction() == null ? "\"\"" : soi.getAction();
- }
- }
-
- if (!action.startsWith("\"")) {
- action = new StringBuffer().append("\"").append(action).append("\"").toString();
- }
-
- return action;
+ //no-op
}
}
Modified: cxf/trunk/rt/bindings/soap/src/main/java/org/apache/cxf/binding/soap/interceptor/SoapPreProtocolOutInterceptor.java
URL: http://svn.apache.org/viewvc/cxf/trunk/rt/bindings/soap/src/main/java/org/apache/cxf/binding/soap/interceptor/SoapPreProtocolOutInterceptor.java?rev=683089&r1=683088&r2=683089&view=diff
==============================================================================
--- cxf/trunk/rt/bindings/soap/src/main/java/org/apache/cxf/binding/soap/interceptor/SoapPreProtocolOutInterceptor.java (original)
+++ cxf/trunk/rt/bindings/soap/src/main/java/org/apache/cxf/binding/soap/interceptor/SoapPreProtocolOutInterceptor.java Tue Aug 5 19:43:19 2008
@@ -19,16 +19,22 @@
package org.apache.cxf.binding.soap.interceptor;
+import java.util.Collections;
import java.util.HashMap;
import java.util.List;
+import java.util.Map;
import org.apache.cxf.binding.soap.Soap11;
+import org.apache.cxf.binding.soap.Soap12;
+import org.apache.cxf.binding.soap.SoapBindingConstants;
import org.apache.cxf.binding.soap.SoapMessage;
import org.apache.cxf.binding.soap.SoapVersion;
-import org.apache.cxf.interceptor.AttachmentOutInterceptor;
+import org.apache.cxf.binding.soap.model.SoapOperationInfo;
+import org.apache.cxf.helpers.CastUtils;
import org.apache.cxf.interceptor.Fault;
import org.apache.cxf.message.Message;
import org.apache.cxf.phase.Phase;
+import org.apache.cxf.service.model.BindingOperationInfo;
import static org.apache.cxf.message.Message.MIME_HEADERS;
@@ -40,8 +46,7 @@
public class SoapPreProtocolOutInterceptor extends AbstractSoapInterceptor {
public SoapPreProtocolOutInterceptor() {
- super(Phase.PRE_STREAM);
- getBefore().add(AttachmentOutInterceptor.class.getName());
+ super(Phase.POST_LOGICAL);
}
/**
@@ -53,6 +58,10 @@
public void handleMessage(SoapMessage message) throws Fault {
ensureVersion(message);
ensureMimeHeaders(message);
+ if (isRequestor(message)) {
+ setSoapAction(message);
+ }
+
}
/**
@@ -86,4 +95,60 @@
message.put(MIME_HEADERS, new HashMap<String, List<String>>());
}
}
+
+ private void setSoapAction(SoapMessage message) {
+ BindingOperationInfo boi = message.getExchange().get(BindingOperationInfo.class);
+
+ // The soap action is set on the wrapped operation.
+ if (boi != null && boi.isUnwrapped()) {
+ boi = boi.getWrappedOperation();
+ }
+
+ String action = getSoapAction(message, boi);
+
+ if (message.getVersion() instanceof Soap11) {
+ Map<String, List<String>> reqHeaders = CastUtils.cast((Map)message.get(Message.PROTOCOL_HEADERS));
+ if (reqHeaders == null) {
+ reqHeaders = new HashMap<String, List<String>>();
+ }
+
+ if (reqHeaders.size() == 0) {
+ message.put(Message.PROTOCOL_HEADERS, reqHeaders);
+ }
+
+ if (!reqHeaders.containsKey(SoapBindingConstants.SOAP_ACTION)) {
+ reqHeaders.put(SoapBindingConstants.SOAP_ACTION, Collections.singletonList(action));
+ }
+ } else if (message.getVersion() instanceof Soap12 && !"\"\"".equals(action)) {
+ String ct = (String) message.get(Message.CONTENT_TYPE);
+
+ if (ct.indexOf("action=\"") == -1) {
+ ct = new StringBuilder().append(ct)
+ .append("; action=").append(action).toString();
+ message.put(Message.CONTENT_TYPE, ct);
+ }
+ }
+ }
+
+ private String getSoapAction(SoapMessage message, BindingOperationInfo boi) {
+ // allow an interceptor to override the SOAPAction if need be
+ String action = (String) message.get(SoapBindingConstants.SOAP_ACTION);
+
+ // Fall back on the SOAPAction in the operation info
+ if (action == null) {
+ if (boi == null) {
+ action = "\"\"";
+ } else {
+ SoapOperationInfo soi = (SoapOperationInfo) boi.getExtensor(SoapOperationInfo.class);
+ action = soi == null ? "\"\"" : soi.getAction() == null ? "\"\"" : soi.getAction();
+ }
+ }
+
+ if (!action.startsWith("\"")) {
+ action = new StringBuffer().append("\"").append(action).append("\"").toString();
+ }
+
+ return action;
+ }
+
}
Modified: cxf/trunk/rt/bindings/soap/src/test/java/org/apache/cxf/binding/soap/SoapActionInterceptorTest.java
URL: http://svn.apache.org/viewvc/cxf/trunk/rt/bindings/soap/src/test/java/org/apache/cxf/binding/soap/SoapActionInterceptorTest.java?rev=683089&r1=683088&r2=683089&view=diff
==============================================================================
--- cxf/trunk/rt/bindings/soap/src/test/java/org/apache/cxf/binding/soap/SoapActionInterceptorTest.java (original)
+++ cxf/trunk/rt/bindings/soap/src/test/java/org/apache/cxf/binding/soap/SoapActionInterceptorTest.java Tue Aug 5 19:43:19 2008
@@ -24,7 +24,7 @@
import javax.xml.namespace.QName;
-import org.apache.cxf.binding.soap.interceptor.SoapActionOutInterceptor;
+import org.apache.cxf.binding.soap.interceptor.SoapPreProtocolOutInterceptor;
import org.apache.cxf.binding.soap.model.SoapOperationInfo;
import org.apache.cxf.helpers.CastUtils;
import org.apache.cxf.message.ExchangeImpl;
@@ -42,7 +42,7 @@
@Test
public void testSoapAction() throws Exception {
- SoapActionOutInterceptor i = new SoapActionOutInterceptor();
+ SoapPreProtocolOutInterceptor i = new SoapPreProtocolOutInterceptor();
Message message = new MessageImpl();
message.setExchange(new ExchangeImpl());
@@ -52,8 +52,9 @@
assertNotNull(message);
assertTrue(message instanceof SoapMessage);
SoapMessage soapMessage = (SoapMessage) message;
+ soapMessage.put(Message.REQUESTOR_ROLE, Boolean.TRUE);
assertEquals(Soap11.getInstance(), soapMessage.getVersion());
- (new SoapActionOutInterceptor()).handleMessage(soapMessage);
+ (new SoapPreProtocolOutInterceptor()).handleMessage(soapMessage);
Map<String, List<String>> reqHeaders = CastUtils.cast((Map)soapMessage.get(Message.PROTOCOL_HEADERS));
assertNotNull(reqHeaders);
assertEquals("\"\"", reqHeaders.get(SoapBindingConstants.SOAP_ACTION).get(0));
@@ -61,6 +62,7 @@
sb.setSoapVersion(Soap12.getInstance());
soapMessage.clear();
soapMessage = (SoapMessage) sb.createMessage(soapMessage);
+ soapMessage.put(Message.REQUESTOR_ROLE, Boolean.TRUE);
i.handleMessage(soapMessage);
String ct = (String) message.get(Message.CONTENT_TYPE);
assertEquals("application/soap+xml", ct);
Modified: cxf/trunk/rt/bindings/soap/src/test/java/org/apache/cxf/binding/soap/SoapBindingFactoryTest.java
URL: http://svn.apache.org/viewvc/cxf/trunk/rt/bindings/soap/src/test/java/org/apache/cxf/binding/soap/SoapBindingFactoryTest.java?rev=683089&r1=683088&r2=683089&view=diff
==============================================================================
--- cxf/trunk/rt/bindings/soap/src/test/java/org/apache/cxf/binding/soap/SoapBindingFactoryTest.java (original)
+++ cxf/trunk/rt/bindings/soap/src/test/java/org/apache/cxf/binding/soap/SoapBindingFactoryTest.java Tue Aug 5 19:43:19 2008
@@ -202,7 +202,7 @@
SoapOperationInfo sboi = boi.getExtensor(SoapOperationInfo.class);
assertNotNull(sboi);
assertEquals("document", sboi.getStyle());
- assertEquals("", sboi.getAction());
+ assertEquals("sayHiAction", sboi.getAction());
BindingMessageInfo input = boi.getInput();
SoapBodyInfo bodyInfo = input.getExtensor(SoapBodyInfo.class);
@@ -216,6 +216,7 @@
sboi = boi.getExtensor(SoapOperationInfo.class);
assertNotNull(sboi);
assertEquals("document", sboi.getStyle());
+ assertEquals("", sboi.getAction());
Collection<BindingFaultInfo> faults = boi.getFaults();
assertEquals(1, faults.size());
BindingFaultInfo faultInfo = boi.getFault(new QName("http://apache.org/hello_world_soap12_http",
Modified: cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/DispatchImpl.java
URL: http://svn.apache.org/viewvc/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/DispatchImpl.java?rev=683089&r1=683088&r2=683089&view=diff
==============================================================================
--- cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/DispatchImpl.java (original)
+++ cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/DispatchImpl.java Tue Aug 5 19:43:19 2008
@@ -56,7 +56,7 @@
import org.apache.cxf.Bus;
import org.apache.cxf.BusFactory;
import org.apache.cxf.binding.soap.SoapBinding;
-import org.apache.cxf.binding.soap.interceptor.SoapActionOutInterceptor;
+import org.apache.cxf.binding.soap.interceptor.SoapPreProtocolOutInterceptor;
import org.apache.cxf.common.logging.LogUtils;
import org.apache.cxf.endpoint.Client;
import org.apache.cxf.endpoint.ConduitSelector;
@@ -281,7 +281,7 @@
}
if (getBinding() instanceof SOAPBinding) {
- chain.add(new SoapActionOutInterceptor());
+ chain.add(new SoapPreProtocolOutInterceptor());
}
chain.add(new MessageSenderInterceptor());
Modified: cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/handler/soap/SOAPHandlerInterceptor.java
URL: http://svn.apache.org/viewvc/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/handler/soap/SOAPHandlerInterceptor.java?rev=683089&r1=683088&r2=683089&view=diff
==============================================================================
--- cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/handler/soap/SOAPHandlerInterceptor.java (original)
+++ cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/handler/soap/SOAPHandlerInterceptor.java Tue Aug 5 19:43:19 2008
@@ -45,8 +45,8 @@
import org.apache.cxf.binding.soap.SoapMessage;
import org.apache.cxf.binding.soap.interceptor.AbstractSoapInterceptor;
import org.apache.cxf.binding.soap.interceptor.MustUnderstandInterceptor;
-import org.apache.cxf.binding.soap.interceptor.SoapActionOutInterceptor;
import org.apache.cxf.binding.soap.interceptor.SoapInterceptor;
+import org.apache.cxf.binding.soap.interceptor.SoapPreProtocolOutInterceptor;
import org.apache.cxf.binding.soap.saaj.SAAJInInterceptor;
import org.apache.cxf.binding.soap.saaj.SAAJOutInterceptor;
import org.apache.cxf.endpoint.Endpoint;
@@ -215,7 +215,8 @@
// well for outbound case, as many outbound interceptors
// have their ending interceptors.
// For example, we can not skip MessageSenderInterceptor.
- chain.doInterceptStartingAfter(responseMsg, SoapActionOutInterceptor.class.getName());
+ chain.doInterceptStartingAfter(responseMsg,
+ SoapPreProtocolOutInterceptor.class.getName());
}
} else {
Modified: cxf/trunk/rt/javascript/src/test/java/org/apache/cxf/javascript/GreeterClientTest.java
URL: http://svn.apache.org/viewvc/cxf/trunk/rt/javascript/src/test/java/org/apache/cxf/javascript/GreeterClientTest.java?rev=683089&r1=683088&r2=683089&view=diff
==============================================================================
--- cxf/trunk/rt/javascript/src/test/java/org/apache/cxf/javascript/GreeterClientTest.java (original)
+++ cxf/trunk/rt/javascript/src/test/java/org/apache/cxf/javascript/GreeterClientTest.java Tue Aug 5 19:43:19 2008
@@ -47,6 +47,9 @@
@Before
public
void before() throws Exception {
+ //something seems to be cached someplace that is screwing up the second test SOMETIMES
+ //make sure the garbage collector cleans up first.
+ System.gc();
setupRhino("greeter-service-endpoint",
"/org/apache/cxf/javascript/GreeterTests.js",
true);
Modified: cxf/trunk/testutils/src/main/resources/wsdl/hello_world_soap12.wsdl
URL: http://svn.apache.org/viewvc/cxf/trunk/testutils/src/main/resources/wsdl/hello_world_soap12.wsdl?rev=683089&r1=683088&r2=683089&view=diff
==============================================================================
--- cxf/trunk/testutils/src/main/resources/wsdl/hello_world_soap12.wsdl (original)
+++ cxf/trunk/testutils/src/main/resources/wsdl/hello_world_soap12.wsdl Tue Aug 5 19:43:19 2008
@@ -90,7 +90,7 @@
<wsdl:binding name="Greeter_SOAPBinding" type="tns:Greeter">
<soap12:binding transport="http://www.w3.org/2003/05/soap/bindings/HTTP/" style="document" />
<operation name="sayHi">
- <soap12:operation style="document" soapAction=""/>
+ <soap12:operation style="document" soapAction="sayHiAction"/>
<input>
<soap12:body use="literal" />
</input>