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 2006/11/07 03:06:31 UTC
svn commit: r471966 [1/2] - in /incubator/cxf/trunk:
api/src/main/java/org/apache/cxf/endpoint/
api/src/main/java/org/apache/cxf/message/
api/src/main/java/org/apache/cxf/service/model/
common/common/src/main/java/org/apache/cxf/configuration/spring/ c...
Author: dandiep
Date: Mon Nov 6 18:06:28 2006
New Revision: 471966
URL: http://svn.apache.org/viewvc?view=rev&rev=471966
Log:
- Refactor servlet support to:
- include a ServletController which can be delegated to
- Handle multiple endpoints
- handle a custom configuration location
- Added unit tests for servlet:
- One which registered a service via the API
- One which registered a service via cxf-servlet.xml
- Onwe which had a pre-existing spring application context (this
required explicit mention of which cxf-extension files we want)
- Renamed the cxf-extension files to cxf-extension-MODULE so spring
users can selectively import. Also improved the BusApplicationContext
so it could handle wild card imports.
- Fixed SOAP WSDL generation to include the <soap:body/>
- Allow overriding of the default content type for the HTTP binding.
This is needed for JSON support. It'd be nice if we could extend
this to SOAP as well...
- A servlet can't be a conduit initiator, so remove references to it
being one.
Added:
incubator/cxf/trunk/rt/bindings/soap/src/main/resources/META-INF/cxf/cxf-extension-soap.xml
- copied unchanged from r469641, incubator/cxf/trunk/rt/bindings/soap/src/main/resources/META-INF/cxf/cxf-extension.xml
incubator/cxf/trunk/rt/bindings/xml/src/main/resources/META-INF/cxf/cxf-extension-xml.xml
- copied unchanged from r469641, incubator/cxf/trunk/rt/bindings/xml/src/main/resources/META-INF/cxf/cxf-extension.xml
incubator/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/servlet/ServletController.java (with props)
incubator/cxf/trunk/rt/frontend/jaxws/src/main/resources/META-INF/cxf/cxf-servlet.xml (with props)
incubator/cxf/trunk/rt/frontend/jaxws/src/test/java/org/apache/cxf/jaxws/servlet/
incubator/cxf/trunk/rt/frontend/jaxws/src/test/java/org/apache/cxf/jaxws/servlet/AbstractServletTest.java (with props)
incubator/cxf/trunk/rt/frontend/jaxws/src/test/java/org/apache/cxf/jaxws/servlet/CXFServletTest.java (with props)
incubator/cxf/trunk/rt/frontend/jaxws/src/test/java/org/apache/cxf/jaxws/servlet/ExternalServicesServletTest.java (with props)
incubator/cxf/trunk/rt/frontend/jaxws/src/test/java/org/apache/cxf/jaxws/servlet/SpringServletTest.java (with props)
incubator/cxf/trunk/rt/frontend/jaxws/src/test/java/org/apache/cxf/jaxws/servlet/cxf-servlet.xml (with props)
incubator/cxf/trunk/rt/frontend/jaxws/src/test/java/org/apache/cxf/jaxws/servlet/spring.xml (with props)
incubator/cxf/trunk/rt/frontend/jaxws/src/test/java/org/apache/cxf/jaxws/servlet/web-external.xml (with props)
incubator/cxf/trunk/rt/frontend/jaxws/src/test/java/org/apache/cxf/jaxws/servlet/web-spring.xml (with props)
incubator/cxf/trunk/rt/frontend/jaxws/src/test/java/org/apache/cxf/jaxws/servlet/web.xml (with props)
incubator/cxf/trunk/rt/management/src/main/resources/META-INF/cxf/cxf-extension-management.xml
- copied unchanged from r469641, incubator/cxf/trunk/rt/management/src/main/resources/META-INF/cxf/cxf-extension.xml
incubator/cxf/trunk/rt/transports/http/src/main/resources/META-INF/cxf/cxf-extension-http.xml
- copied, changed from r469641, incubator/cxf/trunk/rt/transports/http/src/main/resources/META-INF/cxf/cxf-extension.xml
incubator/cxf/trunk/rt/transports/jms/src/main/resources/META-INF/cxf/cxf-extension-jms.xml
- copied unchanged from r469641, incubator/cxf/trunk/rt/transports/jms/src/main/resources/META-INF/cxf/cxf-extension.xml
incubator/cxf/trunk/rt/transports/local/src/main/resources/META-INF/DISCLAIMER (with props)
incubator/cxf/trunk/rt/transports/local/src/main/resources/META-INF/LICENSE (with props)
incubator/cxf/trunk/rt/transports/local/src/main/resources/META-INF/NOTICE (with props)
incubator/cxf/trunk/rt/transports/local/src/main/resources/META-INF/cxf/
incubator/cxf/trunk/rt/transports/local/src/main/resources/META-INF/cxf/cxf-extension-local.xml (with props)
incubator/cxf/trunk/rt/ws/rm/src/main/resources/META-INF/cxf/cxf-extension-rm.xml
- copied unchanged from r471922, incubator/cxf/trunk/rt/ws/rm/src/main/resources/META-INF/cxf/cxf-extension.xml
incubator/cxf/trunk/testutils/src/main/java/org/apache/hello_world_doc_lit/
incubator/cxf/trunk/testutils/src/main/java/org/apache/hello_world_doc_lit/GreeterImplDoc.java (with props)
Removed:
incubator/cxf/trunk/rt/bindings/soap/src/main/resources/META-INF/cxf/cxf-extension.xml
incubator/cxf/trunk/rt/bindings/xml/src/main/resources/META-INF/cxf/cxf-extension.xml
incubator/cxf/trunk/rt/frontend/jaxws/src/main/resources/META-INF/cxf/cxf-extension.xml
incubator/cxf/trunk/rt/management/src/main/resources/META-INF/cxf/cxf-extension.xml
incubator/cxf/trunk/rt/transports/http/src/main/resources/META-INF/cxf/cxf-extension.xml
incubator/cxf/trunk/rt/transports/jms/src/main/resources/META-INF/cxf/cxf-extension.xml
incubator/cxf/trunk/rt/ws/rm/src/main/resources/META-INF/cxf/cxf-extension.xml
Modified:
incubator/cxf/trunk/api/src/main/java/org/apache/cxf/endpoint/Server.java
incubator/cxf/trunk/api/src/main/java/org/apache/cxf/message/Message.java
incubator/cxf/trunk/api/src/main/java/org/apache/cxf/message/MessageImpl.java
incubator/cxf/trunk/api/src/main/java/org/apache/cxf/service/model/EndpointInfo.java
incubator/cxf/trunk/common/common/src/main/java/org/apache/cxf/configuration/spring/JaxbClassPathXmlApplicationContext.java
incubator/cxf/trunk/common/common/src/main/java/org/apache/cxf/configuration/spring/SpringBeanMap.java
incubator/cxf/trunk/common/common/src/main/java/org/apache/cxf/staxutils/StaxUtils.java
incubator/cxf/trunk/rt/bindings/http/src/main/java/org/apache/cxf/binding/http/ContentTypeOutInterceptor.java
incubator/cxf/trunk/rt/bindings/http/src/main/java/org/apache/cxf/binding/http/DispatchInterceptor.java
incubator/cxf/trunk/rt/bindings/http/src/main/java/org/apache/cxf/binding/http/HttpBindingFactory.java
incubator/cxf/trunk/rt/bindings/http/src/main/java/org/apache/cxf/binding/http/URIParameterInterceptor.java
incubator/cxf/trunk/rt/bindings/http/src/test/java/org/apache/cxf/binding/http/bare/BareServiceTest.java
incubator/cxf/trunk/rt/bindings/soap/src/main/java/org/apache/cxf/binding/soap/SoapBindingInfoFactoryBean.java
incubator/cxf/trunk/rt/bindings/soap/src/main/java/org/apache/cxf/binding/soap/SoapDestinationFactory.java
incubator/cxf/trunk/rt/bindings/soap/src/main/java/org/apache/cxf/binding/soap/interceptor/AttachmentOutInterceptor.java
incubator/cxf/trunk/rt/core/src/main/java/org/apache/cxf/bus/spring/BusApplicationContext.java
incubator/cxf/trunk/rt/core/src/main/java/org/apache/cxf/bus/spring/SpringBusFactory.java
incubator/cxf/trunk/rt/core/src/main/java/org/apache/cxf/interceptor/StaxInInterceptor.java
incubator/cxf/trunk/rt/core/src/main/java/org/apache/cxf/interceptor/StaxOutInterceptor.java
incubator/cxf/trunk/rt/frontend/jaxws/pom.xml
incubator/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/servlet/CXFServlet.java
incubator/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/servlet/ServletDestination.java
incubator/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/servlet/ServletTransportFactory.java
incubator/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/support/JaxWsServiceConfiguration.java
incubator/cxf/trunk/rt/frontend/jaxws/src/test/java/org/apache/cxf/jaxws/JaxWsServerFactoryBeanTest.java
incubator/cxf/trunk/rt/frontend/simple/src/main/java/org/apache/cxf/service/factory/ReflectionServiceFactoryBean.java
incubator/cxf/trunk/rt/transports/local/src/main/java/org/apache/cxf/transport/local/LocalTransportFactory.java
incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/bus/SpringBusFactoryTest.java
Modified: incubator/cxf/trunk/api/src/main/java/org/apache/cxf/endpoint/Server.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/api/src/main/java/org/apache/cxf/endpoint/Server.java?view=diff&rev=471966&r1=471965&r2=471966
==============================================================================
--- incubator/cxf/trunk/api/src/main/java/org/apache/cxf/endpoint/Server.java (original)
+++ incubator/cxf/trunk/api/src/main/java/org/apache/cxf/endpoint/Server.java Mon Nov 6 18:06:28 2006
@@ -19,9 +19,13 @@
package org.apache.cxf.endpoint;
+import org.apache.cxf.transport.Destination;
+
public interface Server {
void start();
void stop();
+
+ Destination getDestination();
}
Modified: incubator/cxf/trunk/api/src/main/java/org/apache/cxf/message/Message.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/api/src/main/java/org/apache/cxf/message/Message.java?view=diff&rev=471966&r1=471965&r2=471966
==============================================================================
--- incubator/cxf/trunk/api/src/main/java/org/apache/cxf/message/Message.java (original)
+++ incubator/cxf/trunk/api/src/main/java/org/apache/cxf/message/Message.java Mon Nov 6 18:06:28 2006
@@ -49,6 +49,7 @@
String SCHEMA_VALIDATION_ENABLED = Message.class.getCanonicalName() + ".schemaValidationEnabled";
String CONTENT_TYPE = Message.class.getName() + ".ContentType";
String BASE_PATH = Message.class.getName() + ".BASE_PATH";
+ String ENCODING = Message.class.getName() + ".ENCODING";
String FIXED_PARAMETER_ORDER = Message.class.getName() + "FIXED_PARAMETER_ORDER";
String getId();
Modified: incubator/cxf/trunk/api/src/main/java/org/apache/cxf/message/MessageImpl.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/api/src/main/java/org/apache/cxf/message/MessageImpl.java?view=diff&rev=471966&r1=471965&r2=471966
==============================================================================
--- incubator/cxf/trunk/api/src/main/java/org/apache/cxf/message/MessageImpl.java (original)
+++ incubator/cxf/trunk/api/src/main/java/org/apache/cxf/message/MessageImpl.java Mon Nov 6 18:06:28 2006
@@ -129,6 +129,10 @@
Endpoint ep = getExchange().get(Endpoint.class);
if (ep != null) {
val = ep.get(key);
+
+ if (val == null) {
+ val = ep.getEndpointInfo().getProperty(key);
+ }
}
}
Modified: incubator/cxf/trunk/api/src/main/java/org/apache/cxf/service/model/EndpointInfo.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/api/src/main/java/org/apache/cxf/service/model/EndpointInfo.java?view=diff&rev=471966&r1=471965&r2=471966
==============================================================================
--- incubator/cxf/trunk/api/src/main/java/org/apache/cxf/service/model/EndpointInfo.java (original)
+++ incubator/cxf/trunk/api/src/main/java/org/apache/cxf/service/model/EndpointInfo.java Mon Nov 6 18:06:28 2006
@@ -22,11 +22,14 @@
import javax.xml.namespace.QName;
public class EndpointInfo extends AbstractPropertiesHolder {
- final String transportId;
+ String transportId;
ServiceInfo service;
BindingInfo binding;
QName name;
String address;
+
+ public EndpointInfo() {
+ }
public EndpointInfo(ServiceInfo serv, String ns) {
transportId = ns;
Modified: incubator/cxf/trunk/common/common/src/main/java/org/apache/cxf/configuration/spring/JaxbClassPathXmlApplicationContext.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/common/common/src/main/java/org/apache/cxf/configuration/spring/JaxbClassPathXmlApplicationContext.java?view=diff&rev=471966&r1=471965&r2=471966
==============================================================================
--- incubator/cxf/trunk/common/common/src/main/java/org/apache/cxf/configuration/spring/JaxbClassPathXmlApplicationContext.java (original)
+++ incubator/cxf/trunk/common/common/src/main/java/org/apache/cxf/configuration/spring/JaxbClassPathXmlApplicationContext.java Mon Nov 6 18:06:28 2006
@@ -32,6 +32,7 @@
import org.apache.cxf.configuration.Configurer;
import org.springframework.beans.BeansException;
import org.springframework.beans.factory.xml.XmlBeanDefinitionReader;
+import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.core.io.ClassPathResource;
import org.springframework.core.io.Resource;
@@ -47,9 +48,14 @@
public JaxbClassPathXmlApplicationContext(String location) throws BeansException {
super(new String[]{location});
}
-
+
public JaxbClassPathXmlApplicationContext(String[] locations) throws BeansException {
- super(locations);
+ this(locations, null);
+ }
+
+ public JaxbClassPathXmlApplicationContext(String[] locations, ApplicationContext parent)
+ throws BeansException {
+ super(locations, parent);
cfgFileLocations = locations;
}
Modified: incubator/cxf/trunk/common/common/src/main/java/org/apache/cxf/configuration/spring/SpringBeanMap.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/common/common/src/main/java/org/apache/cxf/configuration/spring/SpringBeanMap.java?view=diff&rev=471966&r1=471965&r2=471966
==============================================================================
--- incubator/cxf/trunk/common/common/src/main/java/org/apache/cxf/configuration/spring/SpringBeanMap.java (original)
+++ incubator/cxf/trunk/common/common/src/main/java/org/apache/cxf/configuration/spring/SpringBeanMap.java Mon Nov 6 18:06:28 2006
@@ -73,7 +73,8 @@
continue;
}
- if (!type.isAssignableFrom(ctxt.getType(beanNames[i]))) {
+ Class beanType = ctxt.getType(beanNames[i]);
+ if (beanType == null || !type.isAssignableFrom(beanType)) {
continue;
}
Modified: incubator/cxf/trunk/common/common/src/main/java/org/apache/cxf/staxutils/StaxUtils.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/common/common/src/main/java/org/apache/cxf/staxutils/StaxUtils.java?view=diff&rev=471966&r1=471965&r2=471966
==============================================================================
--- incubator/cxf/trunk/common/common/src/main/java/org/apache/cxf/staxutils/StaxUtils.java (original)
+++ incubator/cxf/trunk/common/common/src/main/java/org/apache/cxf/staxutils/StaxUtils.java Mon Nov 6 18:06:28 2006
@@ -613,7 +613,6 @@
* @return
*/
public static XMLStreamReader createXMLStreamReader(InputStream in) {
-
try {
return getXMLInputFactory().createXMLStreamReader(in);
} catch (XMLStreamException e) {
Modified: incubator/cxf/trunk/rt/bindings/http/src/main/java/org/apache/cxf/binding/http/ContentTypeOutInterceptor.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/rt/bindings/http/src/main/java/org/apache/cxf/binding/http/ContentTypeOutInterceptor.java?view=diff&rev=471966&r1=471965&r2=471966
==============================================================================
--- incubator/cxf/trunk/rt/bindings/http/src/main/java/org/apache/cxf/binding/http/ContentTypeOutInterceptor.java (original)
+++ incubator/cxf/trunk/rt/bindings/http/src/main/java/org/apache/cxf/binding/http/ContentTypeOutInterceptor.java Mon Nov 6 18:06:28 2006
@@ -42,8 +42,12 @@
headers = new HashMap<String, List<String>>();
message.put(Message.PROTOCOL_HEADERS, headers);
}
+ String ct = (String) message.getContextualProperty("Content-Type");
+ if (ct == null) {
+ ct = "application/xml";
+ }
List<String> contentType = new ArrayList<String>();
- contentType.add("application/xml");
+ contentType.add(ct);
headers.put("Content-Type", contentType);
}
Modified: incubator/cxf/trunk/rt/bindings/http/src/main/java/org/apache/cxf/binding/http/DispatchInterceptor.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/rt/bindings/http/src/main/java/org/apache/cxf/binding/http/DispatchInterceptor.java?view=diff&rev=471966&r1=471965&r2=471966
==============================================================================
--- incubator/cxf/trunk/rt/bindings/http/src/main/java/org/apache/cxf/binding/http/DispatchInterceptor.java (original)
+++ incubator/cxf/trunk/rt/bindings/http/src/main/java/org/apache/cxf/binding/http/DispatchInterceptor.java Mon Nov 6 18:06:28 2006
@@ -22,6 +22,7 @@
import java.util.logging.Logger;
import org.apache.cxf.common.i18n.BundleUtils;
+import org.apache.cxf.endpoint.Endpoint;
import org.apache.cxf.interceptor.Fault;
import org.apache.cxf.message.Message;
import org.apache.cxf.phase.AbstractPhaseInterceptor;
@@ -30,7 +31,7 @@
import org.apache.cxf.service.model.BindingOperationInfo;
public class DispatchInterceptor extends AbstractPhaseInterceptor<Message> {
-
+ public static final String RELATIVE_PATH = "relative.path";
private static final Logger LOG = Logger.getLogger(DispatchInterceptor.class.getName());
private static final ResourceBundle BUNDLE = BundleUtils.getBundle(DispatchInterceptor.class);
@@ -42,6 +43,24 @@
public void handleMessage(Message message) {
String path = (String)message.get(Message.PATH_INFO);
String method = (String)message.get(Message.HTTP_REQUEST_METHOD);
+
+ String address = message.getExchange().get(Endpoint.class).getEndpointInfo().getAddress();
+ int idx = address.indexOf('/', 7);
+ if (idx != -1) {
+ address = address.substring(idx);
+ }
+
+ if (path.startsWith(address)) {
+ path = path.substring(address.length());
+ if (!path.startsWith("/")) {
+ path = "/" + path;
+ }
+ }
+
+ if (path.endsWith("/")) {
+ path = path.substring(0, path.length() - 1);
+ }
+ message.put(RELATIVE_PATH, path);
LOG.info("Invoking " + method + " on " + path);
URIMapper mapper = (URIMapper)message.getExchange().get(Service.class).get(URIMapper.class.getName());
Modified: incubator/cxf/trunk/rt/bindings/http/src/main/java/org/apache/cxf/binding/http/HttpBindingFactory.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/rt/bindings/http/src/main/java/org/apache/cxf/binding/http/HttpBindingFactory.java?view=diff&rev=471966&r1=471965&r2=471966
==============================================================================
--- incubator/cxf/trunk/rt/bindings/http/src/main/java/org/apache/cxf/binding/http/HttpBindingFactory.java (original)
+++ incubator/cxf/trunk/rt/bindings/http/src/main/java/org/apache/cxf/binding/http/HttpBindingFactory.java Mon Nov 6 18:06:28 2006
@@ -18,8 +18,15 @@
*/
package org.apache.cxf.binding.http;
+import java.util.Collection;
+
+import javax.annotation.PostConstruct;
+import javax.annotation.Resource;
+
+import org.apache.cxf.Bus;
import org.apache.cxf.binding.AbstractBindingFactory;
import org.apache.cxf.binding.Binding;
+import org.apache.cxf.binding.BindingFactoryManager;
import org.apache.cxf.binding.xml.XMLBinding;
import org.apache.cxf.binding.xml.interceptor.XMLMessageOutInterceptor;
import org.apache.cxf.interceptor.StaxOutInterceptor;
@@ -29,6 +36,31 @@
public class HttpBindingFactory extends AbstractBindingFactory {
public static final String HTTP_BINDING_ID = "http://apache.org/cxf/binding/http";
+ private Bus bus;
+ private Collection<String> activationNamespaces;
+
+ @Resource
+ public void setBus(Bus b) {
+ bus = b;
+ }
+
+ @Resource
+ public void setActivationNamespaces(Collection<String> ans) {
+ activationNamespaces = ans;
+ }
+
+ @PostConstruct
+ void register() {
+ if (null == bus) {
+ return;
+ }
+ BindingFactoryManager bfm = bus.getExtension(BindingFactoryManager.class);
+ if (null != bfm) {
+ for (String ns : activationNamespaces) {
+ bfm.registerBindingFactory(ns, this);
+ }
+ }
+ }
public Binding createBinding(BindingInfo bi) {
XMLBinding binding = new XMLBinding();
Modified: incubator/cxf/trunk/rt/bindings/http/src/main/java/org/apache/cxf/binding/http/URIParameterInterceptor.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/rt/bindings/http/src/main/java/org/apache/cxf/binding/http/URIParameterInterceptor.java?view=diff&rev=471966&r1=471965&r2=471966
==============================================================================
--- incubator/cxf/trunk/rt/bindings/http/src/main/java/org/apache/cxf/binding/http/URIParameterInterceptor.java (original)
+++ incubator/cxf/trunk/rt/bindings/http/src/main/java/org/apache/cxf/binding/http/URIParameterInterceptor.java Mon Nov 6 18:06:28 2006
@@ -24,6 +24,7 @@
import java.util.ResourceBundle;
import java.util.logging.Logger;
+import javax.xml.stream.XMLInputFactory;
import javax.xml.stream.XMLStreamException;
import javax.xml.stream.XMLStreamReader;
import javax.xml.transform.dom.DOMSource;
@@ -34,6 +35,7 @@
import org.apache.cxf.binding.xml.interceptor.XMLMessageInInterceptor;
import org.apache.cxf.common.i18n.BundleUtils;
import org.apache.cxf.interceptor.Fault;
+import org.apache.cxf.interceptor.StaxInInterceptor;
import org.apache.cxf.message.Message;
import org.apache.cxf.phase.AbstractPhaseInterceptor;
import org.apache.cxf.phase.Phase;
@@ -54,7 +56,7 @@
}
public void handleMessage(Message message) {
- String path = (String)message.get(Message.PATH_INFO);
+ String path = (String)message.get(DispatchInterceptor.RELATIVE_PATH);
String method = (String)message.get(Message.HTTP_REQUEST_METHOD);
String contentType = (String)message.get(Message.CONTENT_TYPE);
@@ -103,8 +105,10 @@
// incoming doc
Document doc;
if ("POST".equals(method) || "PUT".equals(method)) {
- XMLStreamReader reader = StaxUtils.createXMLStreamReader(message.getContent(InputStream.class));
+ XMLInputFactory inputFactory = StaxInInterceptor.getXMLInputFactory(message);
try {
+ XMLStreamReader reader =
+ inputFactory.createXMLStreamReader(message.getContent(InputStream.class));
doc = StaxUtils.read(reader);
} catch (XMLStreamException e) {
throw new Fault(e);
Modified: incubator/cxf/trunk/rt/bindings/http/src/test/java/org/apache/cxf/binding/http/bare/BareServiceTest.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/rt/bindings/http/src/test/java/org/apache/cxf/binding/http/bare/BareServiceTest.java?view=diff&rev=471966&r1=471965&r2=471966
==============================================================================
--- incubator/cxf/trunk/rt/bindings/http/src/test/java/org/apache/cxf/binding/http/bare/BareServiceTest.java (original)
+++ incubator/cxf/trunk/rt/bindings/http/src/test/java/org/apache/cxf/binding/http/bare/BareServiceTest.java Mon Nov 6 18:06:28 2006
@@ -42,7 +42,7 @@
sf.setServiceClass(CustomerService.class);
sf.getServiceFactory().setWrapped(false);
sf.setBindingFactory(new HttpBindingInfoFactoryBean());
- sf.setAddress("http://localhost:9001/");
+ sf.setAddress("http://localhost:9001/foo/");
Map<String, Object> props = new HashMap<String, Object>();
props.put("contextMatchStrategy", "stem");
@@ -71,7 +71,7 @@
// TEST POST/GETs
- Document res = get("http://localhost:9001/customers");
+ Document res = get("http://localhost:9001/foo/customers");
assertNotNull(res);
addNamespace("c", "http://cxf.apache.org/jra");
@@ -79,7 +79,7 @@
assertValid("/c:customers/c:customer/c:id[text()='123']", res);
assertValid("/c:customers/c:customer/c:name[text()='Dan Diephouse']", res);
- res = get("http://localhost:9001/customers/123");
+ res = get("http://localhost:9001/foo/customers/123");
assertNotNull(res);
addNamespace("c", "http://cxf.apache.org/jra");
@@ -87,18 +87,18 @@
assertValid("/c:customer/c:id[text()='123']", res);
assertValid("/c:customer/c:name[text()='Dan Diephouse']", res);
- res = put("http://localhost:9001/customers/123", "update.xml");
+ res = put("http://localhost:9001/foo/customers/123", "update.xml");
assertNotNull(res);
assertValid("/c:updateCustomer", res);
- res = post("http://localhost:9001/customers", "add.xml");
+ res = post("http://localhost:9001/foo/customers", "add.xml");
assertNotNull(res);
assertValid("/c:addCustomer", res);
// Get the updated document
- res = get("http://localhost:9001/customers/123");
+ res = get("http://localhost:9001/foo/customers/123");
assertNotNull(res);
assertValid("/c:customer", res);
Modified: incubator/cxf/trunk/rt/bindings/soap/src/main/java/org/apache/cxf/binding/soap/SoapBindingInfoFactoryBean.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/rt/bindings/soap/src/main/java/org/apache/cxf/binding/soap/SoapBindingInfoFactoryBean.java?view=diff&rev=471966&r1=471965&r2=471966
==============================================================================
--- incubator/cxf/trunk/rt/bindings/soap/src/main/java/org/apache/cxf/binding/soap/SoapBindingInfoFactoryBean.java (original)
+++ incubator/cxf/trunk/rt/bindings/soap/src/main/java/org/apache/cxf/binding/soap/SoapBindingInfoFactoryBean.java Mon Nov 6 18:06:28 2006
@@ -32,7 +32,7 @@
private SoapVersion soapVersion = Soap11.getInstance();
private String style = "document";
private String use;
- private String transportURI = "http://schemas.xmlsoap.org/wsdl/soap/http";
+ private String transportURI = "http://schemas.xmlsoap.org/soap/http";
@Override
public BindingInfo create() {
Modified: incubator/cxf/trunk/rt/bindings/soap/src/main/java/org/apache/cxf/binding/soap/SoapDestinationFactory.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/rt/bindings/soap/src/main/java/org/apache/cxf/binding/soap/SoapDestinationFactory.java?view=diff&rev=471966&r1=471965&r2=471966
==============================================================================
--- incubator/cxf/trunk/rt/bindings/soap/src/main/java/org/apache/cxf/binding/soap/SoapDestinationFactory.java (original)
+++ incubator/cxf/trunk/rt/bindings/soap/src/main/java/org/apache/cxf/binding/soap/SoapDestinationFactory.java Mon Nov 6 18:06:28 2006
@@ -29,6 +29,7 @@
import com.ibm.wsdl.extensions.soap.SOAPAddressImpl;
import com.ibm.wsdl.extensions.soap.SOAPBindingImpl;
+import com.ibm.wsdl.extensions.soap.SOAPBodyImpl;
import com.ibm.wsdl.extensions.soap.SOAPOperationImpl;
import org.apache.cxf.Bus;
@@ -97,6 +98,18 @@
op.setStyle(soi.getStyle());
b.addExtensor(op);
+
+ if (b.getInput() != null) {
+ SOAPBodyImpl body = new SOAPBodyImpl();
+ body.setUse("literal");
+ b.getInput().addExtensor(body);
+ }
+
+ if (b.getOutput() != null) {
+ SOAPBodyImpl body = new SOAPBodyImpl();
+ body.setUse("literal");
+ b.getOutput().addExtensor(body);
+ }
}
}
Modified: incubator/cxf/trunk/rt/bindings/soap/src/main/java/org/apache/cxf/binding/soap/interceptor/AttachmentOutInterceptor.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/rt/bindings/soap/src/main/java/org/apache/cxf/binding/soap/interceptor/AttachmentOutInterceptor.java?view=diff&rev=471966&r1=471965&r2=471966
==============================================================================
--- incubator/cxf/trunk/rt/bindings/soap/src/main/java/org/apache/cxf/binding/soap/interceptor/AttachmentOutInterceptor.java (original)
+++ incubator/cxf/trunk/rt/bindings/soap/src/main/java/org/apache/cxf/binding/soap/interceptor/AttachmentOutInterceptor.java Mon Nov 6 18:06:28 2006
@@ -36,7 +36,7 @@
public class AttachmentOutInterceptor extends AbstractSoapInterceptor {
- private static final ResourceBundle BUNDLE = BundleUtils.getBundle(SoapOutInterceptor.class);
+ private static final ResourceBundle BUNDLE = BundleUtils.getBundle(AttachmentOutInterceptor.class);
public AttachmentOutInterceptor() {
super();
Modified: incubator/cxf/trunk/rt/core/src/main/java/org/apache/cxf/bus/spring/BusApplicationContext.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/rt/core/src/main/java/org/apache/cxf/bus/spring/BusApplicationContext.java?view=diff&rev=471966&r1=471965&r2=471966
==============================================================================
--- incubator/cxf/trunk/rt/core/src/main/java/org/apache/cxf/bus/spring/BusApplicationContext.java (original)
+++ incubator/cxf/trunk/rt/core/src/main/java/org/apache/cxf/bus/spring/BusApplicationContext.java Mon Nov 6 18:06:28 2006
@@ -21,9 +21,8 @@
import java.io.IOException;
import java.net.MalformedURLException;
-import java.net.URL;
import java.util.ArrayList;
-import java.util.Enumeration;
+import java.util.Collections;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;
@@ -32,26 +31,33 @@
import org.apache.cxf.common.logging.LogUtils;
import org.apache.cxf.configuration.Configurer;
import org.apache.cxf.configuration.spring.JaxbClassPathXmlApplicationContext;
+import org.springframework.context.ApplicationContext;
import org.springframework.core.io.ClassPathResource;
import org.springframework.core.io.Resource;
import org.springframework.core.io.UrlResource;
+import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
public class BusApplicationContext extends JaxbClassPathXmlApplicationContext {
private static final String DEFAULT_CXF_CFG_FILE = "META-INF/cxf/cxf.xml";
- private static final String DEFAULT_CXF_EXT_CFG_FILE = "META-INF/cxf/cxf-extension.xml";
- private static final String CXF_PROPERTY_EDITORS_CFG_FILE = "META-INF/cxf/cxf-property-editors.xml";
+ private static final String DEFAULT_CXF_EXT_CFG_FILE = "classpath*:META-INF/cxf/cxf-extension-*.xml";
+ private static final String CXF_PROPERTY_EDITORS_CFG_FILE =
+ "classpath*:META-INF/cxf/cxf-property-editors.xml";
private static final Logger LOG = LogUtils.getL7dLogger(BusApplicationContext.class);
private boolean includeDefaults;
private String cfgFile;
BusApplicationContext(String cf, boolean include) {
- super((String[])null);
+ this(cf, include, null);
+ }
+
+ BusApplicationContext(String cf, boolean include, ApplicationContext parent) {
+ super((String[])null, parent);
cfgFile = cf;
includeDefaults = include;
}
-
+
@Override
protected Resource[] getConfigResources() {
@@ -59,24 +65,12 @@
if (includeDefaults) {
try {
- Enumeration<URL> urls = Thread.currentThread().getContextClassLoader()
- .getResources(DEFAULT_CXF_CFG_FILE);
- while (urls.hasMoreElements()) {
- resources.add(new UrlResource(urls.nextElement()));
- }
-
- urls = Thread.currentThread().getContextClassLoader()
- .getResources(DEFAULT_CXF_EXT_CFG_FILE);
- while (urls.hasMoreElements()) {
- resources.add(new UrlResource(urls.nextElement()));
- }
-
- urls = Thread.currentThread().getContextClassLoader()
- .getResources(CXF_PROPERTY_EDITORS_CFG_FILE);
- while (urls.hasMoreElements()) {
- resources.add(new UrlResource(urls.nextElement()));
- }
+ PathMatchingResourcePatternResolver resolver = new PathMatchingResourcePatternResolver(Thread
+ .currentThread().getContextClassLoader());
+ Collections.addAll(resources, resolver.getResources(DEFAULT_CXF_CFG_FILE));
+ Collections.addAll(resources, resolver.getResources(DEFAULT_CXF_EXT_CFG_FILE));
+ Collections.addAll(resources, resolver.getResources(CXF_PROPERTY_EDITORS_CFG_FILE));
} catch (IOException ex) {
// ignore
}
Modified: incubator/cxf/trunk/rt/core/src/main/java/org/apache/cxf/bus/spring/SpringBusFactory.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/rt/core/src/main/java/org/apache/cxf/bus/spring/SpringBusFactory.java?view=diff&rev=471966&r1=471965&r2=471966
==============================================================================
--- incubator/cxf/trunk/rt/core/src/main/java/org/apache/cxf/bus/spring/SpringBusFactory.java (original)
+++ incubator/cxf/trunk/rt/core/src/main/java/org/apache/cxf/bus/spring/SpringBusFactory.java Mon Nov 6 18:06:28 2006
@@ -28,6 +28,7 @@
import org.apache.cxf.configuration.Configurer;
import org.apache.cxf.configuration.spring.ConfigurerImpl;
import org.springframework.beans.BeansException;
+import org.springframework.context.ApplicationContext;
public class SpringBusFactory implements BusFactory {
@@ -37,6 +38,17 @@
private static Bus defaultBus;
+ private ApplicationContext context;
+
+ public SpringBusFactory() {
+ super();
+ }
+
+ public SpringBusFactory(ApplicationContext context) {
+ super();
+ this.context = context;
+ }
+
public synchronized Bus getDefaultBus() {
if (null == defaultBus) {
defaultBus = createBus();
@@ -53,14 +65,18 @@
}
public Bus createBus(String cfgFile) {
- return createBus(cfgFile, true);
+ boolean includeDefaults = true;
+ if (context != null) {
+ includeDefaults = !context.containsBean("cxf");
+ }
+
+ return createBus(cfgFile, includeDefaults);
}
- public Bus createBus(String cfgFile, boolean includeDefaults) {
-
+ public Bus createBus(String cfgFile, boolean includeDefaults) {
BusApplicationContext bac = null;
try {
- bac = new BusApplicationContext(cfgFile, includeDefaults);
+ bac = new BusApplicationContext(cfgFile, includeDefaults, context);
} catch (BeansException ex) {
LogUtils.log(LOG, Level.WARNING, "APP_CONTEXT_CREATION_FAILED_MSG", ex, (Object[])null);
}
Modified: incubator/cxf/trunk/rt/core/src/main/java/org/apache/cxf/interceptor/StaxInInterceptor.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/rt/core/src/main/java/org/apache/cxf/interceptor/StaxInInterceptor.java?view=diff&rev=471966&r1=471965&r2=471966
==============================================================================
--- incubator/cxf/trunk/rt/core/src/main/java/org/apache/cxf/interceptor/StaxInInterceptor.java (original)
+++ incubator/cxf/trunk/rt/core/src/main/java/org/apache/cxf/interceptor/StaxInInterceptor.java Mon Nov 6 18:06:28 2006
@@ -58,8 +58,8 @@
InputStream is = message.getContent(InputStream.class);
assert is != null;
- // TODO: where does encoding constant go?
- String encoding = (String)message.get("Encoding");
+ String encoding = (String)message.get(Message.ENCODING);
+
XMLStreamReader reader;
try {
reader = getXMLInputFactory(message).createXMLStreamReader(is, encoding);
Modified: incubator/cxf/trunk/rt/core/src/main/java/org/apache/cxf/interceptor/StaxOutInterceptor.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/rt/core/src/main/java/org/apache/cxf/interceptor/StaxOutInterceptor.java?view=diff&rev=471966&r1=471965&r2=471966
==============================================================================
--- incubator/cxf/trunk/rt/core/src/main/java/org/apache/cxf/interceptor/StaxOutInterceptor.java (original)
+++ incubator/cxf/trunk/rt/core/src/main/java/org/apache/cxf/interceptor/StaxOutInterceptor.java Mon Nov 6 18:06:28 2006
@@ -56,7 +56,17 @@
// assert os != null;
// TODO: where does encoding constant go?
- String encoding = (String)message.get("Encoding");
+ String encoding = (String)message.get(Message.ENCODING);
+ if (encoding == null && message.getExchange().getInMessage() != null) {
+ encoding = (String) message.getExchange().getInMessage().get(Message.ENCODING);
+ message.put(Message.ENCODING, encoding);
+ }
+
+ if (encoding == null) {
+ encoding = "UTF-8";
+ message.put(Message.ENCODING, encoding);
+ }
+
XMLStreamWriter writer;
try {
writer = getXMLOutputFactory(message).createXMLStreamWriter(os, encoding);
Modified: incubator/cxf/trunk/rt/frontend/jaxws/pom.xml
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/rt/frontend/jaxws/pom.xml?view=diff&rev=471966&r1=471965&r2=471966
==============================================================================
--- incubator/cxf/trunk/rt/frontend/jaxws/pom.xml (original)
+++ incubator/cxf/trunk/rt/frontend/jaxws/pom.xml Mon Nov 6 18:06:28 2006
@@ -43,6 +43,18 @@
<scope>test</scope>
</dependency>
<dependency>
+ <groupId>httpunit</groupId>
+ <artifactId>httpunit</artifactId>
+ <version>1.6.1</version>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>jtidy</groupId>
+ <artifactId>jtidy</artifactId>
+ <version>4aug2000r7-dev</version>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
<groupId>org.easymock</groupId>
<artifactId>easymockclassextension</artifactId>
<scope>test</scope>
@@ -100,6 +112,12 @@
<dependency>
<groupId>javax.xml.soap</groupId>
<artifactId>saaj-api</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.springframework</groupId>
+ <artifactId>spring-web</artifactId>
+ <scope>test</scope>
+ <version>${spring.version}</version>
</dependency>
</dependencies>
Modified: incubator/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/servlet/CXFServlet.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/servlet/CXFServlet.java?view=diff&rev=471966&r1=471965&r2=471966
==============================================================================
--- incubator/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/servlet/CXFServlet.java (original)
+++ incubator/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/servlet/CXFServlet.java Mon Nov 6 18:06:28 2006
@@ -17,33 +17,21 @@
* under the License.
*/
-
package org.apache.cxf.jaxws.servlet;
import java.io.IOException;
import java.io.InputStream;
-import java.io.OutputStream;
import java.lang.ref.WeakReference;
-import java.net.MalformedURLException;
-import java.net.URL;
-import java.util.HashMap;
import java.util.Hashtable;
-import java.util.List;
import java.util.Map;
-import java.util.logging.Level;
import java.util.logging.Logger;
import javax.servlet.ServletConfig;
+import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
-import javax.wsdl.Definition;
-import javax.wsdl.Port;
-import javax.wsdl.extensions.ExtensibilityElement;
-import javax.wsdl.factory.WSDLFactory;
-import javax.wsdl.xml.WSDLWriter;
-import javax.xml.namespace.QName;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
@@ -54,44 +42,42 @@
import org.xml.sax.SAXException;
import org.apache.cxf.Bus;
-import org.apache.cxf.BusFactoryHelper;
+import org.apache.cxf.BusException;
+import org.apache.cxf.bus.spring.SpringBusFactory;
+import org.apache.cxf.common.classloader.ClassLoaderUtils;
import org.apache.cxf.jaxws.EndpointImpl;
-import org.apache.cxf.message.Message;
-import org.apache.cxf.message.MessageImpl;
-import org.apache.cxf.service.model.EndpointInfo;
-import org.apache.cxf.tools.common.extensions.soap.SoapAddress;
-import org.apache.cxf.tools.util.SOAPBindingUtil;
+import org.apache.cxf.resource.URIResolver;
import org.apache.cxf.transport.DestinationFactory;
import org.apache.cxf.transport.DestinationFactoryManager;
-import org.apache.cxf.ws.addressing.EndpointReferenceType;
-import org.apache.cxf.wsdl.EndpointReferenceUtils;
-import org.apache.cxf.wsdl11.ServiceWSDLBuilder;
-import org.xmlsoap.schemas.wsdl.http.AddressType;
-
+import org.springframework.context.ApplicationContext;
+/**
+ * A Servlet which supports loading of JAX-WS endpoints from an
+ * XML file and handling requests for endpoints created via other means
+ * such as Spring beans, or the Java API. All requests are passed on
+ * to the {@link ServletController}.
+ *
+ */
public class CXFServlet extends HttpServlet {
-
-
- static final String HTTP_REQUEST =
- "HTTP_SERVLET_REQUEST";
- static final String HTTP_RESPONSE =
- "HTTP_SERVLET_RESPONSE";
-
+
static final Map<String, WeakReference<Bus>> BUS_MAP = new Hashtable<String, WeakReference<Bus>>();
static final Logger LOG = Logger.getLogger(CXFServlet.class.getName());
protected Bus bus;
- protected Map<String, ServletDestination> servantMap
- = new HashMap<String, ServletDestination>();
-
-
- EndpointReferenceType reference;
- ServletTransportFactory servletTransportFactory;
- EndpointImpl ep;
- EndpointInfo ei;
-
+
+ private ServletTransportFactory servletTransportFactory;
+ private ServletController controller;
+
+ public ServletController createServletController() {
+ return new ServletController(servletTransportFactory);
+ }
+
+ public ServletController getController() {
+ return controller;
+ }
+
public void init(ServletConfig servletConfig) throws ServletException {
super.init(servletConfig);
-
+
String busid = servletConfig.getInitParameter("bus.id");
if (null != busid) {
WeakReference<Bus> ref = BUS_MAP.get(busid);
@@ -100,26 +86,59 @@
}
}
if (null == bus) {
- bus = BusFactoryHelper.newInstance().createBus();
+ // try to pull an existing ApplicationContext out of the
+ // ServletContext
+ ServletContext svCtx = getServletContext();
+ ApplicationContext ctx = (ApplicationContext)svCtx
+ .getAttribute("interface org.springframework.web.context.WebApplicationContext.ROOT");
+
+ // This constructor works whether there is a context or not
+ bus = new SpringBusFactory(ctx).getDefaultBus();
}
if (null != busid) {
BUS_MAP.put(busid, new WeakReference<Bus>(bus));
}
- InputStream ins = servletConfig.getServletContext()
- .getResourceAsStream("/WEB-INF/cxf-servlet.xml");
+ replaceDestionFactory();
+
+ // Set up the servlet as the default server side destination factory
+ controller = createServletController();
+
+ // build endpoints from the web.xml or a config file
+ buildEndpoints(servletConfig);
+ }
+
+ protected void buildEndpoints(ServletConfig servletConfig) throws ServletException {
+ String location = servletConfig.getInitParameter("config-location");
+ if (location == null) {
+ location = "/WEB-INF/cxf-servlet.xml";
+ }
+ InputStream ins = servletConfig.getServletContext().getResourceAsStream(location);
+
+ if (ins == null) {
+ try {
+ URIResolver resolver = new URIResolver(location);
+
+ if (resolver.isResolved()) {
+ ins = resolver.getInputStream();
+ }
+ } catch (IOException e) {
+ // ignore
+ }
+
+ }
+
if (ins != null) {
DocumentBuilderFactory builderFactory = DocumentBuilderFactory.newInstance();
builderFactory.setNamespaceAware(true);
builderFactory.setValidating(false);
-
-
+
try {
Document doc = builderFactory.newDocumentBuilder().parse(ins);
Node nd = doc.getDocumentElement().getFirstChild();
while (nd != null) {
if ("endpoint".equals(nd.getLocalName())) {
- loadEndpoint(servletConfig, nd);
+ buildEndpoint(servletConfig, nd);
}
nd = nd.getNextSibling();
}
@@ -133,88 +152,88 @@
}
}
- private void deregisterTransport(String transportId) {
- bus.getExtension(DestinationFactoryManager.class).deregisterDestinationFactory(transportId);
- }
-
/**
* @return
*/
protected DestinationFactory createServletTransportFactory() {
if (servletTransportFactory == null) {
- servletTransportFactory = new ServletTransportFactory(bus, reference);
+ servletTransportFactory = new ServletTransportFactory(bus);
}
return servletTransportFactory;
}
private void registerTransport(DestinationFactory factory, String namespace) {
- bus.getExtension(DestinationFactoryManager.class).registerDestinationFactory(
- namespace,
- factory);
+ bus.getExtension(DestinationFactoryManager.class).registerDestinationFactory(namespace, factory);
+ }
+
+ public void buildEndpoint(ServletConfig servletConfig, Node node) throws ServletException {
+ Element el = (Element)node;
+ String implName = el.getAttribute("implementation");
+ String serviceName = el.getAttribute("service");
+ String wsdlName = el.getAttribute("wsdl");
+ String portName = el.getAttribute("port");
+ String urlPat = el.getAttribute("url-pattern");
+
+ buildEndpoint(implName, serviceName, wsdlName, portName, urlPat);
}
- public void loadEndpoint(String implName,
- String serviceName,
- String wsdlName,
- String portName,
- String urlPat) throws ServletException {
+ public void buildEndpoint(String implName, String serviceName, String wsdlName, String portName,
+ String urlPat) throws ServletException {
try {
-
- URL url = null;
- if (wsdlName != null) {
- try {
- url = getServletConfig().getServletContext().getResource(wsdlName);
- } catch (MalformedURLException ex) {
- try {
- url = new URL(wsdlName);
- } catch (MalformedURLException ex2) {
- try {
- url = getServletConfig().getServletContext().getResource("/" + wsdlName);
- } catch (MalformedURLException ex3) {
- url = null;
- }
- }
- }
- }
- Class cls = Class.forName(implName, false, Thread.currentThread().getContextClassLoader());
+
+ // TODO: This wasn't doing anything before. We need to pass this to
+ // the
+ // EndpointImpl so the service factory can use it...
+ // URL url = null;
+ // if (wsdlName != null && wsdlName.length() > 0) {
+ // try {
+ // url =
+ // getServletConfig().getServletContext().getResource(wsdlName);
+ // } catch (MalformedURLException ex) {
+ // try {
+ // url = new URL(wsdlName);
+ // } catch (MalformedURLException ex2) {
+ // try {
+ // url = getServletConfig().getServletContext().getResource("/" +
+ // wsdlName);
+ // } catch (MalformedURLException ex3) {
+ // url = null;
+ // }
+ // }
+ // }
+ // }
+ Class cls = ClassLoaderUtils.loadClass(implName, getClass());
Object impl = cls.newInstance();
- reference = EndpointReferenceUtils
- .getEndpointReference(url,
- QName.valueOf(serviceName),
- portName);
-
-
-
- ep = new EndpointImpl(bus, impl, url.toString());
- replaceDestionFactory();
-// doesn't really matter what URL is used here
- ep.publish("http://localhost" + (urlPat.charAt(0) == '/' ? "" : "/") + urlPat);
-
- ei = ep.getServer().getEndpoint().getEndpointInfo();
-
-
+ EndpointImpl ep = new EndpointImpl(bus, impl, (String)null);
+
+ // doesn't really matter what URL is used here
+ ep.publish("http://localhost" + (urlPat.charAt(0) == '/' ? "" : "/") + urlPat);
} catch (ClassNotFoundException ex) {
throw new ServletException(ex);
} catch (InstantiationException ex) {
throw new ServletException(ex);
} catch (IllegalAccessException ex) {
throw new ServletException(ex);
- }
+ }
}
- private void replaceDestionFactory() {
+ private void replaceDestionFactory() throws ServletException {
+ DestinationFactoryManager dfm = bus.getExtension(DestinationFactoryManager.class);
+ try {
+ DestinationFactory df = dfm
+ .getDestinationFactory("http://cxf.apache.org/transports/http/configuration");
+ if (df instanceof ServletTransportFactory) {
+ servletTransportFactory = (ServletTransportFactory)df;
+ return;
+ }
+ } catch (BusException e) {
+ // why are we throwing a busexception if the DF isn't found?
+ }
+
DestinationFactory factory = createServletTransportFactory();
-
- deregisterTransport("http://schemas.xmlsoap.org/wsdl/soap/http");
- deregisterTransport("http://schemas.xmlsoap.org/soap/http");
- deregisterTransport("http://www.w3.org/2003/05/soap/bindings/HTTP/");
- deregisterTransport("http://schemas.xmlsoap.org/wsdl/http/");
- deregisterTransport("http://cxf.apache.org/transports/http/configuration");
- deregisterTransport("http://cxf.apache.org/bindings/xformat");
-
registerTransport(factory, "http://schemas.xmlsoap.org/wsdl/soap/http");
registerTransport(factory, "http://schemas.xmlsoap.org/soap/http");
registerTransport(factory, "http://www.w3.org/2003/05/soap/bindings/HTTP/");
@@ -223,85 +242,30 @@
registerTransport(factory, "http://cxf.apache.org/bindings/xformat");
}
- public void loadEndpoint(ServletConfig servletConfig, Node node)
- throws ServletException {
- Element el = (Element)node;
- String implName = el.getAttribute("implementation");
- String serviceName = el.getAttribute("service");
- String wsdlName = el.getAttribute("wsdl");
- String portName = el.getAttribute("port");
- String urlPat = el.getAttribute("url-pattern");
-
- loadEndpoint(implName, serviceName, wsdlName, portName, urlPat);
- }
-
public void destroy() {
String s = bus.getId();
BUS_MAP.remove(s);
-
+
bus.shutdown(true);
}
-
- void addServant(URL url, ServletDestination servant) {
- servantMap.put(url.getPath(), servant);
- }
- void removeServant(URL url, ServletDestination servant) {
- servantMap.remove(url.getPath());
- }
-
+
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException {
- try {
- if (LOG.isLoggable(Level.INFO)) {
- LOG.info("Service http request on thread: " + Thread.currentThread());
- }
-
- MessageImpl inMessage = new MessageImpl();
- inMessage.setContent(InputStream.class, request.getInputStream());
- inMessage.put(HTTP_REQUEST, request);
- inMessage.put(HTTP_RESPONSE, response);
- inMessage.put(Message.HTTP_REQUEST_METHOD, request.getMethod());
- inMessage.put(Message.PATH_INFO, request.getPathInfo());
- inMessage.put(Message.QUERY_STRING, request.getQueryString());
-
- ((ServletDestination)ep.getServer().getDestination()).doMessage(inMessage);
- } catch (IOException e) {
- throw new ServletException(e);
- }
-
+ controller.invoke(request, response);
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException {
- try {
-
-
- response.setHeader("Content-Type", "text/xml");
-
- OutputStream os = response.getOutputStream();
-
- WSDLWriter wsdlWriter = WSDLFactory.newInstance().newWSDLWriter();
- Definition def = new ServiceWSDLBuilder(ei.getService()).build();
- Port port = def.getService(ei.getService().getName()).getPort(
- ei.getName().getLocalPart());
- List<?> exts = port.getExtensibilityElements();
- if (exts.size() > 0) {
- ExtensibilityElement el = (ExtensibilityElement)exts.get(0);
- if (SOAPBindingUtil.isSOAPAddress(el)) {
- SoapAddress add = SOAPBindingUtil.getSoapAddress(el);
- add.setLocationURI(request.getRequestURL().toString());
- }
- if (el instanceof AddressType) {
- AddressType add = (AddressType)el;
- add.setLocation(request.getRequestURL().toString());
- }
- }
-
- wsdlWriter.writeWSDL(def, os);
- response.getOutputStream().flush();
- return;
- } catch (Exception ex) {
-
- throw new ServletException(ex);
- }
+ controller.invoke(request, response);
+ }
+
+ @Override
+ protected void doDelete(HttpServletRequest request, HttpServletResponse response)
+ throws ServletException, IOException {
+ controller.invoke(request, response);
}
+ @Override
+ protected void doPut(HttpServletRequest request, HttpServletResponse response) throws ServletException,
+ IOException {
+ controller.invoke(request, response);
+ }
}
Added: incubator/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/servlet/ServletController.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/servlet/ServletController.java?view=auto&rev=471966
==============================================================================
--- incubator/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/servlet/ServletController.java (added)
+++ incubator/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/servlet/ServletController.java Mon Nov 6 18:06:28 2006
@@ -0,0 +1,146 @@
+/**
+ * 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.jaxws.servlet;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.OutputStream;
+import java.util.List;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+
+import javax.servlet.ServletException;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import javax.wsdl.Definition;
+import javax.wsdl.Port;
+import javax.wsdl.WSDLException;
+import javax.wsdl.extensions.ExtensibilityElement;
+import javax.wsdl.factory.WSDLFactory;
+import javax.wsdl.xml.WSDLWriter;
+
+import org.apache.cxf.message.Message;
+import org.apache.cxf.message.MessageImpl;
+import org.apache.cxf.service.model.EndpointInfo;
+import org.apache.cxf.tools.common.extensions.soap.SoapAddress;
+import org.apache.cxf.tools.util.SOAPBindingUtil;
+import org.apache.cxf.wsdl11.ServiceWSDLBuilder;
+import org.xmlsoap.schemas.wsdl.http.AddressType;
+
+public class ServletController {
+
+ static final String HTTP_REQUEST = "HTTP_SERVLET_REQUEST";
+ static final String HTTP_RESPONSE = "HTTP_SERVLET_RESPONSE";
+
+ private static final Logger LOG = Logger.getLogger(ServletController.class.getName());
+
+ private ServletTransportFactory transport;
+
+ public ServletController(ServletTransportFactory df) {
+ this.transport = df;
+ }
+
+ public void invoke(HttpServletRequest request, HttpServletResponse res) throws ServletException {
+ boolean wsdl = false;
+ if (request.getQueryString() != null && request.getQueryString().trim().equalsIgnoreCase("wsdl")) {
+ wsdl = true;
+ }
+
+ try {
+ EndpointInfo ei = new EndpointInfo();
+ ei.setAddress("http://localhost" + request.getServletPath() + request.getPathInfo());
+ ServletDestination d = (ServletDestination)transport.getDestination(ei);
+
+ if (d.getMessageObserver() == null) {
+ generateNotFound(request, res);
+ } else if (wsdl) {
+ generateWSDL(request, res, d);
+ } else {
+ invokeDestination(request, res, d);
+ }
+ } catch (IOException e) {
+ throw new ServletException(e);
+ }
+ }
+
+ protected void generateNotFound(HttpServletRequest request, HttpServletResponse res) throws IOException {
+ res.setStatus(404);
+ res.setContentType("text/html");
+ res.getWriter().write("<html><body>No service was found.</body></html>");
+ }
+
+ public void invokeDestination(HttpServletRequest request, HttpServletResponse response,
+ ServletDestination d) throws ServletException {
+ if (LOG.isLoggable(Level.INFO)) {
+ LOG.info("Service http request on thread: " + Thread.currentThread());
+ }
+
+ try {
+ MessageImpl inMessage = new MessageImpl();
+ inMessage.setContent(InputStream.class, request.getInputStream());
+ inMessage.put(HTTP_REQUEST, request);
+ inMessage.put(HTTP_RESPONSE, response);
+ inMessage.put(Message.HTTP_REQUEST_METHOD, request.getMethod());
+ inMessage.put(Message.PATH_INFO, request.getPathInfo());
+ inMessage.put(Message.QUERY_STRING, request.getQueryString());
+ inMessage.put(Message.CONTENT_TYPE, request.getContentType());
+ inMessage.put(Message.ENCODING, request.getCharacterEncoding());
+
+ d.doMessage(inMessage);
+ } catch (IOException e) {
+ throw new ServletException(e);
+ }
+
+ }
+
+ protected void generateWSDL(HttpServletRequest request,
+ HttpServletResponse response,
+ ServletDestination d)
+ throws ServletException {
+ response.setHeader("Content-Type", "text/xml");
+
+ try {
+ OutputStream os = response.getOutputStream();
+
+ WSDLWriter wsdlWriter = WSDLFactory.newInstance().newWSDLWriter();
+ EndpointInfo ei = d.getEndpointInfo();
+ Definition def = new ServiceWSDLBuilder(ei.getService()).build();
+ Port port = def.getService(ei.getService().getName()).getPort(ei.getName().getLocalPart());
+ List<?> exts = port.getExtensibilityElements();
+ if (exts.size() > 0) {
+ ExtensibilityElement el = (ExtensibilityElement)exts.get(0);
+ if (SOAPBindingUtil.isSOAPAddress(el)) {
+ SoapAddress add = SOAPBindingUtil.getSoapAddress(el);
+ add.setLocationURI(request.getRequestURL().toString());
+ }
+ if (el instanceof AddressType) {
+ AddressType add = (AddressType)el;
+ add.setLocation(request.getRequestURL().toString());
+ }
+ }
+
+ wsdlWriter.writeWSDL(def, os);
+ response.getOutputStream().flush();
+ } catch (WSDLException e) {
+ throw new ServletException(e);
+ } catch (IOException e) {
+ throw new ServletException(e);
+ }
+ }
+}
Propchange: incubator/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/servlet/ServletController.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: incubator/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/servlet/ServletController.java
------------------------------------------------------------------------------
svn:executable = *
Propchange: incubator/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/servlet/ServletController.java
------------------------------------------------------------------------------
svn:keywords = Rev Date
Modified: incubator/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/servlet/ServletDestination.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/servlet/ServletDestination.java?view=diff&rev=471966&r1=471965&r2=471966
==============================================================================
--- incubator/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/servlet/ServletDestination.java (original)
+++ incubator/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/servlet/ServletDestination.java Mon Nov 6 18:06:28 2006
@@ -17,14 +17,8 @@
* under the License.
*/
-
package org.apache.cxf.jaxws.servlet;
-
-
-
-
-
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
@@ -36,10 +30,8 @@
import java.util.logging.Level;
import java.util.logging.Logger;
-
import javax.servlet.http.HttpServletResponse;
-
import org.apache.cxf.Bus;
import org.apache.cxf.common.util.Base64Exception;
import org.apache.cxf.common.util.Base64Utility;
@@ -52,6 +44,7 @@
import org.apache.cxf.transport.ConduitInitiator;
import org.apache.cxf.transport.Destination;
import org.apache.cxf.transport.MessageObserver;
+import org.apache.cxf.ws.addressing.AttributedURIType;
import org.apache.cxf.ws.addressing.EndpointReferenceType;
@@ -86,16 +79,16 @@
*/
public ServletDestination(Bus b,
ConduitInitiator ci,
- EndpointInfo ei,
- EndpointReferenceType ref)
+ EndpointInfo ei)
throws IOException {
bus = b;
conduitInitiator = ci;
endpointInfo = ei;
- reference = ref;
-
-
+ reference = new EndpointReferenceType();
+ AttributedURIType add = new AttributedURIType();
+ add.setValue(ei.getAddress());
+ reference.setAddress(add);
}
/**
@@ -231,6 +224,17 @@
* @param headers the current set of headers
*/
protected void copyResponseHeaders(Message message, HttpServletResponse response) {
+ String ct = (String) message.get(Message.CONTENT_TYPE);
+ String enc = (String) message.get(Message.ENCODING);
+
+ if (null != ct) {
+ if (enc != null && ct.indexOf("charset=") == -1) {
+ ct = ct + "; charset=" + enc;
+ }
+ response.setContentType(ct);
+ } else if (enc != null) {
+ response.setContentType("text/xml; charset=" + enc);
+ }
}
@@ -391,6 +395,14 @@
protected boolean isOneWay(Message message) {
return message.getExchange() != null && message.getExchange().isOneWay();
+ }
+
+ public MessageObserver getMessageObserver() {
+ return this.incomingObserver;
+ }
+
+ public EndpointInfo getEndpointInfo() {
+ return endpointInfo;
}
}
Modified: incubator/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/servlet/ServletTransportFactory.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/servlet/ServletTransportFactory.java?view=diff&rev=471966&r1=471965&r2=471966
==============================================================================
--- incubator/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/servlet/ServletTransportFactory.java (original)
+++ incubator/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/servlet/ServletTransportFactory.java Mon Nov 6 18:06:28 2006
@@ -21,28 +21,25 @@
package org.apache.cxf.jaxws.servlet;
import java.io.IOException;
+import java.util.HashMap;
+import java.util.Map;
import javax.annotation.Resource;
import org.apache.cxf.Bus;
import org.apache.cxf.service.model.EndpointInfo;
import org.apache.cxf.transport.AbstractTransportFactory;
-import org.apache.cxf.transport.Conduit;
-import org.apache.cxf.transport.ConduitInitiator;
import org.apache.cxf.transport.Destination;
import org.apache.cxf.transport.DestinationFactory;
-import org.apache.cxf.ws.addressing.EndpointReferenceType;
public class ServletTransportFactory extends AbstractTransportFactory
- implements ConduitInitiator, DestinationFactory {
+ implements DestinationFactory {
- EndpointReferenceType reference;
-
private Bus bus;
+ private Map<String, ServletDestination> destinations = new HashMap<String, ServletDestination>();
- public ServletTransportFactory(Bus b, EndpointReferenceType ref) {
- bus = b;
- reference = ref;
+ public ServletTransportFactory(Bus b) {
+ bus = b;
}
public ServletTransportFactory() {
@@ -57,19 +54,13 @@
this.bus = bus;
}
- public Conduit getConduit(EndpointInfo endpointInfo)
- throws IOException {
- return null;
- }
-
- public Conduit getConduit(EndpointInfo endpointInfo, EndpointReferenceType target)
+ public synchronized Destination getDestination(EndpointInfo endpointInfo)
throws IOException {
- return null;
+ ServletDestination d = destinations.get(endpointInfo.getAddress());
+ if (d == null) {
+ d = new ServletDestination(bus, null, endpointInfo);
+ destinations.put(endpointInfo.getAddress(), d);
+ }
+ return d;
}
-
- public Destination getDestination(EndpointInfo endpointInfo)
- throws IOException {
- return new ServletDestination(bus, null, endpointInfo, reference);
- }
-
}
Modified: incubator/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/support/JaxWsServiceConfiguration.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/support/JaxWsServiceConfiguration.java?view=diff&rev=471966&r1=471965&r2=471966
==============================================================================
--- incubator/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/support/JaxWsServiceConfiguration.java (original)
+++ incubator/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/support/JaxWsServiceConfiguration.java Mon Nov 6 18:06:28 2006
@@ -149,8 +149,8 @@
} else {
return Boolean.TRUE;
}
- } else if (!method.getDeclaringClass().isInterface()) {
- return Boolean.FALSE;
+ } else {
+ return method.getDeclaringClass().isInterface();
}
}
return Boolean.FALSE;
Added: incubator/cxf/trunk/rt/frontend/jaxws/src/main/resources/META-INF/cxf/cxf-servlet.xml
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/rt/frontend/jaxws/src/main/resources/META-INF/cxf/cxf-servlet.xml?view=auto&rev=471966
==============================================================================
--- incubator/cxf/trunk/rt/frontend/jaxws/src/main/resources/META-INF/cxf/cxf-servlet.xml (added)
+++ incubator/cxf/trunk/rt/frontend/jaxws/src/main/resources/META-INF/cxf/cxf-servlet.xml Mon Nov 6 18:06:28 2006
@@ -0,0 +1,38 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ 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.
+-->
+<beans xmlns="http://www.springframework.org/schema/beans"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xmlns:foo="http://cxf.apache.org/configuration/foo"
+ xsi:schemaLocation="
+http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
+
+ <bean class="org.apache.cxf.jaxws.servlet.ServletTransportFactory">
+ <property name="bus" ref="cxf"/>
+ <property name="transportIds">
+ <set>
+ <value>http://schemas.xmlsoap.org/soap/http</value>
+ <value>http://schemas.xmlsoap.org/wsdl/http/</value>
+ <value>http://schemas.xmlsoap.org/wsdl/soap/http</value>
+ <value>http://www.w3.org/2003/05/soap/bindings/HTTP/</value>
+ <value>http://cxf.apache.org/transports/http/configuration</value>
+ </set>
+ </property>
+ </bean>
+</beans>
Propchange: incubator/cxf/trunk/rt/frontend/jaxws/src/main/resources/META-INF/cxf/cxf-servlet.xml
------------------------------------------------------------------------------
svn:executable = *
Propchange: incubator/cxf/trunk/rt/frontend/jaxws/src/main/resources/META-INF/cxf/cxf-servlet.xml
------------------------------------------------------------------------------
svn:keywords = Rev Date
Propchange: incubator/cxf/trunk/rt/frontend/jaxws/src/main/resources/META-INF/cxf/cxf-servlet.xml
------------------------------------------------------------------------------
svn:mime-type = text/xml
Modified: incubator/cxf/trunk/rt/frontend/jaxws/src/test/java/org/apache/cxf/jaxws/JaxWsServerFactoryBeanTest.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/rt/frontend/jaxws/src/test/java/org/apache/cxf/jaxws/JaxWsServerFactoryBeanTest.java?view=diff&rev=471966&r1=471965&r2=471966
==============================================================================
--- incubator/cxf/trunk/rt/frontend/jaxws/src/test/java/org/apache/cxf/jaxws/JaxWsServerFactoryBeanTest.java (original)
+++ incubator/cxf/trunk/rt/frontend/jaxws/src/test/java/org/apache/cxf/jaxws/JaxWsServerFactoryBeanTest.java Mon Nov 6 18:06:28 2006
@@ -20,6 +20,7 @@
import org.apache.cxf.endpoint.Server;
import org.apache.cxf.jaxws.service.Hello;
+import org.apache.hello_world_doc_lit.GreeterImplDoc;
public class JaxWsServerFactoryBeanTest extends AbstractJaxWsTest {
public void testBean() {
@@ -27,6 +28,16 @@
sf.setBus(getBus());
sf.setAddress("http://localhost:9000/test");
sf.setServiceClass(Hello.class);
+ sf.setStart(false);
+
+ Server server = sf.create();
+ assertNotNull(server);
+ }
+
+ public void testBareGreeter() throws Exception {
+ JaxWsServerFactoryBean sf = new JaxWsServerFactoryBean();
+ sf.setBus(getBus());
+ sf.setServiceClass(GreeterImplDoc.class);
sf.setStart(false);
Server server = sf.create();
Added: incubator/cxf/trunk/rt/frontend/jaxws/src/test/java/org/apache/cxf/jaxws/servlet/AbstractServletTest.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/rt/frontend/jaxws/src/test/java/org/apache/cxf/jaxws/servlet/AbstractServletTest.java?view=auto&rev=471966
==============================================================================
--- incubator/cxf/trunk/rt/frontend/jaxws/src/test/java/org/apache/cxf/jaxws/servlet/AbstractServletTest.java (added)
+++ incubator/cxf/trunk/rt/frontend/jaxws/src/test/java/org/apache/cxf/jaxws/servlet/AbstractServletTest.java Mon Nov 6 18:06:28 2006
@@ -0,0 +1,100 @@
+/**
+ * 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.jaxws.servlet;
+
+import java.io.IOException;
+import java.net.MalformedURLException;
+
+import org.xml.sax.SAXException;
+
+import com.meterware.httpunit.HttpException;
+import com.meterware.httpunit.HttpNotFoundException;
+import com.meterware.httpunit.HttpUnitOptions;
+import com.meterware.httpunit.WebRequest;
+import com.meterware.servletunit.ServletRunner;
+import com.meterware.servletunit.ServletUnitClient;
+
+import org.apache.cxf.Bus;
+import org.apache.cxf.BusFactoryHelper;
+import org.apache.cxf.test.AbstractCXFTest;
+
+public abstract class AbstractServletTest extends AbstractCXFTest {
+
+ protected ServletRunner sr;
+
+ public void setUp() throws Exception {
+ sr = new ServletRunner(getResourceAsStream(getConfiguration()));
+
+ try {
+ sr.newClient().getResponse("http://localhost/services/");
+ } catch (HttpNotFoundException e) {
+ // ignore, we just want to boot up the servlet
+ }
+
+ super.setUp();
+
+ HttpUnitOptions.setExceptionsThrownOnErrorStatus(true);
+ }
+
+ @Override
+ public Bus getBus() {
+ return BusFactoryHelper.newInstance().getDefaultBus();
+ }
+
+ /**
+ * @return The web.xml to use for testing.
+ */
+ protected String getConfiguration() {
+ return "/org/apache/cxf/jaxws/servlet/web.xml";
+ }
+
+ protected ServletUnitClient newClient() {
+ return sr.newClient();
+ }
+
+ /**
+ * Here we expect an errorCode other than 200, and look for it checking for
+ * text is omitted as it doesnt work. It would never work on java1.3, but
+ * one may have expected java1.4+ to have access to the error stream in
+ * responses. Clearly not.
+ *
+ * @param request
+ * @param errorCode
+ * @param errorText optional text string to search for
+ * @throws MalformedURLException
+ * @throws IOException
+ * @throws SAXException
+ */
+ protected void expectErrorCode(WebRequest request, int errorCode, String errorText)
+ throws MalformedURLException, IOException, SAXException {
+ String failureText = "Expected error " + errorCode + " from " + request.getURL();
+
+ try {
+ newClient().getResponse(request);
+ fail(errorText + " -got success instead");
+ } catch (HttpException e) {
+ assertEquals(failureText, errorCode, e.getResponseCode());
+ /*
+ * checking for text omitted as it doesnt work. if(errorText!=null) {
+ * assertTrue( "Failed to find "+errorText+" in "+
+ * e.getResponseMessage(), e.getMessage().indexOf(errorText)>=0); }
+ */
+ }
+ }
+}
Propchange: incubator/cxf/trunk/rt/frontend/jaxws/src/test/java/org/apache/cxf/jaxws/servlet/AbstractServletTest.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: incubator/cxf/trunk/rt/frontend/jaxws/src/test/java/org/apache/cxf/jaxws/servlet/AbstractServletTest.java
------------------------------------------------------------------------------
svn:executable = *
Propchange: incubator/cxf/trunk/rt/frontend/jaxws/src/test/java/org/apache/cxf/jaxws/servlet/AbstractServletTest.java
------------------------------------------------------------------------------
svn:keywords = Rev Date
Added: incubator/cxf/trunk/rt/frontend/jaxws/src/test/java/org/apache/cxf/jaxws/servlet/CXFServletTest.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/rt/frontend/jaxws/src/test/java/org/apache/cxf/jaxws/servlet/CXFServletTest.java?view=auto&rev=471966
==============================================================================
--- incubator/cxf/trunk/rt/frontend/jaxws/src/test/java/org/apache/cxf/jaxws/servlet/CXFServletTest.java (added)
+++ incubator/cxf/trunk/rt/frontend/jaxws/src/test/java/org/apache/cxf/jaxws/servlet/CXFServletTest.java Mon Nov 6 18:06:28 2006
@@ -0,0 +1,92 @@
+/**
+ * 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.jaxws.servlet;
+
+import java.net.URL;
+
+import org.w3c.dom.Document;
+
+import com.meterware.httpunit.GetMethodWebRequest;
+import com.meterware.httpunit.PostMethodWebRequest;
+import com.meterware.httpunit.WebRequest;
+import com.meterware.httpunit.WebResponse;
+import com.meterware.servletunit.ServletUnitClient;
+
+import org.apache.cxf.helpers.DOMUtils;
+import org.apache.cxf.jaxws.JaxWsServerFactoryBean;
+import org.apache.cxf.service.invoker.BeanInvoker;
+import org.apache.hello_world_soap_http.GreeterImpl;
+
+public class CXFServletTest extends AbstractServletTest {
+ public void testPostInvokeServices() throws Exception {
+ newClient();
+
+ JaxWsServerFactoryBean svr = new JaxWsServerFactoryBean();
+ URL resource = getClass().getResource("/wsdl/hello_world.wsdl");
+ assertNotNull(resource);
+ svr.getServiceFactory().setWsdlURL(resource);
+ svr.setBus(getBus());
+ svr.setServiceClass(GreeterImpl.class);
+ svr.setAddress("http://localhost/services/Greeter");
+
+ GreeterImpl greeter = new GreeterImpl();
+ BeanInvoker invoker = new BeanInvoker(greeter);
+ svr.getServiceFactory().setInvoker(invoker);
+
+ svr.create();
+
+ invoke("UTF-8");
+ invoke("iso-8859-1");
+ }
+
+ private void invoke(String encoding) throws Exception {
+ WebRequest req = new PostMethodWebRequest("http://localhost/services/Greeter",
+ getClass().getResourceAsStream("/org/apache/cxf/jaxws/GreeterMessage.xml"),
+ "text/xml; charset=" + encoding);
+
+ WebResponse response = newClient().getResponse(req);
+
+ assertEquals("text/xml", response.getContentType());
+ assertEquals(encoding, response.getCharacterSet());
+
+ Document doc = DOMUtils.readXml(response.getInputStream());
+ assertNotNull(doc);
+
+ addNamespace("h", "http://apache.org/hello_world_soap_http/types");
+
+ assertValid("/s:Envelope/s:Body", doc);
+ assertValid("//h:sayHiResponse", doc);
+ }
+
+ public void testInvalidServiceUrl() throws Exception {
+ ServletUnitClient client = newClient();
+ client.setExceptionsThrownOnErrorStatus(false);
+
+ WebResponse res = client.getResponse("http://localhost/services/NoSuchService");
+ assertEquals(404, res.getResponseCode());
+ assertEquals("text/html", res.getContentType());
+ }
+
+ public void xtestServiceWsdlNotFound() throws Exception {
+ WebRequest req = new GetMethodWebRequest("http://localhost/services/NoSuchService?wsdl");
+
+ expectErrorCode(req, 404, "Response code 404 required for invalid WSDL url.");
+ }
+
+}
Propchange: incubator/cxf/trunk/rt/frontend/jaxws/src/test/java/org/apache/cxf/jaxws/servlet/CXFServletTest.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: incubator/cxf/trunk/rt/frontend/jaxws/src/test/java/org/apache/cxf/jaxws/servlet/CXFServletTest.java
------------------------------------------------------------------------------
svn:executable = *
Propchange: incubator/cxf/trunk/rt/frontend/jaxws/src/test/java/org/apache/cxf/jaxws/servlet/CXFServletTest.java
------------------------------------------------------------------------------
svn:keywords = Rev Date
Added: incubator/cxf/trunk/rt/frontend/jaxws/src/test/java/org/apache/cxf/jaxws/servlet/ExternalServicesServletTest.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/rt/frontend/jaxws/src/test/java/org/apache/cxf/jaxws/servlet/ExternalServicesServletTest.java?view=auto&rev=471966
==============================================================================
--- incubator/cxf/trunk/rt/frontend/jaxws/src/test/java/org/apache/cxf/jaxws/servlet/ExternalServicesServletTest.java (added)
+++ incubator/cxf/trunk/rt/frontend/jaxws/src/test/java/org/apache/cxf/jaxws/servlet/ExternalServicesServletTest.java Mon Nov 6 18:06:28 2006
@@ -0,0 +1,56 @@
+/**
+ * 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.jaxws.servlet;
+
+import org.w3c.dom.Document;
+
+import com.meterware.httpunit.PostMethodWebRequest;
+import com.meterware.httpunit.WebRequest;
+import com.meterware.httpunit.WebResponse;
+
+import org.apache.cxf.helpers.DOMUtils;
+
+public class ExternalServicesServletTest extends AbstractServletTest {
+
+ @Override
+ protected String getConfiguration() {
+ return "/org/apache/cxf/jaxws/servlet/web-external.xml";
+ }
+
+ public void testPostInvokeServices() throws Exception {
+ newClient();
+
+ WebRequest req = new PostMethodWebRequest("http://localhost/greeter1",
+ getClass().getResourceAsStream("/org/apache/cxf/jaxws/GreeterMessage.xml"),
+ "text/xml; charset=UTF-8");
+
+ WebResponse response = newClient().getResponse(req);
+
+ assertEquals("text/xml", response.getContentType());
+ assertEquals("UTF-8", response.getCharacterSet());
+
+ Document doc = DOMUtils.readXml(response.getInputStream());
+ assertNotNull(doc);
+
+ addNamespace("h", "http://apache.org/hello_world_soap_http/types");
+
+ assertValid("/s:Envelope/s:Body", doc);
+ assertValid("//h:sayHiResponse", doc);
+ }
+}
Propchange: incubator/cxf/trunk/rt/frontend/jaxws/src/test/java/org/apache/cxf/jaxws/servlet/ExternalServicesServletTest.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: incubator/cxf/trunk/rt/frontend/jaxws/src/test/java/org/apache/cxf/jaxws/servlet/ExternalServicesServletTest.java
------------------------------------------------------------------------------
svn:keywords = Rev Date
Added: incubator/cxf/trunk/rt/frontend/jaxws/src/test/java/org/apache/cxf/jaxws/servlet/SpringServletTest.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/rt/frontend/jaxws/src/test/java/org/apache/cxf/jaxws/servlet/SpringServletTest.java?view=auto&rev=471966
==============================================================================
--- incubator/cxf/trunk/rt/frontend/jaxws/src/test/java/org/apache/cxf/jaxws/servlet/SpringServletTest.java (added)
+++ incubator/cxf/trunk/rt/frontend/jaxws/src/test/java/org/apache/cxf/jaxws/servlet/SpringServletTest.java Mon Nov 6 18:06:28 2006
@@ -0,0 +1,55 @@
+/**
+ * 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.jaxws.servlet;
+
+import org.w3c.dom.Document;
+
+import com.meterware.httpunit.PostMethodWebRequest;
+import com.meterware.httpunit.WebRequest;
+import com.meterware.httpunit.WebResponse;
+
+import org.apache.cxf.helpers.DOMUtils;
+
+public class SpringServletTest extends AbstractServletTest {
+ @Override
+ protected String getConfiguration() {
+ return "/org/apache/cxf/jaxws/servlet/web-spring.xml";
+ }
+
+ public void testInvokingSpringBeans() throws Exception {
+ newClient();
+
+ WebRequest req = new PostMethodWebRequest("http://localhost/services/Greeter",
+ getClass().getResourceAsStream("/org/apache/cxf/jaxws/GreeterMessage.xml"),
+ "text/xml; charset=utf-8");
+
+ WebResponse response = newClient().getResponse(req);
+
+ assertEquals("text/xml", response.getContentType());
+ assertEquals("utf-8", response.getCharacterSet());
+
+ Document doc = DOMUtils.readXml(response.getInputStream());
+ assertNotNull(doc);
+
+ addNamespace("h", "http://apache.org/hello_world_soap_http/types");
+
+ assertValid("/s:Envelope/s:Body", doc);
+ assertValid("//h:sayHiResponse", doc);
+ }
+}