You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cxf.apache.org by da...@apache.org on 2007/03/21 19:13:52 UTC
svn commit: r520969 - in /incubator/cxf/trunk/rt:
bindings/soap/src/main/java/org/apache/cxf/binding/soap/interceptor/
frontend/jaxws/src/main/java/org/apache/cxf/jaxws/spring/
frontend/jaxws/src/main/resources/org/apache/cxf/jaxws/spring/
frontend/jax...
Author: dandiep
Date: Wed Mar 21 11:13:50 2007
New Revision: 520969
URL: http://svn.apache.org/viewvc?view=rev&rev=520969
Log:
o Fix a problem where the SOAPAction wasn't being quoted.
o Add the ability to specify in/out/fault interceptors via Spring XML with
the Server/Endpoint/ClientFactoryBeans.
o Fix a problem with the WSS4J interceptor not throwing exceptions.
Modified:
incubator/cxf/trunk/rt/bindings/soap/src/main/java/org/apache/cxf/binding/soap/interceptor/SoapActionInterceptor.java
incubator/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/spring/EndpointFactoryBean.java
incubator/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/spring/EndpointFactoryBeanDefinitionParser.java
incubator/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/spring/ServerBeanDefinitionParser.java
incubator/cxf/trunk/rt/frontend/jaxws/src/main/resources/org/apache/cxf/jaxws/spring/jaxws.xsd
incubator/cxf/trunk/rt/frontend/jaxws/src/test/java/org/apache/cxf/jaxws/spring/SpringBeansTest.java
incubator/cxf/trunk/rt/frontend/jaxws/src/test/java/org/apache/cxf/jaxws/spring/endpoints.xml
incubator/cxf/trunk/rt/frontend/simple/src/main/java/org/apache/cxf/frontend/AbstractEndpointFactory.java
incubator/cxf/trunk/rt/ws/security/src/main/java/org/apache/cxf/ws/security/wss4j/WSS4JInInterceptor.java
Modified: incubator/cxf/trunk/rt/bindings/soap/src/main/java/org/apache/cxf/binding/soap/interceptor/SoapActionInterceptor.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/rt/bindings/soap/src/main/java/org/apache/cxf/binding/soap/interceptor/SoapActionInterceptor.java?view=diff&rev=520969&r1=520968&r2=520969
==============================================================================
--- incubator/cxf/trunk/rt/bindings/soap/src/main/java/org/apache/cxf/binding/soap/interceptor/SoapActionInterceptor.java (original)
+++ incubator/cxf/trunk/rt/bindings/soap/src/main/java/org/apache/cxf/binding/soap/interceptor/SoapActionInterceptor.java Wed Mar 21 11:13:50 2007
@@ -55,12 +55,19 @@
if (boi == null) {
value.add("\"\"");
} else {
- SoapOperationInfo soi = (SoapOperationInfo) boi.getExtensor(SoapOperationInfo.class);
- value.add(soi == null ? "\"\"" : soi.getAction() == null ? "\"\"" : soi.getAction());
+ SoapOperationInfo soi = (SoapOperationInfo) boi.getExtensor(SoapOperationInfo.class);
+ String action = soi == null ? "\"\"" : soi.getAction() == null ? "\"\"" : soi.getAction();
+ if (!action.startsWith("\"")) {
+ action = new StringBuffer().append("\"").append(action).append("\"").toString();
+ }
+
+ value.add(action);
}
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 (message.getVersion() instanceof Soap11 && !reqHeaders.containsKey("SOAPAction")) {
Modified: incubator/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/spring/EndpointFactoryBean.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/spring/EndpointFactoryBean.java?view=diff&rev=520969&r1=520968&r2=520969
==============================================================================
--- incubator/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/spring/EndpointFactoryBean.java (original)
+++ incubator/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/spring/EndpointFactoryBean.java Wed Mar 21 11:13:50 2007
@@ -28,6 +28,7 @@
import org.apache.cxf.Bus;
import org.apache.cxf.BusFactory;
import org.apache.cxf.common.classloader.ClassLoaderUtils;
+import org.apache.cxf.interceptor.AbstractBasicInterceptorProvider;
import org.apache.cxf.jaxws.EndpointImpl;
import org.apache.cxf.jaxws.support.AbstractJaxWsServiceFactoryBean;
import org.apache.cxf.jaxws.support.JaxWsServiceFactoryBean;
@@ -40,7 +41,8 @@
* Creates a JAX-WS Endpoint. Implements InitializingBean to make it easier for Spring
* users to use.
*/
-public class EndpointFactoryBean implements FactoryBean, ApplicationContextAware {
+public class EndpointFactoryBean extends AbstractBasicInterceptorProvider
+ implements FactoryBean, ApplicationContextAware {
private String address;
private Bus bus;
private Executor executor;
@@ -96,6 +98,21 @@
if (publish) {
endpoint.publish(address);
}
+
+ org.apache.cxf.endpoint.Endpoint cxfEp = endpoint.getServer().getEndpoint();
+ if (getInInterceptors() != null) {
+ cxfEp.getInInterceptors().addAll(getInInterceptors());
+ }
+ if (getOutInterceptors() != null) {
+ cxfEp.getOutInterceptors().addAll(getOutInterceptors());
+ }
+ if (getInFaultInterceptors() != null) {
+ cxfEp.getInFaultInterceptors().addAll(getInFaultInterceptors());
+ }
+ if (getOutFaultInterceptors() != null) {
+ cxfEp.getOutFaultInterceptors().addAll(getOutFaultInterceptors());
+ }
+
return endpoint;
}
Modified: incubator/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/spring/EndpointFactoryBeanDefinitionParser.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/spring/EndpointFactoryBeanDefinitionParser.java?view=diff&rev=520969&r1=520968&r2=520969
==============================================================================
--- incubator/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/spring/EndpointFactoryBeanDefinitionParser.java (original)
+++ incubator/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/spring/EndpointFactoryBeanDefinitionParser.java Wed Mar 21 11:13:50 2007
@@ -18,6 +18,7 @@
*/
package org.apache.cxf.jaxws.spring;
+import java.util.List;
import java.util.Map;
import org.w3c.dom.Attr;
@@ -55,9 +56,14 @@
for (int i = 0; i < children.getLength(); i++) {
Node n = children.item(i);
if (n.getNodeType() == Node.ELEMENT_NODE) {
+ String name = n.getLocalName();
if ("properties".equals(n.getLocalName())) {
Map map = ctx.getDelegate().parseMapElement((Element) n, bean.getBeanDefinition());
bean.addPropertyValue("properties", map);
+ } else if ("inInterceptors".equals(name) || "inFaultInterceptors".equals(name)
+ || "outInterceptors".equals(name) || "outFaultInterceptors".equals(name)) {
+ List list = ctx.getDelegate().parseListElement((Element) n, bean.getBeanDefinition());
+ bean.addPropertyValue(n.getLocalName(), list);
} else {
setFirstChildAsProperty((Element) n, ctx, bean, n.getLocalName());
}
Modified: incubator/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/spring/ServerBeanDefinitionParser.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/spring/ServerBeanDefinitionParser.java?view=diff&rev=520969&r1=520968&r2=520969
==============================================================================
--- incubator/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/spring/ServerBeanDefinitionParser.java (original)
+++ incubator/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/spring/ServerBeanDefinitionParser.java Wed Mar 21 11:13:50 2007
@@ -18,6 +18,7 @@
*/
package org.apache.cxf.jaxws.spring;
+import java.util.List;
import java.util.Map;
import org.w3c.dom.Attr;
@@ -56,6 +57,7 @@
for (int i = 0; i < children.getLength(); i++) {
Node n = children.item(i);
if (n.getNodeType() == Node.ELEMENT_NODE) {
+ String name = n.getLocalName();
if ("properties".equals(n.getLocalName())) {
Map map = ctx.getDelegate().parseMapElement((Element) n, bean.getBeanDefinition());
bean.addPropertyValue("properties", map);
@@ -65,6 +67,10 @@
setFirstChildAsProperty((Element) n, ctx, bean, "serviceFactory.invoker");
} else if ("binding".equals(n.getLocalName())) {
setFirstChildAsProperty((Element) n, ctx, bean, "bindingFactory");
+ } else if ("inInterceptors".equals(name) || "inFaultInterceptors".equals(name)
+ || "outInterceptors".equals(name) || "outFaultInterceptors".equals(name)) {
+ List list = ctx.getDelegate().parseListElement((Element) n, bean.getBeanDefinition());
+ bean.addPropertyValue(n.getLocalName(), list);
} else {
setFirstChildAsProperty((Element) n, ctx, bean, n.getLocalName());
}
Modified: incubator/cxf/trunk/rt/frontend/jaxws/src/main/resources/org/apache/cxf/jaxws/spring/jaxws.xsd
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/rt/frontend/jaxws/src/main/resources/org/apache/cxf/jaxws/spring/jaxws.xsd?view=diff&rev=520969&r1=520968&r2=520969
==============================================================================
--- incubator/cxf/trunk/rt/frontend/jaxws/src/main/resources/org/apache/cxf/jaxws/spring/jaxws.xsd (original)
+++ incubator/cxf/trunk/rt/frontend/jaxws/src/main/resources/org/apache/cxf/jaxws/spring/jaxws.xsd Wed Mar 21 11:13:50 2007
@@ -17,6 +17,10 @@
<xsd:sequence>
<xsd:element name="executor" type="xsd:anyType" minOccurs="0"/>
<xsd:element name="implementor" type="xsd:anyType" minOccurs="0"/>
+ <xsd:element name="inInterceptors" type="xsd:anyType" minOccurs="0"/>
+ <xsd:element name="inFaultInterceptors" type="xsd:anyType" minOccurs="0"/>
+ <xsd:element name="outInterceptors" type="xsd:anyType" minOccurs="0"/>
+ <xsd:element name="outFaultInterceptors" type="xsd:anyType" minOccurs="0"/>
<xsd:element name="properties" type="beans:mapType" minOccurs="0"/>
<xsd:element name="serviceFactory" type="xsd:anyType" minOccurs="0"/>
</xsd:sequence>
@@ -41,7 +45,11 @@
<xsd:element name="binding" type="xsd:anyType" minOccurs="0"/>
<xsd:element name="executor" type="xsd:anyType" minOccurs="0"/>
<xsd:element name="implementor" type="xsd:anyType" minOccurs="0"/>
+ <xsd:element name="inInterceptors" type="xsd:anyType" minOccurs="0"/>
+ <xsd:element name="inFaultInterceptors" type="xsd:anyType" minOccurs="0"/>
<xsd:element name="invoker" type="xsd:anyType" minOccurs="0"/>
+ <xsd:element name="outInterceptors" type="xsd:anyType" minOccurs="0"/>
+ <xsd:element name="outFaultInterceptors" type="xsd:anyType" minOccurs="0"/>
<xsd:element name="properties" type="beans:mapType" minOccurs="0"/>
<xsd:element name="serviceBean" type="xsd:anyType" minOccurs="0"/>
<xsd:element name="serviceFactory" type="xsd:anyType" minOccurs="0"/>
Modified: incubator/cxf/trunk/rt/frontend/jaxws/src/test/java/org/apache/cxf/jaxws/spring/SpringBeansTest.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/rt/frontend/jaxws/src/test/java/org/apache/cxf/jaxws/spring/SpringBeansTest.java?view=diff&rev=520969&r1=520968&r2=520969
==============================================================================
--- incubator/cxf/trunk/rt/frontend/jaxws/src/test/java/org/apache/cxf/jaxws/spring/SpringBeansTest.java (original)
+++ incubator/cxf/trunk/rt/frontend/jaxws/src/test/java/org/apache/cxf/jaxws/spring/SpringBeansTest.java Wed Mar 21 11:13:50 2007
@@ -18,9 +18,16 @@
*/
package org.apache.cxf.jaxws.spring;
-import junit.framework.TestCase;
+import java.util.List;
+import junit.framework.TestCase;
import org.apache.cxf.binding.soap.SoapBindingInfoFactoryBean;
+import org.apache.cxf.binding.soap.saaj.SAAJInInterceptor;
+import org.apache.cxf.binding.soap.saaj.SAAJOutInterceptor;
+import org.apache.cxf.endpoint.Endpoint;
+import org.apache.cxf.interceptor.Interceptor;
+import org.apache.cxf.interceptor.LoggingInInterceptor;
+import org.apache.cxf.interceptor.LoggingOutInterceptor;
import org.apache.cxf.jaxws.EndpointImpl;
import org.apache.cxf.jaxws.JaxWsServerFactoryBean;
import org.apache.cxf.jaxws.service.Hello;
@@ -67,6 +74,32 @@
bean = ctx.getBean("wsdlLocation");
assertNotNull(bean);
+
+ ep = (EndpointImpl) ctx.getBean("epWithInterceptors");
+ assertNotNull(ep);
+ Endpoint cxfEP = ep.getServer().getEndpoint();
+ List<Interceptor> inInterceptors = cxfEP.getInInterceptors();
+ boolean saaj = false;
+ boolean logging = false;
+ for (Interceptor<?> i : inInterceptors) {
+ if (i instanceof SAAJInInterceptor) {
+ saaj = true;
+ } else if (i instanceof LoggingInInterceptor) {
+ logging = true;
+ }
+ }
+ assertTrue(saaj);
+ assertTrue(logging);
+
+ saaj = false;
+ logging = false;
+ for (Interceptor<?> i : cxfEP.getOutInterceptors()) {
+ if (i instanceof SAAJOutInterceptor) {
+ saaj = true;
+ } else if (i instanceof LoggingOutInterceptor) {
+ logging = true;
+ }
+ }
}
public void testServers() throws Exception {
Modified: incubator/cxf/trunk/rt/frontend/jaxws/src/test/java/org/apache/cxf/jaxws/spring/endpoints.xml
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/rt/frontend/jaxws/src/test/java/org/apache/cxf/jaxws/spring/endpoints.xml?view=diff&rev=520969&r1=520968&r2=520969
==============================================================================
--- incubator/cxf/trunk/rt/frontend/jaxws/src/test/java/org/apache/cxf/jaxws/spring/endpoints.xml (original)
+++ incubator/cxf/trunk/rt/frontend/jaxws/src/test/java/org/apache/cxf/jaxws/spring/endpoints.xml Wed Mar 21 11:13:50 2007
@@ -67,4 +67,19 @@
<jaxws:endpoint id="wsdlLocation"
implementor="#greeter" address="http://localhost:8080/simpleWithAddress"
wsdlLocation="wsdl/hello_world.wsdl"/>
+
+
+ <jaxws:endpoint id="epWithInterceptors"
+ implementor="org.apache.cxf.jaxws.service.Hello"
+ address="http://localhost:8080/test">
+ <jaxws:inInterceptors>
+ <bean class="org.apache.cxf.interceptor.LoggingInInterceptor"/>
+ <bean class="org.apache.cxf.binding.soap.saaj.SAAJInInterceptor"/>
+ </jaxws:inInterceptors>
+ <jaxws:outInterceptors>
+ <bean class="org.apache.cxf.interceptor.LoggingOutInterceptor"/>
+ <bean class="org.apache.cxf.binding.soap.saaj.SAAJOutInterceptor"/>
+ </jaxws:outInterceptors>
+ </jaxws:endpoint>
+
</beans>
Modified: incubator/cxf/trunk/rt/frontend/simple/src/main/java/org/apache/cxf/frontend/AbstractEndpointFactory.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/rt/frontend/simple/src/main/java/org/apache/cxf/frontend/AbstractEndpointFactory.java?view=diff&rev=520969&r1=520968&r2=520969
==============================================================================
--- incubator/cxf/trunk/rt/frontend/simple/src/main/java/org/apache/cxf/frontend/AbstractEndpointFactory.java (original)
+++ incubator/cxf/trunk/rt/frontend/simple/src/main/java/org/apache/cxf/frontend/AbstractEndpointFactory.java Wed Mar 21 11:13:50 2007
@@ -29,6 +29,7 @@
import org.apache.cxf.binding.soap.model.SoapBindingInfo;
import org.apache.cxf.endpoint.Endpoint;
import org.apache.cxf.endpoint.EndpointException;
+import org.apache.cxf.interceptor.AbstractBasicInterceptorProvider;
import org.apache.cxf.service.Service;
import org.apache.cxf.service.factory.AbstractBindingInfoFactoryBean;
import org.apache.cxf.service.factory.ReflectionServiceFactoryBean;
@@ -39,7 +40,7 @@
import org.apache.cxf.ws.AbstractWSFeature;
import org.apache.cxf.wsdl11.WSDLEndpointFactory;
-public abstract class AbstractEndpointFactory {
+public abstract class AbstractEndpointFactory extends AbstractBasicInterceptorProvider {
private Bus bus;
private String address;
@@ -51,7 +52,7 @@
private QName endpointName;
private Map<String, Object> properties;
private List<AbstractWSFeature> features;
-
+
protected Endpoint createEndpoint() throws BusException, EndpointException {
Service service = serviceFactory.getService();
@@ -85,6 +86,19 @@
}
service.getEndpoints().put(ep.getEndpointInfo().getName(), ep);
+
+ if (getInInterceptors() != null) {
+ ep.getInInterceptors().addAll(getInInterceptors());
+ }
+ if (getOutInterceptors() != null) {
+ ep.getOutInterceptors().addAll(getOutInterceptors());
+ }
+ if (getInFaultInterceptors() != null) {
+ ep.getInFaultInterceptors().addAll(getInFaultInterceptors());
+ }
+ if (getOutFaultInterceptors() != null) {
+ ep.getOutFaultInterceptors().addAll(getOutFaultInterceptors());
+ }
return ep;
}
Modified: incubator/cxf/trunk/rt/ws/security/src/main/java/org/apache/cxf/ws/security/wss4j/WSS4JInInterceptor.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/rt/ws/security/src/main/java/org/apache/cxf/ws/security/wss4j/WSS4JInInterceptor.java?view=diff&rev=520969&r1=520968&r2=520969
==============================================================================
--- incubator/cxf/trunk/rt/ws/security/src/main/java/org/apache/cxf/ws/security/wss4j/WSS4JInInterceptor.java (original)
+++ incubator/cxf/trunk/rt/ws/security/src/main/java/org/apache/cxf/ws/security/wss4j/WSS4JInInterceptor.java Wed Mar 21 11:13:50 2007
@@ -217,11 +217,11 @@
} catch (WSSecurityException e) {
LOG.log(Level.WARNING, "", e);
- // TODO: what should we be doing?
+ throw new SoapFault(new Message("WSSECURITY_EX", LOG), e, version.getSender());
} catch (XMLStreamException e) {
- throw new SoapFault(new Message("STAX_EX", LOG), version.getSender());
+ throw new SoapFault(new Message("STAX_EX", LOG), e, version.getSender());
} catch (SOAPException e) {
- throw new SoapFault(new Message("SAAJ_EX", LOG), version.getSender());
+ throw new SoapFault(new Message("SAAJ_EX", LOG), e, version.getSender());
} finally {
reqData.clear();
reqData = null;