Repository: cxf Updated Branches: refs/heads/master 1b01938aa -> b3ec59efc
add a webapp version of samples/jax_rs/websocket Project: http://git-wip-us.apache.org/repos/asf/cxf/repo Commit: http://git-wip-us.apache.org/repos/asf/cxf/commit/b3ec59ef Tree: http://git-wip-us.apache.org/repos/asf/cxf/tree/b3ec59ef Diff: http://git-wip-us.apache.org/repos/asf/cxf/diff/b3ec59ef Branch: refs/heads/master Commit: b3ec59efcd10cf64a1bb8a399082071905f5baa9 Parents: 1b01938 Author: Akitoshi Yoshida <a...@apache.org> Authored: Wed Mar 23 14:40:00 2016 +0100 Committer: Akitoshi Yoshida <a...@apache.org> Committed: Wed Mar 23 14:54:18 2016 +0100 ---------------------------------------------------------------------- .../samples/jax_rs/websocket_web/README.txt | 32 +++ .../samples/jax_rs/websocket_web/pom.xml | 123 +++++++++ .../main/java/demo/jaxrs/server/Customer.java | 43 +++ .../java/demo/jaxrs/server/CustomerService.java | 271 +++++++++++++++++++ .../src/main/java/demo/jaxrs/server/Order.java | 69 +++++ .../main/java/demo/jaxrs/server/Product.java | 43 +++ .../src/main/webapp/WEB-INF/beans.xml | 46 ++++ .../src/main/webapp/WEB-INF/web.xml | 42 +++ 8 files changed, 669 insertions(+) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/cxf/blob/b3ec59ef/distribution/src/main/release/samples/jax_rs/websocket_web/README.txt ---------------------------------------------------------------------- diff --git a/distribution/src/main/release/samples/jax_rs/websocket_web/README.txt b/distribution/src/main/release/samples/jax_rs/websocket_web/README.txt new file mode 100644 index 0000000..36008ed --- /dev/null +++ b/distribution/src/main/release/samples/jax_rs/websocket_web/README.txt @@ -0,0 +1,32 @@ +JAX-RS WebSocket WebApp Demo +================= + +This is an WebApp version of JAX-RS WebSocket Demo. + +Building and running the demo using maven +--------------------------------------- + +From the base directory of this sample (i.e., where this README file is +located), the maven pom.xml file can be used to build and run the demo. + + +Using either UNIX or Windows: + + mvn install + +This will produce a war file in the target folder. + +To run the war file using jetty9 + + mvn jetty:run-war (from one command line window) + +To run the war file using tomcat7 + + mvn tomcat7:run-war (from one command line window) + +To remove the target dir, run mvn clean". + + +You can use the same clients included in JAX-RS WebSockt Demo. +Refer to samples/jax_rs/websocket/README.txt for more information. + http://git-wip-us.apache.org/repos/asf/cxf/blob/b3ec59ef/distribution/src/main/release/samples/jax_rs/websocket_web/pom.xml ---------------------------------------------------------------------- diff --git a/distribution/src/main/release/samples/jax_rs/websocket_web/pom.xml b/distribution/src/main/release/samples/jax_rs/websocket_web/pom.xml new file mode 100644 index 0000000..9fed27a --- /dev/null +++ b/distribution/src/main/release/samples/jax_rs/websocket_web/pom.xml @@ -0,0 +1,123 @@ +<?xml version="1.0"?> +<!-- + 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. +--> +<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> + <modelVersion>4.0.0</modelVersion> + <artifactId>jax_rs_websocket_web</artifactId> + <name>JAX-RS WebSocket Demo</name> + <description>JAX-RS WebSocket WebApp Demo</description> + <packaging>war</packaging> + <parent> + <groupId>org.apache.cxf.samples</groupId> + <artifactId>cxf-samples</artifactId> + <version>3.2.0-SNAPSHOT</version> + <relativePath>../..</relativePath> + </parent> + <properties> + <cxf.version>${project.version}</cxf.version> + <!-- TODO remove these local entries after making the referenced dependency managed in parent/pom.xml --> + <cxf.atmosphere.version>2.3.7</cxf.atmosphere.version> + <cxf.jetty92.version>9.2.15.v20160210</cxf.jetty92.version> + <cxf.jetty93.version>9.3.5.v20151012</cxf.jetty93.version> + <cxf.jetty.version>${cxf.jetty93.version}</cxf.jetty.version> + </properties> + <build> + <plugins> + <plugin> + <groupId>org.eclipse.jetty</groupId> + <artifactId>jetty-maven-plugin</artifactId> + <version>${cxf.jetty.version}</version> + <configuration> + <webAppSourceDirectory>${project.build.directory}/${project.name}</webAppSourceDirectory> + <scanIntervalSeconds>1</scanIntervalSeconds> + <httpConnector> + <port>9000</port> + </httpConnector> + <webAppConfig> + <contextPath>/</contextPath> + </webAppConfig> + </configuration> + </plugin> + <plugin> + <groupId>org.apache.tomcat.maven</groupId> + <artifactId>tomcat7-maven-plugin</artifactId> + <version>2.2</version> + <configuration> + <warSourceDirectory>${project.build.directory}/${project.artifactId}</warSourceDirectory> + <port>9000</port> + <path>/</path> + </configuration> + <executions> + <execution> + <id>run-tomcat</id> + <configuration> + <fork>true</fork> + </configuration> + <goals> + <goal>run</goal> + </goals> + </execution> + </executions> + </plugin> + </plugins> + </build> + <dependencies> + <!-- cxt et al --> + <dependency> + <groupId>org.apache.cxf</groupId> + <artifactId>cxf-rt-transports-http</artifactId> + <version>3.2.0-SNAPSHOT</version> + </dependency> + <dependency> + <groupId>org.apache.cxf</groupId> + <artifactId>cxf-rt-transports-websocket</artifactId> + <version>3.2.0-SNAPSHOT</version> + </dependency> + <dependency> + <groupId>org.apache.cxf</groupId> + <artifactId>cxf-rt-frontend-jaxrs</artifactId> + <version>3.2.0-SNAPSHOT</version> + </dependency> + <dependency> + <groupId>javax.ws.rs</groupId> + <artifactId>javax.ws.rs-api</artifactId> + </dependency> + + <dependency> + <groupId>org.springframework</groupId> + <artifactId>spring-core</artifactId> + </dependency> + <dependency> + <groupId>org.springframework</groupId> + <artifactId>spring-context</artifactId> + </dependency> + <dependency> + <groupId>org.springframework</groupId> + <artifactId>spring-web</artifactId> + </dependency> + + <!-- add atmosphere --> + <dependency> + <groupId>org.atmosphere</groupId> + <artifactId>atmosphere-runtime</artifactId> + <version>${cxf.atmosphere.version}</version> + </dependency> + + </dependencies> +</project> http://git-wip-us.apache.org/repos/asf/cxf/blob/b3ec59ef/distribution/src/main/release/samples/jax_rs/websocket_web/src/main/java/demo/jaxrs/server/Customer.java ---------------------------------------------------------------------- diff --git a/distribution/src/main/release/samples/jax_rs/websocket_web/src/main/java/demo/jaxrs/server/Customer.java b/distribution/src/main/release/samples/jax_rs/websocket_web/src/main/java/demo/jaxrs/server/Customer.java new file mode 100644 index 0000000..44025f0 --- /dev/null +++ b/distribution/src/main/release/samples/jax_rs/websocket_web/src/main/java/demo/jaxrs/server/Customer.java @@ -0,0 +1,43 @@ +/** + * 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 demo.jaxrs.server; + +import javax.xml.bind.annotation.XmlRootElement; + +@XmlRootElement(name = "Customer") +public class Customer { + private long id; + private String name; + + public long getId() { + return id; + } + + public void setId(long id) { + this.id = id; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } +} http://git-wip-us.apache.org/repos/asf/cxf/blob/b3ec59ef/distribution/src/main/release/samples/jax_rs/websocket_web/src/main/java/demo/jaxrs/server/CustomerService.java ---------------------------------------------------------------------- diff --git a/distribution/src/main/release/samples/jax_rs/websocket_web/src/main/java/demo/jaxrs/server/CustomerService.java b/distribution/src/main/release/samples/jax_rs/websocket_web/src/main/java/demo/jaxrs/server/CustomerService.java new file mode 100644 index 0000000..f77f8aa --- /dev/null +++ b/distribution/src/main/release/samples/jax_rs/websocket_web/src/main/java/demo/jaxrs/server/CustomerService.java @@ -0,0 +1,271 @@ +/** + * 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 demo.jaxrs.server; + +import java.io.IOException; +import java.io.OutputStream; +import java.util.HashMap; +import java.util.Iterator; +import java.util.Map; +import java.util.concurrent.ExecutorService; +import java.util.concurrent.Executors; +import java.util.concurrent.atomic.AtomicInteger; + +import javax.servlet.http.HttpServletResponse; + +import javax.ws.rs.DELETE; +import javax.ws.rs.GET; +import javax.ws.rs.HeaderParam; +import javax.ws.rs.POST; +import javax.ws.rs.PUT; +import javax.ws.rs.Path; +import javax.ws.rs.PathParam; +import javax.ws.rs.Produces; +import javax.ws.rs.WebApplicationException; +import javax.ws.rs.core.Response; +import javax.ws.rs.core.StreamingOutput; + +import org.apache.cxf.transport.websocket.WebSocketConstants; + +@Path("/customerservice/") +@Produces("text/xml") +public class CustomerService { + private static final int MAX_ERROR_COUNT = 5; + private static ExecutorService executor = Executors.newSingleThreadExecutor(); + + long currentId = 123; + Map<Long, Customer> customers = new HashMap<Long, Customer>(); + Map<Long, Order> orders = new HashMap<Long, Order>(); + Map<String, WriterHolder<OutputStream>> monitors = new HashMap<String, WriterHolder<OutputStream>>(); + Map<String, WriterHolder<HttpServletResponse>> monitors2 = new HashMap<String, WriterHolder<HttpServletResponse>>(); + + public CustomerService() { + init(); + } + + @GET + @Path("/customers/{id}/") + public Customer getCustomer(@PathParam("id") String id) { + System.out.println("----invoking getCustomer, Customer id is: " + id); + long idNumber = Long.parseLong(id); + Customer customer = customers.get(idNumber); + if (customer != null) { + sendCustomerEvent("retrieved", customer); + } + return customer; + } + + @PUT + @Path("/customers/") + public Response updateCustomer(Customer customer) { + System.out.println("----invoking updateCustomer, Customer name is: " + customer.getName()); + Customer c = customers.get(customer.getId()); + Response r; + if (c != null) { + customers.put(customer.getId(), customer); + r = Response.ok().build(); + sendCustomerEvent("updated", customer); + } else { + r = Response.notModified().build(); + } + + return r; + } + + @POST + @Path("/customers/") + public Response addCustomer(Customer customer) { + System.out.println("----invoking addCustomer, Customer name is: " + customer.getName()); + customer.setId(++currentId); + + customers.put(customer.getId(), customer); + sendCustomerEvent("added", customer); + return Response.ok(customer).build(); + } + + @DELETE + @Path("/customers/{id}/") + public Response deleteCustomer(@PathParam("id") String id) { + System.out.println("----invoking deleteCustomer, Customer id is: " + id); + long idNumber = Long.parseLong(id); + Customer c = customers.get(idNumber); + + Response r; + if (c != null) { + r = Response.ok().build(); + Customer customer = customers.remove(idNumber); + if (customer != null) { + sendCustomerEvent("deleted", customer); + } + } else { + r = Response.notModified().build(); + } + + return r; + } + + @Path("/orders/{orderId}/") + public Order getOrder(@PathParam("orderId") String orderId) { + System.out.println("----invoking getOrder, Order id is: " + orderId); + long idNumber = Long.parseLong(orderId); + Order c = orders.get(idNumber); + return c; + } + + @GET + @Path("/monitor") + @Produces("text/*") + public StreamingOutput monitorCustomers( + @HeaderParam(WebSocketConstants.DEFAULT_REQUEST_ID_KEY) String reqid) { + final String key = reqid == null ? "*" : reqid; + return new StreamingOutput() { + public void write(final OutputStream out) throws IOException, WebApplicationException { + monitors.put(key, new WriterHolder(out, MAX_ERROR_COUNT)); + out.write(("Subscribed at " + new java.util.Date()).getBytes()); + } + + }; + } + + @GET + @Path("/monitor2") + @Produces("text/*") + public void monitorCustomers2( + final @javax.ws.rs.core.Context HttpServletResponse httpResponse, + @HeaderParam(WebSocketConstants.DEFAULT_REQUEST_ID_KEY) String reqid) { + final String key = reqid == null ? "*" : reqid; + monitors2.put(key, new WriterHolder(httpResponse, MAX_ERROR_COUNT)); + try { + httpResponse.getOutputStream().write(("Subscribed at " + new java.util.Date()).getBytes()); + } catch (IOException e) { + e.printStackTrace(); + } + } + + @GET + @Path("/unmonitor/{key}") + @Produces("text/*") + public String unmonitorCustomers(@PathParam("key") String key) { + return (monitors.remove(key) != null ? "Removed: " : "Already removed: ") + key; + } + + @GET + @Path("/unmonitor2/{key}") + @Produces("text/*") + public String unmonitorCustomers2(@PathParam("key") String key) { + return (monitors2.remove(key) != null ? "Removed: " : "Already removed: ") + key; + } + + private void sendCustomerEvent(final String msg, final Customer customer) { + executor.execute(new Runnable() { + public void run() { + try { + String t = msg + ": " + customer.getId() + "/" + customer.getName(); + for (Iterator<WriterHolder<OutputStream>> it = monitors.values().iterator(); it.hasNext();) { + WriterHolder<OutputStream> wh = it.next(); + try { + wh.getValue().write(t.getBytes()); + wh.getValue().flush(); + wh.reset(); + } catch (IOException e) { + System.out.println("----error writing to " + wh.getValue() + " " + wh.get()); + if (wh.increment()) { + // the max error count reached; purging the output resource + e.printStackTrace(); + try { + wh.getValue().close(); + } catch (IOException e2) { + // ignore; + } + it.remove(); + System.out.println("----purged " + wh.getValue()); + } + } + } + for (Iterator<WriterHolder<HttpServletResponse>> it = monitors2.values().iterator(); it.hasNext();) { + WriterHolder<HttpServletResponse> wh = it.next(); + try { + wh.getValue().getOutputStream().write(t.getBytes()); + wh.getValue().getOutputStream().flush(); + wh.reset(); + } catch (IOException e) { + System.out.println("----error writing to " + wh.getValue() + " " + wh.get()); + if (wh.increment()) { + // the max error count reached; purging the output resource + e.printStackTrace(); + try { + wh.getValue().getOutputStream().close(); + } catch (IOException e2) { + // ignore; + } + it.remove(); + System.out.println("----purged " + wh.getValue()); + } + } + } + } catch (Exception e) { + e.printStackTrace(); + } + } + }); + + } + final void init() { + Customer c = new Customer(); + c.setName("John"); + c.setId(123); + customers.put(c.getId(), c); + c = new Customer(); + c.setName("Homer"); + c.setId(235); + customers.put(c.getId(), c); + + Order o = new Order(); + o.setDescription("order 223"); + o.setId(223); + orders.put(o.getId(), o); + } + + private static class WriterHolder<T> { + final private T value; + final private int max; + final private AtomicInteger errorCount; + + public WriterHolder(T object, int max) { + this.value = object; + this.max = max; + this.errorCount = new AtomicInteger(); + } + + public T getValue() { + return value; + } + + public int get() { + return errorCount.get(); + } + public boolean increment() { + return max < errorCount.getAndIncrement(); + } + + public void reset() { + errorCount.getAndSet(0); + } + } +} http://git-wip-us.apache.org/repos/asf/cxf/blob/b3ec59ef/distribution/src/main/release/samples/jax_rs/websocket_web/src/main/java/demo/jaxrs/server/Order.java ---------------------------------------------------------------------- diff --git a/distribution/src/main/release/samples/jax_rs/websocket_web/src/main/java/demo/jaxrs/server/Order.java b/distribution/src/main/release/samples/jax_rs/websocket_web/src/main/java/demo/jaxrs/server/Order.java new file mode 100644 index 0000000..a06b68b --- /dev/null +++ b/distribution/src/main/release/samples/jax_rs/websocket_web/src/main/java/demo/jaxrs/server/Order.java @@ -0,0 +1,69 @@ +/** + * 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 demo.jaxrs.server; + +import java.util.HashMap; +import java.util.Map; +import javax.ws.rs.GET; +import javax.ws.rs.Path; +import javax.ws.rs.PathParam; + +import javax.xml.bind.annotation.XmlRootElement; + +@XmlRootElement(name = "Order") +public class Order { + private long id; + private String description; + private Map<Long, Product> products = new HashMap<Long, Product>(); + + public Order() { + init(); + } + + public long getId() { + return id; + } + + public void setId(long id) { + this.id = id; + } + + public String getDescription() { + return description; + } + + public void setDescription(String d) { + this.description = d; + } + + @GET + @Path("products/{productId}/") + public Product getProduct(@PathParam("productId")int productId) { + System.out.println("----invoking getProduct with id: " + productId); + Product p = products.get(new Long(productId)); + return p; + } + + final void init() { + Product p = new Product(); + p.setId(323); + p.setDescription("product 323"); + products.put(p.getId(), p); + } +} http://git-wip-us.apache.org/repos/asf/cxf/blob/b3ec59ef/distribution/src/main/release/samples/jax_rs/websocket_web/src/main/java/demo/jaxrs/server/Product.java ---------------------------------------------------------------------- diff --git a/distribution/src/main/release/samples/jax_rs/websocket_web/src/main/java/demo/jaxrs/server/Product.java b/distribution/src/main/release/samples/jax_rs/websocket_web/src/main/java/demo/jaxrs/server/Product.java new file mode 100644 index 0000000..4452ec5 --- /dev/null +++ b/distribution/src/main/release/samples/jax_rs/websocket_web/src/main/java/demo/jaxrs/server/Product.java @@ -0,0 +1,43 @@ +/** + * 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 demo.jaxrs.server; + +import javax.xml.bind.annotation.XmlRootElement; + +@XmlRootElement(name = "Product") +public class Product { + private long id; + private String description; + + public long getId() { + return id; + } + + public void setId(long id) { + this.id = id; + } + + public String getDescription() { + return description; + } + + public void setDescription(String d) { + this.description = d; + } +} http://git-wip-us.apache.org/repos/asf/cxf/blob/b3ec59ef/distribution/src/main/release/samples/jax_rs/websocket_web/src/main/webapp/WEB-INF/beans.xml ---------------------------------------------------------------------- diff --git a/distribution/src/main/release/samples/jax_rs/websocket_web/src/main/webapp/WEB-INF/beans.xml b/distribution/src/main/release/samples/jax_rs/websocket_web/src/main/webapp/WEB-INF/beans.xml new file mode 100644 index 0000000..b6ffaa1 --- /dev/null +++ b/distribution/src/main/release/samples/jax_rs/websocket_web/src/main/webapp/WEB-INF/beans.xml @@ -0,0 +1,46 @@ +<?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. +--> +<!-- START SNIPPET: beans --> +<beans xmlns="http://www.springframework.org/schema/beans" + xmlns:http="http://cxf.apache.org/transports/http/configuration" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:util="http://www.springframework.org/schema/util" + xmlns:jaxrs="http://cxf.apache.org/jaxrs" + xmlns:httpj="http://cxf.apache.org/transports/http-jetty/configuration" + xmlns:cxf="http://cxf.apache.org/core" + xsi:schemaLocation=" + http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd + http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util.xsd + http://cxf.apache.org/jaxrs http://cxf.apache.org/schemas/jaxrs.xsd + http://cxf.apache.org/transports/http/configuration http://cxf.apache.org/schemas/configuration/http-conf.xsd + http://cxf.apache.org/transports/http-jetty/configuration http://cxf.apache.org/schemas/configuration/http-jetty.xsd + http://cxf.apache.org/core http://cxf.apache.org/schemas/core.xsd"> + <import resource="classpath:META-INF/cxf/cxf.xml"/> + <import resource="classpath:META-INF/cxf/cxf-servlet.xml"/> + + <bean class="demo.jaxrs.server.CustomerService" id="serviceBean"/> + + <jaxrs:server id="websocketService" address="/demo" transportId="http://cxf.apache.org/transports/websocket"> + <jaxrs:serviceBeans> + <ref bean="serviceBean"/> + </jaxrs:serviceBeans> + </jaxrs:server> + +</beans> +<!-- END SNIPPET: beans --> http://git-wip-us.apache.org/repos/asf/cxf/blob/b3ec59ef/distribution/src/main/release/samples/jax_rs/websocket_web/src/main/webapp/WEB-INF/web.xml ---------------------------------------------------------------------- diff --git a/distribution/src/main/release/samples/jax_rs/websocket_web/src/main/webapp/WEB-INF/web.xml b/distribution/src/main/release/samples/jax_rs/websocket_web/src/main/webapp/WEB-INF/web.xml new file mode 100644 index 0000000..b9f5299 --- /dev/null +++ b/distribution/src/main/release/samples/jax_rs/websocket_web/src/main/webapp/WEB-INF/web.xml @@ -0,0 +1,42 @@ +<?xml version="1.0" encoding="ISO-8859-1"?> +<!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "http://java.sun.com/dtd/web-app_2_3.dtd"> +<!-- + 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. +--> +<!-- START SNIPPET: webxml --> +<web-app> + <context-param> + <param-name>contextConfigLocation</param-name> + <param-value>WEB-INF/beans.xml</param-value> + </context-param> + <listener> + <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> + </listener> + <servlet> + <servlet-name>CXFServlet</servlet-name> + <display-name>CXF Servlet</display-name> + <servlet-class>org.apache.cxf.transport.servlet.CXFServlet</servlet-class> + <load-on-startup>1</load-on-startup> + <async-supported>true</async-supported> + </servlet> + <servlet-mapping> + <servlet-name>CXFServlet</servlet-name> + <url-pattern>/*</url-pattern> + </servlet-mapping> +</web-app> +<!-- END SNIPPET: webxml -->