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 2012/08/16 16:14:17 UTC
svn commit: r1373850 - in /cxf/trunk:
rt/bindings/soap/src/main/java/org/apache/cxf/binding/soap/
systests/transports/
systests/transports/src/test/java/org/apache/cxf/systest/soap_udp/
Author: dkulp
Date: Thu Aug 16 14:14:16 2012
New Revision: 1373850
URL: http://svn.apache.org/viewvc?rev=1373850&view=rev
Log:
Add initial support for the SOAP-UDP spec
Added:
cxf/trunk/systests/transports/src/test/java/org/apache/cxf/systest/soap_udp/
cxf/trunk/systests/transports/src/test/java/org/apache/cxf/systest/soap_udp/Server.java
cxf/trunk/systests/transports/src/test/java/org/apache/cxf/systest/soap_udp/SoapUDPTest.java
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/SoapTransportFactory.java
cxf/trunk/systests/transports/pom.xml
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=1373850&r1=1373849&r2=1373850&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 Thu Aug 16 14:14:16 2012
@@ -80,6 +80,7 @@ import org.apache.cxf.interceptor.Attach
import org.apache.cxf.interceptor.AttachmentOutInterceptor;
import org.apache.cxf.interceptor.BareOutInterceptor;
import org.apache.cxf.interceptor.DocLiteralInInterceptor;
+import org.apache.cxf.interceptor.InterceptorProvider;
import org.apache.cxf.interceptor.StaxInInterceptor;
import org.apache.cxf.interceptor.StaxOutInterceptor;
import org.apache.cxf.interceptor.URIMappingInterceptor;
@@ -89,6 +90,7 @@ import org.apache.cxf.service.model.Bind
import org.apache.cxf.service.model.BindingInfo;
import org.apache.cxf.service.model.BindingMessageInfo;
import org.apache.cxf.service.model.BindingOperationInfo;
+import org.apache.cxf.service.model.EndpointInfo;
import org.apache.cxf.service.model.MessageInfo;
import org.apache.cxf.service.model.MessagePartInfo;
import org.apache.cxf.service.model.OperationInfo;
@@ -97,6 +99,7 @@ import org.apache.cxf.transport.ChainIni
import org.apache.cxf.transport.Destination;
import org.apache.cxf.transport.MessageObserver;
import org.apache.cxf.transport.MultipleEndpointObserver;
+import org.apache.cxf.ws.addressing.WSAddressingFeature;
import org.apache.cxf.wsdl.WSDLManager;
import org.apache.cxf.wsdl11.WSDLServiceBuilder;
@@ -327,6 +330,7 @@ public class SoapBindingFactory extends
public Binding createBinding(BindingInfo binding) {
// TODO what about the mix style/use?
+
// The default style should be doc-lit wrapped.
String parameterStyle = SoapBindingConstants.PARAMETER_STYLE_WRAPPED;
String bindingStyle = SoapBindingConstants.BINDING_STYLE_DOC;
@@ -435,10 +439,25 @@ public class SoapBindingFactory extends
sb.getInFaultInterceptors().add(new Soap12FaultInInterceptor());
sb.getOutFaultInterceptors().add(new Soap12FaultOutInterceptor());
}
+
+ if (binding.getService() != null) {
+ for (EndpointInfo ei: binding.getService().getEndpoints()) {
+ if (ei.getAddress() != null && ei.getAddress().startsWith("soap.udp")) {
+ setupUDP(sb);
+ }
+ }
+ }
return sb;
}
+ protected void setupUDP(InterceptorProvider p) {
+ //soap UDP requires ws-addressing turned on
+ WSAddressingFeature add = new WSAddressingFeature();
+ add.setAddressingRequired(true);
+ add.initialize(p, bus);
+ }
+
protected void addMessageFromBinding(ExtensibilityElement ext, BindingOperationInfo bop,
boolean isInput) {
SoapHeader header = SOAPBindingUtil.getSoapHeader(ext);
@@ -832,6 +851,13 @@ public class SoapBindingFactory extends
@Override
public synchronized void addListener(Destination d, Endpoint e) {
MessageObserver mo = d.getMessageObserver();
+ if (d.getAddress() != null
+ && d.getAddress().getAddress() != null
+ && d.getAddress().getAddress().getValue() != null
+ && d.getAddress().getAddress().getValue().startsWith("soap.udp")) {
+ //soap.udp REQUIRES usage of WS-Addressing... we need to turn this on
+ setupUDP(e);
+ }
if (mo == null) {
super.addListener(d, e);
return;
Modified: cxf/trunk/rt/bindings/soap/src/main/java/org/apache/cxf/binding/soap/SoapTransportFactory.java
URL: http://svn.apache.org/viewvc/cxf/trunk/rt/bindings/soap/src/main/java/org/apache/cxf/binding/soap/SoapTransportFactory.java?rev=1373850&r1=1373849&r2=1373850&view=diff
==============================================================================
--- cxf/trunk/rt/bindings/soap/src/main/java/org/apache/cxf/binding/soap/SoapTransportFactory.java (original)
+++ cxf/trunk/rt/bindings/soap/src/main/java/org/apache/cxf/binding/soap/SoapTransportFactory.java Thu Aug 16 14:14:16 2012
@@ -24,6 +24,7 @@ import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
import java.util.Collections;
+import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
import java.util.Set;
@@ -77,6 +78,10 @@ public class SoapTransportFactory extend
"http://www.w3.org/2010/soapjms/",
"http://www.w3.org/2003/05/soap/bindings/HTTP/",
"http://schemas.xmlsoap.org/soap/http");
+ public static final Set<String> DEFAULT_PREFIXES
+ = Collections.unmodifiableSet(new HashSet<String>(Arrays.asList(
+ "soap.udp", "soap.tcp"
+ )));
public SoapTransportFactory() {
super(DEFAULT_NAMESPACES, null);
@@ -87,12 +92,14 @@ public class SoapTransportFactory extend
}
public Set<String> getUriPrefixes() {
- return Collections.singleton("soap.tcp");
+ return DEFAULT_PREFIXES;
}
public String mapTransportURI(String s, String address) {
if (SoapJMSConstants.SOAP_JMS_SPECIFICIATION_TRANSPORTID.equals(s)
|| (address != null && address.startsWith("jms"))) {
s = "http://cxf.apache.org/transports/jms";
+ } else if (address != null && address.startsWith("soap.udp")) {
+ s = "http://cxf.apache.org/transports/udp";
} else if (SOAP_11_HTTP_BINDING.equals(s)
|| SOAP_12_HTTP_BINDING.equals(s)
|| "http://schemas.xmlsoap.org/wsdl/soap/".equals(s)
@@ -127,6 +134,7 @@ public class SoapTransportFactory extend
if (StringUtils.isEmpty(address)
|| address.startsWith("http")
|| address.startsWith("jms")
+ || address.startsWith("soap.udp")
|| address.startsWith("/")) {
destinationFactory = mgr.getDestinationFactory(mapTransportURI(transId, address));
} else {
@@ -217,7 +225,10 @@ public class SoapTransportFactory extend
ConduitInitiator conduitInit;
try {
ConduitInitiatorManager mgr = bus.getExtension(ConduitInitiatorManager.class);
- if (StringUtils.isEmpty(address) || address.startsWith("http") || address.startsWith("jms")) {
+ if (StringUtils.isEmpty(address)
+ || address.startsWith("http")
+ || address.startsWith("jms")
+ || address.startsWith("soap.udp")) {
conduitInit = mgr.getConduitInitiator(mapTransportURI(transId, address));
} else {
conduitInit = mgr.getConduitInitiatorForUri(address);
Modified: cxf/trunk/systests/transports/pom.xml
URL: http://svn.apache.org/viewvc/cxf/trunk/systests/transports/pom.xml?rev=1373850&r1=1373849&r2=1373850&view=diff
==============================================================================
--- cxf/trunk/systests/transports/pom.xml (original)
+++ cxf/trunk/systests/transports/pom.xml Thu Aug 16 14:14:16 2012
@@ -113,6 +113,11 @@
<version>${project.version}</version>
</dependency>
<dependency>
+ <groupId>org.apache.cxf</groupId>
+ <artifactId>cxf-rt-transports-udp</artifactId>
+ <version>${project.version}</version>
+ </dependency>
+ <dependency>
<groupId>org.eclipse.jetty</groupId>
<artifactId>jetty-servlet</artifactId>
</dependency>
Added: cxf/trunk/systests/transports/src/test/java/org/apache/cxf/systest/soap_udp/Server.java
URL: http://svn.apache.org/viewvc/cxf/trunk/systests/transports/src/test/java/org/apache/cxf/systest/soap_udp/Server.java?rev=1373850&view=auto
==============================================================================
--- cxf/trunk/systests/transports/src/test/java/org/apache/cxf/systest/soap_udp/Server.java (added)
+++ cxf/trunk/systests/transports/src/test/java/org/apache/cxf/systest/soap_udp/Server.java Thu Aug 16 14:14:16 2012
@@ -0,0 +1,71 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.cxf.systest.soap_udp;
+
+import javax.jws.WebService;
+import javax.xml.ws.Endpoint;
+
+import org.apache.cxf.annotations.GZIP;
+import org.apache.cxf.testutil.common.AbstractBusTestServerBase;
+import org.apache.hello_world_soap_http.BaseGreeterImpl;
+
+public class Server extends AbstractBusTestServerBase {
+ public static final String PORT = allocatePort(Server.class);
+
+ Endpoint ep;
+ protected void run() {
+ Object implementor = new GreeterImpl();
+ String address = "soap.udp://:" + PORT;
+ ep = Endpoint.publish(address, implementor);
+ }
+ @Override
+ public void tearDown() {
+ if (ep != null) {
+ ep.stop();
+ }
+
+ }
+
+
+ public static void main(String[] args) {
+ try {
+ Server s = new Server();
+ s.start();
+ } catch (Exception ex) {
+ ex.printStackTrace();
+ System.exit(-1);
+ } finally {
+ System.out.println("done!");
+ }
+ }
+
+
+ @WebService(serviceName = "SOAPService",
+ portName = "SoapPort",
+ endpointInterface = "org.apache.hello_world_soap_http.Greeter",
+ targetNamespace = "http://apache.org/hello_world_soap_http",
+ wsdlLocation = "testutils/hello_world.wsdl")
+ @GZIP(threshold = 50)
+ public class GreeterImpl extends BaseGreeterImpl {
+
+
+ }
+}
+
Added: cxf/trunk/systests/transports/src/test/java/org/apache/cxf/systest/soap_udp/SoapUDPTest.java
URL: http://svn.apache.org/viewvc/cxf/trunk/systests/transports/src/test/java/org/apache/cxf/systest/soap_udp/SoapUDPTest.java?rev=1373850&view=auto
==============================================================================
--- cxf/trunk/systests/transports/src/test/java/org/apache/cxf/systest/soap_udp/SoapUDPTest.java (added)
+++ cxf/trunk/systests/transports/src/test/java/org/apache/cxf/systest/soap_udp/SoapUDPTest.java Thu Aug 16 14:14:16 2012
@@ -0,0 +1,66 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.cxf.systest.soap_udp;
+
+import javax.xml.namespace.QName;
+import javax.xml.ws.Service;
+
+import org.apache.cxf.BusFactory;
+import org.apache.cxf.feature.LoggingFeature;
+import org.apache.cxf.testutil.common.AbstractBusClientServerTestBase;
+import org.apache.hello_world_soap_http.Greeter;
+
+import org.junit.BeforeClass;
+import org.junit.Test;
+
+public class SoapUDPTest extends AbstractBusClientServerTestBase {
+ private static final String PORT = Server.PORT;
+ private final QName serviceName = new QName("http://apache.org/hello_world_soap_http",
+ "SOAPService");
+ private final QName localPortName = new QName("http://apache.org/hello_world_soap_http",
+ "UDPPortName");
+
+
+ @BeforeClass
+ public static void startServers() throws Exception {
+ staticBus = BusFactory.getDefaultBus();
+ new LoggingFeature().initialize(staticBus);
+ BusFactory.setThreadDefaultBus(staticBus);
+ assertTrue("server did not launch correctly", launchServer(Server.class, true));
+ }
+
+ @Test
+ public void testSOAPUDP() {
+ BusFactory.setThreadDefaultBus(staticBus);
+ Service service = Service.create(serviceName);
+ service.addPort(localPortName, "http://schemas.xmlsoap.org/soap/",
+ "soap.udp://localhost:" + PORT);
+ Greeter greeter = service.getPort(localPortName, Greeter.class);
+
+ String reply = greeter.greetMe("test");
+ assertEquals("Hello test", reply);
+ reply = greeter.sayHi();
+ assertNotNull("no response received from service", reply);
+ assertEquals("Bonjour", reply);
+ }
+
+
+
+}