Jervis,
Is the jsr311-api jar CDDL? If so, I don't believe it can be checked
into Apache's svn.
Dan
On Thursday 06 September 2007, jliu@apache.org wrote:
> Author: jliu
> Date: Thu Sep 6 19:44:44 2007
> New Revision: 573429
>
> URL: http://svn.apache.org/viewvc?rev=573429&view=rev
> Log: (empty)
>
> Added:
> incubator/cxf/branches/jliu/maven_repo/
> incubator/cxf/branches/jliu/maven_repo/javax/
> incubator/cxf/branches/jliu/maven_repo/javax/rs/
> incubator/cxf/branches/jliu/maven_repo/javax/rs/jsr311-api/
> incubator/cxf/branches/jliu/maven_repo/javax/rs/jsr311-api/0.9/
>
> incubator/cxf/branches/jliu/maven_repo/javax/rs/jsr311-api/0.9/jsr311-
>api-0.9.jar (with props)
> incubator/cxf/branches/jliu/maven_repo/javax/rs/jsr311-api/0.9/jsr311-
>api-0.9.jar.sha1
> incubator/cxf/branches/jliu/maven_repo/javax/rs/jsr311-api/0.9/jsr311-
>api-0.9.pom
> incubator/cxf/branches/jliu/maven_repo/javax/rs/jsr311-api/0.9/jsr311-
>api-0.9.pom.sha1
> incubator/cxf/branches/jliu/rt/core/src/main/java/org/apache/cxf/endpo
>int/AbstractEndpointFactory.java (with props)
> incubator/cxf/branches/jliu/rt/frontend/jaxrs/
> incubator/cxf/branches/jliu/rt/frontend/jaxrs/pom.xml (with
> props) incubator/cxf/branches/jliu/rt/frontend/jaxrs/src/
> incubator/cxf/branches/jliu/rt/frontend/jaxrs/src/main/
> incubator/cxf/branches/jliu/rt/frontend/jaxrs/src/main/java/
> incubator/cxf/branches/jliu/rt/frontend/jaxrs/src/main/java/org/
>
> incubator/cxf/branches/jliu/rt/frontend/jaxrs/src/main/java/org/apache
>/
> incubator/cxf/branches/jliu/rt/frontend/jaxrs/src/main/java/org/apache
>/cxf/
> incubator/cxf/branches/jliu/rt/frontend/jaxrs/src/main/java/org/apache
>/cxf/jaxrs/
> incubator/cxf/branches/jliu/rt/frontend/jaxrs/src/main/java/org/apache
>/cxf/jaxrs/JAXRSBindingFactory.java (with props)
> incubator/cxf/branches/jliu/rt/frontend/jaxrs/src/main/java/org/apache
>/cxf/jaxrs/JAXRSInvoker.java (with props)
> incubator/cxf/branches/jliu/rt/frontend/jaxrs/src/main/java/org/apache
>/cxf/jaxrs/JAXRSServerFactoryBean.java (with props)
> incubator/cxf/branches/jliu/rt/frontend/jaxrs/src/main/java/org/apache
>/cxf/jaxrs/JAXRSServiceFactoryBean.java (with props)
> incubator/cxf/branches/jliu/rt/frontend/jaxrs/src/main/java/org/apache
>/cxf/jaxrs/JAXRSServiceImpl.java (with props)
> incubator/cxf/branches/jliu/rt/frontend/jaxrs/src/main/java/org/apache
>/cxf/jaxrs/interceptor/
> incubator/cxf/branches/jliu/rt/frontend/jaxrs/src/main/java/org/apache
>/cxf/jaxrs/interceptor/JAXRSDispatchInterceptor.java (with props)
> incubator/cxf/branches/jliu/rt/frontend/jaxrs/src/main/java/org/apache
>/cxf/jaxrs/interceptor/JAXRSOutInterceptor.java (with props)
> incubator/cxf/branches/jliu/rt/frontend/jaxrs/src/main/java/org/apache
>/cxf/jaxrs/model/
> incubator/cxf/branches/jliu/rt/frontend/jaxrs/src/main/java/org/apache
>/cxf/jaxrs/model/ClassResourceInfo.java (with props)
> incubator/cxf/branches/jliu/rt/frontend/jaxrs/src/main/java/org/apache
>/cxf/jaxrs/model/MethodDispatcher.java (with props)
> incubator/cxf/branches/jliu/rt/frontend/jaxrs/src/main/java/org/apache
>/cxf/jaxrs/model/OperationResourceInfo.java (with props)
> incubator/cxf/branches/jliu/rt/frontend/jaxrs/src/main/java/org/apache
>/cxf/jaxrs/model/URITemplate.java (with props)
> incubator/cxf/branches/jliu/rt/frontend/jaxrs/src/main/java/org/apache
>/cxf/jaxrs/provider/
> incubator/cxf/branches/jliu/rt/frontend/jaxrs/src/main/java/org/apache
>/cxf/jaxrs/provider/JAXBElementProvider.java (with props)
> incubator/cxf/branches/jliu/rt/frontend/jaxrs/src/main/java/org/apache
>/cxf/jaxrs/provider/ProviderFactoryImpl.java (with props)
> incubator/cxf/branches/jliu/rt/frontend/jaxrs/src/main/resources/
> incubator/cxf/branches/jliu/rt/frontend/jaxrs/src/main/resources/META-
>INF/
> incubator/cxf/branches/jliu/rt/frontend/jaxrs/src/main/resources/META-
>INF/bus-extensions.xml (with props)
> incubator/cxf/branches/jliu/rt/frontend/jaxrs/src/main/resources/META-
>INF/cxf/
> incubator/cxf/branches/jliu/rt/frontend/jaxrs/src/main/resources/META-
>INF/cxf/cxf-extension-jaxrs-binding.xml (with props)
> incubator/cxf/branches/jliu/rt/frontend/jaxrs/src/main/resources/META-
>INF/cxf/cxf.extension
> incubator/cxf/branches/jliu/rt/frontend/jaxrs/src/main/resources/META-
>INF/services/
> incubator/cxf/branches/jliu/rt/frontend/jaxrs/src/main/resources/META-
>INF/services/javax.ws.rs.ext.ProviderFactory
> incubator/cxf/branches/jliu/rt/frontend/jaxrs/src/test/
> incubator/cxf/branches/jliu/rt/frontend/jaxrs/src/test/java/
> incubator/cxf/branches/jliu/rt/frontend/jaxrs/src/test/java/org/
>
> incubator/cxf/branches/jliu/rt/frontend/jaxrs/src/test/java/org/apache
>/
> incubator/cxf/branches/jliu/rt/frontend/jaxrs/src/test/java/org/apache
>/cxf/
> incubator/cxf/branches/jliu/rt/frontend/jaxrs/src/test/java/org/apache
>/cxf/rs/
> incubator/cxf/branches/jliu/systests/src/test/java/org/apache/cxf/syst
>est/jaxrs/
> incubator/cxf/branches/jliu/systests/src/test/java/org/apache/cxf/syst
>est/jaxrs/Book.java (with props)
> incubator/cxf/branches/jliu/systests/src/test/java/org/apache/cxf/syst
>est/jaxrs/BookServer.java (with props)
> incubator/cxf/branches/jliu/systests/src/test/java/org/apache/cxf/syst
>est/jaxrs/BookStore.java (with props)
> incubator/cxf/branches/jliu/systests/src/test/java/org/apache/cxf/syst
>est/jaxrs/CD.java (with props)
> incubator/cxf/branches/jliu/systests/src/test/java/org/apache/cxf/syst
>est/jaxrs/JAXRSClientServerBookTest.java (with props) Modified:
> incubator/cxf/branches/jliu/pom.xml
>
> incubator/cxf/branches/jliu/rt/core/src/main/java/org/apache/cxf/endpo
>int/ManagedEndpoint.java
> incubator/cxf/branches/jliu/rt/core/src/main/java/org/apache/cxf/trans
>port/ChainInitiationObserver.java
> incubator/cxf/branches/jliu/rt/databinding/aegis/src/test/java/org/apa
>che/cxf/aegis/AbstractAegisTest.java
> incubator/cxf/branches/jliu/rt/frontend/simple/src/main/java/org/apach
>e/cxf/frontend/AbstractServiceFactory.java
> incubator/cxf/branches/jliu/rt/frontend/simple/src/main/java/org/apach
>e/cxf/frontend/ClientFactoryBean.java
> incubator/cxf/branches/jliu/rt/frontend/simple/src/main/java/org/apach
>e/cxf/frontend/ServerFactoryBean.java
> incubator/cxf/branches/jliu/rt/pom.xml
> incubator/cxf/branches/jliu/systests/pom.xml
>
> Added:
> incubator/cxf/branches/jliu/maven_repo/javax/rs/jsr311-api/0.9/jsr311-
>api-0.9.jar URL:
> http://svn.apache.org/viewvc/incubator/cxf/branches/jliu/maven_repo/ja
>vax/rs/jsr311-api/0.9/jsr311-api-0.9.jar?rev=573429&view=auto
> ======================================================================
>======== Binary file - no diff available.
>
> Propchange:
> incubator/cxf/branches/jliu/maven_repo/javax/rs/jsr311-api/0.9/jsr311-
>api-0.9.jar
> ----------------------------------------------------------------------
>-------- svn:mime-type = application/octet-stream
>
> Added:
> incubator/cxf/branches/jliu/maven_repo/javax/rs/jsr311-api/0.9/jsr311-
>api-0.9.jar.sha1 URL:
> http://svn.apache.org/viewvc/incubator/cxf/branches/jliu/maven_repo/ja
>vax/rs/jsr311-api/0.9/jsr311-api-0.9.jar.sha1?rev=573429&view=auto
> ======================================================================
>======== ---
> incubator/cxf/branches/jliu/maven_repo/javax/rs/jsr311-api/0.9/jsr311-
>api-0.9.jar.sha1 (added) +++
> incubator/cxf/branches/jliu/maven_repo/javax/rs/jsr311-api/0.9/jsr311-
>api-0.9.jar.sha1 Thu Sep 6 19:44:44 2007 @@ -0,0 +1 @@
> +efb2ae8fdef14a34ae4161bcdac1a145e335745f jsr311-api-0.9.jar
>
> Added:
> incubator/cxf/branches/jliu/maven_repo/javax/rs/jsr311-api/0.9/jsr311-
>api-0.9.pom URL:
> http://svn.apache.org/viewvc/incubator/cxf/branches/jliu/maven_repo/ja
>vax/rs/jsr311-api/0.9/jsr311-api-0.9.pom?rev=573429&view=auto
> ======================================================================
>======== ---
> incubator/cxf/branches/jliu/maven_repo/javax/rs/jsr311-api/0.9/jsr311-
>api-0.9.pom (added) +++
> incubator/cxf/branches/jliu/maven_repo/javax/rs/jsr311-api/0.9/jsr311-
>api-0.9.pom Thu Sep 6 19:44:44 2007 @@ -0,0 +1,11 @@
> +<?xml version="1.0" encoding="UTF-8"?><project>
> + <modelVersion>4.0.0</modelVersion>
> + <groupId>javax.rs</groupId>
> + <artifactId>jsr311-api</artifactId>
> + <version>0.9</version>
> + <description>Web Service Annotations</description>
> + <url>https://jax-ws.dev.java.net/</url>
> + <distributionManagement>
> +
> <downloadUrl>https://jax-ws.dev.java.net/jax-ws-ea3/</downloadUrl> +
> </distributionManagement>
> +</project>
> \ No newline at end of file
>
> Added:
> incubator/cxf/branches/jliu/maven_repo/javax/rs/jsr311-api/0.9/jsr311-
>api-0.9.pom.sha1 URL:
> http://svn.apache.org/viewvc/incubator/cxf/branches/jliu/maven_repo/ja
>vax/rs/jsr311-api/0.9/jsr311-api-0.9.pom.sha1?rev=573429&view=auto
> ======================================================================
>======== ---
> incubator/cxf/branches/jliu/maven_repo/javax/rs/jsr311-api/0.9/jsr311-
>api-0.9.pom.sha1 (added) +++
> incubator/cxf/branches/jliu/maven_repo/javax/rs/jsr311-api/0.9/jsr311-
>api-0.9.pom.sha1 Thu Sep 6 19:44:44 2007 @@ -0,0 +1 @@
> +04be00a0d964c572f4b6471263ba166db9b5496c jsr311-api-0.9.pom
>
> Modified: incubator/cxf/branches/jliu/pom.xml
> URL:
> http://svn.apache.org/viewvc/incubator/cxf/branches/jliu/pom.xml?rev=5
>73429&r1=573428&r2=573429&view=diff
> ======================================================================
>======== --- incubator/cxf/branches/jliu/pom.xml (original)
> +++ incubator/cxf/branches/jliu/pom.xml Thu Sep 6 19:44:44 2007
> @@ -42,6 +42,7 @@
> </prerequisites>
>
> <properties>
> + <topDirectoryLocation>.</topDirectoryLocation>
> <compiler.fork>false</compiler.fork>
> </properties>
>
> @@ -139,7 +140,29 @@
> <module>maven-plugins/archetypes</module>
> <module>maven-plugins/eclipse-plugin-generator</module>
> </modules>
> +
>
> + <repositories>
> + <repository>
> + <id>private-repo</id>
> + <name>private repo</name>
> +
> <url>file:${basedir}/${topDirectoryLocation}/maven_repo</url> +
> <releases>
> + <enabled>true</enabled>
> + </releases>
> + <snapshots>
> + <enabled>true</enabled>
> + </snapshots>
> + </repository>
> + <repository>
> + <id>java.net</id>
> + <name>java.net Maven Repository</name>
> +
> <url>https://maven-repository.dev.java.net/nonav/repository/</url> +
> <layout>legacy</layout>
> + </repository>
> + </repositories>
> +
> +
> <profiles>
> <profile>
> <!-- default profile enables checkstyle and Xlint stuff
> -->
>
> Added:
> incubator/cxf/branches/jliu/rt/core/src/main/java/org/apache/cxf/endpo
>int/AbstractEndpointFactory.java URL:
> http://svn.apache.org/viewvc/incubator/cxf/branches/jliu/rt/core/src/m
>ain/java/org/apache/cxf/endpoint/AbstractEndpointFactory.java?rev=57342
>9&view=auto
> ======================================================================
>======== ---
> incubator/cxf/branches/jliu/rt/core/src/main/java/org/apache/cxf/endpo
>int/AbstractEndpointFactory.java (added) +++
> incubator/cxf/branches/jliu/rt/core/src/main/java/org/apache/cxf/endpo
>int/AbstractEndpointFactory.java Thu Sep 6 19:44:44 2007 @@ -0,0
> +1,167 @@
> +/**
> + * 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.endpoint;
> +
> +import java.util.ArrayList;
> +import java.util.List;
> +import java.util.Map;
> +
> +import javax.xml.namespace.QName;
> +
> +import org.apache.cxf.Bus;
> +import org.apache.cxf.BusException;
> +import org.apache.cxf.BusFactory;
> +import org.apache.cxf.binding.BindingConfiguration;
> +import org.apache.cxf.binding.BindingFactory;
> +import org.apache.cxf.databinding.DataBinding;
> +import org.apache.cxf.feature.AbstractFeature;
> +import org.apache.cxf.interceptor.AbstractBasicInterceptorProvider;
> +import org.apache.cxf.service.model.BindingInfo;
> +import org.apache.cxf.service.model.EndpointInfo;
> +import org.apache.cxf.transport.DestinationFactory;
> +import org.apache.cxf.ws.addressing.EndpointReferenceType;
> +
> +public abstract class AbstractEndpointFactory extends
> AbstractBasicInterceptorProvider { + protected Bus bus;
> + protected String address;
> + protected String transportId;
> + protected String bindingId;
> + protected DataBinding dataBinding;
> + protected BindingFactory bindingFactory;
> + protected DestinationFactory destinationFactory;
> + protected QName endpointName;
> + protected Map<String, Object> properties;
> + protected List<AbstractFeature> features;
> + protected BindingConfiguration bindingConfig;
> + protected EndpointReferenceType endpointReference;
> + protected ConduitSelector conduitSelector;
> +
> + protected abstract Endpoint createEndpoint() throws BusException,
> EndpointException; +
> + protected abstract EndpointInfo createEndpointInfo() throws
> BusException; +
> + protected abstract BindingInfo createBindingInfo();
> +
> + public String getAddress() {
> + return address;
> + }
> +
> + public void setAddress(String address) {
> + this.address = address;
> + }
> +
> + public Bus getBus() {
> + if (bus == null) {
> + bus = BusFactory.getThreadDefaultBus();
> + }
> + return bus;
> + }
> +
> + public void setBus(Bus bus) {
> + this.bus = bus;
> + }
> +
> + public String getTransportId() {
> + return transportId;
> + }
> +
> + public void setTransportId(String transportId) {
> + this.transportId = transportId;
> + }
> +
> + public void setBindingId(String bind) {
> + bindingId = bind;
> + }
> +
> + public String getBindingId() {
> + return bindingId;
> + }
> +
> + public void setBindingConfig(BindingConfiguration obj) {
> + bindingConfig = obj;
> + }
> +
> + public BindingConfiguration getBindingConfig() {
> + return bindingConfig;
> + }
> +
> + public DestinationFactory getDestinationFactory() {
> + return destinationFactory;
> + }
> +
> + public void setDestinationFactory(DestinationFactory
> destinationFactory) { + this.destinationFactory =
> destinationFactory;
> + }
> +
> + public QName getEndpointName() {
> + return endpointName;
> + }
> +
> + public void setEndpointName(QName endpointName) {
> + this.endpointName = endpointName;
> + }
> +
> + public void setEndpointReference(EndpointReferenceType epr) {
> + endpointReference = epr;
> + }
> +
> + public Map<String, Object> getProperties() {
> + return properties;
> + }
> +
> + public void setProperties(Map<String, Object> properties) {
> + this.properties = properties;
> + }
> +
> + public List<AbstractFeature> getFeatures() {
> + if (features == null) {
> + features = new ArrayList<AbstractFeature>();
> + }
> + return features;
> + }
> +
> + public void setFeatures(List<AbstractFeature> features) {
> + this.features = features;
> + }
> +
> + public BindingFactory getBindingFactory() {
> + return bindingFactory;
> + }
> +
> + public void setBindingFactory(BindingFactory bf) {
> + this.bindingFactory = bf;
> + }
> +
> + public ConduitSelector getConduitSelector() {
> + return conduitSelector;
> + }
> +
> + public void setConduitSelector(ConduitSelector selector) {
> + conduitSelector = selector;
> + }
> +
> + public DataBinding getDataBinding() {
> + return dataBinding;
> + }
> +
> + public void setDataBinding(DataBinding dataBinding) {
> + this.dataBinding = dataBinding;
> + }
> +
> +}
>
> Propchange:
> incubator/cxf/branches/jliu/rt/core/src/main/java/org/apache/cxf/endpo
>int/AbstractEndpointFactory.java
> ----------------------------------------------------------------------
>-------- svn:eol-style = native
>
> Propchange:
> incubator/cxf/branches/jliu/rt/core/src/main/java/org/apache/cxf/endpo
>int/AbstractEndpointFactory.java
> ----------------------------------------------------------------------
>-------- svn:keywords = Rev Date
>
> Modified:
> incubator/cxf/branches/jliu/rt/core/src/main/java/org/apache/cxf/endpo
>int/ManagedEndpoint.java URL:
> http://svn.apache.org/viewvc/incubator/cxf/branches/jliu/rt/core/src/m
>ain/java/org/apache/cxf/endpoint/ManagedEndpoint.java?rev=573429&r1=573
>428&r2=573429&view=diff
> ======================================================================
>======== ---
> incubator/cxf/branches/jliu/rt/core/src/main/java/org/apache/cxf/endpo
>int/ManagedEndpoint.java (original) +++
> incubator/cxf/branches/jliu/rt/core/src/main/java/org/apache/cxf/endpo
>int/ManagedEndpoint.java Thu Sep 6 19:44:44 2007 @@ -86,7 +86,7 @@
> buffer.append(ManagementConstants.TYPE_PROP + "=" +
> "Bus.Service.Endpoint,");
>
>
> - String serviceName =
> ObjectName.quote(endpoint.getEndpointInfo().getService().getName().toS
>tring()); + String serviceName =
> ObjectName.quote(endpoint.getService().getName().toString());
> buffer.append(ManagementConstants.SERVICE_NAME_PROP + "=" +
> serviceName + ","); String endpointName =
> ObjectName.quote(endpoint.getEndpointInfo().getName().toString());
> buffer.append(ManagementConstants.PORT_NAME_PROP + "=" +
> endpointName);
>
> Modified:
> incubator/cxf/branches/jliu/rt/core/src/main/java/org/apache/cxf/trans
>port/ChainInitiationObserver.java URL:
> http://svn.apache.org/viewvc/incubator/cxf/branches/jliu/rt/core/src/m
>ain/java/org/apache/cxf/transport/ChainInitiationObserver.java?rev=5734
>29&r1=573428&r2=573429&view=diff
> ======================================================================
>======== ---
> incubator/cxf/branches/jliu/rt/core/src/main/java/org/apache/cxf/trans
>port/ChainInitiationObserver.java (original) +++
> incubator/cxf/branches/jliu/rt/core/src/main/java/org/apache/cxf/trans
>port/ChainInitiationObserver.java Thu Sep 6 19:44:44 2007 @@ -35,6
> +35,7 @@
> import org.apache.cxf.phase.PhaseInterceptorChain;
> import org.apache.cxf.phase.PhaseManager;
> import org.apache.cxf.service.Service;
> +import org.apache.cxf.service.ServiceImpl;
> import org.apache.cxf.service.model.EndpointInfo;
>
> public class ChainInitiationObserver implements MessageObserver {
> @@ -86,7 +87,7 @@
> if (exchange.getDestination() == null) {
> exchange.setDestination(m.getDestination());
> }
> - if (endpoint != null) {
> + if (endpoint != null && (endpoint.getService() instanceof
> ServiceImpl)) {
>
> EndpointInfo endpointInfo = endpoint.getEndpointInfo();
>
>
> Modified:
> incubator/cxf/branches/jliu/rt/databinding/aegis/src/test/java/org/apa
>che/cxf/aegis/AbstractAegisTest.java URL:
> http://svn.apache.org/viewvc/incubator/cxf/branches/jliu/rt/databindin
>g/aegis/src/test/java/org/apache/cxf/aegis/AbstractAegisTest.java?rev=5
>73429&r1=573428&r2=573429&view=diff
> ======================================================================
>======== ---
> incubator/cxf/branches/jliu/rt/databinding/aegis/src/test/java/org/apa
>che/cxf/aegis/AbstractAegisTest.java (original) +++
> incubator/cxf/branches/jliu/rt/databinding/aegis/src/test/java/org/apa
>che/cxf/aegis/AbstractAegisTest.java Thu Sep 6 19:44:44 2007 @@ -42,7
> +42,7 @@
> import org.apache.cxf.bus.extension.ExtensionManagerBus;
> import org.apache.cxf.endpoint.Server;
> import org.apache.cxf.endpoint.ServerRegistry;
> -import org.apache.cxf.frontend.AbstractEndpointFactory;
> +import org.apache.cxf.frontend.AbstractWSDLBasedEndpointFactory;
> import org.apache.cxf.frontend.ServerFactoryBean;
> import org.apache.cxf.service.Service;
> import org.apache.cxf.test.AbstractCXFTest;
> @@ -128,7 +128,7 @@
> return sf;
> }
>
> - protected void setupAegis(AbstractEndpointFactory sf) {
> + protected void setupAegis(AbstractWSDLBasedEndpointFactory sf) {
> sf.getServiceFactory().getServiceConfigurations().add(0, new
> AegisServiceConfiguration());
> sf.getServiceFactory().setDataBinding(new AegisDatabinding()); }
>
> Added: incubator/cxf/branches/jliu/rt/frontend/jaxrs/pom.xml
> URL:
> http://svn.apache.org/viewvc/incubator/cxf/branches/jliu/rt/frontend/j
>axrs/pom.xml?rev=573429&view=auto
> ======================================================================
>======== --- incubator/cxf/branches/jliu/rt/frontend/jaxrs/pom.xml
> (added) +++ incubator/cxf/branches/jliu/rt/frontend/jaxrs/pom.xml Thu
> Sep 6 19:44:44 2007 @@ -0,0 +1,94 @@
> +<!--
> + 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>
> + <groupId>org.apache.cxf</groupId>
> + <artifactId>cxf-rt-frontend-jaxrs</artifactId>
> + <packaging>jar</packaging>
> + <version>2.1-incubator-SNAPSHOT</version>
> + <name>Apache CXF Runtime JAX-RS Frontend</name>
> + <url>http://cwiki.apache.org/CXF</url>
> +
> + <parent>
> + <groupId>org.apache.cxf</groupId>
> + <artifactId>cxf-parent</artifactId>
> + <version>2.1-incubator-SNAPSHOT</version>
> + <relativePath>../../../parent/pom.xml</relativePath>
> + </parent>
> +
> + <dependencies>
> + <dependency>
> + <groupId>junit</groupId>
> + <artifactId>junit</artifactId>
> + <scope>test</scope>
> + </dependency>
> + <dependency>
> + <groupId>org.apache.cxf</groupId>
> + <artifactId>cxf-common-utilities</artifactId>
> + <version>${project.version}</version>
> + </dependency>
> + <dependency>
> + <groupId>org.apache.cxf</groupId>
> + <artifactId>cxf-api</artifactId>
> + <version>${project.version}</version>
> + </dependency>
> + <dependency>
> + <groupId>org.apache.cxf</groupId>
> + <artifactId>cxf-rt-core</artifactId>
> + <version>${project.version}</version>
> + </dependency>
> + <dependency>
> + <groupId>org.springframework</groupId>
> + <artifactId>spring-core</artifactId>
> + </dependency>
> + <dependency>
> + <groupId>javax.rs</groupId>
> + <artifactId>jsr311-api</artifactId>
> + <version>0.9</version>
> + </dependency>
> + <dependency>
> + <groupId>org.apache.cxf</groupId>
> + <artifactId>cxf-rt-frontend-jaxws</artifactId>
> + <version>${project.version}</version>
> + </dependency>
> + <dependency>
> + <groupId>javax.rs</groupId>
> + <artifactId>jsr311-api</artifactId>
> + <version>0.9</version>
> + </dependency>
> + <dependency>
> + <groupId>org.apache.cxf</groupId>
> + <artifactId>cxf-testutils</artifactId>
> + <version>${project.version}</version>
> + <scope>test</scope>
> + </dependency>
> + <dependency>
> + <groupId>org.easymock</groupId>
> + <artifactId>easymockclassextension</artifactId>
> + <scope>test</scope>
> + </dependency>
> + </dependencies>
> +
> + <scm>
> +
> <connection>scm:svn:http://svn.apache.org/repos/asf/incubator/cxf/trun
>k/rt/rs</connection> +
> <developerConnection>scm:svn:https://svn.apache.org/repos/asf/incubato
>r/cxf/trunk/rt/rs</developerConnection> +
> <url>http://svn.apache.org/viewvc/incubator/cxf/trunk/cxf-parent/cxf-r
>t-rs</url> + </scm>
> +
> +</project>
>
> Propchange: incubator/cxf/branches/jliu/rt/frontend/jaxrs/pom.xml
> ----------------------------------------------------------------------
>-------- svn:eol-style = native
>
> Propchange: incubator/cxf/branches/jliu/rt/frontend/jaxrs/pom.xml
> ----------------------------------------------------------------------
>-------- svn:keywords = Rev Date
>
> Propchange: incubator/cxf/branches/jliu/rt/frontend/jaxrs/pom.xml
> ----------------------------------------------------------------------
>-------- svn:mime-type = text/xml
>
> Added:
> incubator/cxf/branches/jliu/rt/frontend/jaxrs/src/main/java/org/apache
>/cxf/jaxrs/JAXRSBindingFactory.java URL:
> http://svn.apache.org/viewvc/incubator/cxf/branches/jliu/rt/frontend/j
>axrs/src/main/java/org/apache/cxf/jaxrs/JAXRSBindingFactory.java?rev=57
>3429&view=auto
> ======================================================================
>======== ---
> incubator/cxf/branches/jliu/rt/frontend/jaxrs/src/main/java/org/apache
>/cxf/jaxrs/JAXRSBindingFactory.java (added) +++
> incubator/cxf/branches/jliu/rt/frontend/jaxrs/src/main/java/org/apache
>/cxf/jaxrs/JAXRSBindingFactory.java Thu Sep 6 19:44:44 2007 @@ -0,0
> +1,96 @@
> +/**
> + * 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.jaxrs;
> +
> +
> +import org.apache.cxf.binding.AbstractBindingFactory;
> +import org.apache.cxf.binding.Binding;
> +
> +import org.apache.cxf.binding.xml.XMLBinding;
> +import org.apache.cxf.jaxrs.interceptor.JAXRSDispatchInterceptor;
> +import org.apache.cxf.jaxrs.interceptor.JAXRSOutInterceptor;
> +import org.apache.cxf.service.Service;
> +import org.apache.cxf.service.model.BindingInfo;
> +
> +public class JAXRSBindingFactory extends AbstractBindingFactory {
> +
> + public static final String JAXRS_BINDING_ID =
> "http://apache.org/cxf/binding/jaxrs"; +
> + public JAXRSBindingFactory() {
> + }
> +
> + public Binding createBinding(BindingInfo bi) {
> + XMLBinding binding = new XMLBinding(bi);
> +
> + binding.getInInterceptors().add(new
> JAXRSDispatchInterceptor()); +
> binding.getOutInterceptors().add(new JAXRSOutInterceptor()); +
> +/*
> + binding.getInFaultInterceptors().add(new
> XMLFaultInInterceptor()); +
> + binding.getOutFaultInterceptors().add(new
> ContentTypeOutInterceptor()); +
> binding.getOutFaultInterceptors().add(new StaxOutInterceptor()); +
> binding.getOutFaultInterceptors().add(new
> XMLFaultOutInterceptor());*/ +
> + return binding;
> + }
> +
> +
> + public BindingInfo createBindingInfo(Service service, String
> namespace, Object obj) { + BindingInfo info = new
> BindingInfo(null,
> +
> JAXRSBindingFactory.JAXRS_BINDING_ID); +
> + return info;
> +
> +/* ServiceInfo si = service.getServiceInfos().get(0);
> + BindingInfo info = new BindingInfo(si,
> +
> RESTBindingFactory.REST_BINDING_ID); + info.setName(new
> QName(si.getName().getNamespaceURI(), +
> si.getName().getLocalPart() + "HttpBinding")); +
> + //service.put(URIMapper.class.getName(), mapper);
> + MethodDispatcher md = (MethodDispatcher)
> service.get(MethodDispatcher.class.getName()); +
> + for (OperationInfo o : si.getInterface().getOperations()) {
> + BindingOperationInfo bop =
> info.buildOperation(o.getName(), o.getInputName(), o.getOutputName());
> +
> + info.addOperation(bop);
> +
> + Method m = md.getMethod(bop);
> +
> + try {
> + Class c = (Class)
> service.get(ReflectionServiceFactoryBean.ENDPOINT_CLASS); +
> if (c != null) {
> + m = c.getMethod(m.getName(),
> m.getParameterTypes()); + }
> + } catch (SecurityException e) {
> + throw new ServiceConstructionException(e);
> + } catch (NoSuchMethodException e) {
> + throw new ServiceConstructionException(e);
> + }
> +
> + }
> +
> + return info;*/
> +
> + //return null;
> + }
> +
> +
> +}
>
> Propchange:
> incubator/cxf/branches/jliu/rt/frontend/jaxrs/src/main/java/org/apache
>/cxf/jaxrs/JAXRSBindingFactory.java
> ----------------------------------------------------------------------
>-------- svn:eol-style = native
>
> Propchange:
> incubator/cxf/branches/jliu/rt/frontend/jaxrs/src/main/java/org/apache
>/cxf/jaxrs/JAXRSBindingFactory.java
> ----------------------------------------------------------------------
>-------- svn:keywords = Rev Date
>
> Added:
> incubator/cxf/branches/jliu/rt/frontend/jaxrs/src/main/java/org/apache
>/cxf/jaxrs/JAXRSInvoker.java URL:
> http://svn.apache.org/viewvc/incubator/cxf/branches/jliu/rt/frontend/j
>axrs/src/main/java/org/apache/cxf/jaxrs/JAXRSInvoker.java?rev=573429&vi
>ew=auto
> ======================================================================
>======== ---
> incubator/cxf/branches/jliu/rt/frontend/jaxrs/src/main/java/org/apache
>/cxf/jaxrs/JAXRSInvoker.java (added) +++
> incubator/cxf/branches/jliu/rt/frontend/jaxrs/src/main/java/org/apache
>/cxf/jaxrs/JAXRSInvoker.java Thu Sep 6 19:44:44 2007 @@ -0,0 +1,70 @@
> +/**
> + * 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.jaxrs;
> +
> +
> +import java.lang.reflect.Method;
> +import java.util.List;
> +
> +import org.apache.cxf.helpers.CastUtils;
> +import org.apache.cxf.jaxrs.model.ClassResourceInfo;
> +import org.apache.cxf.jaxrs.model.OperationResourceInfo;
> +import org.apache.cxf.message.Exchange;
> +import org.apache.cxf.message.MessageContentsList;
> +import org.apache.cxf.service.invoker.AbstractInvoker;
> +
> +public class JAXRSInvoker extends AbstractInvoker {
> + public JAXRSInvoker() {
> + }
> +
> + public Object invoke(Exchange exchange, Object o) {
> + OperationResourceInfo ori =
> exchange.get(OperationResourceInfo.class); +
> + ClassResourceInfo classResourceInfo =
> ori.getClassResourceInfo(); + Method m =
> classResourceInfo.getMethodDispatcher().getMethod(ori); +
> Object serviceObject = null;
> + try {
> + serviceObject =
> classResourceInfo.getResourceClass().newInstance(); + } catch
> (Exception e) {
> + e.printStackTrace();
> + }
> +
> +
> +/* MethodDispatcher md = (MethodDispatcher)
> +
> exchange.get(Service.class).get(MethodDispatcher.class.getName()); +
> Method m = md.getMethod(bop);*/
> + //Method m =
> (Method)bop.getOperationInfo().getProperty(Method.class.getName()); +
> //m = matchMethod(m, serviceObject);
> +
> + List<Object> params = null;
> + if (o instanceof List) {
> + params = CastUtils.cast((List<?>)o);
> + } else if (o != null) {
> + params = new MessageContentsList(o);
> + }
> +
> + return invoke(exchange, serviceObject, m, params);
> + }
> +
> + public Object getServiceObject(Exchange ex) {
> + return null;
> + }
> +
> +}
>
> Propchange:
> incubator/cxf/branches/jliu/rt/frontend/jaxrs/src/main/java/org/apache
>/cxf/jaxrs/JAXRSInvoker.java
> ----------------------------------------------------------------------
>-------- svn:eol-style = native
>
> Propchange:
> incubator/cxf/branches/jliu/rt/frontend/jaxrs/src/main/java/org/apache
>/cxf/jaxrs/JAXRSInvoker.java
> ----------------------------------------------------------------------
>-------- svn:keywords = Rev Date
>
> Added:
> incubator/cxf/branches/jliu/rt/frontend/jaxrs/src/main/java/org/apache
>/cxf/jaxrs/JAXRSServerFactoryBean.java URL:
> http://svn.apache.org/viewvc/incubator/cxf/branches/jliu/rt/frontend/j
>axrs/src/main/java/org/apache/cxf/jaxrs/JAXRSServerFactoryBean.java?rev
>=573429&view=auto
> ======================================================================
>======== ---
> incubator/cxf/branches/jliu/rt/frontend/jaxrs/src/main/java/org/apache
>/cxf/jaxrs/JAXRSServerFactoryBean.java (added) +++
> incubator/cxf/branches/jliu/rt/frontend/jaxrs/src/main/java/org/apache
>/cxf/jaxrs/JAXRSServerFactoryBean.java Thu Sep 6 19:44:44 2007 @@ -0,0
> +1,220 @@
> +/**
> + * 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.jaxrs;
> +
> +import java.io.IOException;
> +import java.util.List;
> +
> +import org.apache.cxf.BusException;
> +import org.apache.cxf.binding.BindingConfiguration;
> +import org.apache.cxf.binding.BindingFactory;
> +import org.apache.cxf.binding.BindingFactoryManager;
> +import org.apache.cxf.endpoint.AbstractEndpointFactory;
> +import org.apache.cxf.endpoint.Endpoint;
> +import org.apache.cxf.endpoint.EndpointException;
> +import org.apache.cxf.endpoint.EndpointImpl;
> +import org.apache.cxf.endpoint.Server;
> +import org.apache.cxf.endpoint.ServerImpl;
> +import org.apache.cxf.feature.AbstractFeature;
> +import org.apache.cxf.service.Service;
> +import org.apache.cxf.service.factory.ServiceConstructionException;
> +import org.apache.cxf.service.invoker.Invoker;
> +import org.apache.cxf.service.model.BindingInfo;
> +import org.apache.cxf.service.model.EndpointInfo;
> +import org.apache.cxf.transport.DestinationFactory;
> +import org.apache.cxf.transport.DestinationFactoryManager;
> +
> +
> +/**
> + * Bean to help easily create Server endpoints for JAX-RS. Example:
> + * <pre>
> + * JAXRSServerFactoryBean sf = JAXRSServerFactoryBean();
> + * sf.setServiceClass(Book.class);
> + * sf.setAddress("http://acme.com/myService");
> + * sf.create();
> + * </pre>
> + * This will start a server for you and register it with the
> ServerManager. + */
> +public class JAXRSServerFactoryBean extends AbstractEndpointFactory {
> + protected boolean doInit;
> + private Server server;
> + private Invoker invoker;
> + private boolean start = true;
> + private JAXRSServiceFactoryBean serviceFactory;
> +
> + public JAXRSServerFactoryBean() {
> + this(new JAXRSServiceFactoryBean());
> + doInit = true;
> + }
> + public JAXRSServerFactoryBean(JAXRSServiceFactoryBean sf) {
> + this.serviceFactory = sf;
> + doInit = true;
> + }
> +
> + public Server create() {
> + try {
> + Endpoint ep = createEndpoint();
> + server = new ServerImpl(getBus(),
> + ep,
> + getDestinationFactory(),
> + getBindingFactory());
> +
> + if (invoker == null) {
> + ep.getService().setInvoker(createInvoker());
> + } else {
> + ep.getService().setInvoker(invoker);
> + }
> +
> + if (start) {
> + server.start();
> + }
> + } catch (EndpointException e) {
> + throw new ServiceConstructionException(e);
> + } catch (BusException e) {
> + throw new ServiceConstructionException(e);
> + } catch (IOException e) {
> + throw new ServiceConstructionException(e);
> + }
> +
> + applyFeatures();
> + return server;
> + }
> +
> + protected void applyFeatures() {
> + if (getFeatures() != null) {
> + for (AbstractFeature feature : getFeatures()) {
> + feature.initialize(server, getBus());
> + }
> + }
> + }
> +
> + protected Invoker createInvoker() {
> + return new JAXRSInvoker();
> + }
> +
> + protected Endpoint createEndpoint() throws BusException,
> EndpointException { + Service service =
> serviceFactory.getService();
> +
> + if (service == null) {
> + service = serviceFactory.create();
> + }
> +
> + EndpointInfo ei = createEndpointInfo();
> + Endpoint ep = new EndpointImpl(getBus(),
> getServiceFactory().getService(), ei); +
> + if (properties != null) {
> + ep.putAll(properties);
> + }
> +
> + if (getInInterceptors() != null) {
> + ep.getInInterceptors().addAll(getInInterceptors());
> + }
> + if (getOutInterceptors() != null) {
> + ep.getOutInterceptors().addAll(getOutInterceptors());
> + }
> + if (getInFaultInterceptors() != null) {
> +
> ep.getInFaultInterceptors().addAll(getInFaultInterceptors()); +
> }
> + if (getOutFaultInterceptors() != null) {
> +
> ep.getOutFaultInterceptors().addAll(getOutFaultInterceptors()); +
> }
> + return ep;
> + }
> +
> + /*
> + * WSDL based EndpointInfo contains WSDL's physical part info,
> for JAX-RS + * based EndpointInfo, we set everything manually.
> + */
> + protected EndpointInfo createEndpointInfo() throws BusException {
> + String transportId = getTransportId();
> + if (transportId == null && getAddress() != null) {
> + DestinationFactory df = getDestinationFactory();
> + if (df == null) {
> + DestinationFactoryManager dfm =
> getBus().getExtension(DestinationFactoryManager.class); +
> df = dfm.getDestinationFactoryForUri(getAddress()); + }
> +
> + if (df != null) {
> + transportId = df.getTransportIds().get(0);
> + }
> + }
> +
> + BindingInfo bindingInfo = createBindingInfo();
> +
> + //default to http transport
> + if (transportId == null) {
> + transportId =
> "http://schemas.xmlsoap.org/wsdl/soap/http"; + }
> +
> + setTransportId(transportId);
> +
> + EndpointInfo ei = new EndpointInfo();
> + ei.setTransportId(transportId);
> + ei.setName(serviceFactory.getService().getName());
> + ei.setAddress(getAddress());
> + ei.setBinding(bindingInfo);
> +
> + return ei;
> + }
> +
> + protected BindingInfo createBindingInfo() {
> + BindingFactoryManager mgr =
> getBus().getExtension(BindingFactoryManager.class); + String
> binding = getBindingId();
> + BindingConfiguration bindingConfig = getBindingConfig();
> +
> + if (binding == null && bindingConfig != null) {
> + binding = bindingConfig.getBindingId();
> + }
> +
> + if (binding == null) {
> + binding = JAXRSBindingFactory.JAXRS_BINDING_ID;
> + }
> +
> + try {
> + BindingFactory bindingFactory =
> mgr.getBindingFactory(binding); +
> setBindingFactory(bindingFactory);
> + return
> bindingFactory.createBindingInfo(serviceFactory.getService(), +
> binding, bindingConfig); +
> } catch (BusException ex) {
> + ex.printStackTrace();
> + //do nothing
> + }
> + return null;
> + }
> +
> + public JAXRSServiceFactoryBean getServiceFactory() {
> + return serviceFactory;
> + }
> +
> + public void setServiceFactory(JAXRSServiceFactoryBean
> serviceFactory) { + this.serviceFactory = serviceFactory;
> + }
> +
> + public List<Class> getResourceClasses() {
> + return serviceFactory.getResourceClasses();
> + }
> +
> + public void setResourceClasses(List<Class> classes) {
> + serviceFactory.setResourceClasses(classes);
> + }
> +
> + public void setResourceClasses(Class... classes) {
> + serviceFactory.setResourceClasses(classes);
> + }
> +}
>
> Propchange:
> incubator/cxf/branches/jliu/rt/frontend/jaxrs/src/main/java/org/apache
>/cxf/jaxrs/JAXRSServerFactoryBean.java
> ----------------------------------------------------------------------
>-------- svn:eol-style = native
>
> Propchange:
> incubator/cxf/branches/jliu/rt/frontend/jaxrs/src/main/java/org/apache
>/cxf/jaxrs/JAXRSServerFactoryBean.java
> ----------------------------------------------------------------------
>-------- svn:keywords = Rev Date
>
> Added:
> incubator/cxf/branches/jliu/rt/frontend/jaxrs/src/main/java/org/apache
>/cxf/jaxrs/JAXRSServiceFactoryBean.java URL:
> http://svn.apache.org/viewvc/incubator/cxf/branches/jliu/rt/frontend/j
>axrs/src/main/java/org/apache/cxf/jaxrs/JAXRSServiceFactoryBean.java?re
>v=573429&view=auto
> ======================================================================
>======== ---
> incubator/cxf/branches/jliu/rt/frontend/jaxrs/src/main/java/org/apache
>/cxf/jaxrs/JAXRSServiceFactoryBean.java (added) +++
> incubator/cxf/branches/jliu/rt/frontend/jaxrs/src/main/java/org/apache
>/cxf/jaxrs/JAXRSServiceFactoryBean.java Thu Sep 6 19:44:44 2007 @@
> -0,0 +1,199 @@
> +/**
> + * 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.jaxrs;
> +
> +import java.lang.reflect.Method;
> +import java.util.ArrayList;
> +import java.util.Arrays;
> +import java.util.List;
> +import java.util.Map;
> +import java.util.concurrent.Executor;
> +
> +import javax.ws.rs.HttpMethod;
> +import javax.ws.rs.UriTemplate;
> +
> +import org.apache.cxf.jaxrs.model.ClassResourceInfo;
> +import org.apache.cxf.jaxrs.model.MethodDispatcher;
> +import org.apache.cxf.jaxrs.model.OperationResourceInfo;
> +import org.apache.cxf.jaxrs.model.URITemplate;
> +import org.apache.cxf.service.Service;
> +import org.apache.cxf.service.factory.AbstractServiceFactoryBean;
> +import org.apache.cxf.service.invoker.Invoker;
> +
> +
> +/**
> + * Build a JAX-RS service model from resource classes.
> + */
> +public class JAXRSServiceFactoryBean extends
> AbstractServiceFactoryBean { +
> + //private static final Logger LOG =
> Logger.getLogger(JAXRSServiceFactoryBean.class.getName()); +
> //private static final ResourceBundle BUNDLE =
> BundleUtils.getBundle(JAXRSServiceFactoryBean.class); +
> + protected List<ClassResourceInfo> classResourceInfos;
> + protected List<Class> resourceClasses;
> +
> + private Invoker invoker;
> + private Executor executor;
> + private Map<String, Object> properties;
> +
> + public JAXRSServiceFactoryBean() {
> + }
> +
> + @Override
> + public Service create() {
> + initializeServiceModel();
> +
> + initializeDefaultInterceptors();
> +
> + if (invoker != null) {
> + getService().setInvoker(getInvoker());
> + } else {
> + getService().setInvoker(createInvoker());
> + }
> +
> + if (getExecutor() != null) {
> + getService().setExecutor(getExecutor());
> + }
> + if (getDataBinding() != null) {
> + getService().setDataBinding(getDataBinding());
> + }
> +
> + return getService();
> + }
> +
> + public Executor getExecutor() {
> + return executor;
> + }
> +
> + public void setExecutor(Executor executor) {
> + this.executor = executor;
> + }
> +
> + public Invoker getInvoker() {
> + return invoker;
> + }
> +
> + public void setInvoker(Invoker invoker) {
> + this.invoker = invoker;
> + }
> +
> + public List<Class> getResourceClasses() {
> + return resourceClasses;
> + }
> +
> + public void setResourceClasses(List<Class> classes) {
> + this.resourceClasses = classes;
> + }
> +
> + public void setResourceClasses(Class... classes) {
> + this.resourceClasses = new
> ArrayList<Class>(Arrays.asList(classes)); + }
> +
> + protected void initializeServiceModel() {
> + classResourceInfos = new ArrayList<ClassResourceInfo>();
> +
> + for (Class resourceClass : resourceClasses) {
> + ClassResourceInfo classResourceInfo =
> createClassResourceInfo(resourceClass); +
> classResourceInfos.add(classResourceInfo);
> + }
> +
> + JAXRSServiceImpl service = new
> JAXRSServiceImpl(classResourceInfos); +
> + setService(service);
> +
> + if (properties != null) {
> + service.putAll(properties);
> + }
> + }
> +
> + protected ClassResourceInfo createClassResourceInfo(final
> Class<?> c) { + final UriTemplate annotation =
> c.getAnnotation(UriTemplate.class); + if (annotation == null) {
> + return null;
> + }
> +
> + ClassResourceInfo resourceClass = getClassResourceInfo(c);
> +
> + MethodDispatcher md = createOperation(c, resourceClass);
> + resourceClass.setMethodDispatcher(md);
> +
> + String annotationValue = annotation.value();
> + if (!annotationValue.startsWith("/")) {
> + annotationValue = "/" + annotationValue;
> + }
> + String rightHandPattern = (resourceClass.hasSubResources())
> + ? URITemplate.SUB_RESOURCE_REGEX_SUFFIX :
> URITemplate.NONE_SUB_RESOURCE_REGEX_SUFFIX; + URITemplate t =
> new URITemplate(annotationValue, rightHandPattern); +
> resourceClass.setURITemplate(t);
> +
> + return resourceClass;
> + }
> +
> + protected ClassResourceInfo getClassResourceInfo(final Class<?>
> c) { + return new ClassResourceInfo(c);
> + }
> +
> + protected MethodDispatcher createOperation(Class c,
> ClassResourceInfo cri) { + MethodDispatcher md = new
> MethodDispatcher();
> + for (Method m : c.getMethods()) {
> + if (m.getAnnotation(UriTemplate.class) != null) {
> + OperationResourceInfo ori = new
> OperationResourceInfo(m, cri); + String uriTemplate =
> m.getAnnotation(UriTemplate.class).value(); + if
> (!uriTemplate.startsWith("/")) {
> + uriTemplate = "/" + uriTemplate;
> + }
> + if (m.getAnnotation(HttpMethod.class) != null) {
> + /*
> + * Sub-resource method, URI template created by
> concatenating + * the URI template of the resource
> class with the URI template + * of the method
> + */
> + ori.setURITemplate(new URITemplate(uriTemplate,
> +
> URITemplate.NONE_SUB_RESOURCE_REGEX_SUFFIX)); +
> + String httpMethod =
> m.getAnnotation(HttpMethod.class).value(); +
> ori.setHttpMethod(httpMethod);
> + } else {
> + //sub-resource locator
> + cri.setHasSubResources(true);
> + ori.setURITemplate(new URITemplate(uriTemplate,
> +
> URITemplate.SUB_RESOURCE_REGEX_SUFFIX)); + }
> + md.bind(ori, m);
> + } else if (m.getAnnotation(HttpMethod.class) != null) {
> + //Sub-resource method
> + OperationResourceInfo ori = new
> OperationResourceInfo(m, cri); + ori.setURITemplate(new
> URITemplate("/",
> +
> URITemplate.NONE_SUB_RESOURCE_REGEX_SUFFIX)); +
> + String httpMethod =
> m.getAnnotation(HttpMethod.class).value(); +
> ori.setHttpMethod(httpMethod);
> + md.bind(ori, m);
> + }
> + }
> +
> + return md;
> + }
> +
> + protected Invoker createInvoker() {
> + return new JAXRSInvoker();
> + }
> +
> +}
>
> Propchange:
> incubator/cxf/branches/jliu/rt/frontend/jaxrs/src/main/java/org/apache
>/cxf/jaxrs/JAXRSServiceFactoryBean.java
> ----------------------------------------------------------------------
>-------- svn:eol-style = native
>
> Propchange:
> incubator/cxf/branches/jliu/rt/frontend/jaxrs/src/main/java/org/apache
>/cxf/jaxrs/JAXRSServiceFactoryBean.java
> ----------------------------------------------------------------------
>-------- svn:keywords = Rev Date
>
> Added:
> incubator/cxf/branches/jliu/rt/frontend/jaxrs/src/main/java/org/apache
>/cxf/jaxrs/JAXRSServiceImpl.java URL:
> http://svn.apache.org/viewvc/incubator/cxf/branches/jliu/rt/frontend/j
>axrs/src/main/java/org/apache/cxf/jaxrs/JAXRSServiceImpl.java?rev=57342
>9&view=auto
> ======================================================================
>======== ---
> incubator/cxf/branches/jliu/rt/frontend/jaxrs/src/main/java/org/apache
>/cxf/jaxrs/JAXRSServiceImpl.java (added) +++
> incubator/cxf/branches/jliu/rt/frontend/jaxrs/src/main/java/org/apache
>/cxf/jaxrs/JAXRSServiceImpl.java Thu Sep 6 19:44:44 2007 @@ -0,0
> +1,120 @@
> +/**
> + * 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.jaxrs;
> +
> +import java.util.HashMap;
> +import java.util.List;
> +import java.util.Map;
> +import java.util.concurrent.Executor;
> +
> +import javax.xml.namespace.QName;
> +
> +import org.apache.cxf.configuration.Configurable;
> +import org.apache.cxf.databinding.DataBinding;
> +import org.apache.cxf.endpoint.Endpoint;
> +import
> org.apache.cxf.interceptor.AbstractAttributedInterceptorProvider;
> +import org.apache.cxf.jaxrs.model.ClassResourceInfo;
> +import org.apache.cxf.service.Service;
> +import org.apache.cxf.service.invoker.Invoker;
> +import org.apache.cxf.service.model.EndpointInfo;
> +import org.apache.cxf.service.model.ServiceInfo;
> +import org.apache.cxf.workqueue.SynchronousExecutor;
> +
> +public class JAXRSServiceImpl extends
> AbstractAttributedInterceptorProvider implements Service, Configurable
> { + private List<ClassResourceInfo> classResourceInfos;
> + private DataBinding dataBinding;
> + private Executor executor;
> + private Invoker invoker;
> + private Map<QName, Endpoint> endpoints = new HashMap<QName,
> Endpoint>(); +
> + public JAXRSServiceImpl() {
> + }
> +
> + public JAXRSServiceImpl(List<ClassResourceInfo> cri) {
> + this.classResourceInfos = cri;
> + executor = SynchronousExecutor.getInstance();
> + }
> +
> + public String getBeanName() {
> + return getName().toString();
> + }
> +
> + public QName getName() {
> + Class primaryClass =
> classResourceInfos.get(0).getResourceClass(); + return new
> QName("jaxrs", primaryClass.getSimpleName()); + }
> +
> + public List<ClassResourceInfo> getClassResourceInfos() {
> + return classResourceInfos;
> + }
> +
> + public List<ServiceInfo> getServiceInfos() {
> + //NOT IMPLEMENTED
> + return null;
> + }
> +
> + public EndpointInfo getEndpointInfo(QName endpoint) {
> +/* for (ServiceInfo inf : serviceInfos) {
> + EndpointInfo ef = inf.getEndpoint(endpoint);
> + if (ef != null) {
> + return ef;
> + }
> + }
> + return null;*/
> + return null;
> + }
> +
> +
> + public Executor getExecutor() {
> + return executor;
> + }
> +
> + public void setExecutor(Executor executor) {
> + this.executor = executor;
> + }
> +
> + public Invoker getInvoker() {
> + return invoker;
> + }
> +
> + public void setInvoker(Invoker invoker) {
> + this.invoker = invoker;
> + }
> +
> + public DataBinding getDataBinding() {
> + return dataBinding;
> + }
> +
> + public void setDataBinding(DataBinding dataBinding) {
> + this.dataBinding = dataBinding;
> + }
> +
> + public Map<QName, Endpoint> getEndpoints() {
> + return endpoints;
> + }
> +
> + public void setEndpoints(Map<QName, Endpoint> endpoints) {
> + this.endpoints = endpoints;
> + }
> +
> + public void setProperties(Map<String, Object> properties) {
> + this.putAll(properties);
> + }
> +}
>
> Propchange:
> incubator/cxf/branches/jliu/rt/frontend/jaxrs/src/main/java/org/apache
>/cxf/jaxrs/JAXRSServiceImpl.java
> ----------------------------------------------------------------------
>-------- svn:eol-style = native
>
> Propchange:
> incubator/cxf/branches/jliu/rt/frontend/jaxrs/src/main/java/org/apache
>/cxf/jaxrs/JAXRSServiceImpl.java
> ----------------------------------------------------------------------
>-------- svn:keywords = Rev Date
>
> Added:
> incubator/cxf/branches/jliu/rt/frontend/jaxrs/src/main/java/org/apache
>/cxf/jaxrs/interceptor/JAXRSDispatchInterceptor.java URL:
> http://svn.apache.org/viewvc/incubator/cxf/branches/jliu/rt/frontend/j
>axrs/src/main/java/org/apache/cxf/jaxrs/interceptor/JAXRSDispatchInterc
>eptor.java?rev=573429&view=auto
> ======================================================================
>======== ---
> incubator/cxf/branches/jliu/rt/frontend/jaxrs/src/main/java/org/apache
>/cxf/jaxrs/interceptor/JAXRSDispatchInterceptor.java (added) +++
> incubator/cxf/branches/jliu/rt/frontend/jaxrs/src/main/java/org/apache
>/cxf/jaxrs/interceptor/JAXRSDispatchInterceptor.java Thu Sep 6
> 19:44:44 2007 @@ -0,0 +1,217 @@
> +/**
> + * 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.jaxrs.interceptor;
> +
> +import java.io.IOException;
> +import java.io.InputStream;
> +import java.lang.annotation.Annotation;
> +import java.lang.reflect.Method;
> +import java.lang.reflect.Type;
> +import java.util.ArrayList;
> +import java.util.HashMap;
> +import java.util.List;
> +import java.util.Map;
> +
> +import javax.ws.rs.HeaderParam;
> +import javax.ws.rs.MatrixParam;
> +import javax.ws.rs.QueryParam;
> +import javax.ws.rs.UriParam;
> +import javax.ws.rs.core.HttpContext;
> +import javax.ws.rs.ext.EntityProvider;
> +import javax.ws.rs.ext.ProviderFactory;
> +
> +import org.apache.cxf.jaxrs.JAXRSServiceImpl;
> +import org.apache.cxf.jaxrs.model.ClassResourceInfo;
> +import org.apache.cxf.jaxrs.model.OperationResourceInfo;
> +import org.apache.cxf.jaxrs.model.URITemplate;
> +import org.apache.cxf.message.Message;
> +import org.apache.cxf.phase.AbstractPhaseInterceptor;
> +import org.apache.cxf.phase.Phase;
> +import org.apache.cxf.service.Service;
> +
> +
> +public class JAXRSDispatchInterceptor extends
> AbstractPhaseInterceptor<Message> { +
> + public static final String RELATIVE_PATH = "relative.path";
> + //private static final Logger LOG =
> Logger.getLogger(RESTDispatchInterceptor.class.getName()); +
> //private static final ResourceBundle BUNDLE =
> BundleUtils.getBundle(RESTDispatchInterceptor.class); +
> + public JAXRSDispatchInterceptor() {
> + super(Phase.PRE_STREAM);
> + }
> +
> + public void handleMessage(Message message) {
> + String path = (String)message.get(Message.PATH_INFO);
> + String address = (String)message.get(Message.BASE_PATH);
> + String httpMethod =
> (String)message.get(Message.HTTP_REQUEST_METHOD); +
> + if (address.startsWith("http")) {
> + 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);
> + path = path + "/";
> + }
> + message.put(RELATIVE_PATH, path);
> +
> +
> + //1. Matching target resource classes and method
> + Service service = message.getExchange().get(Service.class);
> + List<ClassResourceInfo> resources =
> ((JAXRSServiceImpl)service).getClassResourceInfos(); +
> + Map<String, String> values = new HashMap<String, String>();
> + OperationResourceInfo ori = findTargetResource(resources,
> path, httpMethod, values); +
> + if (ori == null) {
> + //throw new Fault(new
> org.apache.cxf.common.i18n.Message("NO_OP", BUNDLE, method, path)); +
> }
> + message.getExchange().put(OperationResourceInfo.class, ori);
> +
> +
> + //2. Process parameters
> + InputStream is = message.getContent(InputStream.class);
> + List<Object> params = processParameters(ori.getMethod(),
> path, httpMethod, values, is); +
> + message.setContent(List.class, params);
> +
> + }
> +
> + protected OperationResourceInfo
> findTargetResource(List<ClassResourceInfo> resources, String path, +
> String httpMethod,
> Map<String, String> values) { + for (ClassResourceInfo resource
> : resources) {
> + URITemplate uriTemplate = resource.getURITemplate();
> + if (uriTemplate.match(path, values)) {
> + String subResourcePath =
> values.values().iterator().next(); +
> OperationResourceInfo ori = findTargetMethod(resource,
> subResourcePath, httpMethod, values); + if (ori !=
> null) {
> + return ori;
> + }
> + }
> + }
> + return null;
> + }
> +
> + protected OperationResourceInfo
> findTargetMethod(ClassResourceInfo resource, String path, +
> String httpMethod,
> Map<String, String> values) { + for (OperationResourceInfo ori
> : resource.getMethodDispatcher().getOperationResourceInfos()) { +
> URITemplate uriTemplate = ori.getURITemplate();
> + if (uriTemplate != null && uriTemplate.match(path,
> values)) { + return ori;
> + } /*
> + * else { //URITemplate == null means match by
> default if + *
> (httpMethod.equalsIgnoreCase(ori.getHttpMethod())) { return +
> * ori; } }
> + */
> + }
> + return null;
> + }
> +
> + private List<Object> processParameters(Method method, String
> path, String httpMethod, +
> Map<String, String> values, InputStream is) { + Class[]
> parameterTypes = method.getParameterTypes(); + Type[]
> genericParameterTypes = method.getGenericParameterTypes(); +
> Annotation[][] parameterAnnotations =
> method.getParameterAnnotations(); +
> + boolean readFromEntityBody = false;
> + if ("PUT".equals(httpMethod) || "POST".equals(httpMethod)) {
> + readFromEntityBody = true;
> + }
> +
> + List<Object> params = new
> ArrayList<Object>(parameterTypes.length); +
> + for (int i = 0; i < parameterTypes.length; i++) {
> + Object param = processParameter(parameterTypes[i],
> genericParameterTypes[i], +
> parameterAnnotations[i], readFromEntityBody, path, values, is); +
> + params.add(param);
> + }
> +
> + return params;
> + }
> +
> + private Object processParameter(Class<?> parameterClass, Type
> parameterType, + Annotation[]
> parameterAnnotations, boolean readFromEntityBody, +
> String path, Map<String, String> values, InputStream
> is) { + Object result = null;
> + if (parameterAnnotations == null ||
> parameterAnnotations.length == 0) { + if
> (readFromEntityBody) {
> + result = readFromEntityBody(parameterClass, is);
> + }
> + return result;
> + }
> +
> + Annotation annotation = parameterAnnotations[0];
> + if (annotation.annotationType() == UriParam.class) {
> + result = readFromUriParam((UriParam)annotation,
> parameterClass, parameterType, +
> parameterAnnotations, path, values); + } else if
> (annotation.annotationType() == QueryParam.class) { +
> //TODO
> + } else if (annotation.annotationType() == MatrixParam.class)
> { + //TODO
> + } else if (annotation.annotationType() == HeaderParam.class)
> { + //TODO
> + } else if (annotation.annotationType() == HttpContext.class)
> { + //TODO
> + }
> +
> + return result;
> + }
> +
> + private Object readFromEntityBody(Class<?> targetTypeClass,
> InputStream is) { + Object result = null;
> + EntityProvider provider =
> ProviderFactory.getInstance().createEntityProvider(targetTypeClass); +
> + try {
> + result = provider.readFrom(targetTypeClass, null, null,
> is); + } catch (IOException e) {
> + e.printStackTrace();
> + }
> +
> + return result;
> + }
> +
> + private String readFromUriParam(UriParam uriParamAnnotation,
> + Class<?> parameter,
> + Type parameterType,
> + Annotation[]
> parameterAnnotations, + String
> path,
> + Map<String, String> values) {
> + String parameterName = uriParamAnnotation.value();
> + if (parameterName == null || parameterName.length() == 0) {
> + // Invalid URI parameter name
> + return null;
> + }
> +
> + String result = values.get(parameterName);
> +
> + return result;
> + }
> +}
>
> Propchange:
> incubator/cxf/branches/jliu/rt/frontend/jaxrs/src/main/java/org/apache
>/cxf/jaxrs/interceptor/JAXRSDispatchInterceptor.java
> ----------------------------------------------------------------------
>-------- svn:eol-style = native
>
> Propchange:
> incubator/cxf/branches/jliu/rt/frontend/jaxrs/src/main/java/org/apache
>/cxf/jaxrs/interceptor/JAXRSDispatchInterceptor.java
> ----------------------------------------------------------------------
>-------- svn:keywords = Rev Date
>
> Added:
> incubator/cxf/branches/jliu/rt/frontend/jaxrs/src/main/java/org/apache
>/cxf/jaxrs/interceptor/JAXRSOutInterceptor.java URL:
> http://svn.apache.org/viewvc/incubator/cxf/branches/jliu/rt/frontend/j
>axrs/src/main/java/org/apache/cxf/jaxrs/interceptor/JAXRSOutInterceptor
>.java?rev=573429&view=auto
> ======================================================================
>======== ---
> incubator/cxf/branches/jliu/rt/frontend/jaxrs/src/main/java/org/apache
>/cxf/jaxrs/interceptor/JAXRSOutInterceptor.java (added) +++
> incubator/cxf/branches/jliu/rt/frontend/jaxrs/src/main/java/org/apache
>/cxf/jaxrs/interceptor/JAXRSOutInterceptor.java Thu Sep 6 19:44:44
> 2007 @@ -0,0 +1,77 @@
> +/**
> + * 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.jaxrs.interceptor;
> +
> +import java.io.IOException;
> +import java.io.OutputStream;
> +import java.util.List;
> +
> +import javax.ws.rs.ext.EntityProvider;
> +import javax.ws.rs.ext.ProviderFactory;
> +
> +import org.apache.cxf.interceptor.AbstractOutDatabindingInterceptor;
> +import org.apache.cxf.jaxrs.model.OperationResourceInfo;
> +import org.apache.cxf.message.Exchange;
> +import org.apache.cxf.message.Message;
> +import org.apache.cxf.message.MessageContentsList;
> +import org.apache.cxf.phase.Phase;
> +
> +public class JAXRSOutInterceptor extends
> AbstractOutDatabindingInterceptor { +
> + public JAXRSOutInterceptor() {
> + super(Phase.MARSHAL);
> + }
> +
> + public void handleMessage(Message message) {
> + Exchange exchange = message.getExchange();
> + OperationResourceInfo operation =
> (OperationResourceInfo)exchange.get(OperationResourceInfo.class +
> .getName());
> +
> + if (operation == null) {
> + return;
> + }
> +
> + MessageContentsList objs =
> MessageContentsList.getContentsList(message); + if (objs ==
> null || objs.size() == 0) {
> + return;
> + }
> +
> + OutputStream out = message.getContent(OutputStream.class);
> +
> + if (objs.get(0) != null) {
> + Class targetType = objs.get(0).getClass();
> + if (objs.get(0).getClass().isArray()) {
> + targetType =
> objs.get(0).getClass().getComponentType(); + } else if
> (objs.get(0) instanceof List && ((List)objs.get(0)).get(0) != null) {
> + targetType = ((List)objs.get(0)).get(0).getClass(); +
> + }
> + EntityProvider provider =
> ProviderFactory.getInstance().createEntityProvider(targetType); +
> + try {
> + provider.writeTo(objs.get(0), null, out);
> + } catch (IOException e) {
> + e.printStackTrace();
> + }
> + }
> +
> + }
> +
> +}
>
> Propchange:
> incubator/cxf/branches/jliu/rt/frontend/jaxrs/src/main/java/org/apache
>/cxf/jaxrs/interceptor/JAXRSOutInterceptor.java
> ----------------------------------------------------------------------
>-------- svn:eol-style = native
>
> Propchange:
> incubator/cxf/branches/jliu/rt/frontend/jaxrs/src/main/java/org/apache
>/cxf/jaxrs/interceptor/JAXRSOutInterceptor.java
> ----------------------------------------------------------------------
>-------- svn:keywords = Rev Date
>
> Added:
> incubator/cxf/branches/jliu/rt/frontend/jaxrs/src/main/java/org/apache
>/cxf/jaxrs/model/ClassResourceInfo.java URL:
> http://svn.apache.org/viewvc/incubator/cxf/branches/jliu/rt/frontend/j
>axrs/src/main/java/org/apache/cxf/jaxrs/model/ClassResourceInfo.java?re
>v=573429&view=auto
> ======================================================================
>======== ---
> incubator/cxf/branches/jliu/rt/frontend/jaxrs/src/main/java/org/apache
>/cxf/jaxrs/model/ClassResourceInfo.java (added) +++
> incubator/cxf/branches/jliu/rt/frontend/jaxrs/src/main/java/org/apache
>/cxf/jaxrs/model/ClassResourceInfo.java Thu Sep 6 19:44:44 2007 @@
> -0,0 +1,60 @@
> +/**
> + * 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.jaxrs.model;
> +
> +
> +public class ClassResourceInfo {
> + private Class resourceClass;
> + private URITemplate uriTemplate;
> + private MethodDispatcher methodDispatcher;
> + private boolean hasSubResources;
> +
> + public ClassResourceInfo(Class theResourceClass) {
> + resourceClass = theResourceClass;
> + }
> +
> + public Class getResourceClass() {
> + return resourceClass;
> + }
> +
> + public URITemplate getURITemplate() {
> + return uriTemplate;
> + }
> +
> + public void setURITemplate(URITemplate u) {
> + uriTemplate = u;
> + }
> +
> + public MethodDispatcher getMethodDispatcher() {
> + return methodDispatcher;
> + }
> +
> + public void setMethodDispatcher(MethodDispatcher md) {
> + methodDispatcher = md;
> + }
> +
> + public boolean hasSubResources() {
> + return hasSubResources;
> + }
> +
> + public void setHasSubResources(boolean flag) {
> + hasSubResources = flag;
> + }
> +}
>
> Propchange:
> incubator/cxf/branches/jliu/rt/frontend/jaxrs/src/main/java/org/apache
>/cxf/jaxrs/model/ClassResourceInfo.java
> ----------------------------------------------------------------------
>-------- svn:eol-style = native
>
> Propchange:
> incubator/cxf/branches/jliu/rt/frontend/jaxrs/src/main/java/org/apache
>/cxf/jaxrs/model/ClassResourceInfo.java
> ----------------------------------------------------------------------
>-------- svn:keywords = Rev Date
>
> Added:
> incubator/cxf/branches/jliu/rt/frontend/jaxrs/src/main/java/org/apache
>/cxf/jaxrs/model/MethodDispatcher.java URL:
> http://svn.apache.org/viewvc/incubator/cxf/branches/jliu/rt/frontend/j
>axrs/src/main/java/org/apache/cxf/jaxrs/model/MethodDispatcher.java?rev
>=573429&view=auto
> ======================================================================
>======== ---
> incubator/cxf/branches/jliu/rt/frontend/jaxrs/src/main/java/org/apache
>/cxf/jaxrs/model/MethodDispatcher.java (added) +++
> incubator/cxf/branches/jliu/rt/frontend/jaxrs/src/main/java/org/apache
>/cxf/jaxrs/model/MethodDispatcher.java Thu Sep 6 19:44:44 2007 @@ -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.jaxrs.model;
> +
> +import java.lang.reflect.Method;
> +
> +import java.util.Map;
> +import java.util.Set;
> +import java.util.concurrent.ConcurrentHashMap;
> +
> +
> +public class MethodDispatcher {
> + private Map<OperationResourceInfo, Method> opToMethod =
> + new ConcurrentHashMap<OperationResourceInfo, Method>();
> + private Map<Method, OperationResourceInfo> methodToOp =
> + new ConcurrentHashMap<Method, OperationResourceInfo>();
> +
> + public void bind(OperationResourceInfo o, Method... methods) {
> + Method primary = methods[0];
> +
> + for (Method m : methods) {
> + methodToOp.put(m, o);
> + }
> +
> + opToMethod.put(o, primary);
> + }
> +
> + public OperationResourceInfo getOperationResourceInfo(Method
> method) { + return methodToOp.get(method);
> + }
> +
> + public Set<OperationResourceInfo> getOperationResourceInfos() {
> + return opToMethod.keySet();
> + }
> +
> + public Method getMethod(OperationResourceInfo op) {
> + return opToMethod.get(op);
> + }
> +}
>
> Propchange:
> incubator/cxf/branches/jliu/rt/frontend/jaxrs/src/main/java/org/apache
>/cxf/jaxrs/model/MethodDispatcher.java
> ----------------------------------------------------------------------
>-------- svn:eol-style = native
>
> Propchange:
> incubator/cxf/branches/jliu/rt/frontend/jaxrs/src/main/java/org/apache
>/cxf/jaxrs/model/MethodDispatcher.java
> ----------------------------------------------------------------------
>-------- svn:keywords = Rev Date
>
> Added:
> incubator/cxf/branches/jliu/rt/frontend/jaxrs/src/main/java/org/apache
>/cxf/jaxrs/model/OperationResourceInfo.java URL:
> http://svn.apache.org/viewvc/incubator/cxf/branches/jliu/rt/frontend/j
>axrs/src/main/java/org/apache/cxf/jaxrs/model/OperationResourceInfo.jav
>a?rev=573429&view=auto
> ======================================================================
>======== ---
> incubator/cxf/branches/jliu/rt/frontend/jaxrs/src/main/java/org/apache
>/cxf/jaxrs/model/OperationResourceInfo.java (added) +++
> incubator/cxf/branches/jliu/rt/frontend/jaxrs/src/main/java/org/apache
>/cxf/jaxrs/model/OperationResourceInfo.java Thu Sep 6 19:44:44 2007 @@
> -0,0 +1,91 @@
> +/**
> + * 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.jaxrs.model;
> +
> +import java.lang.reflect.Method;
> +import java.util.List;
> +
> +import javax.ws.rs.ext.EntityProvider;
> +
> +import org.apache.cxf.jaxrs.provider.JAXBElementProvider;
> +
> +public class OperationResourceInfo {
> + private URITemplate uriTemplate;
> + private ClassResourceInfo classResourceInfo;
> + private Method method;
> + private List<Class> parameterTypeList;
> + private List<Class> annotatedParameterTypeList;
> + private List<EntityProvider> entityProviderList;
> + private String httpMethod;
> +
> + public OperationResourceInfo(Method m, ClassResourceInfo cri) {
> + method = m;
> + classResourceInfo = cri;
> + }
> +
> + public URITemplate getURITemplate() {
> + return uriTemplate;
> + }
> +
> + public void setURITemplate(URITemplate u) {
> + uriTemplate = u;
> + }
> +
> + public ClassResourceInfo getClassResourceInfo() {
> + return classResourceInfo;
> + }
> +
> + public void setClassResourceInfo(ClassResourceInfo c) {
> + classResourceInfo = c;
> + }
> +
> + public Method getMethod() {
> + return method;
> + }
> +
> + public void setMethod(Method m) {
> + method = m;
> + }
> +
> + public String getHttpMethod() {
> + return httpMethod;
> + }
> +
> + public void setHttpMethod(String m) {
> + httpMethod = m;
> + }
> +
> + public List<Class> getParameterTypeList() {
> + return parameterTypeList;
> + }
> +
> + public List<Class> getAnnotatedParameterTypeList() {
> + return annotatedParameterTypeList;
> + }
> +
> + public List<EntityProvider> getEntityProviderList() {
> + return entityProviderList;
> + }
> +
> + protected EntityProvider findEntityProvider() {
> + return new JAXBElementProvider();
> +
> + }
> +}
>
> Propchange:
> incubator/cxf/branches/jliu/rt/frontend/jaxrs/src/main/java/org/apache
>/cxf/jaxrs/model/OperationResourceInfo.java
> ----------------------------------------------------------------------
>-------- svn:eol-style = native
>
> Propchange:
> incubator/cxf/branches/jliu/rt/frontend/jaxrs/src/main/java/org/apache
>/cxf/jaxrs/model/OperationResourceInfo.java
> ----------------------------------------------------------------------
>-------- svn:keywords = Rev Date
>
> Added:
> incubator/cxf/branches/jliu/rt/frontend/jaxrs/src/main/java/org/apache
>/cxf/jaxrs/model/URITemplate.java URL:
> http://svn.apache.org/viewvc/incubator/cxf/branches/jliu/rt/frontend/j
>axrs/src/main/java/org/apache/cxf/jaxrs/model/URITemplate.java?rev=5734
>29&view=auto
> ======================================================================
>======== ---
> incubator/cxf/branches/jliu/rt/frontend/jaxrs/src/main/java/org/apache
>/cxf/jaxrs/model/URITemplate.java (added) +++
> incubator/cxf/branches/jliu/rt/frontend/jaxrs/src/main/java/org/apache
>/cxf/jaxrs/model/URITemplate.java Thu Sep 6 19:44:44 2007 @@ -0,0
> +1,157 @@
> +/**
> + * 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.jaxrs.model;
> +
> +
> +import java.util.ArrayList;
> +import java.util.Collections;
> +import java.util.List;
> +import java.util.Map;
> +import java.util.regex.Matcher;
> +import java.util.regex.Pattern;
> +
> +public final class URITemplate {
> + /**
> + * Regex for sub-resource: For each resource class compute a
> regular + * expression from its URI template, If the resource
> class has sub-resources + * then append ¡®(/.*)?¡¯ to the
> resulting regular expression. + */
> + public static final String SUB_RESOURCE_REGEX_SUFFIX = "(/.*)?";
> +
> + /**
> + * Regex for none sub-resource: For each resource class compute a
> regular + * expression from its URI template, If the resource
> class has no + * sub-resources then append ¡®(/)?¡¯ to the
> resulting regular expression. + */
> + public static final String NONE_SUB_RESOURCE_REGEX_SUFFIX =
> "(/)?"; +
> + /**
> + * The regular expression for matching URI templates and names.
> + */
> + private static final Pattern TEMPLATE_NAMES_PATTERN =
> Pattern.compile("\\{([\\w-\\._~]+?)\\}"); +
> + /**
> + * A URI template is converted into a regular expression by
> substituting + * ¡®(.*?)¡¯ for each occurrence of {\([w- 14 \.
> ]+?\)} within the URL + * template
> + */
> + private static final String URITEMPLATE_REGEX = "(.*?)";
> +
> + private final String template;
> + private final String regexSuffix;
> + private final boolean endsWithSlash;
> + private final List<String> templateVariables;
> + private final String templateRegex;
> + private final Pattern templateRegexPattern;
> +
> + private URITemplate() {
> + this.template = "";
> + this.regexSuffix = null;
> + this.endsWithSlash = false;
> + this.templateVariables = Collections.emptyList();
> + this.templateRegex = "";
> + this.templateRegexPattern = null;
> + }
> +
> + public URITemplate(String theTemplate) {
> + this(theTemplate, null);
> + }
> +
> + public URITemplate(String theTemplate, String theRegexSuffix) {
> + this.template = theTemplate;
> + this.regexSuffix = theRegexSuffix;
> +
> + StringBuilder stringBuilder = new StringBuilder();
> + List<String> names = new ArrayList<String>();
> +
> + // compute a regular expression from URI template
> + Matcher matcher = TEMPLATE_NAMES_PATTERN.matcher(template);
> + int i = 0;
> + while (matcher.find()) {
> + copyURITemplateCharacters(template, i, matcher.start(),
> stringBuilder); + stringBuilder.append(URITEMPLATE_REGEX);
> + names.add(matcher.group(1));
> + i = matcher.end();
> + }
> + copyURITemplateCharacters(template, i, template.length(),
> stringBuilder); +
> + templateVariables = Collections.unmodifiableList(names);
> +
> + int endPos = stringBuilder.length() - 1;
> + this.endsWithSlash = (endPos >= 0) ?
> stringBuilder.charAt(endPos) == '/' : false; + if (regexSuffix
> != null) {
> + if (endsWithSlash) {
> + stringBuilder.deleteCharAt(endPos);
> + }
> + stringBuilder.append(regexSuffix);
> + }
> +
> + templateRegex = stringBuilder.toString();
> + templateRegexPattern = Pattern.compile(templateRegex);
> + }
> +
> + private void copyURITemplateCharacters(String templateValue, int
> start, int end, StringBuilder b) { + for (int i = start; i <
> end; i++) {
> + char c = templateValue.charAt(i);
> + if (c == '?') {
> + b.append("\\?");
> + } else {
> + b.append(c);
> + }
> + }
> + }
> +
> + public boolean match(String uri, Map<String, String>
> templateVariableToValue) { + templateVariableToValue.clear();
> +
> + if (uri == null) {
> + return (templateRegexPattern == null) ? true : false;
> + }
> +
> + if (templateRegexPattern == null) {
> + return false;
> + }
> +
> + Matcher m = templateRegexPattern.matcher(uri);
> + if (!m.matches()) {
> + return false;
> + }
> +
> + // Assign the matched template values to template variables
> + int i = 1;
> + for (String name : templateVariables) {
> + String previousValue = templateVariableToValue.get(name);
> + String currentValue = m.group(i++);
> +
> + if (previousValue != null &&
> !previousValue.equals(currentValue)) { + return false;
> + }
> +
> + templateVariableToValue.put(name, currentValue);
> + }
> +
> + // Assign the right hand side value to the null key
> + if (regexSuffix != null) {
> + templateVariableToValue.put(null, m.group(i));
> + }
> +
> + return true;
> + }
> +}
>
> Propchange:
> incubator/cxf/branches/jliu/rt/frontend/jaxrs/src/main/java/org/apache
>/cxf/jaxrs/model/URITemplate.java
> ----------------------------------------------------------------------
>-------- svn:eol-style = native
>
> Propchange:
> incubator/cxf/branches/jliu/rt/frontend/jaxrs/src/main/java/org/apache
>/cxf/jaxrs/model/URITemplate.java
> ----------------------------------------------------------------------
>-------- svn:keywords = Rev Date
>
> Added:
> incubator/cxf/branches/jliu/rt/frontend/jaxrs/src/main/java/org/apache
>/cxf/jaxrs/provider/JAXBElementProvider.java URL:
> http://svn.apache.org/viewvc/incubator/cxf/branches/jliu/rt/frontend/j
>axrs/src/main/java/org/apache/cxf/jaxrs/provider/JAXBElementProvider.ja
>va?rev=573429&view=auto
> ======================================================================
>======== ---
> incubator/cxf/branches/jliu/rt/frontend/jaxrs/src/main/java/org/apache
>/cxf/jaxrs/provider/JAXBElementProvider.java (added) +++
> incubator/cxf/branches/jliu/rt/frontend/jaxrs/src/main/java/org/apache
>/cxf/jaxrs/provider/JAXBElementProvider.java Thu Sep 6 19:44:44 2007
> @@ -0,0 +1,103 @@
> +/**
> + * 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.jaxrs.provider;
> +
> +
> +import java.io.InputStream;
> +import java.io.OutputStream;
> +import java.lang.reflect.Array;
> +import java.util.List;
> +import java.util.Map;
> +import java.util.WeakHashMap;
> +import javax.ws.rs.core.MultivaluedMap;
> +import javax.ws.rs.ext.EntityProvider;
> +import javax.xml.bind.JAXBContext;
> +import javax.xml.bind.JAXBElement;
> +import javax.xml.bind.JAXBException;
> +import javax.xml.bind.Marshaller;
> +import javax.xml.bind.Unmarshaller;
> +import javax.xml.bind.annotation.XmlRootElement;
> +import javax.xml.namespace.QName;
> +
> +public final class JAXBElementProvider implements
> EntityProvider<Object> { +
> + static Map<Class, JAXBContext> jaxbContexts = new
> WeakHashMap<Class, JAXBContext>(); +
> + public boolean supports(Class<?> type) {
> + return type.getAnnotation(XmlRootElement.class) != null;
> + }
> +
> + public Object readFrom(Class<Object> type, String mediaType,
> MultivaluedMap<String, String> headers, +
> InputStream is) {
> + try {
> + JAXBContext context = getJAXBContext(type);
> + Unmarshaller unmarshaller = context.createUnmarshaller();
> + return unmarshaller.unmarshal(is);
> + } catch (JAXBException e) {
> + e.printStackTrace();
> + }
> +
> + return null;
> + }
> +
> + public void writeTo(Object obj, MultivaluedMap<String, Object>
> headers, OutputStream os) { + try {
> + if (obj.getClass().isArray() || obj instanceof List) {
> + Class<?> cls = null;
> + Object objArray;
> + if (obj instanceof List) {
> + List l = (List)obj;
> + objArray = l.toArray(new Object[l.size()]);
> + cls = null;
> + } else {
> + objArray = obj;
> + cls = objArray.getClass().getComponentType();
> + }
> + int len = Array.getLength(objArray);
> + for (int x = 0; x < len; x++) {
> + Object o = Array.get(objArray, x);
> + JAXBContext context =
> getJAXBContext(o.getClass()); + Marshaller
> marshaller = context.createMarshaller(); +
> marshaller.setProperty(Marshaller.JAXB_FRAGMENT, true); +
> marshaller.marshal(new JAXBElement(new QName(null,
> o.getClass().getSimpleName()), +
> cls == null ? o.getClass() : cls, o), os); +
> }
> + } else {
> + JAXBContext context = getJAXBContext(obj.getClass());
> + Marshaller marshaller = context.createMarshaller();
> + marshaller.setProperty(Marshaller.JAXB_FRAGMENT,
> true); + marshaller.marshal(obj, os);
> + }
> + } catch (JAXBException e) {
> + e.printStackTrace();
> + }
> + }
> +
> + private JAXBContext getJAXBContext(Class type) throws
> JAXBException { + synchronized (jaxbContexts) {
> + JAXBContext context = jaxbContexts.get(type);
> + if (context == null) {
> + context = JAXBContext.newInstance(type);
> + jaxbContexts.put(type, context);
> + }
> + return context;
> + }
> + }
> +}
--
J. Daniel Kulp
Principal Engineer
IONA
P: 781-902-8727 C: 508-380-7194
daniel.kulp@iona.com
http://www.dankulp.com/blog
|